stefan 2004/07/21 09:58:25 Added: proposals/jcrri/src/org/apache/slide/jcr/core/version FrozenNode.java Log: jcrri Revision Changes Path 1.1 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/FrozenNode.java Index: FrozenNode.java =================================================================== /* * $Id: FrozenNode.java,v 1.1 2004/07/21 16:58:25 stefan Exp $ * * Copyright 2002-2004 Day Management AG, Switzerland. * * Licensed under the Day RI License, Version 2.0 (the "License"), * as a reference implementation of the following specification: * * Content Repository API for Java Technology, revision 0.13 * <http://www.jcp.org/en/jsr/detail?id=170> * * You may not use this file except in compliance with the License. * You may obtain a copy of the License files at * * http://www.day.com/content/en/licenses/day-ri-license-2.0 * 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.slide.jcr.core.version; import org.apache.slide.jcr.core.*; import org.apache.slide.jcr.core.nodetype.NodeTypeRegistry; import org.apache.slide.jcr.core.nodetype.NodeTypeImpl; import org.apache.slide.jcr.core.nodetype.NodeDefImpl; import org.apache.slide.jcr.core.state.NodeState; import org.apache.slide.jcr.util.UUID; import javax.jcr.*; import javax.jcr.version.OnParentVersionAction; import javax.jcr.nodetype.NodeDef; import java.util.ArrayList; /** * This Class implements... * * @author tripod * @version $Revision: 1.1 $, $Date: 2004/07/21 16:58:25 $ */ public class FrozenNode extends NodeImpl implements Node { /** name of the 'jcr:frozenUUID' property */ public static final QName PROPNAME_FROZEN_UUID = new QName(NamespaceRegistryImpl.NS_JCR_URI, "frozenUUID"); /** name of the 'jcr:frozenPrimaryType' property */ public static final QName PROPNAME_FROZEN_PRIMARY_TYPE = new QName(NamespaceRegistryImpl.NS_JCR_URI, "frozenPrimaryType"); /** name of the 'jcr:frozenMixinTypes' property */ public static final QName PROPNAME_FROZEN_MIXIN_TYPES = new QName(NamespaceRegistryImpl.NS_JCR_URI, "frozenMixinTypes"); /** name of the 'jcr:frozenChildHistories' property */ public static final QName PROPNAME_FROZEN_CHILD_HISTORIES= new QName(NamespaceRegistryImpl.NS_JCR_URI, "frozenChildHistories"); /** * Creates a new Frozen node. This is only called by the ItemManager when * creating new node instances. * @see org.apache.slide.jcr.core.ItemManager#createNodeInstance(org.apache.slide.jcr.core.state.NodeState, javax.jcr.nodetype.NodeDef) */ public FrozenNode(ItemManager itemMgr, TicketImpl ticket, NodeId id, NodeState state, NodeDef definition, ItemLifeCycleListener[] listeners) throws RepositoryException { super(itemMgr, ticket, id, state, definition, listeners); } /** * Initializes the frozen state of a version. i.e. copies the uuid, * primary types etc. * @param node */ void initFrozenState(NodeImpl node) throws RepositoryException { internalSetProperty( VersionImpl.PROPNAME_FROZEN_UUID, InternalValue.create(node.getUUID()) ); internalSetProperty( VersionImpl.PROPNAME_FROZEN_PRIMARY_TYPE, InternalValue.create(node.getProperty(VersionImpl.PROPNAME_PRIMARYTYPE).getString())); if (node.hasProperty(VersionImpl.PROPNAME_MIXINTYPES)) { internalSetProperty( VersionImpl.PROPNAME_FROZEN_MIXIN_TYPES, InternalValue.create(node.getProperty(VersionImpl.PROPNAME_MIXINTYPES).getString())); } } /** * Creates the frozen state from a node * @param node * @throws RepositoryException */ void createFrozenState(NodeImpl node) throws RepositoryException { // copy over the 'special' properties. please note, that they are not // copied in the loop below, since they have a OPV of initialze or compute. initFrozenState(node); // iterate over the properties PropertyIterator piter = node.getProperties(); while (piter.hasNext()) { Property prop = piter.nextProperty(); switch (prop.getDefinition().getOnParentVersion()) { case OnParentVersionAction.ABORT: throw new RepositoryException("Checkin aborted due to OPV in " + prop.getPath()); case OnParentVersionAction.COMPUTE: case OnParentVersionAction.IGNORE: case OnParentVersionAction.INITIALIZE: break; case OnParentVersionAction.VERSION: case OnParentVersionAction.COPY: QName name = QName.fromJCRName(prop.getName(), ticket.getNamespaceResolver()); Value[] values = prop.getValues(); InternalValue[] ivalues = new InternalValue[values.length]; for (int i=0; i<values.length; i++) { ivalues[i] = InternalValue.create(values[i], ticket.getNamespaceResolver()); } internalSetProperty(name, ivalues); break; } } // iterate over the nodes NodeIterator niter = node.getNodes(); while (niter.hasNext()) { NodeImpl child = (NodeImpl) niter.nextNode(); switch (child.getDefinition().getOnParentVersion()) { case OnParentVersionAction.ABORT: throw new RepositoryException("Checkin aborted due to OPV in " + child.safeGetJCRPath()); case OnParentVersionAction.COMPUTE: case OnParentVersionAction.IGNORE: case OnParentVersionAction.INITIALIZE: break; case OnParentVersionAction.VERSION: if (child.isNodeType( NodeTypeRegistry.MIX_VERSIONABLE.toJCRName( ticket.getNamespaceResolver())) ) { // create nt:frozenChild (not defined yet) /* NodeTypeImpl nt = (NodeTypeImpl) ticket.getWorkspace().getNodeTypeManager().getNodeType( NodeTypeRegistry.NT_FROZEN_CHILD.toJCRName( ticket.getNamespaceResolver() ) ); */ NodeTypeImpl nt = (NodeTypeImpl) ticket.getWorkspace().getNodeTypeManager().getNodeType("nt:frozenChild"); QName name = QName.fromJCRName(child.getName(), ticket.getNamespaceResolver()); NodeDefImpl def = getApplicableChildNodeDef(name, nt.getQName()); NodeImpl newChild = createChildNode(name, def, nt); newChild.internalSetProperty( VersionImpl.PROPNAME_VERSION_HISTORY, InternalValue.create(new UUID(child.getVersionHistory().getUUID())) ); } // else ignore break; case OnParentVersionAction.COPY: NodeTypeImpl nt = (NodeTypeImpl) ticket.getWorkspace().getNodeTypeManager().getNodeType( NodeTypeRegistry.NT_FROZEN.toJCRName( ticket.getNamespaceResolver() ) ); QName name = QName.fromJCRName(child.getName(), ticket.getNamespaceResolver()); NodeDefImpl def = getApplicableChildNodeDef(name, nt.getQName()); FrozenNode newChild = (FrozenNode) createChildNode(name, def, nt); newChild.createFrozenState((NodeImpl) child); break; } } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]