/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jackrabbit.webdav.simple; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.Item; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.Session; import java.util.ArrayList; import java.util.List; /** * <code>DefaultItemFilter</code>... */ public class DefaultItemFilter implements ItemFilter { private static Logger log = LoggerFactory.getLogger(DefaultItemFilter.class); private List<String> prefixFilter = new ArrayList<String>(); private List<String> uriFilter = new ArrayList<String>(); private List<String> nodetypeFilter = new ArrayList<String>(); public DefaultItemFilter() { } /** * @see ItemFilter#setFilteredURIs(String[]) */ public void setFilteredURIs(String[] uris) { if (uris != null) { for (String uri : uris) { uriFilter.add(uri); } } } /** * @see ItemFilter#setFilteredPrefixes(String[]) */ public void setFilteredPrefixes(String[] prefixes) { if (prefixes != null) { for (String prefix : prefixes) { prefixFilter.add(prefix); } } } /** * @see ItemFilter#setFilteredNodetypes(String[]) */ public void setFilteredNodetypes(String[] nodetypeNames) { if (nodetypeNames != null) { for (String nodetypeName : nodetypeNames) { nodetypeFilter.add(nodetypeName); } } } /** * Returns true if the given item matches either one of the namespace or * of the the nodetype filters specified. * * @see ItemFilter#isFilteredItem(Item) */ public boolean isFilteredItem(Item item) { return isFilteredNamespace(item) || isFilteredNodeType(item); } /** * @see ItemFilter#isFilteredItem(String, Session) */ public boolean isFilteredItem(String displayName, Session session) { return isFilteredNamespace(displayName, session); } /** * * @param name * @param session * @return */ private boolean isFilteredNamespace(String name, Session session) { // shortcut if (prefixFilter.isEmpty() && uriFilter.isEmpty()) { return false; } int pos = name.indexOf(':'); if (pos < 0) { // no namespace info present return false; } try { String prefix = name.substring(0, pos); String uri = session.getNamespaceURI(prefix); return prefixFilter.contains(prefix) || uriFilter.contains(uri); } catch (RepositoryException e) { log.warn(e.getMessage()); } return false; } /** * * @param item * @return */ private boolean isFilteredNamespace(Item item) { try { return isFilteredNamespace(item.getName(), item.getSession()); } catch (RepositoryException e) { log.warn(e.getMessage()); } return false; } /** * * @param item * @return */ private boolean isFilteredNodeType(Item item) { // shortcut if (nodetypeFilter.isEmpty()) { return false; } try { String ntName; if (item.isNode()) { ntName = ((Node) item).getDefinition().getDeclaringNodeType().getName(); } else { ntName = ((Property) item).getDefinition().getDeclaringNodeType().getName(); } return nodetypeFilter.contains(ntName); } catch (RepositoryException e) { log.warn(e.getMessage()); } // nodetype info could not be retrieved return false; } }