You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-dev@jakarta.apache.org by st...@apache.org on 2004/07/21 18:58:25 UTC
cvs commit: jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version FrozenNode.java
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: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org