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}