blob: 78a56d99f5de2625f7473b83d19bc984d5e42353 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. 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.base.nodetype;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
import javax.jcr.RepositoryException;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeIterator;
import javax.jcr.nodetype.NodeTypeManager;
import org.apache.jackrabbit.iterator.ArrayNodeTypeIterator;
/**
* Node type manager base class.
*/
public class BaseNodeTypeManager implements NodeTypeManager {
/**
* Returns an empty node type iterator. Subclasses should override this
* method to return the available node types.
*
* @return empty node type iterator
* @see NodeTypeManager#getAllNodeTypes()
*/
public NodeTypeIterator getAllNodeTypes() throws RepositoryException {
return new ArrayNodeTypeIterator(new NodeType[0]);
}
/**
* Iterates through the node types returned by the
* {@link #getAllNodeTypes() getAllNodeTypes()} method and returns the
* node type with the given name. If a matching node type is not found,
* then a {@link NoSuchNodeTypeException} is thrown. Subclasses may
* want to override this method for better performance.
*
* @param node type name
* @return named node type
* @see NodeTypeManager#getNodeType(String)
*/
public NodeType getNodeType(String nodeTypeName) throws RepositoryException {
NodeTypeIterator types = getAllNodeTypes();
while (types.hasNext()) {
NodeType type = types.nextNodeType();
if (nodeTypeName.equals(type.getName())) {
return type;
}
}
throw new NoSuchNodeTypeException("Type not found: " + nodeTypeName);
}
/**
* Iterates through the node types returned by the
* {@link #getAllNodeTypes() getAllNodeTypes()} method and returns an
* {@link ArrayNodeTypeIterator} containing all the primary node types.
* Subclasses may want to override this method for better performance.
*
* @return primary node types
* @see NodeTypeManager#getPrimaryNodeTypes()
*/
public NodeTypeIterator getPrimaryNodeTypes() throws RepositoryException {
List primaryTypes = new LinkedList();
NodeTypeIterator types = getAllNodeTypes();
while (types.hasNext()) {
NodeType type = types.nextNodeType();
if (!type.isMixin()) {
primaryTypes.add(type);
}
}
return new ArrayNodeTypeIterator(primaryTypes);
}
/**
* Iterates through the node types returned by the
* {@link #getAllNodeTypes() getAllNodeTypes()} method and returns an
* {@link ArrayNodeTypeIterator} containing all the mixin node types.
* Subclasses may want to override this method for better performance.
*
* @return mixin node types
* @see NodeTypeManager#getMixinNodeTypes()
*/
public NodeTypeIterator getMixinNodeTypes() throws RepositoryException {
List mixinTypes = new LinkedList();
NodeTypeIterator types = getAllNodeTypes();
while (types.hasNext()) {
NodeType type = types.nextNodeType();
if (type.isMixin()) {
mixinTypes.add(type);
}
}
return new ArrayNodeTypeIterator(mixinTypes);
}
}