}
public void copy(String srcPath, String destPath) throws ObjectContentManagerException {
try {
if(StringUtils.isBlank(srcPath) || StringUtils.isBlank(destPath) || !srcPath.startsWith("/") || !destPath.startsWith("/")) {
throw new ObjectContentManagerException("scrPath " + srcPath + " or destPath " + destPath + " is not valid");
}
// no check for existence needed, as handled by exceptions
Node srcNode = session.getNode(srcPath);
Node destNode;
if (session.nodeExists(destPath)) {
destNode = session.getNode(destPath);
} else {
// if parentDestNode cannot be found, just a PathNotFoundException is thrown
while (destPath.endsWith("/")) {
destPath = destPath.substring(0, destPath.length()-1);
}
int indexOfLastSlash = destPath.lastIndexOf("/");
String parentDestPath = destPath.substring(0, indexOfLastSlash);
String destNodeName = destPath.substring(indexOfLastSlash + 1);
Node parentDestNode;
if (StringUtils.isBlank(parentDestPath)) {
parentDestNode = session.getRootNode();
} else {
parentDestNode = session.getNode(parentDestPath);
}
destNode = parentDestNode.addNode(destNodeName, srcNode.getPrimaryNodeType().getName());
}
copy(srcNode, destNode);
} catch (javax.jcr.nodetype.ConstraintViolationException cve) {
throw new ObjectContentManagerException("Cannot copy the object from " + srcPath + " to " + destPath + "."
+ "Violation of a nodetype or attempt to copy under property detected ", cve);
} catch (javax.jcr.version.VersionException ve) {
throw new VersionException("Cannot copy the object from " + srcPath + " to " + destPath + "." + "Parent node of source or destination is versionable and checked in ",
ve);
} catch (javax.jcr.AccessDeniedException ade) {
throw new ObjectContentManagerException("Cannot copy the object from " + srcPath + " to " + destPath + "." + " Session does not have access permissions", ade);
} catch (javax.jcr.PathNotFoundException pnf) {
throw new ObjectContentManagerException("Cannot copy the object from " + srcPath + " to " + destPath + "." + "Node at source or parent of destination does not exist ", pnf);
} catch (javax.jcr.ItemExistsException ie) {
throw new ObjectContentManagerException("Cannot copy the object from " + srcPath + " to " + destPath + "." + "It might already exist at destination path.", ie);
} catch (javax.jcr.lock.LockException le) {
throw new ObjectContentManagerException("Cannot copy the object from " + srcPath + " to " + destPath + "." + "Violation of a lock detected", le);
} catch (javax.jcr.RepositoryException re) {
throw new ObjectContentManagerException("Cannot copy the node from " + srcPath + " to " + destPath + ".", re);
}
}