/* * Copyright (C) 2005-2007 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * As a special exception to the terms and conditions of version 2.0 of * the GPL, you may redistribute this Program in connection with Free/Libre * and Open Source Software ("FLOSS") applications as described in Alfresco's * FLOSS exception. You should have recieved a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ package org.alfresco.jcr.version; import java.io.InputStream; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.List; import javax.jcr.AccessDeniedException; import javax.jcr.InvalidItemStateException; import javax.jcr.Item; import javax.jcr.ItemExistsException; import javax.jcr.ItemNotFoundException; import javax.jcr.ItemVisitor; import javax.jcr.MergeException; 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.ReferentialIntegrityException; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.UnsupportedRepositoryOperationException; import javax.jcr.Value; import javax.jcr.ValueFormatException; 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; import org.alfresco.jcr.item.NodeRefNodeIteratorImpl; import org.alfresco.jcr.util.JCRProxyFactory; import org.alfresco.service.cmr.repository.NodeRef; /** * Alfresco implementation of a JCR Version * * @author David Caruana */ public class VersionImpl implements Version { private VersionHistoryImpl versionHistoryImpl; private org.alfresco.service.cmr.version.Version version; private Version proxy; /** * Construct * * @param versionHistoryImpl * @param version */ public VersionImpl(VersionHistoryImpl versionHistoryImpl, org.alfresco.service.cmr.version.Version version) { this.versionHistoryImpl = versionHistoryImpl; this.version = version; } /** * Get Version Proxy * * @return */ public Version getProxy() { if (proxy == null) { proxy = (Version)JCRProxyFactory.create(this, Version.class, versionHistoryImpl.getSessionImpl()); } return proxy; } /* * (non-Javadoc) * @see javax.jcr.version.Version#getContainingHistory() */ public VersionHistory getContainingHistory() throws RepositoryException { return versionHistoryImpl.getProxy(); } /* * (non-Javadoc) * @see javax.jcr.version.Version#getCreated() */ public Calendar getCreated() throws RepositoryException { Calendar calendar = Calendar.getInstance(); calendar.setTime(version.getCreatedDate()); return calendar; } /* * (non-Javadoc) * @see javax.jcr.version.Version#getSuccessors() */ public Version[] getSuccessors() throws RepositoryException { Collection successors = versionHistoryImpl.getVersionHistoryImpl().getSuccessors(version); Version[] versions = new Version[successors.size()]; int i = 0; for (org.alfresco.service.cmr.version.Version sucessor : successors) { versions[i++] = new VersionImpl(versionHistoryImpl, sucessor).getProxy(); } return versions; } /* * (non-Javadoc) * @see javax.jcr.version.Version#getPredecessors() */ public Version[] getPredecessors() throws RepositoryException { org.alfresco.service.cmr.version.Version predecessor = versionHistoryImpl.getVersionHistoryImpl().getPredecessor(version); Version[] versions = new Version[1]; versions[0] = new VersionImpl(versionHistoryImpl, predecessor).getProxy(); return versions; } /* * (non-Javadoc) * @see javax.jcr.Node#hasNodes() */ public boolean hasNodes() throws RepositoryException { return true; } /* * (non-Javadoc) * @see javax.jcr.Node#getNodes() */ public NodeIterator getNodes() throws RepositoryException { List nodeRefs = new ArrayList(); nodeRefs.add(version.getFrozenStateNodeRef()); return new NodeRefNodeIteratorImpl(versionHistoryImpl.getSessionImpl(), nodeRefs); } // Node implementation // TODO: To support this set of methods will require the projection of all the JCR Version nodes. // That's not simple. public Node addNode(String relPath) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Node addNode(String relPath, String primaryNodeTypeName) throws ItemExistsException, PathNotFoundException, NoSuchNodeTypeException, LockException, VersionException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void orderBefore(String srcChildRelPath, String destChildRelPath) throws UnsupportedRepositoryOperationException, VersionException, ConstraintViolationException, ItemNotFoundException, LockException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, Value value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, Value value, int type) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, Value[] values) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, Value[] values, int type) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, String[] values) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, String[] values, int type) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, String value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, String value, int type) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, InputStream value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, boolean value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, double value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, long value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, Calendar value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property setProperty(String name, Node value) throws ValueFormatException, VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Node getNode(String relPath) throws PathNotFoundException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public NodeIterator getNodes(String namePattern) throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Property getProperty(String relPath) throws PathNotFoundException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public PropertyIterator getProperties() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public PropertyIterator getProperties(String namePattern) throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Item getPrimaryItem() throws ItemNotFoundException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public String getUUID() throws UnsupportedRepositoryOperationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public int getIndex() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public PropertyIterator getReferences() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean hasNode(String relPath) throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean hasProperty(String relPath) throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean hasProperties() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public NodeType getPrimaryNodeType() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public NodeType[] getMixinNodeTypes() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean isNodeType(String nodeTypeName) throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void addMixin(String mixinName) throws NoSuchNodeTypeException, VersionException, ConstraintViolationException, LockException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void removeMixin(String mixinName) throws NoSuchNodeTypeException, VersionException, ConstraintViolationException, LockException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean canAddMixin(String mixinName) throws NoSuchNodeTypeException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public NodeDefinition getDefinition() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Version checkin() throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void checkout() throws UnsupportedRepositoryOperationException, LockException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void doneMerge(Version version) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void cancelMerge(Version version) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void update(String srcWorkspaceName) throws NoSuchWorkspaceException, AccessDeniedException, LockException, InvalidItemStateException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public NodeIterator merge(String srcWorkspace, boolean bestEffort) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public String getCorrespondingNodePath(String workspaceName) throws ItemNotFoundException, NoSuchWorkspaceException, AccessDeniedException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean isCheckedOut() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void restore(String versionName, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void restore(Version version, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void restore(Version version, String relPath, boolean removeExisting) throws PathNotFoundException, ItemExistsException, VersionException, ConstraintViolationException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void restoreByLabel(String versionLabel, boolean removeExisting) throws VersionException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public VersionHistory getVersionHistory() throws UnsupportedRepositoryOperationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Version getBaseVersion() throws UnsupportedRepositoryOperationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Lock lock(boolean isDeep, boolean isSessionScoped) throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, InvalidItemStateException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Lock getLock() throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void unlock() throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, InvalidItemStateException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean holdsLock() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean isLocked() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public String getPath() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public String getName() throws RepositoryException { return version.getVersionLabel(); } public Item getAncestor(int depth) throws ItemNotFoundException, AccessDeniedException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Node getParent() throws ItemNotFoundException, AccessDeniedException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public int getDepth() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public Session getSession() throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public boolean isNode() { return true; } public boolean isNew() { return false; } public boolean isModified() { return false; } public boolean isSame(Item otherItem) throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void accept(ItemVisitor visitor) throws RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void save() throws AccessDeniedException, ItemExistsException, ConstraintViolationException, InvalidItemStateException, ReferentialIntegrityException, VersionException, LockException, NoSuchNodeTypeException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void refresh(boolean keepChanges) throws InvalidItemStateException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } public void remove() throws VersionException, LockException, ConstraintViolationException, RepositoryException { throw new UnsupportedRepositoryOperationException(); } }