blob: 5c65a77bf49d41f9924516ccad7612ccd72d4fce [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.decorator;
import java.io.InputStream;
import java.util.Calendar;
import javax.jcr.AccessDeniedException;
import javax.jcr.InvalidItemStateException;
import javax.jcr.Item;
import javax.jcr.ItemExistsException;
import javax.jcr.ItemNotFoundException;
import javax.jcr.NoSuchWorkspaceException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
import javax.jcr.ValueFormatException;
import javax.jcr.MergeException;
import javax.jcr.lock.Lock;
import javax.jcr.lock.LockException;
import javax.jcr.nodetype.ConstraintViolationException;
import javax.jcr.nodetype.NoSuchNodeTypeException;
import javax.jcr.nodetype.NodeDefinition;
import javax.jcr.nodetype.NodeType;
import javax.jcr.version.Version;
import javax.jcr.version.VersionException;
import javax.jcr.version.VersionHistory;
public class NodeDecorator extends ItemDecorator implements Node {
protected Node node;
public NodeDecorator(DecoratorFactory factory, Session session, Node node) {
super(factory, session, node);
this.node = node;
}
/**
* Returns the underlying <code>Node</code> of the <code>node</code>
* that decorates it. Unwrapping <code>null</code> returns <code>null</code>.
*
* @param node decorates the underlying node.
* @return the underlying node.
* @throws IllegalStateException if <code>node</code> is not of type
* {@link NodeDecorator}.
*/
public static Node unwrap(Node node) {
if (node == null) {
return null;
}
if (node instanceof NodeDecorator) {
node = (Node) ((NodeDecorator) node).unwrap();
} else {
throw new IllegalStateException("node is not of type NodeDecorator");
}
return node;
}
/**
* @inheritDoc
*/
public Node addNode(String name) throws ItemExistsException,
PathNotFoundException, VersionException,
ConstraintViolationException, LockException, RepositoryException {
Node child = node.addNode(name);
return factory.getNodeDecorator(session, child);
}
/**
* @inheritDoc
*/
public Node addNode(String name, String type) throws ItemExistsException,
PathNotFoundException, NoSuchNodeTypeException, LockException,
VersionException, ConstraintViolationException, RepositoryException {
Node child = node.addNode(name, type);
return factory.getNodeDecorator(session, child);
}
/**
* @inheritDoc
*/
public void orderBefore(String srcChildRelPath, String destChildRelPath)
throws UnsupportedRepositoryOperationException, VersionException,
ConstraintViolationException, ItemNotFoundException,
LockException, RepositoryException {
node.orderBefore(srcChildRelPath, destChildRelPath);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, Value value)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, Value value, int type)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value, type);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, Value[] values)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, values);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, Value[] values, int type)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, values, type);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, String[] values)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, values);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, String[] values, int type)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, values, type);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, String value)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, String value, int type)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value, type);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, InputStream value)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, boolean value)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, double value)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, long value)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, Calendar value)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, value);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Property setProperty(String name, Node value)
throws ValueFormatException, VersionException, LockException,
ConstraintViolationException, RepositoryException {
Property prop = node.setProperty(name, NodeDecorator.unwrap(value));
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public Node getNode(String relPath) throws PathNotFoundException, RepositoryException {
Node n = node.getNode(relPath);
return factory.getNodeDecorator(session, n);
}
/**
* @inheritDoc
*/
public NodeIterator getNodes() throws RepositoryException {
return new DecoratingNodeIterator(factory, session, node.getNodes());
}
/**
* @inheritDoc
*/
public NodeIterator getNodes(String namePattern)
throws RepositoryException {
return new DecoratingNodeIterator(factory, session, node.getNodes(namePattern));
}
/**
* @inheritDoc
*/
public Property getProperty(String relPath)
throws PathNotFoundException, RepositoryException {
Property prop = node.getProperty(relPath);
return factory.getPropertyDecorator(session, prop);
}
/**
* @inheritDoc
*/
public PropertyIterator getProperties() throws RepositoryException {
return new DecoratingPropertyIterator(factory, session, node.getProperties());
}
/**
* @inheritDoc
*/
public PropertyIterator getProperties(String namePattern)
throws RepositoryException {
return new DecoratingPropertyIterator(factory, session, node.getProperties(namePattern));
}
/**
* @inheritDoc
*/
public Item getPrimaryItem() throws ItemNotFoundException,
RepositoryException {
return factory.getItemDecorator(session, node.getPrimaryItem());
}
/**
* @inheritDoc
*/
public String getUUID() throws UnsupportedRepositoryOperationException,
RepositoryException {
return node.getUUID();
}
/**
* @inheritDoc
*/
public int getIndex() throws RepositoryException {
return node.getIndex();
}
/**
* @inheritDoc
*/
public PropertyIterator getReferences() throws RepositoryException {
return new DecoratingPropertyIterator(factory, session, node.getReferences());
}
/**
* @inheritDoc
*/
public boolean hasNode(String relPath) throws RepositoryException {
return node.hasNode(relPath);
}
/**
* @inheritDoc
*/
public boolean hasProperty(String relPath) throws RepositoryException {
return node.hasProperty(relPath);
}
/**
* @inheritDoc
*/
public boolean hasNodes() throws RepositoryException {
return node.hasNodes();
}
/**
* @inheritDoc
*/
public boolean hasProperties() throws RepositoryException {
return node.hasProperties();
}
/**
* @inheritDoc
*/
public NodeType getPrimaryNodeType() throws RepositoryException {
return node.getPrimaryNodeType();
}
/**
* @inheritDoc
*/
public NodeType[] getMixinNodeTypes() throws RepositoryException {
return node.getMixinNodeTypes();
}
/**
* @inheritDoc
*/
public boolean isNodeType(String nodeTypeName) throws RepositoryException {
return node.isNodeType(nodeTypeName);
}
/**
* @inheritDoc
*/
public void addMixin(String mixinName)
throws NoSuchNodeTypeException, VersionException,
ConstraintViolationException, LockException, RepositoryException {
node.addMixin(mixinName);
}
/**
* @inheritDoc
*/
public void removeMixin(String mixinName)
throws NoSuchNodeTypeException, VersionException,
ConstraintViolationException, LockException, RepositoryException {
node.removeMixin(mixinName);
}
/**
* @inheritDoc
*/
public boolean canAddMixin(String mixinName)
throws NoSuchNodeTypeException, RepositoryException {
return node.canAddMixin(mixinName);
}
/**
* @inheritDoc
*/
public NodeDefinition getDefinition() throws RepositoryException {
return node.getDefinition();
}
/**
* @inheritDoc
*/
public Version checkin() throws VersionException,
UnsupportedRepositoryOperationException, InvalidItemStateException,
LockException, RepositoryException {
Version version = node.checkin();
return factory.getVersionDecorator(session, version);
}
/**
* @inheritDoc
*/
public void checkout() throws UnsupportedRepositoryOperationException,
LockException, RepositoryException {
node.checkout();
}
/**
* @inheritDoc
*/
public void doneMerge(Version version)
throws VersionException, InvalidItemStateException,
UnsupportedRepositoryOperationException, RepositoryException {
node.doneMerge(VersionDecorator.unwrap(version));
}
/**
* @inheritDoc
*/
public void cancelMerge(Version version)
throws VersionException, InvalidItemStateException,
UnsupportedRepositoryOperationException, RepositoryException {
node.cancelMerge(VersionDecorator.unwrap(version));
}
/**
* @inheritDoc
*/
public void update(String srcWorkspaceName)
throws NoSuchWorkspaceException, AccessDeniedException,
LockException, InvalidItemStateException, RepositoryException {
node.update(srcWorkspaceName);
}
/**
* @inheritDoc
*/
public NodeIterator merge(String srcWorkspace, boolean bestEffort)
throws NoSuchWorkspaceException, AccessDeniedException,
MergeException, LockException, InvalidItemStateException,
RepositoryException {
NodeIterator nodes = node.merge(srcWorkspace, bestEffort);
return new DecoratingNodeIterator(factory, session, nodes);
}
/**
* @inheritDoc
*/
public String getCorrespondingNodePath(String workspaceName)
throws ItemNotFoundException, NoSuchWorkspaceException,
AccessDeniedException, RepositoryException {
return node.getCorrespondingNodePath(workspaceName);
}
/**
* @inheritDoc
*/
public boolean isCheckedOut() throws RepositoryException {
return node.isCheckedOut();
}
/**
* @inheritDoc
*/
public void restore(String versionName, boolean removeExisting)
throws VersionException, ItemExistsException,
UnsupportedRepositoryOperationException, LockException,
InvalidItemStateException, RepositoryException {
node.restore(versionName, removeExisting);
}
/**
* @inheritDoc
*/
public void restore(Version version, boolean removeExisting)
throws VersionException, ItemExistsException,
UnsupportedRepositoryOperationException, LockException,
RepositoryException {
node.restore(VersionDecorator.unwrap(version), removeExisting);
}
/**
* @inheritDoc
*/
public void restore(Version version,
String relPath,
boolean removeExisting)
throws PathNotFoundException, ItemExistsException,
VersionException, ConstraintViolationException,
UnsupportedRepositoryOperationException, LockException,
InvalidItemStateException, RepositoryException {
node.restore(VersionDecorator.unwrap(version), relPath, removeExisting);
}
/**
* @inheritDoc
*/
public void restoreByLabel(String versionLabel, boolean removeExisting)
throws VersionException, ItemExistsException,
UnsupportedRepositoryOperationException, LockException,
InvalidItemStateException, RepositoryException {
node.restoreByLabel(versionLabel, removeExisting);
}
/**
* @inheritDoc
*/
public VersionHistory getVersionHistory()
throws UnsupportedRepositoryOperationException, RepositoryException {
VersionHistory hist = node.getVersionHistory();
return factory.getVersionHistoryDecorator(session, hist);
}
/**
* @inheritDoc
*/
public Version getBaseVersion()
throws UnsupportedRepositoryOperationException, RepositoryException {
return factory.getVersionDecorator(session, node.getBaseVersion());
}
/**
* @inheritDoc
*/
public Lock lock(boolean isDeep, boolean isSessionScoped)
throws UnsupportedRepositoryOperationException, LockException,
AccessDeniedException, InvalidItemStateException,
RepositoryException {
Lock lock = node.lock(isDeep, isSessionScoped);
return factory.getLockDecorator(session, lock);
}
/**
* @inheritDoc
*/
public Lock getLock() throws UnsupportedRepositoryOperationException,
LockException, AccessDeniedException, RepositoryException {
Lock lock = node.getLock();
return factory.getLockDecorator(session, lock);
}
/**
* @inheritDoc
*/
public void unlock() throws UnsupportedRepositoryOperationException,
LockException, AccessDeniedException, InvalidItemStateException,
RepositoryException {
node.unlock();
}
/**
* @inheritDoc
*/
public boolean holdsLock() throws RepositoryException {
return node.holdsLock();
}
/**
* @inheritDoc
*/
public boolean isLocked() throws RepositoryException {
return node.isLocked();
}
}