You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2005/04/29 18:32:33 UTC
svn commit: r165316 - in
/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core:
SessionImpl.java lock/LockManagerImpl.java
state/obj/ObjectPersistenceManager.java xml/AbstractSAXEventGenerator.java
xml/DocViewSAXEventGenerator.java xml/SysViewSAXEventGenerator.java
Author: stefan
Date: Fri Apr 29 09:32:30 2005
New Revision: 165316
URL: http://svn.apache.org/viewcvs?rev=165316&view=rev
Log:
- improved reusability of sax event generators
- some javadoc corrections
Modified:
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/obj/ObjectPersistenceManager.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java
incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java?rev=165316&r1=165315&r2=165316&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/SessionImpl.java Fri Apr 29 09:32:30 2005
@@ -16,45 +16,6 @@
*/
package org.apache.jackrabbit.core;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
-import java.security.AccessControlException;
-import java.security.Principal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import javax.jcr.AccessDeniedException;
-import javax.jcr.Credentials;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.InvalidSerializedDataException;
-import javax.jcr.Item;
-import javax.jcr.ItemExistsException;
-import javax.jcr.ItemNotFoundException;
-import javax.jcr.LoginException;
-import javax.jcr.NamespaceException;
-import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Repository;
-import javax.jcr.RepositoryException;
-import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
-import javax.jcr.Workspace;
-import javax.jcr.ValueFactory;
-import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.version.VersionException;
-import javax.security.auth.Subject;
-
import org.apache.commons.collections.ReferenceMap;
import org.apache.jackrabbit.core.config.AccessManagerConfig;
import org.apache.jackrabbit.core.config.WorkspaceConfig;
@@ -69,12 +30,12 @@
import org.apache.jackrabbit.core.state.NodeState;
import org.apache.jackrabbit.core.state.SessionItemStateManager;
import org.apache.jackrabbit.core.state.UpdatableItemStateManager;
+import org.apache.jackrabbit.core.value.ValueFactoryImpl;
import org.apache.jackrabbit.core.version.VersionManager;
import org.apache.jackrabbit.core.xml.DocViewSAXEventGenerator;
import org.apache.jackrabbit.core.xml.ImportHandler;
import org.apache.jackrabbit.core.xml.SessionImporter;
import org.apache.jackrabbit.core.xml.SysViewSAXEventGenerator;
-import org.apache.jackrabbit.core.value.ValueFactoryImpl;
import org.apache.log4j.Logger;
import org.apache.xml.serialize.OutputFormat;
import org.apache.xml.serialize.XMLSerializer;
@@ -84,6 +45,44 @@
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
+import javax.jcr.AccessDeniedException;
+import javax.jcr.Credentials;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.InvalidSerializedDataException;
+import javax.jcr.Item;
+import javax.jcr.ItemExistsException;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.LoginException;
+import javax.jcr.NamespaceException;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.ValueFactory;
+import javax.jcr.Workspace;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.version.VersionException;
+import javax.security.auth.Subject;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.security.AccessControlException;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
/**
* A <code>SessionImpl</code> ...
*/
@@ -126,7 +125,7 @@
protected final String userId;
/**
- * the attibutes of this session
+ * the attributes of this session
*/
protected final HashMap attributes = new HashMap();
@@ -1033,8 +1032,8 @@
// there's a property, though not a node at the specified path
throw new PathNotFoundException(absPath);
}
- new DocViewSAXEventGenerator((NodeImpl) item, noRecurse, skipBinary,
- this, contentHandler).serialize();
+ new DocViewSAXEventGenerator((Node) item, noRecurse, skipBinary,
+ contentHandler).serialize();
}
/**
@@ -1068,8 +1067,8 @@
// there's a property, though not a node at the specified path
throw new PathNotFoundException(absPath);
}
- new SysViewSAXEventGenerator((NodeImpl) item, noRecurse, skipBinary,
- this, contentHandler).serialize();
+ new SysViewSAXEventGenerator((Node) item, noRecurse, skipBinary,
+ contentHandler).serialize();
}
/**
@@ -1150,7 +1149,7 @@
/**
* {@inheritDoc}
*/
- public ValueFactory getValueFactory()
+ public ValueFactory getValueFactory()
throws UnsupportedRepositoryOperationException, RepositoryException {
if (valueFactory == null) {
valueFactory = new ValueFactoryImpl();
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java?rev=165316&r1=165315&r2=165316&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/lock/LockManagerImpl.java Fri Apr 29 09:32:30 2005
@@ -98,7 +98,7 @@
this.nsResolver = session.getNamespaceResolver();
this.locksFile = locksFile;
- ((WorkspaceImpl) session.getWorkspace()).getObservationManager().
+ session.getWorkspace().getObservationManager().
addEventListener(this, Event.NODE_ADDED | Event.NODE_REMOVED,
"/", true, null, null, true);
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/obj/ObjectPersistenceManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/obj/ObjectPersistenceManager.java?rev=165316&r1=165315&r2=165316&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/obj/ObjectPersistenceManager.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/state/obj/ObjectPersistenceManager.java Fri Apr 29 09:32:30 2005
@@ -425,16 +425,17 @@
//------------------------------------------------------------< BLOBStore >
/**
- * @see BLOBStore#get
+ * {@inheritDoc}
*/
public FileSystemResource get(String blobId) throws Exception {
return new FileSystemResource(blobFS, blobId);
}
/**
- * @see BLOBStore#put
+ * {@inheritDoc}
*/
- public String put(PropertyId id, int index, InputStream in, long size) throws Exception {
+ public String put(PropertyId id, int index, InputStream in, long size)
+ throws Exception {
String path = buildBlobFilePath(id.getParentUUID(), id.getName(), index);
OutputStream out = null;
FileSystemResource internalBlobFile = new FileSystemResource(blobFS, path);
@@ -453,7 +454,7 @@
}
/**
- * @see BLOBStore#remove
+ * {@inheritDoc}
*/
public boolean remove(String blobId) throws Exception {
FileSystemResource res = new FileSystemResource(blobFS, blobId);
@@ -467,7 +468,7 @@
//---------------------------------------------------< PersistenceManager >
/**
- * @see PersistenceManager#init
+ * {@inheritDoc}
*/
public void init(PMContext context) throws Exception {
if (initialized) {
@@ -490,7 +491,7 @@
}
/**
- * @see PersistenceManager#close
+ * {@inheritDoc}
*/
public synchronized void close() throws Exception {
if (!initialized) {
@@ -512,7 +513,7 @@
}
/**
- * @see PersistenceManager#load
+ * {@inheritDoc}
*/
public synchronized NodeState load(NodeId id)
throws NoSuchItemStateException, ItemStateException {
@@ -554,7 +555,7 @@
}
/**
- * @see PersistenceManager#load
+ * {@inheritDoc}
*/
public synchronized PropertyState load(PropertyId id)
throws NoSuchItemStateException, ItemStateException {
@@ -592,7 +593,7 @@
}
/**
- * @see PersistenceManager#load
+ * {@inheritDoc}
*/
public synchronized NodeReferences load(NodeReferencesId id)
throws NoSuchItemStateException, ItemStateException {
@@ -631,7 +632,7 @@
}
/**
- * @see AbstractPersistenceManager#store
+ * {@inheritDoc}
*/
protected void store(NodeState state) throws ItemStateException {
if (!initialized) {
@@ -659,7 +660,7 @@
}
/**
- * @see AbstractPersistenceManager#store
+ * {@inheritDoc}
*/
protected void store(PropertyState state) throws ItemStateException {
if (!initialized) {
@@ -686,7 +687,7 @@
}
/**
- * @see AbstractPersistenceManager#store
+ * {@inheritDoc}
*/
protected void store(NodeReferences refs) throws ItemStateException {
if (!initialized) {
@@ -712,7 +713,7 @@
}
/**
- * @see AbstractPersistenceManager#destroy
+ * {@inheritDoc}
*/
protected void destroy(NodeState state) throws ItemStateException {
if (!initialized) {
@@ -735,7 +736,7 @@
}
/**
- * @see AbstractPersistenceManager#destroy
+ * {@inheritDoc}
*/
protected void destroy(PropertyState state) throws ItemStateException {
if (!initialized) {
@@ -772,7 +773,7 @@
}
/**
- * @see AbstractPersistenceManager#destroy
+ * {@inheritDoc}
*/
protected void destroy(NodeReferences refs) throws ItemStateException {
if (!initialized) {
@@ -795,7 +796,7 @@
}
/**
- * @see PersistenceManager#exists(PropertyId id)
+ * {@inheritDoc}
*/
public synchronized boolean exists(PropertyId id) throws ItemStateException {
if (!initialized) {
@@ -814,7 +815,7 @@
}
/**
- * @see PersistenceManager#exists(NodeId)
+ * {@inheritDoc}
*/
public synchronized boolean exists(NodeId id) throws ItemStateException {
if (!initialized) {
@@ -833,7 +834,7 @@
}
/**
- * @see PersistenceManager#exists(NodeReferencesId)
+ * {@inheritDoc}
*/
public synchronized boolean exists(NodeReferencesId id)
throws ItemStateException {
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java?rev=165316&r1=165315&r2=165316&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java Fri Apr 29 09:32:30 2005
@@ -16,18 +16,20 @@
*/
package org.apache.jackrabbit.core.xml;
+import org.apache.jackrabbit.core.BaseException;
import org.apache.jackrabbit.core.Constants;
-import org.apache.jackrabbit.core.NodeImpl;
-import org.apache.jackrabbit.core.PropertyImpl;
-import org.apache.jackrabbit.core.QName;
-import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.NamespaceResolver;
import org.apache.log4j.Logger;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
+import javax.jcr.NamespaceException;
+import javax.jcr.Node;
import javax.jcr.NodeIterator;
+import javax.jcr.Property;
import javax.jcr.PropertyIterator;
import javax.jcr.RepositoryException;
+import javax.jcr.Session;
/**
* <code>AbstractSAXEventGenerator</code> serves as the base class for
@@ -36,12 +38,12 @@
* It traverses a tree of <code>Node</code> & <code>Property</code>
* instances, and calls the abstract methods
* <ul>
- * <li><code>{@link #entering(NodeImpl, int)}</code></li>
- * <li><code>{@link #enteringProperties(NodeImpl, int)}</code></li>
- * <li><code>{@link #leavingProperties(NodeImpl, int)}</code></li>
- * <li><code>{@link #leaving(NodeImpl, int)}</code></li>
- * <li><code>{@link #entering(PropertyImpl, int)}</code></li>
- * <li><code>{@link #leaving(PropertyImpl, int)}</code></li>
+ * <li><code>{@link #entering(Node, int)}</code></li>
+ * <li><code>{@link #enteringProperties(Node, int)}</code></li>
+ * <li><code>{@link #leavingProperties(Node, int)}</code></li>
+ * <li><code>{@link #leaving(Node, int)}</code></li>
+ * <li><code>{@link #entering(Property, int)}</code></li>
+ * <li><code>{@link #leaving(Property, int)}</code></li>
* </ul>
* for every item it encounters.
*/
@@ -49,13 +51,50 @@
private static Logger log = Logger.getLogger(AbstractSAXEventGenerator.class);
- protected final SessionImpl session;
+ /**
+ * the session to be used for resolving namespace mappings
+ */
+ protected final Session session;
+ /**
+ * the session's namespace resolver
+ */
+ protected final NamespaceResolver nsResolver;
+
+ /**
+ * the content handler to feed the SAX events to
+ */
protected final ContentHandler contentHandler;
- protected final NodeImpl startNode;
+
+ protected final Node startNode;
protected final boolean skipBinary;
protected final boolean noRecurse;
/**
+ * The jcr:primaryType property name (allowed for session-local prefix mappings)
+ */
+ protected final String jcrPrimaryType;
+ /**
+ * The jcr:mixinTypes property name (allowed for session-local prefix mappings)
+ */
+ protected final String jcrMixinTypes;
+ /**
+ * The jcr:uuid property name (allowed for session-local prefix mappings)
+ */
+ protected final String jcrUUID;
+ /**
+ * The jcr:root node name (allowed for session-local prefix mappings)
+ */
+ protected final String jcrRoot;
+ /**
+ * The jcr:xmltext node name (allowed for session-local prefix mappings)
+ */
+ protected final String jcrXMLText;
+ /**
+ * The jcr:xmlCharacters property name (allowed for session-local prefix mappings)
+ */
+ protected final String jcrXMLCharacters;
+
+ /**
* Constructor
*
* @param node the node state which should be serialized
@@ -63,18 +102,36 @@
* be serialized; otherwise the entire hierarchy starting with
* <code>node</code> will be serialized.
* @param skipBinary flag governing whether binary properties are to be serialized.
- * @param session the session to be used for resolving namespace mappings
* @param contentHandler the content handler to feed the SAX events to
+ * @throws RepositoryException if an error occurs
*/
- protected AbstractSAXEventGenerator(NodeImpl node, boolean noRecurse,
+ protected AbstractSAXEventGenerator(Node node, boolean noRecurse,
boolean skipBinary,
- SessionImpl session,
- ContentHandler contentHandler) {
- this.session = session;
+ ContentHandler contentHandler)
+ throws RepositoryException {
startNode = node;
+ session = node.getSession();
+ nsResolver = new SessionNamespaceResolver();
+
this.contentHandler = contentHandler;
this.skipBinary = skipBinary;
this.noRecurse = noRecurse;
+
+ // resolve the names of some wellknown properties
+ // allowing for session-local prefix mappings
+ try {
+ jcrPrimaryType = JCR_PRIMARYTYPE.toJCRName(nsResolver);
+ jcrMixinTypes = JCR_MIXINTYPES.toJCRName(nsResolver);
+ jcrUUID = JCR_UUID.toJCRName(nsResolver);
+ jcrRoot = JCR_ROOT.toJCRName(nsResolver);
+ jcrXMLText = JCR_XMLTEXT.toJCRName(nsResolver);
+ jcrXMLCharacters = JCR_XMLCHARACTERS.toJCRName(nsResolver);
+ } catch (BaseException e) {
+ // should never get here...
+ String msg = "internal error: failed to resolve namespace mappings";
+ log.error(msg, e);
+ throw new RepositoryException(msg, e);
+ }
}
/**
@@ -140,7 +197,7 @@
* @throws RepositoryException
* @throws SAXException
*/
- protected void process(NodeImpl node, int level)
+ protected void process(Node node, int level)
throws RepositoryException, SAXException {
// enter node
entering(node, level);
@@ -150,30 +207,31 @@
// serialize jcr:primaryType, jcr:mixinTypes & jcr:uuid first:
// jcr:primaryType
- if (node.hasProperty(JCR_PRIMARYTYPE)) {
- process(node.getProperty(JCR_PRIMARYTYPE), level + 1);
+ if (node.hasProperty(jcrPrimaryType)) {
+ process(node.getProperty(jcrPrimaryType), level + 1);
} else {
- String msg = "internal error: missing jcr:primaryType property on node " + node.safeGetJCRPath();
+ String msg = "internal error: missing jcr:primaryType property on node "
+ + node.getPath();
log.debug(msg);
throw new RepositoryException(msg);
}
// jcr:mixinTypes
- if (node.hasProperty(JCR_MIXINTYPES)) {
- process(node.getProperty(JCR_MIXINTYPES), level + 1);
+ if (node.hasProperty(jcrMixinTypes)) {
+ process(node.getProperty(jcrMixinTypes), level + 1);
}
// jcr:uuid
- if (node.hasProperty(JCR_UUID)) {
- process(node.getProperty(JCR_UUID), level + 1);
+ if (node.hasProperty(jcrUUID)) {
+ process(node.getProperty(jcrUUID), level + 1);
}
// serialize remaining properties
PropertyIterator propIter = node.getProperties();
while (propIter.hasNext()) {
- PropertyImpl prop = (PropertyImpl) propIter.nextProperty();
- QName name = prop.getQName();
- if (JCR_PRIMARYTYPE.equals(name)
- || JCR_MIXINTYPES.equals(name)
- || JCR_UUID.equals(name)) {
+ Property prop = propIter.nextProperty();
+ String name = prop.getName();
+ if (jcrPrimaryType.equals(name)
+ || jcrMixinTypes.equals(name)
+ || jcrUUID.equals(name)) {
continue;
}
// serialize property
@@ -187,7 +245,7 @@
// child nodes
NodeIterator nodeIter = node.getNodes();
while (nodeIter.hasNext()) {
- NodeImpl childNode = (NodeImpl) nodeIter.nextNode();
+ Node childNode = nodeIter.nextNode();
// recurse
process(childNode, level + 1);
}
@@ -203,7 +261,7 @@
* @throws RepositoryException
* @throws SAXException
*/
- protected void process(PropertyImpl prop, int level)
+ protected void process(Property prop, int level)
throws RepositoryException, SAXException {
// serialize property
entering(prop, level);
@@ -216,7 +274,7 @@
* @throws RepositoryException
* @throws SAXException
*/
- protected abstract void entering(NodeImpl node, int level)
+ protected abstract void entering(Node node, int level)
throws RepositoryException, SAXException;
/**
@@ -225,7 +283,7 @@
* @throws RepositoryException
* @throws SAXException
*/
- protected abstract void enteringProperties(NodeImpl node, int level)
+ protected abstract void enteringProperties(Node node, int level)
throws RepositoryException, SAXException;
/**
@@ -234,7 +292,7 @@
* @throws RepositoryException
* @throws SAXException
*/
- protected abstract void leavingProperties(NodeImpl node, int level)
+ protected abstract void leavingProperties(Node node, int level)
throws RepositoryException, SAXException;
/**
@@ -243,7 +301,7 @@
* @throws RepositoryException
* @throws SAXException
*/
- protected abstract void leaving(NodeImpl node, int level)
+ protected abstract void leaving(Node node, int level)
throws RepositoryException, SAXException;
/**
@@ -252,7 +310,7 @@
* @throws RepositoryException
* @throws SAXException
*/
- protected abstract void entering(PropertyImpl prop, int level)
+ protected abstract void entering(Property prop, int level)
throws RepositoryException, SAXException;
/**
@@ -261,6 +319,42 @@
* @throws RepositoryException
* @throws SAXException
*/
- protected abstract void leaving(PropertyImpl prop, int level)
+ protected abstract void leaving(Property prop, int level)
throws RepositoryException, SAXException;
+
+ //--------------------------------------------------------< inner classes >
+ /**
+ * internal helper class that exposes the <code>NamespaceResolver</code>
+ * interface on a <code>Session</code>
+ */
+ private class SessionNamespaceResolver implements NamespaceResolver {
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getPrefix(String uri) throws NamespaceException {
+ try {
+ return session.getNamespacePrefix(uri);
+ } catch (RepositoryException re) {
+ // should never get here...
+ String msg = "internal error: failed to resolve namespace uri";
+ log.error(msg, re);
+ throw new NamespaceException(msg, re);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getURI(String prefix) throws NamespaceException {
+ try {
+ return session.getNamespaceURI(prefix);
+ } catch (RepositoryException re) {
+ // should never get here...
+ String msg = "internal error: failed to resolve namespace prefix";
+ log.error(msg, re);
+ throw new NamespaceException(msg, re);
+ }
+ }
+ }
}
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java?rev=165316&r1=165315&r2=165316&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java Fri Apr 29 09:32:30 2005
@@ -16,18 +16,17 @@
*/
package org.apache.jackrabbit.core.xml;
-import org.apache.jackrabbit.core.NoPrefixDeclaredException;
-import org.apache.jackrabbit.core.NodeImpl;
-import org.apache.jackrabbit.core.PropertyImpl;
-import org.apache.jackrabbit.core.QName;
-import org.apache.jackrabbit.core.SessionImpl;
import org.apache.jackrabbit.core.util.ISO9075;
import org.apache.jackrabbit.core.value.ValueHelper;
+import org.apache.jackrabbit.core.QName;
+import org.apache.jackrabbit.core.BaseException;
import org.apache.log4j.Logger;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
+import javax.jcr.Node;
+import javax.jcr.Property;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
@@ -57,23 +56,33 @@
* starting with <code>node</code> will be serialized.
* @param skipBinary flag governing whether binary properties are to be
* serialized.
- * @param session the session to be used for resolving namespace
- * mappings
* @param contentHandler the content handler to feed the SAX events to
+ * @throws RepositoryException if an error occurs
*/
- public DocViewSAXEventGenerator(NodeImpl node, boolean noRecurse,
+ public DocViewSAXEventGenerator(Node node, boolean noRecurse,
boolean skipBinary,
- SessionImpl session,
- ContentHandler contentHandler) {
- super(node, noRecurse, skipBinary, session, contentHandler);
+ ContentHandler contentHandler)
+ throws RepositoryException {
+ super(node, noRecurse, skipBinary, contentHandler);
props = new ArrayList();
}
+ private QName getQName(String rawName) throws RepositoryException {
+ try {
+ return QName.fromJCRName(rawName, nsResolver);
+ } catch (BaseException e) {
+ // should never get here...
+ String msg = "internal error: failed to resolve namespace mappings";
+ log.error(msg, e);
+ throw new RepositoryException(msg, e);
+ }
+ }
+
/**
* {@inheritDoc}
*/
- protected void entering(NodeImpl node, int level)
+ protected void entering(Node node, int level)
throws RepositoryException, SAXException {
// nop
}
@@ -81,7 +90,7 @@
/**
* {@inheritDoc}
*/
- protected void enteringProperties(NodeImpl node, int level)
+ protected void enteringProperties(Node node, int level)
throws RepositoryException, SAXException {
// reset list of properties
props.clear();
@@ -90,16 +99,16 @@
/**
* {@inheritDoc}
*/
- protected void leavingProperties(NodeImpl node, int level)
+ protected void leavingProperties(Node node, int level)
throws RepositoryException, SAXException {
- QName name = node.getQName();
- if (name.equals(JCR_XMLTEXT)) {
+ String name = node.getName();
+ if (name.equals(jcrXMLText)) {
// the node represents xml character data
Iterator iter = props.iterator();
while (iter.hasNext()) {
- PropertyImpl prop = (PropertyImpl) iter.next();
- QName propName = prop.getQName();
- if (propName.equals(JCR_XMLCHARACTERS)) {
+ Property prop = (Property) iter.next();
+ String propName = prop.getName();
+ if (propName.equals(jcrXMLCharacters)) {
// assume jcr:xmlcharacters is single-valued
char[] chars = prop.getValue().getString().toCharArray();
contentHandler.characters(chars, 0, chars.length);
@@ -108,48 +117,31 @@
} else {
// regular node
- // encode node name to make sure it's a valid xml name
- name = ISO9075.encode(name);
// element name
String elemName;
- try {
- if (node.getDepth() == 0) {
- // root node needs a name
- elemName = JCR_ROOT.toJCRName(session.getNamespaceResolver());
- } else {
- elemName = name.toJCRName(session.getNamespaceResolver());
- }
- } catch (NoPrefixDeclaredException npde) {
- // should never get here...
- String msg = "internal error: encountered unregistered namespace";
- log.debug(msg);
- throw new RepositoryException(msg, npde);
+ if (node.getDepth() == 0) {
+ // root node needs a name
+ elemName = jcrRoot;
+ } else {
+ // encode node name to make sure it's a valid xml name
+ elemName = ISO9075.encode(name);
}
// attributes (properties)
AttributesImpl attrs = new AttributesImpl();
Iterator iter = props.iterator();
while (iter.hasNext()) {
- PropertyImpl prop = (PropertyImpl) iter.next();
- QName propName = prop.getQName();
- // encode property name to make sure it's a valid xml name
- propName = ISO9075.encode(propName);
- // attribute name
- String attrName;
- try {
- attrName = propName.toJCRName(session.getNamespaceResolver());
- } catch (NoPrefixDeclaredException npde) {
- // should never get here...
- String msg =
- "internal error: encountered unregistered namespace";
- log.debug(msg);
- throw new RepositoryException(msg, npde);
- }
+ Property prop = (Property) iter.next();
+ String propName = prop.getName();
+ // attribute name (encode property name to make sure it's a valid xml name)
+ String attrName = ISO9075.encode(propName);
+ QName qName = getQName(attrName);
+
// attribute value
if (prop.getType() == PropertyType.BINARY && skipBinary) {
// add empty attribute
- attrs.addAttribute(propName.getNamespaceURI(),
- propName.getLocalName(), attrName, CDATA_TYPE, "");
+ attrs.addAttribute(qName.getNamespaceURI(),
+ qName.getLocalName(), attrName, CDATA_TYPE, "");
} else {
StringBuffer attrValue = new StringBuffer();
// process property value(s)
@@ -167,53 +159,51 @@
}
attrValue.append(ValueHelper.serialize(vals[i], true));
}
- attrs.addAttribute(propName.getNamespaceURI(),
- propName.getLocalName(), attrName, CDATA_TYPE,
+ attrs.addAttribute(qName.getNamespaceURI(),
+ qName.getLocalName(), attrName, CDATA_TYPE,
attrValue.toString());
}
}
// start element (node)
- contentHandler.startElement(name.getNamespaceURI(),
- name.getLocalName(), elemName, attrs);
+ QName qName = getQName(elemName);
+ contentHandler.startElement(qName.getNamespaceURI(),
+ qName.getLocalName(), elemName, attrs);
}
}
/**
* {@inheritDoc}
*/
- protected void leaving(NodeImpl node, int level)
+ protected void leaving(Node node, int level)
throws RepositoryException, SAXException {
- QName name = node.getQName();
- if (name.equals(JCR_XMLTEXT)) {
+ String name = node.getName();
+ if (name.equals(jcrXMLText)) {
// the node represents xml character data
// (already processed in leavingProperties(NodeImpl, int)
return;
}
+ // encode node name to make sure it's a valid xml name
+ name = ISO9075.encode(name);
// element name
String elemName;
- try {
- if (node.getDepth() == 0) {
- // root node needs a name
- elemName = JCR_ROOT.toJCRName(session.getNamespaceResolver());
- } else {
- elemName = name.toJCRName(session.getNamespaceResolver());
- }
- } catch (NoPrefixDeclaredException npde) {
- // should never get here...
- String msg = "internal error: encountered unregistered namespace";
- log.debug(msg);
- throw new RepositoryException(msg, npde);
+ if (node.getDepth() == 0) {
+ // root node needs a name
+ elemName = jcrRoot;
+ } else {
+ // encode node name to make sure it's a valid xml name
+ elemName = ISO9075.encode(name);
}
// end element (node)
- contentHandler.endElement(name.getNamespaceURI(), name.getLocalName(),
+ QName qName = getQName(elemName);
+ contentHandler.endElement(qName.getNamespaceURI(), qName.getLocalName(),
elemName);
}
/**
* {@inheritDoc}
*/
- protected void entering(PropertyImpl prop, int level)
+ protected void entering(Property prop, int level)
throws RepositoryException, SAXException {
props.add(prop);
}
@@ -221,7 +211,7 @@
/**
* {@inheritDoc}
*/
- protected void leaving(PropertyImpl prop, int level)
+ protected void leaving(Property prop, int level)
throws RepositoryException, SAXException {
// nop
}
Modified: incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java?rev=165316&r1=165315&r2=165316&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java (original)
+++ incubator/jackrabbit/trunk/src/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java Fri Apr 29 09:32:30 2005
@@ -16,17 +16,13 @@
*/
package org.apache.jackrabbit.core.xml;
-import org.apache.jackrabbit.core.NoPrefixDeclaredException;
-import org.apache.jackrabbit.core.NodeImpl;
-import org.apache.jackrabbit.core.PropertyImpl;
-import org.apache.jackrabbit.core.QName;
-import org.apache.jackrabbit.core.SessionImpl;
import org.apache.jackrabbit.core.value.ValueHelper;
-import org.apache.log4j.Logger;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
+import javax.jcr.Node;
+import javax.jcr.Property;
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
@@ -39,8 +35,6 @@
*/
public class SysViewSAXEventGenerator extends AbstractSAXEventGenerator {
- private static Logger log = Logger.getLogger(SysViewSAXEventGenerator.class);
-
/**
* The XML elements and attributes used in serialization
*/
@@ -75,38 +69,30 @@
* be serialized; otherwise the entire hierarchy starting with
* <code>node</code> will be serialized.
* @param skipBinary flag governing whether binary properties are to be serialized.
- * @param session the session to be used for resolving namespace mappings
* @param contentHandler the content handler to feed the SAX events to
+ * @throws RepositoryException if an error occurs
*/
- public SysViewSAXEventGenerator(NodeImpl node, boolean noRecurse,
+ public SysViewSAXEventGenerator(Node node, boolean noRecurse,
boolean skipBinary,
- SessionImpl session,
- ContentHandler contentHandler) {
- super(node, noRecurse, skipBinary, session, contentHandler);
+ ContentHandler contentHandler)
+ throws RepositoryException {
+ super(node, noRecurse, skipBinary, contentHandler);
}
/**
* {@inheritDoc}
*/
- protected void entering(NodeImpl node, int level)
+ protected void entering(Node node, int level)
throws RepositoryException, SAXException {
- QName name = node.getQName();
-
AttributesImpl attrs = new AttributesImpl();
// name attribute
String nodeName;
- try {
- if (node.getDepth() == 0) {
- // root node needs a name
- nodeName = JCR_ROOT.toJCRName(session.getNamespaceResolver());
- } else {
- nodeName = name.toJCRName(session.getNamespaceResolver());
- }
- } catch (NoPrefixDeclaredException npde) {
- // should never get here...
- String msg = "internal error: encountered unregistered namespace";
- log.debug(msg);
- throw new RepositoryException(msg, npde);
+ if (node.getDepth() == 0) {
+ // root node needs a name
+ nodeName = jcrRoot;
+ } else {
+ // encode node name to make sure it's a valid xml name
+ nodeName = node.getName();
}
attrs.addAttribute(NS_SV_URI, NAME_ATTRIBUTE, PREFIXED_NAME_ATTRIBUTE,
@@ -119,7 +105,7 @@
/**
* {@inheritDoc}
*/
- protected void enteringProperties(NodeImpl node, int level)
+ protected void enteringProperties(Node node, int level)
throws RepositoryException, SAXException {
// nop
}
@@ -127,7 +113,7 @@
/**
* {@inheritDoc}
*/
- protected void leavingProperties(NodeImpl node, int level)
+ protected void leavingProperties(Node node, int level)
throws RepositoryException, SAXException {
// nop
}
@@ -135,7 +121,7 @@
/**
* {@inheritDoc}
*/
- protected void leaving(NodeImpl node, int level)
+ protected void leaving(Node node, int level)
throws RepositoryException, SAXException {
// end node element
contentHandler.endElement(NS_SV_URI, NODE_ELEMENT, PREFIXED_NODE_ELEMENT);
@@ -144,18 +130,9 @@
/**
* {@inheritDoc}
*/
- protected void entering(PropertyImpl prop, int level)
+ protected void entering(Property prop, int level)
throws RepositoryException, SAXException {
- QName name = prop.getQName();
- String propName;
- try {
- propName = name.toJCRName(session.getNamespaceResolver());
- } catch (NoPrefixDeclaredException npde) {
- // should never get here...
- String msg = "internal error: encountered unregistered namespace";
- log.debug(msg);
- throw new RepositoryException(msg, npde);
- }
+ String propName = prop.getName();
AttributesImpl attrs = new AttributesImpl();
// name attribute
attrs.addAttribute(NS_SV_URI, NAME_ATTRIBUTE, PREFIXED_NAME_ATTRIBUTE,
@@ -167,7 +144,8 @@
typeName = PropertyType.nameFromValue(type);
} catch (IllegalArgumentException iae) {
// should never be getting here
- throw new RepositoryException("unexpected property-type ordinal: " + type, iae);
+ throw new RepositoryException("unexpected property-type ordinal: "
+ + type, iae);
}
attrs.addAttribute(NS_SV_URI, TYPE_ATTRIBUTE, PREFIXED_TYPE_ATTRIBUTE,
ENUMERATION_TYPE, typeName);
@@ -239,7 +217,7 @@
/**
* {@inheritDoc}
*/
- protected void leaving(PropertyImpl prop, int level)
+ protected void leaving(Property prop, int level)
throws RepositoryException, SAXException {
contentHandler.endElement(NS_SV_URI, PROPERTY_ELEMENT,
PREFIXED_PROPERTY_ELEMENT);