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/08/30 18:15:18 UTC
cvs commit: jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml DocViewImportHandler.java DocViewSAXEventGenerator.java ImportHandler.java SysViewImportHandler.java SysViewSAXEventGenerator.java
stefan 2004/08/30 09:15:18
Modified: proposals/jcrri/src/org/apache/slide/jcr/core
HierarchyManagerImpl.java InternalValue.java
ItemImpl.java ItemManager.java
NoPrefixDeclaredException.java NodeImpl.java
Path.java PropertyImpl.java QName.java
RepositoryImpl.java UnknownPrefixException.java
proposals/jcrri/src/org/apache/slide/jcr/core/nodetype
NodeDefImpl.java NodeTypeDefStore.java
NodeTypeImpl.java NodeTypeManagerImpl.java
PropertyDefImpl.java
proposals/jcrri/src/org/apache/slide/jcr/core/observation
EventImpl.java ObservationManagerFactory.java
proposals/jcrri/src/org/apache/slide/jcr/core/version
FrozenNode.java VersionHistoryImpl.java
VersionImpl.java VersionManager.java
proposals/jcrri/src/org/apache/slide/jcr/core/xml
DocViewImportHandler.java
DocViewSAXEventGenerator.java ImportHandler.java
SysViewImportHandler.java
SysViewSAXEventGenerator.java
Log:
jcrri: cleaning up handling/validation of qualified names & name-related exceptions
Revision Changes Path
1.9 +2 -2 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.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- HierarchyManagerImpl.java 18 Aug 2004 13:16:27 -0000 1.8
+++ HierarchyManagerImpl.java 30 Aug 2004 16:15:15 -0000 1.9
@@ -55,7 +55,7 @@
public String safeGetJCRPath(Path path) {
try {
return path.toJCRPath(nsResolver);
- } catch (RepositoryException re) {
+ } catch (NoPrefixDeclaredException npde) {
log.error("failed to convert " + path.toString() + " to JCR path.");
// return string representation of internal path as a fallback
return path.toString();
1.13 +15 -3 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.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- InternalValue.java 27 Aug 2004 09:28:46 -0000 1.12
+++ InternalValue.java 30 Aug 2004 16:15:15 -0000 1.13
@@ -91,6 +91,8 @@
case PropertyType.NAME:
try {
return new InternalValue(QName.fromJCRName(value.getString(), nsResolver));
+ } catch (IllegalNameException ine) {
+ throw new ValueFormatException(ine.getMessage());
} catch (UnknownPrefixException upe) {
throw new ValueFormatException(upe.getMessage());
}
@@ -252,9 +254,19 @@
case PropertyType.REFERENCE:
return ReferenceValue.valueOf(((UUID) val).toString());
case PropertyType.PATH:
- return PathValue.valueOf(((Path) val).toJCRPath(nsResolver));
+ try {
+ return PathValue.valueOf(((Path) val).toJCRPath(nsResolver));
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ throw new RepositoryException("internal error: encountered unregistered namespace", npde);
+ }
case PropertyType.NAME:
- return NameValue.valueOf(((QName) val).toJCRName(nsResolver));
+ try {
+ return NameValue.valueOf(((QName) val).toJCRName(nsResolver));
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ throw new RepositoryException("internal error: encountered unregistered namespace", npde);
+ }
case PropertyType.STRING:
return new StringValue((String) val);
default:
1.22 +18 -2 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.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- ItemImpl.java 27 Aug 2004 09:28:46 -0000 1.21
+++ ItemImpl.java 30 Aug 2004 16:15:15 -0000 1.22
@@ -532,6 +532,15 @@
return itemMgr.safeGetJCRPath(id);
}
+ /**
+ * Same as <code>{@link Item#getName()}</code> except that
+ * this method returns a <code>QName</code> instead of a
+ * <code>String</code>.
+ * @return the name of this item as <code>QName</code>
+ * @throws RepositoryException if an error occurs.
+ */
+ public abstract QName getQName() throws RepositoryException;
+
//----------------------------------------------------< ItemStateListener >
/**
* @see ItemStateListener#stateCreated
@@ -993,7 +1002,14 @@
* @see Item#getPath
*/
public String getPath() throws RepositoryException {
- return getPrimaryPath().toJCRPath(session.getNamespaceResolver());
+ try {
+ return getPrimaryPath().toJCRPath(session.getNamespaceResolver());
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
+ }
}
/**
1.15 +2 -2 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemManager.java
Index: ItemManager.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/ItemManager.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- ItemManager.java 27 Aug 2004 09:28:46 -0000 1.14
+++ ItemManager.java 30 Aug 2004 16:15:15 -0000 1.15
@@ -508,7 +508,7 @@
String safeGetJCRPath(Path path) {
try {
return path.toJCRPath(session.getNamespaceResolver());
- } catch (RepositoryException re) {
+ } catch (NoPrefixDeclaredException npde) {
log.error("failed to convert " + path.toString() + " to JCR path.");
// return string representation of internal path as a fallback
return path.toString();
1.9 +3 -3 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NoPrefixDeclaredException.java
Index: NoPrefixDeclaredException.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NoPrefixDeclaredException.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- NoPrefixDeclaredException.java 2 Aug 2004 16:21:04 -0000 1.8
+++ NoPrefixDeclaredException.java 30 Aug 2004 16:15:15 -0000 1.9
@@ -15,7 +15,7 @@
*/
package org.apache.slide.jcr.core;
-import javax.jcr.RepositoryException;
+
/**
* The <code>NoPrefixDeclaredException</code> ...
@@ -23,7 +23,7 @@
* @author Stefan Guggisberg
* @version $Revision$, $Date$
*/
-public class NoPrefixDeclaredException extends RepositoryException {
+public class NoPrefixDeclaredException extends BaseException {
/**
* Constructs a new instance of this class.
*/
1.34 +273 -63 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NodeImpl.java
Index: NodeImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/NodeImpl.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -r1.33 -r1.34
--- NodeImpl.java 27 Aug 2004 09:28:46 -0000 1.33
+++ NodeImpl.java 30 Aug 2004 16:15:15 -0000 1.34
@@ -154,12 +154,20 @@
try {
return (PropertyImpl) getProperty(name);
} catch (PathNotFoundException pnfe) {
- // does not exist yet:
- // find definition for the specified property and create property
- QName qName = QName.fromJCRName(name, session.getNamespaceResolver());
- PropertyDefImpl def = getApplicablePropertyDef(qName, type);
- return createChildProperty(qName, type, def);
+ // fall through
}
+ // property does not exist yet...
+ QName qName;
+ try {
+ qName = QName.fromJCRName(name, session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new RepositoryException("invalid property name: " + name, ine);
+ } catch (UnknownPrefixException upe) {
+ throw new RepositoryException("invalid property name: " + name, upe);
+ }
+ // find definition for the specified property and create property
+ PropertyDefImpl def = getApplicablePropertyDef(qName, type);
+ return createChildProperty(qName, type, def);
}
protected PropertyImpl getOrCreateProperty(QName name, int type)
@@ -411,7 +419,6 @@
}
NodeImpl parentNode;
- NodeDefImpl def;
try {
Item parent = itemMgr.getItem(parentPath);
if (!parent.isNode()) {
@@ -420,21 +427,44 @@
throw new ConstraintViolationException(msg);
}
parentNode = (NodeImpl) parent;
- try {
- def = getApplicableChildNodeDef(nodeName, nodeType == null ? null : nodeType.getQName());
- } catch (RepositoryException re) {
- String msg = "no definition found in parent node's node type for new node";
- log.error(msg, re);
- throw new ConstraintViolationException(msg, re);
- }
- if (nodeType == null) {
- // use default node type
- nodeType = (NodeTypeImpl) def.getDefaultPrimaryType();
- }
} catch (AccessDeniedException ade) {
throw new PathNotFoundException(relPath);
}
+ // delegate the creation of the child node to the parent node
+ return parentNode.internalAddChildNode(nodeName, nodeType, uuid);
+ }
+
+ protected NodeImpl internalAddChildNode(QName nodeName, NodeTypeImpl nodeType)
+ throws ItemExistsException, ConstraintViolationException, RepositoryException {
+ return internalAddChildNode(nodeName, nodeType, null);
+ }
+
+ protected NodeImpl internalAddChildNode(QName nodeName, NodeTypeImpl nodeType, String uuid)
+ throws ItemExistsException, ConstraintViolationException, RepositoryException {
+ Path nodePath;
+ try {
+ nodePath = Path.create(getPrimaryPath(), nodeName, true);
+ } catch (MalformedPathException e) {
+ // should never happen
+ String msg = "internal error: invalid path " + safeGetJCRPath();
+ log.error(msg, e);
+ throw new RepositoryException(msg, e);
+ }
+
+ NodeDefImpl def;
+ try {
+ def = getApplicableChildNodeDef(nodeName, nodeType == null ? null : nodeType.getQName());
+ } catch (RepositoryException re) {
+ String msg = "no definition found in parent node's node type for new node";
+ log.error(msg, re);
+ throw new ConstraintViolationException(msg, re);
+ }
+ if (nodeType == null) {
+ // use default node type
+ nodeType = (NodeTypeImpl) def.getDefaultPrimaryType();
+ }
+
// check for name collisions
try {
ItemImpl item = itemMgr.getItem(nodePath);
@@ -454,21 +484,21 @@
}
// check if versioning allows write
- if (!parentNode.safeIsCheckedOut()) {
- String msg = parentNode.safeGetJCRPath() + ": cannot add a child to a checked-in node";
+ if (!safeIsCheckedOut()) {
+ String msg = safeGetJCRPath() + ": cannot add a child to a checked-in node";
log.error(msg);
throw new VersionException(msg);
}
- // check protected flag of parent node
- if (parentNode.getDefinition().isProtected()) {
- String msg = parentNode.safeGetJCRPath() + ": cannot add a child to a protected node";
+ // check protected flag of parent (i.e. this) node
+ if (getDefinition().isProtected()) {
+ String msg = safeGetJCRPath() + ": cannot add a child to a protected node";
log.error(msg);
throw new ConstraintViolationException(msg);
}
- // delegate the creation of the child node to the parent node
- return parentNode.createChildNode(nodeName, def, nodeType, uuid);
+ // now do create the child node
+ return createChildNode(nodeName, def, nodeType, uuid);
}
private void setMixinTypesProperty(Set mixinNames) throws RepositoryException {
@@ -677,9 +707,97 @@
}
/**
+ * Returns the child node of <code>this</code> node with the specified
+ * <code>name</code>.
+ *
+ * @param name The qualified name of the child node to retrieve.
+ * @return The child node with the specified <code>name</code>.
+ * @throws ItemNotFoundException If no child node exists with the
+ * specified name.
+ * @throws RepositoryException If another error occurs.
+ */
+ public NodeImpl getNode(QName name) throws ItemNotFoundException, RepositoryException {
+ return getNode(name, 1);
+ }
+
+ /**
+ * Returns the child node of <code>this</code> node with the specified
+ * <code>name</code>.
+ *
+ * @param name The qualified name of the child node to retrieve.
+ * @param index The index of the child node to retrieve (in the case of same-name siblings).
+ * @return The child node with the specified <code>name</code>.
+ * @throws ItemNotFoundException If no child node exists with the
+ * specified name.
+ * @throws RepositoryException If another error occurs.
+ */
+ public NodeImpl getNode(QName name, int index) throws ItemNotFoundException, RepositoryException {
+ // check state of this instance
+ checkItemState();
+
+ Path nodePath;
+ try {
+ nodePath = Path.create(getPrimaryPath(), name, index, true);
+ } catch (MalformedPathException e) {
+ // should never happen
+ String msg = "internal error: invalid path " + safeGetJCRPath();
+ log.error(msg, e);
+ throw new RepositoryException(msg, e);
+ }
+
+ try {
+ Item item = itemMgr.getItem(nodePath);
+ if (item.isNode()) {
+ return (NodeImpl) item;
+ } else {
+ // there's a property with that name, no child node though
+ throw new ItemNotFoundException();
+ }
+ } catch (AccessDeniedException ade) {
+ throw new ItemNotFoundException();
+ }
+ }
+
+ /**
+ * Indicates whether a child node with the specified <code>name</code> exists.
+ * Returns <code>true</code> if the child node exists and <code>false</code>
+ * otherwise.
+ *
+ * @param name The qualified name of the child node.
+ * @return <code>true</code> if the child node exists; <code>false</code> otherwise.
+ * @throws RepositoryException If an unspecified error occurs.
+ */
+ public boolean hasNode(QName name) throws RepositoryException {
+ try {
+ getNode(name, 1);
+ return true;
+ } catch (ItemNotFoundException pnfe) {
+ return false;
+ }
+ }
+
+ /**
+ * Indicates whether a child node with the specified <code>name</code> exists.
+ * Returns <code>true</code> if the child node exists and <code>false</code>
+ * otherwise.
+ *
+ * @param name The qualified name of the child node.
+ * @param index The index of the child node (in the case of same-name siblings).
+ * @return <code>true</code> if the child node exists; <code>false</code> otherwise.
+ * @throws RepositoryException If an unspecified error occurs.
+ */
+ public boolean hasNode(QName name, int index) throws RepositoryException {
+ try {
+ getNode(name, index);
+ return true;
+ } catch (ItemNotFoundException pnfe) {
+ return false;
+ }
+ }
+
+ /**
* Returns the property of <code>this</code> node with the specified
- * <code>name</code>. The same <code>save</code> and reacquisition
- * semantics apply as with <code>{@link #getProperty(String)}</code>.
+ * <code>name</code>.
*
* @param name The qualified name of the property to retrieve.
* @return The property with the specified <code>name</code>.
@@ -687,14 +805,14 @@
* specified name.
* @throws RepositoryException If another error occurs.
*/
- public Property getProperty(QName name)
+ public PropertyImpl getProperty(QName name)
throws ItemNotFoundException, RepositoryException {
// check state of this instance
checkItemState();
PropertyId propId = new PropertyId(((NodeState) state).getUUID(), name);
try {
- return (Property) itemMgr.getItem(propId);
+ return (PropertyImpl) itemMgr.getItem(propId);
} catch (AccessDeniedException ade) {
throw new ItemNotFoundException(name.toString());
}
@@ -711,13 +829,40 @@
*/
public boolean hasProperty(QName name) throws RepositoryException {
try {
- return getProperty(name) != null;
+ getProperty(name);
+ return true;
} catch (ItemNotFoundException pnfe) {
return false;
}
}
/**
+ * @see Node#addNode(String)
+ */
+ synchronized public NodeImpl addNode(QName nodeName)
+ throws ItemExistsException, PathNotFoundException,
+ ConstraintViolationException, RepositoryException {
+ // check state of this instance
+ checkItemState();
+
+ return internalAddChildNode(nodeName, null);
+ }
+
+ /**
+ * @see Node#addNode(String, String)
+ */
+ synchronized public NodeImpl addNode(QName nodeName, QName nodeTypeName)
+ throws ItemExistsException, PathNotFoundException,
+ NoSuchNodeTypeException, ConstraintViolationException,
+ RepositoryException {
+ // check state of this instance
+ checkItemState();
+
+ NodeTypeImpl nt = session.getNodeTypeManager().getNodeType(nodeTypeName);
+ return internalAddChildNode(nodeName, nt);
+ }
+
+ /**
* Same as <code>{@link Node#setProperty(String, String)}</code> except that
* this method takes a <code>QName</code> instead of a <code>String</code>
* value.
@@ -728,7 +873,7 @@
* @throws ValueFormatException
* @throws RepositoryException
*/
- public Property setProperty(String name, QName value) throws ValueFormatException, RepositoryException {
+ public PropertyImpl setProperty(String name, QName value) throws ValueFormatException, RepositoryException {
// check state of this instance
checkItemState();
@@ -748,7 +893,7 @@
* @throws ValueFormatException
* @throws RepositoryException
*/
- public Property setProperty(String name, QName[] values) throws ValueFormatException, RepositoryException {
+ public PropertyImpl setProperty(String name, QName[] values) throws ValueFormatException, RepositoryException {
// check state of this instance
checkItemState();
@@ -757,6 +902,40 @@
return prop;
}
+ /**
+ * Same as <code>{@link Node#setProperty(String, Value[])}</code> except that
+ * this method takes a <code>QName</code> name argument instead of a
+ * <code>String</code>.
+ *
+ * @param name
+ * @param values
+ * @return
+ * @throws ValueFormatException
+ * @throws RepositoryException
+ */
+ public PropertyImpl setProperty(QName name, Value[] values)
+ throws ValueFormatException, RepositoryException {
+ // check state of this instance
+ checkItemState();
+
+ int type;
+ if (values == null || values.length == 0) {
+ type = PropertyType.STRING;
+ } else {
+ type = values[0].getType();
+ }
+ PropertyImpl prop = getOrCreateProperty(name, type);
+ prop.setValue(values);
+ return prop;
+ }
+
+ /**
+ * @see ItemImpl#getQName()
+ */
+ public QName getQName() throws RepositoryException {
+ return session.getHierarchyManager().getName(id);
+ }
+
//-----------------------------------------------------------------< Item >
/**
* @see Item#isNode()
@@ -776,7 +955,14 @@
//QName name = getPrimaryPath().getNameElement().getName();
QName name = session.getHierarchyManager().getName(id);
- return name.toJCRName(session.getNamespaceResolver());
+ try {
+ return name.toJCRName(session.getNamespaceResolver());
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace " + name.getNamespaceURI();
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
+ }
}
/**
@@ -918,8 +1104,7 @@
// check state of this instance
checkItemState();
- NodeTypeImpl nt =
- (NodeTypeImpl) session.getWorkspace().getNodeTypeManager().getNodeType(nodeTypeName);
+ NodeTypeImpl nt = (NodeTypeImpl) session.getNodeTypeManager().getNodeType(nodeTypeName);
return internalAddNode(relPath, nt);
}
@@ -1350,7 +1535,15 @@
* @see Node#isNodeType(String)
*/
public boolean isNodeType(String nodeTypeName) throws RepositoryException {
- return isNodeType(QName.fromJCRName(nodeTypeName, session.getNamespaceResolver()));
+ QName ntName;
+ try {
+ ntName = QName.fromJCRName(nodeTypeName, session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new RepositoryException("invalid node type name: " + nodeTypeName, ine);
+ } catch (UnknownPrefixException upe) {
+ throw new RepositoryException("invalid node type name: " + nodeTypeName, upe);
+ }
+ return isNodeType(ntName);
}
/**
@@ -1432,7 +1625,14 @@
throw new ConstraintViolationException(msg);
}
- QName ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
+ QName ntName;
+ try {
+ ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new RepositoryException("invalid mixin type name: " + mixinName, ine);
+ } catch (UnknownPrefixException upe) {
+ throw new RepositoryException("invalid mixin type name: " + mixinName, upe);
+ }
NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
NodeTypeImpl mixin = ntMgr.getNodeType(ntName);
@@ -1491,7 +1691,6 @@
internalSetProperty(VersionImpl.PROPNAME_IS_CHECKED_OUT, InternalValue.create(true));
internalSetProperty(VersionImpl.PROPNAME_PREDECESSORS, new InternalValue[]{InternalValue.create(new UUID(hist.getRootVersion().getUUID()))});
}
-
}
/**
@@ -1517,7 +1716,14 @@
throw new ConstraintViolationException(msg);
}
- QName ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
+ QName ntName;
+ try {
+ ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new RepositoryException("invalid mixin type name: " + mixinName, ine);
+ } catch (UnknownPrefixException upe) {
+ throw new RepositoryException("invalid mixin type name: " + mixinName, upe);
+ }
// check if mixin is assigned
if (!((NodeState) state).getMixinTypeNames().contains(ntName)) {
@@ -1529,10 +1735,11 @@
* mix:referenceable needs special handling because it has
* special semantics:
* it can only be removed if there no more references to this node
- *
- * todo check if there are REFERENCE properties pointing to this node
*/
- throw new ConstraintViolationException(mixinName + " can not be removed");
+ PropertyIterator iter = getReferences();
+ if (iter.hasNext()) {
+ throw new ConstraintViolationException(mixinName + " can not be removed: the node is being referenced through at least one property of type REFERENCE");
+ }
}
// modify the state of this node
@@ -1611,7 +1818,14 @@
return false;
}
- QName ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
+ QName ntName;
+ try {
+ ntName = QName.fromJCRName(mixinName, session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new RepositoryException("invalid mixin type name: " + mixinName, ine);
+ } catch (UnknownPrefixException upe) {
+ throw new RepositoryException("invalid mixin type name: " + mixinName, upe);
+ }
NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
NodeTypeImpl mixin = ntMgr.getNodeType(ntName);
@@ -1977,13 +2191,12 @@
break;
case OnParentVersionAction.VERSION:
case OnParentVersionAction.COPY:
- QName name = QName.fromJCRName(prop.getName(), session.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], session.getNamespaceResolver());
}
- internalSetProperty(name, ivalues);
+ internalSetProperty(prop.getQName(), ivalues);
break;
}
}
@@ -2167,7 +2380,7 @@
throws RepositoryException {
// get frozen node type
- NodeTypeManagerImpl ntMgr = (NodeTypeManagerImpl) session.getWorkspace().getNodeTypeManager();
+ NodeTypeManagerImpl ntMgr = session.getNodeTypeManager();
String ntName = frozen.getProperty(VersionImpl.PROPNAME_FROZEN_PRIMARY_TYPE).getString();
NodeTypeImpl nt = (NodeTypeImpl) ntMgr.getNodeType(ntName);
@@ -2224,10 +2437,9 @@
* @param prop
* @return
*/
- private int getOPV(Property prop) throws RepositoryException {
+ private int getOPV(PropertyImpl prop) throws RepositoryException {
int type = prop.hasValue() ? prop.getValue().getType() : PropertyType.UNDEFINED;
- PropertyDefImpl def = getApplicablePropertyDef(QName.fromJCRName(prop.getName(), session.getNamespaceResolver()),
- type);
+ PropertyDefImpl def = getApplicablePropertyDef(prop.getQName(), type);
return def.getOnParentVersion();
}
@@ -2239,12 +2451,11 @@
*/
void restoreFrozenState(FrozenNode freeze, VersionSelector vsel)
throws RepositoryException {
- NamespaceResolver nsr = ((SessionImpl) freeze.getSession()).getNamespaceResolver();
PropertyIterator piter = freeze.getProperties();
while (piter.hasNext()) {
PropertyImpl prop = (PropertyImpl) piter.nextProperty();
// check for special property
- if (prop.getName().equals(VersionImpl.PROPNAME_FROZEN_UUID.toJCRName(nsr))) {
+ if (prop.getQName().equals(VersionImpl.PROPNAME_FROZEN_UUID)) {
// check if uuid is the same as 'this' one.
if (!isNodeType(NodeTypeRegistry.MIX_REFERENCEABLE)) {
throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". Not referenceable.");
@@ -2252,13 +2463,13 @@
if (!prop.getString().equals(this.getUUID())) {
throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". UUID changed.");
}
- } else if (prop.getName().equals(VersionImpl.PROPNAME_FROZEN_PRIMARY_TYPE.toJCRName(nsr))) {
- // check if PrimaryType is the same as 'this' one.
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_FROZEN_PRIMARY_TYPE)) {
+ // check if primaryType is the same as 'this' one.
if (!prop.getString().equals(this.getPrimaryNodeType().getName())) {
// todo: check with spec what should happen here
throw new ItemExistsException("Unable to restore version of " + safeGetJCRPath() + ". PrimaryType changed.");
}
- } else if (prop.getName().equals(VersionImpl.PROPNAME_FROZEN_MIXIN_TYPES.toJCRName(nsr))) {
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_FROZEN_MIXIN_TYPES)) {
// add mixins
Value[] values = prop.getValues();
NodeType[] mixins = getMixinNodeTypes();
@@ -2283,19 +2494,19 @@
removeMixin(mixins[i].getName());
}
}
- } else if (prop.getName().equals(VersionImpl.PROPNAME_SUCCESSORS.toJCRName(nsr))) {
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_SUCCESSORS)) {
// ignore
- } else if (prop.getName().equals(VersionImpl.PROPNAME_CREATED.toJCRName(nsr))) {
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_CREATED)) {
// ignore
- } else if (prop.getName().equals(VersionImpl.PROPNAME_VERSION_LABELS.toJCRName(nsr))) {
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_VERSION_LABELS)) {
// ignore
- } else if (prop.getName().equals(VersionImpl.PROPNAME_VERSION_HISTORY.toJCRName(nsr))) {
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_VERSION_HISTORY)) {
// ignore
- } else if (prop.getName().equals(VersionImpl.PROPNAME_PRIMARYTYPE.toJCRName(nsr))) {
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_PRIMARYTYPE)) {
// ignore
- } else if (prop.getName().equals(VersionImpl.PROPNAME_MIXINTYPES.toJCRName(nsr))) {
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_MIXINTYPES)) {
// ignore
- } else if (prop.getName().equals(VersionImpl.PROPNAME_UUID.toJCRName(nsr))) {
+ } else if (prop.getQName().equals(VersionImpl.PROPNAME_UUID)) {
// ignore
} else {
// normal property
@@ -2309,13 +2520,12 @@
break;
case OnParentVersionAction.VERSION:
case OnParentVersionAction.COPY:
- QName name = QName.fromJCRName(prop.getName(), session.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], session.getNamespaceResolver());
}
- internalSetProperty(name, ivalues);
+ internalSetProperty(prop.getQName(), ivalues);
break;
}
}
1.13 +40 -1 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/Path.java
Index: Path.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/Path.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- Path.java 27 Aug 2004 09:28:47 -0000 1.12
+++ Path.java 30 Aug 2004 16:15:16 -0000 1.13
@@ -130,6 +130,45 @@
}
}
+ /**
+ * @param master
+ * @param name
+ * @param canonicalize
+ * @return
+ * @throws MalformedPathException
+ */
+ public static Path create(Path master, QName name, boolean canonicalize)
+ throws MalformedPathException {
+ PathBuilder pb = new PathBuilder(master.getElements());
+ pb.addLast(name.getNamespaceURI(), name.getLocalName());
+
+ if (canonicalize) {
+ return pb.getPath().getCanonicalPath();
+ } else {
+ return pb.getPath();
+ }
+ }
+
+ /**
+ * @param master
+ * @param name
+ * @param index
+ * @param canonicalize
+ * @return
+ * @throws MalformedPathException
+ */
+ public static Path create(Path master, QName name, int index, boolean canonicalize)
+ throws MalformedPathException {
+ PathBuilder pb = new PathBuilder(master.getElements());
+ pb.addLast(name.getNamespaceURI(), name.getLocalName(), index);
+
+ if (canonicalize) {
+ return pb.getPath().getCanonicalPath();
+ } else {
+ return pb.getPath();
+ }
+ }
+
//------------------------------------------------------< utility methods >
/**
* Checks if <code>jcrPath</code> is a valid JCR-style absolute or relative
1.26 +36 -14 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/PropertyImpl.java
Index: PropertyImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/PropertyImpl.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- PropertyImpl.java 27 Aug 2004 09:56:51 -0000 1.25
+++ PropertyImpl.java 30 Aug 2004 16:15:16 -0000 1.26
@@ -258,6 +258,14 @@
internalSetValue(internalValues, reqType);
}
+ /**
+ * @see ItemImpl#getQName()
+ */
+ public QName getQName() {
+ PropertyId propId = (PropertyId) id;
+ return propId.getName();
+ }
+
//-------------------------------------------------------------< Property >
/**
* @see Property#getValues()
@@ -867,19 +875,26 @@
case PropertyType.STRING:
case PropertyType.LONG:
case PropertyType.DOUBLE:
- // FIXME hack for String properties representing JCR names
- Object obj = value.internalValue();
- if (obj instanceof QName) {
- QName name = (QName) obj;
- try {
- return name.toJCRName(session.getNamespaceResolver()).length();
- } catch (NoPrefixDeclaredException npde) {
- log.warn(safeGetJCRPath() + ": the value represents an invalid name", npde);
- return -1;
- }
- } else {
- return value.toString().length();
+ return value.toString().length();
+
+ case PropertyType.NAME:
+ QName name = (QName) value.internalValue();
+ try {
+ return name.toJCRName(session.getNamespaceResolver()).length();
+ } catch (NoPrefixDeclaredException npde) {
+ log.warn(safeGetJCRPath() + ": the value represents an invalid name", npde);
+ return -1;
+ }
+
+ case PropertyType.PATH:
+ Path path = (Path) value.internalValue();
+ try {
+ return path.toJCRPath(session.getNamespaceResolver()).length();
+ } catch (NoPrefixDeclaredException npde) {
+ log.warn(safeGetJCRPath() + ": the value represents an invalid path", npde);
+ return -1;
}
+
case PropertyType.BINARY:
BLOBFileValue blob = (BLOBFileValue) value.internalValue();
return blob.getLength();
@@ -908,7 +923,14 @@
public String getName() throws RepositoryException {
PropertyId propId = (PropertyId) id;
QName name = propId.getName();
- return name.toJCRName(session.getNamespaceResolver());
+ try {
+ return name.toJCRName(session.getNamespaceResolver());
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace " + name.getNamespaceURI();
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
+ }
}
/**
1.10 +29 -12 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/QName.java
Index: QName.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/QName.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- QName.java 27 Aug 2004 09:28:47 -0000 1.9
+++ QName.java 30 Aug 2004 16:15:16 -0000 1.10
@@ -71,28 +71,45 @@
* @param rawName
* @param resolver
* @return
+ * @throws IllegalNameException
* @throws UnknownPrefixException
*/
- public static QName fromJCRName(String rawName, NamespaceResolver resolver) throws UnknownPrefixException {
+ public static QName fromJCRName(String rawName, NamespaceResolver resolver)
+ throws IllegalNameException, UnknownPrefixException {
+ if (rawName == null || rawName.length() == 0) {
+ throw new IllegalNameException("empty name");
+ }
+
String prefix = null;
- int pos = rawName.indexOf(':');
- if (pos == -1) {
- prefix = "";
- } else if (pos == 0) {
- throw new IllegalArgumentException("prefix can not be empty: " + rawName);
- } else if (pos == rawName.length() - 1) {
- throw new IllegalArgumentException("localName can not be empty: " + rawName);
+ String localName = null;
+
+ Matcher matcher = NAME_PATTERN.matcher(rawName);
+ if (matcher.matches()) {
+ // check for prefix (group 1)
+ if (matcher.group(1) != null) {
+ // prefix specified
+ // group 2 is namespace prefix excl. delimiter (colon)
+ prefix = matcher.group(2);
+ } else {
+ // no prefix specified
+ prefix = "";
+ }
+
+ // group 3 is localName
+ localName = matcher.group(3);
} else {
- prefix = rawName.substring(0, pos);
+ // illegal syntax for name
+ throw new IllegalNameException("'" + rawName + "' is not a valid name");
}
+
String uri;
try {
uri = resolver.getURI(prefix);
} catch (NamespaceException nse) {
throw new UnknownPrefixException(prefix);
}
- String name = rawName.substring(pos + 1);
- return new QName(uri, name);
+
+ return new QName(uri, localName);
}
/**
1.23 +7 -6 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/RepositoryImpl.java
Index: RepositoryImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/RepositoryImpl.java,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -r1.22 -r1.23
--- RepositoryImpl.java 27 Aug 2004 09:28:47 -0000 1.22
+++ RepositoryImpl.java 30 Aug 2004 16:15:16 -0000 1.23
@@ -268,9 +268,10 @@
// FIXME version manager should not operate on default workspace
// check system root node of system workspace
SessionImpl sysSession = getSystemSession(DEFAULT_WORKSPACE_NAME);
- if (!sysSession.getRootNode().hasNode(SYSTEM_ROOT_NAME.toJCRName(sysSession.getNamespaceResolver()))) {
- sysSession.getRootNode().addNode(SYSTEM_ROOT_NAME.toJCRName(sysSession.getNamespaceResolver()), NodeTypeRegistry.NT_UNSTRUCTURED.toJCRName(sysSession.getNamespaceResolver()));
- sysSession.getRootNode().save();
+ NodeImpl rootNode = (NodeImpl) sysSession.getRootNode();
+ if (!rootNode.hasNode(SYSTEM_ROOT_NAME)) {
+ rootNode.addNode(SYSTEM_ROOT_NAME, NodeTypeRegistry.NT_UNSTRUCTURED);
+ rootNode.save();
}
// init version manager
vMgr = new VersionManager(sysSession);
@@ -505,8 +506,8 @@
* @return
* @throws RepositoryException
*/
- public Node getSystemRootNode(SessionImpl session) throws RepositoryException {
- return session.getRootNode().getNode(SYSTEM_ROOT_NAME.toJCRName(session.getNamespaceResolver()));
+ public NodeImpl getSystemRootNode(SessionImpl session) throws RepositoryException {
+ return ((NodeImpl)session.getRootNode()).getNode(SYSTEM_ROOT_NAME);
}
//-----------------------------------------------------------< Repository >
1.9 +2 -2 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/UnknownPrefixException.java
Index: UnknownPrefixException.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/UnknownPrefixException.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- UnknownPrefixException.java 2 Aug 2004 16:21:05 -0000 1.8
+++ UnknownPrefixException.java 30 Aug 2004 16:15:16 -0000 1.9
@@ -23,7 +23,7 @@
* @author Stefan Guggisberg
* @version $Revision$, $Date$
*/
-public class UnknownPrefixException extends RepositoryException {
+public class UnknownPrefixException extends BaseException {
/**
* Constructs a new instance of this class.
*/
1.10 +2 -2 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeDefImpl.java
Index: NodeDefImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeDefImpl.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- NodeDefImpl.java 2 Aug 2004 16:21:50 -0000 1.9
+++ NodeDefImpl.java 30 Aug 2004 16:15:16 -0000 1.10
@@ -88,7 +88,7 @@
return name.toJCRName(nsResolver);
} catch (NoPrefixDeclaredException npde) {
// should never get here
- log.error("invalid node name", npde);
+ log.error("encountered unregistered namespace in node name", npde);
// not correct, but an acceptable fallback
return nodeDef.getName().toString();
}
1.10 +134 -105 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeDefStore.java
Index: NodeTypeDefStore.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeDefStore.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- NodeTypeDefStore.java 27 Aug 2004 09:28:47 -0000 1.9
+++ NodeTypeDefStore.java 30 Aug 2004 16:15:16 -0000 1.10
@@ -16,10 +16,7 @@
package org.apache.slide.jcr.core.nodetype;
import org.apache.log4j.Logger;
-import org.apache.slide.jcr.core.InternalValue;
-import org.apache.slide.jcr.core.NamespaceRegistryImpl;
-import org.apache.slide.jcr.core.NamespaceResolver;
-import org.apache.slide.jcr.core.QName;
+import org.apache.slide.jcr.core.*;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
@@ -212,11 +209,16 @@
//------------------------------------------------------< private methods >
private NodeTypeDef readDef(Element ntElem, NamespaceResolver nsResolver)
- throws InvalidNodeTypeDefException, RepositoryException {
+ throws InvalidNodeTypeDefException {
String sntName = ntElem.getAttributeValue(NAME_ATTRIBUTE);
NodeTypeDef ntDef = new NodeTypeDef();
// name
- QName qntName = QName.fromJCRName(sntName, nsResolver);
+ QName qntName;
+ try {
+ qntName = QName.fromJCRName(sntName, nsResolver);
+ } catch (BaseException e) {
+ throw new InvalidNodeTypeDefException("invalid node type name:" + sntName, e);
+ }
ntDef.setName(qntName);
// supertypes
@@ -225,7 +227,11 @@
String[] sta = supertypes.split(",\\s*");
QName[] qNames = new QName[sta.length];
for (int i = 0; i < sta.length; i++) {
- qNames[i] = QName.fromJCRName(sta[i], nsResolver);
+ try {
+ qNames[i] = QName.fromJCRName(sta[i], nsResolver);
+ } catch (BaseException e) {
+ throw new InvalidNodeTypeDefException("invalid supertype name:" + sta[i], e);
+ }
}
if (sta.length > 0) {
ntDef.setSupertypes(qNames);
@@ -253,7 +259,11 @@
// name
String propName = elem.getAttributeValue(NAME_ATTRIBUTE);
if (propName != null && propName.length() > 0) {
- pd.setName(QName.fromJCRName(propName, nsResolver));
+ try {
+ pd.setName(QName.fromJCRName(propName, nsResolver));
+ } catch (BaseException e) {
+ throw new InvalidNodeTypeDefException("invalid property name:" + propName, e);
+ }
}
// type
String typeName = elem.getAttributeValue(TYPE_ATTRIBUTE);
@@ -347,7 +357,11 @@
// name
String nodeName = elem.getAttributeValue(NAME_ATTRIBUTE);
if (nodeName != null && nodeName.length() > 0) {
- cnd.setName(QName.fromJCRName(nodeName, nsResolver));
+ try {
+ cnd.setName(QName.fromJCRName(nodeName, nsResolver));
+ } catch (BaseException e) {
+ throw new InvalidNodeTypeDefException("invalid child node name:" + nodeName, e);
+ }
}
// requiredPrimaryTypes
String requiredPrimaryTypes = elem.getAttributeValue(REQUIREDPRIMARYTYPES_ATTRIBUTE);
@@ -355,7 +369,11 @@
String[] sta = requiredPrimaryTypes.split(",\\s*");
QName[] qNames = new QName[sta.length];
for (int i = 0; i < sta.length; i++) {
- qNames[i] = QName.fromJCRName(sta[i], nsResolver);
+ try {
+ qNames[i] = QName.fromJCRName(sta[i], nsResolver);
+ } catch (BaseException e) {
+ throw new InvalidNodeTypeDefException("invalid requiredPrimaryType:" + sta[i], e);
+ }
}
if (sta.length > 0) {
cnd.setRequiredPrimaryTypes(qNames);
@@ -364,7 +382,11 @@
// defaultPrimaryType
String defaultPrimaryType = elem.getAttributeValue(DEFAULTPRIMARYTYPE_ATTRIBUTE);
if (defaultPrimaryType != null && defaultPrimaryType.length() > 0) {
- cnd.setDefaultPrimaryType(QName.fromJCRName(defaultPrimaryType, nsResolver));
+ try {
+ cnd.setDefaultPrimaryType(QName.fromJCRName(defaultPrimaryType, nsResolver));
+ } catch (BaseException e) {
+ throw new InvalidNodeTypeDefException("invalid defaultPrimaryType:" + defaultPrimaryType, e);
+ }
}
// autoCreate
String autoCreate = elem.getAttributeValue(AUTOCREATE_ATTRIBUTE);
@@ -414,104 +436,111 @@
private void writeDef(NodeTypeDef ntd, Element ntElem, NamespaceResolver nsResolver)
throws RepositoryException {
- // name
- ntElem.setAttribute(NAME_ATTRIBUTE, ntd.getName().toJCRName(nsResolver));
- // supertypes
- StringBuffer supertypes = new StringBuffer();
- QName[] qNames = ntd.getSupertypes();
- for (int i = 0; i < qNames.length; i++) {
- if (supertypes.length() > 0) {
- supertypes.append(",");
- }
- supertypes.append(qNames[i].toJCRName(nsResolver));
- }
- ntElem.setAttribute(SUPERTYPES_ATTRIBUTE, supertypes.toString());
- // mixin
- ntElem.setAttribute(MIXIN_ATTRIBUTE, Boolean.toString(ntd.isMixin()));
- // orderableChildNodes
- ntElem.setAttribute(ORDERABLECHILDNODES_ATTRIBUTE, Boolean.toString(ntd.hasOrderableChildNodes()));
-
- // property definitions
- PropDef[] pda = ntd.getPropertyDefs();
- for (int i = 0; i < pda.length; i++) {
- PropDef pd = pda[i];
- Element elem = new Element(PROPERTYDEF_ELEMENT_NAME);
- ntElem.addContent(elem);
-
+ try {
// name
- String name = pd.getName() == null ? "" : pd.getName().toJCRName(nsResolver);
- elem.setAttribute(NAME_ATTRIBUTE, name);
- // type
- elem.setAttribute(TYPE_ATTRIBUTE, PropertyType.nameFromValue(pd.getRequiredType()));
- // valueConstraint
- String valueConstraint = pd.getValueConstraint() == null ? "" : pd.getValueConstraint().getDefinition();
- elem.setAttribute(VALUECONSTRAINT_ATTRIBUTE, valueConstraint);
- // defaultValues
- // @todo provide escaping for separator character within single value or change xml representation for defaultValues
- InternalValue[] defVals = pd.getDefaultValues();
- StringBuffer defaultValues = new StringBuffer();
- if (defVals != null) {
- for (int n = 0; n < defVals.length; n++) {
- if (defaultValues.length() > 0) {
- defaultValues.append(",");
+ ntElem.setAttribute(NAME_ATTRIBUTE, ntd.getName().toJCRName(nsResolver));
+ // supertypes
+ StringBuffer supertypes = new StringBuffer();
+ QName[] qNames = ntd.getSupertypes();
+ for (int i = 0; i < qNames.length; i++) {
+ if (supertypes.length() > 0) {
+ supertypes.append(",");
+ }
+ supertypes.append(qNames[i].toJCRName(nsResolver));
+ }
+ ntElem.setAttribute(SUPERTYPES_ATTRIBUTE, supertypes.toString());
+ // mixin
+ ntElem.setAttribute(MIXIN_ATTRIBUTE, Boolean.toString(ntd.isMixin()));
+ // orderableChildNodes
+ ntElem.setAttribute(ORDERABLECHILDNODES_ATTRIBUTE, Boolean.toString(ntd.hasOrderableChildNodes()));
+
+ // property definitions
+ PropDef[] pda = ntd.getPropertyDefs();
+ for (int i = 0; i < pda.length; i++) {
+ PropDef pd = pda[i];
+ Element elem = new Element(PROPERTYDEF_ELEMENT_NAME);
+ ntElem.addContent(elem);
+
+ // name
+ String name = pd.getName() == null ? "" : pd.getName().toJCRName(nsResolver);
+ elem.setAttribute(NAME_ATTRIBUTE, name);
+ // type
+ elem.setAttribute(TYPE_ATTRIBUTE, PropertyType.nameFromValue(pd.getRequiredType()));
+ // valueConstraint
+ String valueConstraint = pd.getValueConstraint() == null ? "" : pd.getValueConstraint().getDefinition();
+ elem.setAttribute(VALUECONSTRAINT_ATTRIBUTE, valueConstraint);
+ // defaultValues
+ // @todo provide escaping for separator character within single value or change xml representation for defaultValues
+ InternalValue[] defVals = pd.getDefaultValues();
+ StringBuffer defaultValues = new StringBuffer();
+ if (defVals != null) {
+ for (int n = 0; n < defVals.length; n++) {
+ if (defaultValues.length() > 0) {
+ defaultValues.append(",");
+ }
+ defaultValues.append(defVals[n].toString());
}
- defaultValues.append(defVals[n].toString());
}
- }
-
- elem.setAttribute(DEFAULTVALUES_ATTRIBUTE, defaultValues.toString());
- // autoCreate
- String autoCreate = elem.getAttributeValue(AUTOCREATE_ATTRIBUTE);
- if (autoCreate != null && autoCreate.length() > 0) {
- pd.setAutoCreate(Boolean.valueOf(autoCreate).booleanValue());
- }
- // mandatory
- elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(pd.isMandatory()));
- // onParentVersion
- elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(pd.getOnParentVersion()));
- // protected
- elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(pd.isProtected()));
- // primaryItem
- elem.setAttribute(PRIMARYITEM_ATTRIBUTE, Boolean.toString(pd.isPrimaryItem()));
- // multiple
- elem.setAttribute(MULTIPLE_ATTRIBUTE, Boolean.toString(pd.isMultiple()));
- }
- // child-node definitions
- ChildNodeDef[] nda = ntd.getChildNodeDefs();
- for (int i = 0; i < nda.length; i++) {
- ChildNodeDef nd = nda[i];
- Element elem = new Element(CHILDNODEDEF_ELEMENT_NAME);
- ntElem.addContent(elem);
-
- // name
- String name = nd.getName() == null ? "" : nd.getName().toJCRName(nsResolver);
- elem.setAttribute(NAME_ATTRIBUTE, name);
- // requiredPrimaryTypes
- StringBuffer requiredPrimaryTypes = new StringBuffer();
- qNames = nd.getRequiredPrimaryTypes();
- for (int j = 0; j < qNames.length; j++) {
- if (requiredPrimaryTypes.length() > 0) {
- requiredPrimaryTypes.append(",");
+ elem.setAttribute(DEFAULTVALUES_ATTRIBUTE, defaultValues.toString());
+ // autoCreate
+ String autoCreate = elem.getAttributeValue(AUTOCREATE_ATTRIBUTE);
+ if (autoCreate != null && autoCreate.length() > 0) {
+ pd.setAutoCreate(Boolean.valueOf(autoCreate).booleanValue());
+ }
+ // mandatory
+ elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(pd.isMandatory()));
+ // onParentVersion
+ elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(pd.getOnParentVersion()));
+ // protected
+ elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(pd.isProtected()));
+ // primaryItem
+ elem.setAttribute(PRIMARYITEM_ATTRIBUTE, Boolean.toString(pd.isPrimaryItem()));
+ // multiple
+ elem.setAttribute(MULTIPLE_ATTRIBUTE, Boolean.toString(pd.isMultiple()));
+ }
+
+ // child-node definitions
+ ChildNodeDef[] nda = ntd.getChildNodeDefs();
+ for (int i = 0; i < nda.length; i++) {
+ ChildNodeDef nd = nda[i];
+ Element elem = new Element(CHILDNODEDEF_ELEMENT_NAME);
+ ntElem.addContent(elem);
+
+ // name
+ String name = nd.getName() == null ? "" : nd.getName().toJCRName(nsResolver);
+ elem.setAttribute(NAME_ATTRIBUTE, name);
+ // requiredPrimaryTypes
+ StringBuffer requiredPrimaryTypes = new StringBuffer();
+ qNames = nd.getRequiredPrimaryTypes();
+ for (int j = 0; j < qNames.length; j++) {
+ if (requiredPrimaryTypes.length() > 0) {
+ requiredPrimaryTypes.append(",");
+ }
+ requiredPrimaryTypes.append(qNames[j].toJCRName(nsResolver));
}
- requiredPrimaryTypes.append(qNames[j].toJCRName(nsResolver));
- }
- elem.setAttribute(REQUIREDPRIMARYTYPES_ATTRIBUTE, requiredPrimaryTypes.toString());
- // defaultPrimaryType
- String defaultPrimaryType = nd.getDefaultPrimaryType() == null ? "" : nd.getDefaultPrimaryType().toJCRName(nsResolver);
- elem.setAttribute(DEFAULTPRIMARYTYPE_ATTRIBUTE, defaultPrimaryType);
- // autoCreate
- elem.setAttribute(AUTOCREATE_ATTRIBUTE, Boolean.toString(nd.isAutoCreate()));
- // mandatory
- elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(nd.isMandatory()));
- // onParentVersion
- elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(nd.getOnParentVersion()));
- // protected
- elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(nd.isProtected()));
- // primaryItem
- elem.setAttribute(PRIMARYITEM_ATTRIBUTE, Boolean.toString(nd.isPrimaryItem()));
- // sameNameSibs
- elem.setAttribute(SAMENAMESIBS_ATTRIBUTE, Boolean.toString(nd.allowSameNameSibs()));
+ elem.setAttribute(REQUIREDPRIMARYTYPES_ATTRIBUTE, requiredPrimaryTypes.toString());
+ // defaultPrimaryType
+ String defaultPrimaryType = nd.getDefaultPrimaryType() == null ? "" : nd.getDefaultPrimaryType().toJCRName(nsResolver);
+ elem.setAttribute(DEFAULTPRIMARYTYPE_ATTRIBUTE, defaultPrimaryType);
+ // autoCreate
+ elem.setAttribute(AUTOCREATE_ATTRIBUTE, Boolean.toString(nd.isAutoCreate()));
+ // mandatory
+ elem.setAttribute(MANDATORY_ATTRIBUTE, Boolean.toString(nd.isMandatory()));
+ // onParentVersion
+ elem.setAttribute(ONPARENTVERSION_ATTRIBUTE, OnParentVersionAction.nameFromValue(nd.getOnParentVersion()));
+ // protected
+ elem.setAttribute(PROTECTED_ATTRIBUTE, Boolean.toString(nd.isProtected()));
+ // primaryItem
+ elem.setAttribute(PRIMARYITEM_ATTRIBUTE, Boolean.toString(nd.isPrimaryItem()));
+ // sameNameSibs
+ elem.setAttribute(SAMENAMESIBS_ATTRIBUTE, Boolean.toString(nd.allowSameNameSibs()));
+ }
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
}
}
}
1.9 +19 -10 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeImpl.java
Index: NodeTypeImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeImpl.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- NodeTypeImpl.java 2 Aug 2004 16:21:50 -0000 1.8
+++ NodeTypeImpl.java 30 Aug 2004 16:15:16 -0000 1.9
@@ -16,10 +16,7 @@
package org.apache.slide.jcr.core.nodetype;
import org.apache.log4j.Logger;
-import org.apache.slide.jcr.core.InternalValue;
-import org.apache.slide.jcr.core.NamespaceResolver;
-import org.apache.slide.jcr.core.NoPrefixDeclaredException;
-import org.apache.slide.jcr.core.QName;
+import org.apache.slide.jcr.core.*;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
@@ -286,7 +283,7 @@
return ntd.getName().toJCRName(nsResolver);
} catch (NoPrefixDeclaredException npde) {
// should never get here
- log.error("invalid node type name", npde);
+ log.error("encountered unregistered namespace in node type name", npde);
return ntd.getName().toString();
}
}
@@ -390,9 +387,12 @@
InternalValue internalValue = InternalValue.create(value, nsResolver);
checkSetPropertyValueConstraints(def, new InternalValue[]{internalValue});
return true;
+ } catch (BaseException be) {
+ // implementation specific exception, fall through
} catch (RepositoryException re) {
- return false;
+ // fall through
}
+ return false;
}
/**
@@ -402,9 +402,12 @@
try {
ent.checkAddNodeConstraints(QName.fromJCRName(childNodeName, nsResolver));
return true;
+ } catch (BaseException be) {
+ // implementation specific exception, fall through
} catch (RepositoryException re) {
- return false;
+ // fall through
}
+ return false;
}
/**
@@ -414,9 +417,12 @@
try {
ent.checkAddNodeConstraints(QName.fromJCRName(childNodeName, nsResolver), QName.fromJCRName(nodeTypeName, nsResolver));
return true;
+ } catch (BaseException be) {
+ // implementation specific exception, fall through
} catch (RepositoryException re) {
- return false;
+ // fall through
}
+ return false;
}
/**
@@ -426,9 +432,12 @@
try {
ent.checkRemoveItemConstraints(QName.fromJCRName(itemName, nsResolver));
return true;
+ } catch (BaseException be) {
+ // implementation specific exception, fall through
} catch (RepositoryException re) {
- return false;
+ // fall through
}
+ return false;
}
/**
1.12 +4 -1 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeManagerImpl.java
Index: NodeTypeManagerImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/NodeTypeManagerImpl.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- NodeTypeManagerImpl.java 2 Aug 2004 16:21:50 -0000 1.11
+++ NodeTypeManagerImpl.java 30 Aug 2004 16:15:16 -0000 1.12
@@ -20,6 +20,7 @@
import org.apache.slide.jcr.core.NamespaceResolver;
import org.apache.slide.jcr.core.QName;
import org.apache.slide.jcr.core.UnknownPrefixException;
+import org.apache.slide.jcr.core.IllegalNameException;
import org.apache.slide.jcr.util.IteratorHelper;
import javax.jcr.RepositoryException;
@@ -188,6 +189,8 @@
return getNodeType(QName.fromJCRName(nodeTypeName, nsResolver));
} catch (UnknownPrefixException upe) {
throw new NoSuchNodeTypeException(nodeTypeName, upe);
+ } catch (IllegalNameException ine) {
+ throw new NoSuchNodeTypeException(nodeTypeName, ine);
}
}
1.10 +2 -2 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/PropertyDefImpl.java
Index: PropertyDefImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/nodetype/PropertyDefImpl.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- PropertyDefImpl.java 27 Aug 2004 09:28:47 -0000 1.9
+++ PropertyDefImpl.java 30 Aug 2004 16:15:16 -0000 1.10
@@ -113,7 +113,7 @@
return name.toJCRName(nsResolver);
} catch (NoPrefixDeclaredException npde) {
// should never get here
- log.error("invalid property name", npde);
+ log.error("encountered unregistered namespace in property name", npde);
// not correct, but an acceptable fallback
return propDef.getName().toString();
}
1.9 +10 -2 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/observation/EventImpl.java
Index: EventImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/observation/EventImpl.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- EventImpl.java 27 Aug 2004 09:28:48 -0000 1.8
+++ EventImpl.java 30 Aug 2004 16:15:17 -0000 1.9
@@ -17,6 +17,7 @@
import org.apache.log4j.Logger;
import org.apache.slide.jcr.core.ItemManager;
+import org.apache.slide.jcr.core.NoPrefixDeclaredException;
import org.apache.slide.jcr.core.NodeId;
import org.apache.slide.jcr.core.SessionImpl;
@@ -91,7 +92,14 @@
* @see Event#getChildName()
*/
public String getChildName() throws RepositoryException {
- return eventState.getChildItemQName().toJCRName(session.getNamespaceResolver());
+ try {
+ return eventState.getChildItemQName().toJCRName(session.getNamespaceResolver());
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace in name";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
+ }
}
/**
1.10 +1 -1 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/observation/ObservationManagerFactory.java
Index: ObservationManagerFactory.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/observation/ObservationManagerFactory.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ObservationManagerFactory.java 27 Aug 2004 09:28:48 -0000 1.9
+++ ObservationManagerFactory.java 30 Aug 2004 16:15:17 -0000 1.10
@@ -228,7 +228,7 @@
if (nodeTypeName == null) {
nodeTypes = null;
} else {
- NodeTypeManager ntMgr = session.getWorkspace().getNodeTypeManager();
+ NodeTypeManager ntMgr = session.getNodeTypeManager();
nodeTypes = new NodeType[nodeTypeName.length];
for (int i = 0; i < nodeTypes.length; i++) {
nodeTypes[i] = ntMgr.getNodeType(nodeTypeName[i]);
1.9 +7 -10 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/FrozenNode.java
Index: FrozenNode.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/FrozenNode.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- FrozenNode.java 27 Aug 2004 09:28:49 -0000 1.8
+++ FrozenNode.java 30 Aug 2004 16:15:17 -0000 1.9
@@ -159,14 +159,13 @@
* @param prop
* @throws RepositoryException
*/
- private void copy(Property prop) throws RepositoryException {
- QName name = QName.fromJCRName(prop.getName(), session.getNamespaceResolver());
+ private void copy(PropertyImpl prop) throws RepositoryException {
Value[] values = prop.getValues();
InternalValue[] ivalues = new InternalValue[values.length];
for (int i = 0; i < values.length; i++) {
ivalues[i] = InternalValue.create(values[i], session.getNamespaceResolver());
}
- internalSetProperty(name, ivalues);
+ internalSetProperty(prop.getQName(), ivalues);
}
/**
@@ -177,9 +176,8 @@
*/
private void version(NodeImpl node) throws RepositoryException {
// create nt:frozenVersionableChild (not defined yet)
- NodeTypeImpl nt = (NodeTypeImpl)
- session.getWorkspace().getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_FROZEN_VERSIONABLE_CHILD.toJCRName(session.getNamespaceResolver()));
- QName name = QName.fromJCRName(node.getName(), session.getNamespaceResolver());
+ NodeTypeImpl nt = session.getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_FROZEN_VERSIONABLE_CHILD);
+ QName name = node.getQName();
NodeDefImpl def = getApplicableChildNodeDef(name, nt.getQName());
NodeImpl newChild = createChildNode(name, def, nt, null);
newChild.internalSetProperty(VersionImpl.PROPNAME_VERSION_HISTORY,
@@ -197,9 +195,8 @@
* @throws RepositoryException
*/
private void copy(NodeImpl node) throws RepositoryException {
- NodeTypeImpl nt = (NodeTypeImpl)
- session.getWorkspace().getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_FROZEN.toJCRName(session.getNamespaceResolver()));
- QName name = QName.fromJCRName(node.getName(), session.getNamespaceResolver());
+ NodeTypeImpl nt = session.getNodeTypeManager().getNodeType(NodeTypeRegistry.NT_FROZEN);
+ QName name = node.getQName();
NodeDefImpl def = getApplicableChildNodeDef(name, nt.getQName());
FrozenNode newChild = (FrozenNode) createChildNode(name, def, nt, null);
newChild.createFrozenState((NodeImpl) node);
1.8 +2 -2 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionHistoryImpl.java
Index: VersionHistoryImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionHistoryImpl.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- VersionHistoryImpl.java 27 Aug 2004 09:28:49 -0000 1.7
+++ VersionHistoryImpl.java 30 Aug 2004 16:15:17 -0000 1.8
@@ -84,7 +84,7 @@
* @see VersionHistory#getRootVersion()
*/
public Version getRootVersion() throws RepositoryException {
- return (Version) getNode(NODENAME_ROOTVERSION.toJCRName(session.getNamespaceResolver()));
+ return (Version) getNode(NODENAME_ROOTVERSION);
}
/**
1.10 +5 -5 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionImpl.java
Index: VersionImpl.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionImpl.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- VersionImpl.java 27 Aug 2004 09:28:49 -0000 1.9
+++ VersionImpl.java 30 Aug 2004 16:15:17 -0000 1.10
@@ -84,15 +84,15 @@
*/
public Calendar getCreated() throws RepositoryException {
// no check for NULL needed since its mandatory
- return getProperty(PROPNAME_CREATED.toJCRName(session.getNamespaceResolver())).getDate();
+ return getProperty(PROPNAME_CREATED).getDate();
}
/**
* @see Version#getVersionLabels()
*/
public String[] getVersionLabels() throws RepositoryException {
- if (hasProperty(PROPNAME_VERSION_LABELS.toJCRName(session.getNamespaceResolver()))) {
- Value[] values = getProperty(PROPNAME_VERSION_LABELS.toJCRName(session.getNamespaceResolver())).getValues();
+ if (hasProperty(PROPNAME_VERSION_LABELS)) {
+ Value[] values = getProperty(PROPNAME_VERSION_LABELS).getValues();
if (values != null) {
String[] labels = new String[values.length];
for (int i = 0; i < values.length; i++) {
@@ -150,7 +150,7 @@
// check history first
getHistory().removeVersionLabel(label);
- Value[] oldValues = getProperty(PROPNAME_VERSION_LABELS.toJCRName(session.getNamespaceResolver())).getValues();
+ Value[] oldValues = getProperty(PROPNAME_VERSION_LABELS).getValues();
InternalValue[] newValues = new InternalValue[oldValues.length - 1];
int j = 0;
for (int i = 0; i < oldValues.length; i++) {
1.10 +18 -15 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionManager.java
Index: VersionManager.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/version/VersionManager.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- VersionManager.java 27 Aug 2004 09:28:49 -0000 1.9
+++ VersionManager.java 30 Aug 2004 16:15:17 -0000 1.10
@@ -46,7 +46,7 @@
/**
* the root node of the version histories
*/
- private final Node historyRoot;
+ private final NodeImpl historyRoot;
/**
* Creates a new VersionManager.
@@ -58,14 +58,13 @@
this.session = session;
// check for versionhistory root
- Node systemRoot = ((RepositoryImpl) session.getRepository()).getSystemRootNode(session);
- if (!systemRoot.hasNode(VERSION_HISTORY_ROOT_NAME.toJCRName(session.getNamespaceResolver()))) {
+ NodeImpl systemRoot = ((RepositoryImpl) session.getRepository()).getSystemRootNode(session);
+ if (!systemRoot.hasNode(VERSION_HISTORY_ROOT_NAME)) {
// if not exist, create
- systemRoot.addNode(VERSION_HISTORY_ROOT_NAME.toJCRName(session.getNamespaceResolver()),
- NodeTypeRegistry.NT_UNSTRUCTURED.toJCRName(session.getNamespaceResolver()));
+ systemRoot.addNode(VERSION_HISTORY_ROOT_NAME, NodeTypeRegistry.NT_UNSTRUCTURED);
systemRoot.save();
}
- historyRoot = systemRoot.getNode(VERSION_HISTORY_ROOT_NAME.toJCRName(session.getNamespaceResolver()));
+ historyRoot = systemRoot.getNode(VERSION_HISTORY_ROOT_NAME);
}
/**
@@ -79,15 +78,15 @@
throws RepositoryException {
// check if history already exists
- String relPath = node.getUUID();
- if (historyRoot.hasNode(relPath)) {
+ QName historyNodeName = new QName(NamespaceRegistryImpl.NS_DEFAULT_URI, node.getUUID());
+ if (historyRoot.hasNode(historyNodeName)) {
//throw new RepositoryException("Unable to initialize version history. Already exists");
- historyRoot.remove(relPath);
+ historyRoot.getNode(historyNodeName).remove(".");
}
// create new history node
- VersionHistoryImpl vh = VersionHistoryImpl.create((NodeImpl) historyRoot.addNode(relPath,
- NodeTypeRegistry.NT_VERSION_HISTORY.toJCRName(session.getNamespaceResolver())));
+ VersionHistoryImpl vh = VersionHistoryImpl.create(historyRoot.addNode(historyNodeName,
+ NodeTypeRegistry.NT_VERSION_HISTORY));
// and initialize the root version
((VersionImpl) vh.getRootVersion()).initFrozenState(node);
@@ -95,7 +94,7 @@
// save new history
historyRoot.save();
- // must aquire version history wich session in node
+ // must aquire version history with the node's session
return VersionHistoryImpl.create((NodeImpl) node.getSession().getNodeByUUID(vh.getUUID()));
}
@@ -136,7 +135,7 @@
// This causes the following series of events:
// 0. collect some values
- // todo: simplyfy, as soon as mandatroy mv cannot return null
+ // todo: simplify, as soon as mandatory mv cannot return null
Value[] values = node.hasProperty(VersionImpl.PROPNAME_PREDECESSORS)
? node.getProperty(VersionImpl.PROPNAME_PREDECESSORS).getValues()
: null;
@@ -218,11 +217,15 @@
// (is done before)
vh.save();
return v;
-
} catch (RepositoryException e) {
log.error("Aborting checkin. Error while creating version: " + e.toString());
vh.refresh(false);
throw e;
+ } catch (NoPrefixDeclaredException npde) {
+ String msg = "Aborting checkin. Error while creating version: " + npde.toString();
+ log.error(msg, npde);
+ vh.refresh(false);
+ throw new RepositoryException(msg, npde);
}
}
1.3 +29 -16 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/DocViewImportHandler.java
Index: DocViewImportHandler.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/DocViewImportHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DocViewImportHandler.java 27 Aug 2004 09:28:49 -0000 1.2
+++ DocViewImportHandler.java 30 Aug 2004 16:15:18 -0000 1.3
@@ -16,16 +16,16 @@
package org.apache.slide.jcr.core.xml;
import org.apache.log4j.Logger;
+import org.apache.slide.jcr.core.*;
import org.apache.slide.jcr.core.nodetype.NodeTypeRegistry;
-import org.apache.slide.jcr.core.SessionImpl;
-import org.apache.slide.jcr.core.NodeImpl;
-import org.apache.slide.jcr.core.QName;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.jcr.RepositoryException;
+import javax.jcr.StringValue;
+import javax.jcr.Value;
import java.util.Stack;
/**
@@ -54,28 +54,40 @@
*/
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
try {
- String nodeName;
+ QName nodeName;
if (qName == null || "".equals(qName)) {
- nodeName = new QName(namespaceURI, localName).toJCRName(session.getNamespaceResolver());
+ nodeName = new QName(namespaceURI, localName);
} else {
- nodeName = qName;
+ try {
+ nodeName = QName.fromJCRName(qName, session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new SAXException("illegal node name: " + qName, ine);
+ } catch (UnknownPrefixException upe) {
+ throw new SAXException("illegal node name: " + qName, upe);
+ }
}
// @todo how should 'system' properties be handled in document view (e.g. jcr:primaryType,jcr:mixinTypes, jcr:uuid)?
NodeImpl currentParent = (NodeImpl) parents.peek();
- currentParent = (NodeImpl) currentParent.addNode(nodeName, NodeTypeRegistry.NT_UNSTRUCTURED.toJCRName(session.getNamespaceResolver()));
+ currentParent = (NodeImpl) currentParent.addNode(nodeName, NodeTypeRegistry.NT_UNSTRUCTURED);
parents.push(currentParent);
// properties
for (int i = 0; i < atts.getLength(); i++) {
- String propName;
+ QName propName;
if (atts.getQName(i) == null || "".equals(atts.getQName(i))) {
- propName = new QName(atts.getURI(i), atts.getLocalName(i)).toJCRName(session.getNamespaceResolver());
+ propName = new QName(atts.getURI(i), atts.getLocalName(i));
} else {
- propName = atts.getQName(i);
+ try {
+ propName = QName.fromJCRName(atts.getQName(i), session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new SAXException("illegal property name: " + atts.getQName(i), ine);
+ } catch (UnknownPrefixException upe) {
+ throw new SAXException("illegal property name: " + atts.getQName(i), upe);
+ }
}
- String value = atts.getValue(i);
- currentParent.setProperty(propName, value);
+ StringValue val = new StringValue(atts.getValue(i));
+ currentParent.setProperty(propName, new Value[]{val});
}
} catch (RepositoryException re) {
throw new SAXException(re);
@@ -91,9 +103,10 @@
// (need to store as node in order to maintain ordering)
try {
NodeImpl currentParent = (NodeImpl) parents.peek();
- NodeImpl txtNode = (NodeImpl) currentParent.addNode(DocViewSAXEventGenerator.NODENAME_XMLTEXT.toJCRName(session.getNamespaceResolver()));
- txtNode.setProperty(DocViewSAXEventGenerator.PROPNAME_XMLCHARACTERS.toJCRName(session.getNamespaceResolver()),
- new String(ch, start, length));
+ NodeImpl txtNode = (NodeImpl) currentParent.addNode(DocViewSAXEventGenerator.NODENAME_XMLTEXT);
+ StringValue val = new StringValue(new String(ch, start, length));
+ txtNode.setProperty(DocViewSAXEventGenerator.PROPNAME_XMLCHARACTERS,
+ new Value[]{val});
} catch (RepositoryException re) {
throw new SAXException(re);
}
1.2 +44 -15 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/DocViewSAXEventGenerator.java
Index: DocViewSAXEventGenerator.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/DocViewSAXEventGenerator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DocViewSAXEventGenerator.java 24 Aug 2004 09:51:55 -0000 1.1
+++ DocViewSAXEventGenerator.java 30 Aug 2004 16:15:18 -0000 1.2
@@ -129,11 +129,18 @@
// element name
String elemName;
- if (state.getParentUUIDs().size() == 0) {
- // root node needs a name
- elemName = NODENAME_ROOT.toJCRName(nsReg);
- } else {
- elemName = name.toJCRName(nsReg);
+ try {
+ if (state.getParentUUIDs().size() == 0) {
+ // root node needs a name
+ elemName = NODENAME_ROOT.toJCRName(nsReg);
+ } else {
+ elemName = name.toJCRName(nsReg);
+ }
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
}
if (!XMLChar.isValidName(elemName)) {
throw new InvalidSerializedDataException("the node name is not a valid xml element name: " + elemName);
@@ -146,7 +153,15 @@
PropertyState propState = (PropertyState) iter.next();
QName propName = propState.getName();
// attribute name
- String attrName = propState.getName().toJCRName(nsReg);
+ String attrName;
+ try {
+ attrName = propName.toJCRName(nsReg);
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
+ }
if (!XMLChar.isValidName(attrName)) {
throw new InvalidSerializedDataException("the property name is not a valid xml attribute name: " + attrName);
}
@@ -157,7 +172,14 @@
InternalValue val = propState.getValues()[0];
if (type == PropertyType.BINARY) {
if (binaryAsLink) {
- attrValue = hierMgr.getPath(new PropertyId(propState.getParentUUID(), propState.getName())).toJCRPath(nsReg);
+ try {
+ attrValue = hierMgr.getPath(new PropertyId(propState.getParentUUID(), propState.getName())).toJCRPath(nsReg);
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
+ }
} else {
// binary data, base64 encoding required
BLOBFileValue blob = (BLOBFileValue) val.internalValue();
@@ -181,7 +203,7 @@
} else {
attrValue = val.toJCRValue(nsReg).getString();
}
- attrs.addAttribute(propName.getNamespaceURI(), propName.getLocalName(), propName.toJCRName(nsReg), CDATA_TYPE, attrValue);
+ attrs.addAttribute(propName.getNamespaceURI(), propName.getLocalName(), attrName, CDATA_TYPE, attrValue);
}
// start element (node)
contentHandler.startElement(name.getNamespaceURI(), name.getLocalName(), elemName, attrs);
@@ -200,11 +222,18 @@
}
// element name
String elemName;
- if (state.getParentUUIDs().size() == 0) {
- // root node needs a name
- elemName = NODENAME_ROOT.toJCRName(nsReg);
- } else {
- elemName = name.toJCRName(nsReg);
+ try {
+ if (state.getParentUUIDs().size() == 0) {
+ // root node needs a name
+ elemName = NODENAME_ROOT.toJCRName(nsReg);
+ } else {
+ elemName = name.toJCRName(nsReg);
+ }
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
}
// end element (node)
@@ -227,7 +256,7 @@
InternalValue[] values = state.getValues();
if (values != null && values.length > 0) {
if (values.length != 1) {
- throw new InvalidSerializedDataException("unable to serialize multi-valued property in document view: " + state.getName().toJCRName(nsReg));
+ throw new InvalidSerializedDataException("unable to serialize multi-valued property in document view: " + state.getName().getLocalName());
}
if (values[0] != null) {
props.add(state);
1.3 +6 -3 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/ImportHandler.java
Index: ImportHandler.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/ImportHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ImportHandler.java 27 Aug 2004 09:28:49 -0000 1.2
+++ ImportHandler.java 30 Aug 2004 16:15:18 -0000 1.3
@@ -134,8 +134,11 @@
} else {
try {
nsURI = QName.fromJCRName(qName, session.getNamespaceResolver()).getNamespaceURI();
- } catch (RepositoryException re) {
- throw new SAXException("failed to determine namespace of element " + qName, re);
+ } catch (BaseException e) {
+ // should never happen...
+ String msg = "internal error: failed to parse/resolve element name " + qName;
+ log.error(msg, e);
+ throw new SAXException(msg, e);
}
}
systemViewXML = NamespaceRegistryImpl.NS_SV_URI.equals(nsURI);
1.3 +59 -25 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/SysViewImportHandler.java
Index: SysViewImportHandler.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/SysViewImportHandler.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SysViewImportHandler.java 27 Aug 2004 09:28:49 -0000 1.2
+++ SysViewImportHandler.java 30 Aug 2004 16:15:18 -0000 1.3
@@ -19,6 +19,7 @@
import org.apache.slide.jcr.util.Base64;
import org.apache.slide.jcr.util.ValueHelper;
import org.apache.slide.jcr.core.*;
+import org.apache.slide.jcr.core.nodetype.NodeTypeImpl;
import org.xml.sax.ContentHandler;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -78,8 +79,15 @@
nsURI = namespaceURI;
elemName = localName;
} else {
- nsURI = QName.fromJCRName(qName, session.getNamespaceResolver()).getNamespaceURI();
- elemName = QName.fromJCRName(qName, session.getNamespaceResolver()).getLocalName();
+ try {
+ nsURI = QName.fromJCRName(qName, session.getNamespaceResolver()).getNamespaceURI();
+ elemName = QName.fromJCRName(qName, session.getNamespaceResolver()).getLocalName();
+ } catch (BaseException e) {
+ // should never happen...
+ String msg = "internal error: failed to parse/resolve element name " + qName;
+ log.error(msg, e);
+ throw new SAXException(msg, e);
+ }
}
// check namespace
if (!NamespaceRegistryImpl.NS_SV_URI.equals(nsURI)) {
@@ -89,7 +97,7 @@
if (SysViewSAXEventGenerator.NODE_ELEMENT.equals(elemName)) {
// sv:node element
- // node name (sv:name attribute)
+ // node name (value of sv:name attribute)
String name = atts.getValue(SysViewSAXEventGenerator.NS_SV_URI, SysViewSAXEventGenerator.NAME_ATTRIBUTE);
if (name == null) {
// try qualified name
@@ -108,7 +116,13 @@
// push new ImportState instance onto the stack
ImportState state = new ImportState();
state.parent = current.node;
- state.nodeName = QName.fromJCRName(name, session.getNamespaceResolver());
+ try {
+ state.nodeName = QName.fromJCRName(name, session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new SAXException(new InvalidSerializedDataException("illegal node name: " + name, ine));
+ } catch (UnknownPrefixException upe) {
+ throw new SAXException(new InvalidSerializedDataException("illegal node name: " + name, upe));
+ }
stateStack.push(state);
} else if (SysViewSAXEventGenerator.PROPERTY_ELEMENT.equals(elemName)) {
// sv:property element
@@ -116,7 +130,7 @@
// reset temp fields
currentPropValues = new ArrayList();
- // property name (sv:name attribute)
+ // property name (value of sv:name attribute)
String name = atts.getValue(SysViewSAXEventGenerator.NS_SV_URI, SysViewSAXEventGenerator.NAME_ATTRIBUTE);
if (name == null) {
// try qualified name
@@ -125,7 +139,13 @@
if (name == null) {
throw new SAXException(new InvalidSerializedDataException("missing mandatory sv:name attributeof element sv:property"));
}
- currentPropName = QName.fromJCRName(name, session.getNamespaceResolver());
+ try {
+ currentPropName = QName.fromJCRName(name, session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new SAXException(new InvalidSerializedDataException("illegal property name: " + name, ine));
+ } catch (UnknownPrefixException upe) {
+ throw new SAXException(new InvalidSerializedDataException("illegal property name: " + name, upe));
+ }
// property type (sv:type attribute)
String type = atts.getValue(SysViewSAXEventGenerator.NS_SV_URI, SysViewSAXEventGenerator.TYPE_ATTRIBUTE);
if (type == null) {
@@ -168,7 +188,14 @@
if (qName == null || "".equals(qName)) {
elemName = localName;
} else {
- elemName = QName.fromJCRName(qName, session.getNamespaceResolver()).getLocalName();
+ try {
+ elemName = QName.fromJCRName(qName, session.getNamespaceResolver()).getLocalName();
+ } catch (BaseException e) {
+ // should never happen...
+ String msg = "internal error: failed to parse/resolve element name " + qName;
+ log.error(msg, e);
+ throw new SAXException(msg, e);
+ }
}
// check element name
ImportState current = (ImportState) stateStack.peek();
@@ -186,14 +213,26 @@
// check if all system properties (jcr:primaryType, jcr:uuid etc.)
// have been collected and create node as necessary
if (currentPropName.equals(ItemImpl.PROPNAME_PRIMARYTYPE)) {
- current.primaryType = QName.fromJCRName((String) currentPropValues.get(0), session.getNamespaceResolver());
+ try {
+ current.primaryType = QName.fromJCRName((String) currentPropValues.get(0), session.getNamespaceResolver());
+ } catch (IllegalNameException ine) {
+ throw new SAXException(new InvalidSerializedDataException("illegal node type name: " + currentPropValues.get(0), ine));
+ } catch (UnknownPrefixException upe) {
+ throw new SAXException(new InvalidSerializedDataException("illegal node type name: " + currentPropValues.get(0), upe));
+ }
} else if (currentPropName.equals(ItemImpl.PROPNAME_MIXINTYPES)) {
if (current.mixinTypes == null) {
current.mixinTypes = new ArrayList(currentPropValues.size());
}
for (int i = 0; i < currentPropValues.size(); i++) {
- QName mixin = QName.fromJCRName((String) currentPropValues.get(i), session.getNamespaceResolver());
- current.mixinTypes.add(mixin);
+ try {
+ QName mixin = QName.fromJCRName((String) currentPropValues.get(i), session.getNamespaceResolver());
+ current.mixinTypes.add(mixin);
+ } catch (IllegalNameException ine) {
+ throw new SAXException(new InvalidSerializedDataException("illegal mixin type name: " + currentPropValues.get(i), ine));
+ } catch (UnknownPrefixException upe) {
+ throw new SAXException(new InvalidSerializedDataException("illegal mixin type name: " + currentPropValues.get(i), upe));
+ }
}
} else if (currentPropName.equals(ItemImpl.PROPNAME_UUID)) {
current.uuid = (String) currentPropValues.get(0);
@@ -231,14 +270,13 @@
vals[i] = ValueHelper.convert(value, currentPropType);
}
}
- String name = currentPropName.toJCRName(session.getNamespaceResolver());
- if (current.node.hasProperty(name)) {
- PropertyDef def = current.node.getProperty(name).getDefinition();
+ if (current.node.hasProperty(currentPropName)) {
+ PropertyDef def = current.node.getProperty(currentPropName).getDefinition();
if (!def.isProtected()) {
- current.node.setProperty(name, vals);
+ current.node.setProperty(currentPropName, vals);
}
} else {
- current.node.setProperty(name, vals);
+ current.node.setProperty(currentPropName, vals);
}
}
@@ -252,7 +290,6 @@
} else {
throw new SAXException(new InvalidSerializedDataException("invalid element in system view xml document: " + elemName));
}
-
} catch (RepositoryException re) {
throw new SAXException(re);
}
@@ -267,21 +304,18 @@
// move existing node with given uuid to current position?
// create with new uuid? what about reference values refering to given uuid?
}
- String nodeName = state.nodeName.toJCRName(session.getNamespaceResolver());
- String typeName = state.primaryType.toJCRName(session.getNamespaceResolver());
-
- if (state.parent.hasNode(nodeName)) {
- NodeDef def = state.parent.getNode(nodeName).getDefinition();
+ if (state.parent.hasNode(state.nodeName)) {
+ NodeDef def = state.parent.getNode(state.nodeName).getDefinition();
if (def.isProtected() || def.isAutoCreate()) {
// @todo how to handle protected/auto-created child node?
}
}
- state.node = (NodeImpl) state.parent.addNode(nodeName, typeName);
+ state.node = (NodeImpl) state.parent.addNode(state.nodeName, state.primaryType);
if (state.mixinTypes != null) {
for (int i = 0; i < state.mixinTypes.size(); i++) {
- String mixinName = ((QName) state.mixinTypes.get(i)).toJCRName(session.getNamespaceResolver());
- state.node.addMixin(mixinName);
+ NodeTypeImpl mixin = session.getNodeTypeManager().getNodeType((QName) state.mixinTypes.get(i));
+ state.node.addMixin(mixin.getName());
}
}
}
1.3 +31 -8 jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/SysViewSAXEventGenerator.java
Index: SysViewSAXEventGenerator.java
===================================================================
RCS file: /home/cvs/jakarta-slide/proposals/jcrri/src/org/apache/slide/jcr/core/xml/SysViewSAXEventGenerator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SysViewSAXEventGenerator.java 27 Aug 2004 09:28:49 -0000 1.2
+++ SysViewSAXEventGenerator.java 30 Aug 2004 16:15:18 -0000 1.3
@@ -94,11 +94,18 @@
AttributesImpl attrs = new AttributesImpl();
// name attribute
String nodeName;
- if (state.getParentUUIDs().size() == 0) {
- // use dummy name for root node
- nodeName = NODENAME_ROOT.toJCRName(nsReg);
- } else {
- nodeName = name.toJCRName(nsReg);
+ try {
+ if (state.getParentUUIDs().size() == 0) {
+ // use dummy name for root node
+ nodeName = NODENAME_ROOT.toJCRName(nsReg);
+ } else {
+ nodeName = name.toJCRName(nsReg);
+ }
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
}
attrs.addAttribute(NS_SV_URI, NAME_ATTRIBUTE, NS_SV_PREFIX + ":" + NAME_ATTRIBUTE, CDATA_TYPE, nodeName);
// start node element
@@ -135,7 +142,15 @@
*/
protected void entering(PropertyState state, int level)
throws RepositoryException, SAXException {
- String name = state.getName().toJCRName(nsReg);
+ String name;
+ try {
+ name = state.getName().toJCRName(nsReg);
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
+ }
AttributesImpl attrs = new AttributesImpl();
// name attribute
attrs.addAttribute(NS_SV_URI, NAME_ATTRIBUTE, NS_SV_PREFIX + ":" + NAME_ATTRIBUTE, CDATA_TYPE, name);
@@ -167,7 +182,15 @@
// characters
if (type == PropertyType.BINARY) {
if (binaryAsLink) {
- String path = hierMgr.getPath(new PropertyId(state.getParentUUID(), state.getName())).toJCRPath(nsReg);
+ String path;
+ try {
+ path = hierMgr.getPath(new PropertyId(state.getParentUUID(), state.getName())).toJCRPath(nsReg);
+ } catch (NoPrefixDeclaredException npde) {
+ // should never get here...
+ String msg = "internal error: encountered unregistered namespace";
+ log.error(msg, npde);
+ throw new RepositoryException(msg, npde);
+ }
char[] chars = path.toCharArray();
contentHandler.characters(chars, 0, chars.length);
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org