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/16 18:38:22 UTC
cvs commit: jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core DynamicWorkspaceDef.java HierarchyManager.java HierarchyManagerImpl.java InternalValue.java ItemId.java ItemImpl.java
stefan 2004/07/16 09:38:22
Modified: proposals/jcrri/src/org/apache/slide/jcr/core
DynamicWorkspaceDef.java HierarchyManager.java
HierarchyManagerImpl.java InternalValue.java
ItemId.java ItemImpl.java
Log:
jcrri
Revision Changes Path
1.4 +8 -8 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/DynamicWorkspaceDef.java
Index: DynamicWorkspaceDef.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/DynamicWorkspaceDef.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DynamicWorkspaceDef.java 22 Jun 2004 18:03:24 -0000 1.3
+++ DynamicWorkspaceDef.java 16 Jul 2004 16:38:21 -0000 1.4
@@ -45,13 +45,13 @@
* Creates a <code>DynamicWorkspaceDef</code> object, defining a dynamic
* workspace.
*
- * @param name name of the dynamic workspace
- * @param wspStore file system where the dynamic workspace stores its state
- * @param blobStore file system where the dynamic workspace stores BLOB data
+ * @param name name of the dynamic workspace
+ * @param wspStore file system where the dynamic workspace stores its state
+ * @param blobStore file system where the dynamic workspace stores BLOB data
* @param persistenceManagerClass FQN of class implementing the <code>PersistenceManager</code> interface
- * @param persistenceManagerParams parameters for the <code>PersistenceManager</code>
- * @param stableWorkspace name of the stable workspace the dynamic
- * workspace should be based on
+ * @param persistenceManagerParams parameters for the <code>PersistenceManager</code>
+ * @param stableWorkspace name of the stable workspace the dynamic
+ * workspace should be based on
*/
DynamicWorkspaceDef(String name, FileSystem wspStore, FileSystem blobStore,
String persistenceManagerClass, HashMap persistenceManagerParams,
1.6 +0 -0 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/HierarchyManager.java
Index: HierarchyManager.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/HierarchyManager.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
1.2 +6 -5 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/HierarchyManagerImpl.java
Index: HierarchyManagerImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/HierarchyManagerImpl.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- HierarchyManagerImpl.java 7 Jul 2004 16:04:38 -0000 1.1
+++ HierarchyManagerImpl.java 16 Jul 2004 16:38:21 -0000 1.2
@@ -23,13 +23,13 @@
*/
package org.apache.slide.jcr.core;
+import org.apache.log4j.Logger;
import org.apache.slide.jcr.core.state.*;
import org.apache.slide.jcr.util.MalformedPathException;
-import org.apache.log4j.Logger;
import javax.jcr.ItemNotFoundException;
-import javax.jcr.RepositoryException;
import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
import java.util.*;
/**
@@ -57,6 +57,7 @@
/**
* Failsafe conversion of internal <code>Path</code> to JCR path for use in
* error messages etc.
+ *
* @param path path to convert
* @return JCR path
*/
@@ -73,6 +74,7 @@
/**
* Failsafe translation of internal <code>ItemId</code> to JCR path for use in
* error messages etc.
+ *
* @param id path to convert
* @return JCR path
*/
@@ -413,7 +415,6 @@
}
/**
- *
* @param nodeId
* @param builder
* @param builders
1.5 +9 -26 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/InternalValue.java
Index: InternalValue.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/InternalValue.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- InternalValue.java 2 Jul 2004 16:25:02 -0000 1.4
+++ InternalValue.java 16 Jul 2004 16:38:21 -0000 1.5
@@ -23,16 +23,16 @@
*/
package org.apache.slide.jcr.core;
+import org.apache.slide.jcr.fs.FileSystemResource;
import org.apache.slide.jcr.util.MalformedPathException;
import org.apache.slide.jcr.util.UUID;
import org.apache.slide.jcr.util.ValueHelper;
-import org.apache.slide.jcr.fs.FileSystemResource;
import javax.jcr.*;
import javax.jcr.util.ISO8601;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.io.File;
import java.util.Calendar;
/**
@@ -64,7 +64,6 @@
//------------------------------------------------------< factory methods >
/**
- *
* @param value
* @param nsResolver
* @return
@@ -81,7 +80,7 @@
case PropertyType.BINARY:
try {
if (value instanceof BLOBFileValue) {
- return new InternalValue((BLOBFileValue)value);
+ return new InternalValue((BLOBFileValue) value);
} else {
return new InternalValue(new BLOBFileValue(value.getStream()));
}
@@ -113,7 +112,6 @@
}
/**
- *
* @param value
* @param targetType
* @param nsResolver
@@ -130,7 +128,6 @@
}
/**
- *
* @param value
* @param targetType
* @param nsResolver
@@ -147,7 +144,6 @@
}
/**
- *
* @param value
* @return
*/
@@ -156,7 +152,6 @@
}
/**
- *
* @param value
* @return
*/
@@ -165,7 +160,6 @@
}
/**
- *
* @param value
* @return
*/
@@ -174,7 +168,6 @@
}
/**
- *
* @param value
* @return
*/
@@ -183,7 +176,6 @@
}
/**
- *
* @param value
* @return
*/
@@ -192,7 +184,6 @@
}
/**
- *
* @param value
* @return
* @throws IOException
@@ -202,7 +193,6 @@
}
/**
- *
* @param value
* @return
* @throws IOException
@@ -212,7 +202,6 @@
}
/**
- *
* @param value
* @return
* @throws IOException
@@ -222,7 +211,6 @@
}
/**
- *
* @param value
* @return
*/
@@ -231,7 +219,6 @@
}
/**
- *
* @param value
* @return
*/
@@ -240,7 +227,6 @@
}
/**
- *
* @param value
* @return
*/
@@ -250,7 +236,6 @@
//----------------------------------------------------< conversions, etc. >
/**
- *
* @param nsResolver
* @return
* @throws RepositoryException
@@ -268,12 +253,12 @@
case PropertyType.LONG:
return new LongValue((Long) val);
case PropertyType.REFERENCE:
- return ReferenceValue.valueOf(((UUID)val).toString());
+ return ReferenceValue.valueOf(((UUID) val).toString());
case PropertyType.SOFTLINK:
- return SoftLinkValue.valueOf(((Path)val).toJCRPath(nsResolver));
+ return SoftLinkValue.valueOf(((Path) val).toJCRPath(nsResolver));
case PropertyType.STRING:
if (val instanceof QName) {
- return new StringValue(((QName)val).toJCRName(nsResolver));
+ return new StringValue(((QName) val).toJCRName(nsResolver));
} else {
return new StringValue((String) val);
}
@@ -283,7 +268,6 @@
}
/**
- *
* @return
*/
public Object internalValue() {
@@ -291,7 +275,6 @@
}
/**
- *
* @return
*/
public int getType() {
@@ -301,6 +284,7 @@
/**
* Returns the string representation of this internal value. If this is a
* <i>binary</i> value then the path of its backing file will be returned.
+ *
* @return string representation of this internal value
*/
public String toString() {
@@ -323,7 +307,6 @@
}
/**
- *
* @param s
* @param type
* @return
1.4 +0 -0 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemId.java
Index: ItemId.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemId.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
1.12 +59 -9 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemImpl.java
Index: ItemImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemImpl.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- ItemImpl.java 13 Jul 2004 15:49:58 -0000 1.11
+++ ItemImpl.java 16 Jul 2004 16:38:21 -0000 1.12
@@ -27,9 +27,11 @@
import org.apache.log4j.Logger;
import org.apache.slide.jcr.core.nodetype.NodeDefImpl;
import org.apache.slide.jcr.core.nodetype.NodeTypeImpl;
+import org.apache.slide.jcr.core.nodetype.NodeTypeRegistry;
import org.apache.slide.jcr.core.nodetype.PropertyDefImpl;
import org.apache.slide.jcr.core.observation.EventStateCollection;
import org.apache.slide.jcr.core.state.*;
+import org.apache.slide.jcr.core.version.VersionImpl;
import org.apache.slide.jcr.util.IteratorHelper;
import javax.jcr.*;
@@ -40,6 +42,7 @@
import javax.jcr.nodetype.NodeDef;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.PropertyDef;
+import javax.jcr.version.VersionHistory;
import java.util.*;
/**
@@ -82,6 +85,11 @@
protected final TicketImpl ticket;
/**
+ * the <code>Repository</code> object
+ */
+ protected final RepositoryImpl rep;
+
+ /**
* <code>ItemState</code> associated with this <code>Item</code>
*/
protected ItemState state;
@@ -113,6 +121,7 @@
ItemImpl(ItemManager itemMgr, TicketImpl ticket, ItemId id, ItemState state,
ItemLifeCycleListener[] listeners) {
this.ticket = ticket;
+ rep = (RepositoryImpl) ticket.getRepository();
itemStateMgr = ticket.getItemStateManager();
this.id = id;
this.itemMgr = itemMgr;
@@ -312,10 +321,11 @@
* in the property's definition
*
* note that the protected flag is checked in Node.remove (for items
- * to be removed) and in Property.setValue (for properties to be modified).
+ * to be removed), in Node.addMixin/removeMixin (for mixin changes on nodes)
+ * and in Property.setValue (for properties to be modified).
*/
- AccessManagerImpl accessMgr = (AccessManagerImpl) ticket.getAccessManager();
+ AccessManagerImpl accessMgr = ticket.getAccessManager();
// walk through list of transient items and validate each
while (iter.hasNext()) {
ItemState itemState = (ItemState) iter.next();
@@ -400,7 +410,6 @@
NodeId nodeId = new NodeId(propState.getParentUUID());
PropertyImpl prop = (PropertyImpl) itemMgr.getItem(propId);
PropertyDefImpl def = (PropertyDefImpl) prop.getDefinition();
- NodeTypeImpl nt = (NodeTypeImpl) prop.getParent().getPrimaryNodeType();
if (!def.isAutoCreate()) {
// check SET_PROPERTY permission
@@ -412,9 +421,21 @@
}
// check value constraints
- if (def.getValueConstraint() != null) {
- InternalValue[] values = propState.getValues();
- nt.checkSetProperty(def, values);
+ // (no need to check value constraints of protected properties
+ // as those are set by the implementation only, i.e. they
+ // cannot be set by the user through the api)
+ if (!def.isProtected()) {
+ if (def.getValueConstraint() != null) {
+ InternalValue[] values = propState.getValues();
+ try {
+ NodeTypeImpl.checkSetPropertyValueConstraints(def, values);
+ } catch (RepositoryException e) {
+ // repack exception for providing verboser error message
+ String msg = prop.safeGetJCRPath() + ": " + e.getMessage();
+ log.error(msg);
+ throw new ConstraintViolationException(msg);
+ }
+ }
}
// no need to check the protected flag
@@ -454,6 +475,32 @@
}
/**
+ * Initializes the version history of all new nodes of node type
+ * <code>mix:versionable</code>.
+ * <p/>
+ * Called by {@link #validateTransientItems(Iterator)}.
+ *
+ * @param iter
+ * @throws RepositoryException
+ */
+ private void initVersionHistories(Iterator iter) throws RepositoryException {
+ // walk through list of transient items and
+ // search for new versionable nodes
+ while (iter.hasNext()) {
+ ItemState itemState = (ItemState) iter.next();
+ if (itemState.isNode() && itemState.getStatus() == ItemState.STATUS_NEW) {
+ NodeImpl node = (NodeImpl) itemMgr.getItem(itemState.getId());
+ if (node.isNodeType(NodeTypeRegistry.MIX_VERSIONABLE)) {
+ VersionHistory hist = rep.getVersionManager().createVersionHistory(node);
+ node.internalSetProperty(VersionImpl.PROPNAME_VERSION_HISTORY, InternalValue.create(hist.getUUID()));
+ node.internalSetProperty(VersionImpl.PROPNAME_BASE_VERSION, InternalValue.create(hist.getRootVersion().getUUID()));
+ node.internalSetProperty(VersionImpl.PROPNAME_IS_CHECKED_OUT, InternalValue.create(true));
+ }
+ }
+ }
+ }
+
+ /**
* Failsafe mapping of internal <code>id</code> to JCR path for use in
* diagnostic output, error messages etc.
*
@@ -787,6 +834,9 @@
}
}
+ // initialize version histories for new nodes
+ initVersionHistories(dirty.iterator());
+
// persist 'new' or 'modified' transient states
persistTransientItems(dirty.iterator());
@@ -981,7 +1031,7 @@
Permission[] perms = ticket.getAccessManager().getSupportedPermissions();
// check each permission separately
- AccessManagerImpl accessMgr = (AccessManagerImpl) ticket.getAccessManager();
+ AccessManagerImpl accessMgr = ticket.getAccessManager();
for (int i = 0; i < perms.length; i++) {
Permission perm = perms[i];
if ((permissions & perm.getValue()) == perm.getValue()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org