001/* 002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * bstefanescu 011 */ 012package org.nuxeo.ecm.automation.core.events; 013 014import java.util.HashMap; 015import java.util.Map; 016 017import org.nuxeo.ecm.core.api.DocumentModel; 018import org.nuxeo.ecm.core.api.Filter; 019 020/** 021 * Create filters that are able to filter documents on their attribute (Regular Doc, Published Doc, Version, Link, 022 * Proxy, Immutable, Mutable) 023 * 024 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> 025 */ 026public class DocumentAttributeFilterFactory { 027 028 private DocumentAttributeFilterFactory() { 029 } 030 031 public static final String ANY_DOC = "Any"; 032 033 public static final String REGULAR_DOC = "Regular Document"; 034 035 public static final String LINK_DOC = "Document Link"; 036 037 public static final String PUBLISHED_DOC = "Published Document"; 038 039 public static final String PROXY_DOC = "Document Proxy"; 040 041 public static final String VERSION_DOC = "Document Version"; 042 043 public static final String IMMUTABLE_DOC = "Immutable Document"; 044 045 public static final String MUTABLE_DOC = "Mutable Document"; 046 047 protected static final Map<String, Filter> filters = new HashMap<String, Filter>(); 048 static { 049 filters.put(REGULAR_DOC, new RegularDocFilter()); 050 filters.put(LINK_DOC, new LinkDocFilter()); 051 filters.put(PUBLISHED_DOC, new PublishedDocFilter()); 052 filters.put(PROXY_DOC, new ProxyDocFilter()); 053 filters.put(VERSION_DOC, new VersionDocFilter()); 054 filters.put(IMMUTABLE_DOC, new ImmutableDocFilter()); 055 filters.put(MUTABLE_DOC, new MutableDocFilter()); 056 } 057 058 public static Filter getFilter(String attr) { 059 return filters.get(attr); 060 } 061 062 static class RegularDocFilter implements Filter { 063 private static final long serialVersionUID = 1L; 064 065 @Override 066 public boolean accept(DocumentModel doc) { 067 return !doc.isImmutable() && !doc.isProxy(); 068 } 069 } 070 071 static class LinkDocFilter implements Filter { 072 private static final long serialVersionUID = 1L; 073 074 @Override 075 public boolean accept(DocumentModel doc) { 076 return !doc.isImmutable() && doc.isProxy(); 077 } 078 } 079 080 static class PublishedDocFilter implements Filter { 081 private static final long serialVersionUID = 1L; 082 083 @Override 084 public boolean accept(DocumentModel doc) { 085 return doc.isImmutable() && doc.isProxy(); 086 } 087 } 088 089 static class ProxyDocFilter implements Filter { 090 private static final long serialVersionUID = 1L; 091 092 @Override 093 public boolean accept(DocumentModel doc) { 094 return doc.isProxy(); 095 } 096 } 097 098 static class VersionDocFilter implements Filter { 099 private static final long serialVersionUID = 1L; 100 101 @Override 102 public boolean accept(DocumentModel doc) { 103 return doc.isVersion(); 104 } 105 } 106 107 static class ImmutableDocFilter implements Filter { 108 private static final long serialVersionUID = 1L; 109 110 @Override 111 public boolean accept(DocumentModel doc) { 112 return doc.isImmutable(); 113 } 114 } 115 116 static class MutableDocFilter implements Filter { 117 private static final long serialVersionUID = 1L; 118 119 @Override 120 public boolean accept(DocumentModel doc) { 121 return !doc.isImmutable(); 122 } 123 } 124 125}