You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2009/08/26 15:34:02 UTC
svn commit: r808006 - in /jackrabbit/trunk:
jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/
jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/
jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons...
Author: mduerig
Date: Wed Aug 26 13:34:01 2009
New Revision: 808006
URL: http://svn.apache.org/viewvc?rev=808006&view=rev
Log:
JCR-2279: Improve reusability of AbstractRepositoryService and AbstractReadableRepositoryService
Modified:
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeStorageImpl.java
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java?rev=808006&r1=808005&r2=808006&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/NodeEntryImpl.java Wed Aug 26 13:34:01 2009
@@ -309,7 +309,7 @@
private NodeId getId(boolean wspId) throws RepositoryException {
if (parent == null) { // shortcut for root
- return getIdFactory().createNodeId((String) null, getPathFactory().getRootPath()); // fixme: cache root
+ return getIdFactory().createNodeId((String) null, getPathFactory().getRootPath());
}
else if (uniqueID != null) { // shortcut for uniqueID based IDs
return getIdFactory().createNodeId(uniqueID);
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java?rev=808006&r1=808005&r2=808006&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/AbstractJCR2SPITest.java Wed Aug 26 13:34:01 2009
@@ -103,7 +103,6 @@
return AbstractJCR2SPITest.this.createRootNodeDefinition();
}
- @Override
public Iterator<? extends ItemInfo> getItemInfos(SessionInfo sessionInfo, NodeId nodeId)
throws ItemNotFoundException, RepositoryException {
@@ -116,6 +115,7 @@
return AbstractJCR2SPITest.this.getChildInfos(sessionInfo, parentId);
}
+ @Override
public NodeInfo getNodeInfo(SessionInfo sessionInfo, NodeId nodeId) throws ItemNotFoundException,
RepositoryException {
@@ -156,12 +156,7 @@
Map<String, QValue[]> descriptorKeys = new HashMap<String, QValue[]>();
QValueFactory qvf = QValueFactoryImpl.getInstance();
- QValue[] vFalse = new QValue[] {qvf.create(false)};
- descriptorKeys.put(Repository.OPTION_LOCKING_SUPPORTED, vFalse);
- descriptorKeys.put(Repository.OPTION_OBSERVATION_SUPPORTED, vFalse);
- descriptorKeys.put(Repository.OPTION_TRANSACTIONS_SUPPORTED, vFalse);
- descriptorKeys.put(Repository.OPTION_VERSIONING_SUPPORTED, vFalse);
descriptorKeys.put(Repository.REP_NAME_DESC, new QValue[] {qvf.create("Mock Repository", PropertyType.STRING)});
descriptorKeys.put(Repository.REP_VENDOR_DESC, new QValue[] {qvf.create("Apache Software Foundation", PropertyType.STRING)});
descriptorKeys.put(Repository.REP_VENDOR_URL_DESC, new QValue[] {qvf.create("http://www.apache.org/", PropertyType.STRING)});
@@ -437,7 +432,7 @@
repositoryService.removeActivity(sessionInfo, activityId);
}
- public Iterator mergeActivity(SessionInfo sessionInfo, NodeId activityId)
+ public Iterator<NodeId> mergeActivity(SessionInfo sessionInfo, NodeId activityId)
throws RepositoryException {
return repositoryService.mergeActivity(sessionInfo, activityId);
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java?rev=808006&r1=808005&r2=808006&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractReadableRepositoryService.java Wed Aug 26 13:34:01 2009
@@ -16,60 +16,26 @@
*/
package org.apache.jackrabbit.spi.commons;
-import java.io.InputStream;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.jcr.AccessDeniedException;
import javax.jcr.Credentials;
-import javax.jcr.InvalidItemStateException;
-import javax.jcr.ItemExistsException;
import javax.jcr.ItemNotFoundException;
-import javax.jcr.LoginException;
-import javax.jcr.MergeException;
-import javax.jcr.NamespaceException;
import javax.jcr.NoSuchWorkspaceException;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.ReferentialIntegrityException;
import javax.jcr.RepositoryException;
-import javax.jcr.SimpleCredentials;
import javax.jcr.UnsupportedRepositoryOperationException;
-import javax.jcr.ValueFormatException;
-import javax.jcr.lock.LockException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.nodetype.NodeTypeExistsException;
-import javax.jcr.query.InvalidQueryException;
-import javax.jcr.version.VersionException;
-
-import org.apache.jackrabbit.spi.Batch;
-import org.apache.jackrabbit.spi.EventBundle;
-import org.apache.jackrabbit.spi.EventFilter;
+
import org.apache.jackrabbit.spi.ItemId;
-import org.apache.jackrabbit.spi.ItemInfo;
-import org.apache.jackrabbit.spi.LockInfo;
-import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NodeId;
-import org.apache.jackrabbit.spi.Path;
-import org.apache.jackrabbit.spi.PropertyId;
-import org.apache.jackrabbit.spi.QNodeDefinition;
-import org.apache.jackrabbit.spi.QNodeTypeDefinition;
-import org.apache.jackrabbit.spi.QPropertyDefinition;
+import org.apache.jackrabbit.spi.NodeInfo;
import org.apache.jackrabbit.spi.QValue;
-import org.apache.jackrabbit.spi.QueryInfo;
import org.apache.jackrabbit.spi.SessionInfo;
-import org.apache.jackrabbit.spi.Subscription;
-import org.apache.jackrabbit.spi.commons.namespace.NamespaceMapping;
-import org.apache.jackrabbit.spi.commons.nodetype.compact.CompactNodeTypeDefReader;
import org.apache.jackrabbit.spi.commons.nodetype.compact.ParseException;
/**
@@ -85,26 +51,6 @@
Arrays.asList("add_node", "set_property", "remove"));
/**
- * The repository descriptors.
- */
- protected final Map<String, QValue[]> descriptors;
-
- /**
- * The fixed set of namespaces known to the repository service.
- */
- protected final NamespaceMapping namespaces = new NamespaceMapping();
-
- /**
- * The fixed set of node type definitions known to the repository service.
- */
- protected final Map<Name, QNodeTypeDefinition> nodeTypeDefs = new HashMap<Name, QNodeTypeDefinition>();
-
- /**
- * The node definition of the root node.
- */
- protected QNodeDefinition rootNodeDefinition;
-
- /**
* The list of workspaces that this repository service exposes.
*/
protected final List<String> wspNames;
@@ -135,202 +81,52 @@
String defaultWsp)
throws RepositoryException, ParseException, IllegalArgumentException {
+ super(descriptors, namespaces, cnd);
+
if (defaultWsp == null) {
throw new IllegalArgumentException("Default workspace is null");
}
- this.descriptors = Collections.unmodifiableMap(new HashMap<String, QValue[]>(descriptors));
- for (Map.Entry<String, String> entry : namespaces.entrySet()) {
- this.namespaces.setMapping(entry.getKey(), entry.getValue());
- }
- CompactNodeTypeDefReader reader = new CompactNodeTypeDefReader(cnd, "", this.namespaces);
- for (QNodeTypeDefinition def : reader.getNodeTypeDefinitions()) {
- nodeTypeDefs.put(def.getName(), def);
- }
+
this.wspNames = Collections.unmodifiableList(new ArrayList<String>(wspNames));
this.defaulWsp = defaultWsp;
}
- //---------------------------< subclass responsibility >--------------------
-
- /**
- * Create the root node definition.
- *
- * @return the root node definition for a workspace.
- * @throws RepositoryException if an error occurs.
- */
- protected abstract QNodeDefinition createRootNodeDefinition()
- throws RepositoryException;
-
//---------------------< may be overwritten by subclasses>------------------
/**
- * Checks if the given <code>credentials</code> are valid. This default
- * implementation is empty thus allowing all credentials.
- *
- * @param credentials the credentials to check.
- * @param workspaceName the workspace to access.
- * @throws LoginException if the credentials are invalid.
- */
- protected void checkCredentials(Credentials credentials, String workspaceName) throws LoginException {
- // empty
- }
-
- /**
* Checks whether the <code>workspaceName</code> is valid.
* @param workspaceName name of the workspace to check
* @throws NoSuchWorkspaceException if <code>workspaceName</code> is neither in the
* list of workspaces nor null (i.e. default workspace).
*/
+ @Override
protected void checkWorkspace(String workspaceName) throws NoSuchWorkspaceException {
if (workspaceName != null && !wspNames.contains(workspaceName)) {
throw new NoSuchWorkspaceException(workspaceName);
}
}
- /**
- * Creates a session info instance for the given <code>credentials</code> and
- * <code>workspaceName</code>. This default implementation creates a
- * {@link SessionInfoImpl} instance and sets the <code>userId</code> and
- * workspaceName. The user <code>userId</code> is <code>null</code> or the
- * <code>userId</code> from <code>credentials</code> if it is of type
- * {@link SimpleCredentials}.
- *
- * @param credentials the credentials.
- * @param workspaceName the name of the workspace to access.
- * @return a session info instance for the given <code>credentials</code> and
- * <code>workspaceName</code>.
- * @throws RepositoryException
- */
+ @Override
protected SessionInfo createSessionInfo(Credentials credentials, String workspaceName)
throws RepositoryException {
- String userId = null;
- if (credentials instanceof SimpleCredentials) {
- userId = ((SimpleCredentials) credentials).getUserID();
- }
-
- SessionInfoImpl s = new SessionInfoImpl();
- s.setUserID(userId);
- s.setWorkspacename(workspaceName);
- return s;
- }
-
- /**
- * Creates a session info instance for the given <code>sessionInfo</code> and
- * <code>workspaceName</code>. This default implementation creates a
- * {@link SessionInfoImpl} instance and sets the <code>userId</code> and
- * workspaceName. The user <code>userId</code> is set to the return value of
- * {@link SessionInfo#getUserID()}.
- *
- * @param sessionInfo the sessionInfo.
- * @param workspaceName the name of the workspace to access.
- * @return a session info instance for the given <code>credentials</code> and
- * <code>workspaceName</code>.
- * @throws RepositoryException
- */
- protected SessionInfo createSessionInfo(SessionInfo sessionInfo, String workspaceName)
- throws RepositoryException {
-
- String userId = sessionInfo.getUserID();
-
- SessionInfoImpl s = new SessionInfoImpl();
- s.setUserID(userId);
- s.setWorkspacename(workspaceName);
- return s;
- }
-
- /**
- * Checks the type of the <code>sessionInfo</code> instance. This default
- * implementation checks if <code>sessionInfo</code> is of type
- * {@link SessionInfoImpl}, otherwise throws a {@link RepositoryException}.
- *
- * @param sessionInfo the session info to check.
- * @throws RepositoryException if the given <code>sessionInfo</code> is not
- * of the required type for this repository
- * service implementation.
- */
- protected void checkSessionInfo(SessionInfo sessionInfo)
- throws RepositoryException {
- if (sessionInfo instanceof SessionInfoImpl) {
- return;
- }
- throw new RepositoryException("SessionInfo not of type "
- + SessionInfoImpl.class.getName());
- }
-
- //----------------------------< login >-------------------------------------
-
- /**
- * This default implementation does:
- * <ul>
- * <li>calls {@link #checkCredentials(Credentials, String)}</li>
- * <li>calls {@link #checkWorkspace(String)}</li>
- * <li>calls {@link #createSessionInfo(Credentials, String)} passing
- * <code>workspaceName</code> or the name of the default workspace if
- * <code>null</code></li>.
- * </ul>
- * @param credentials the credentials for the login.
- * @param workspaceName the name of the workspace to log in.
- * @return the session info.
- * @throws LoginException if the credentials are invalid.
- * @throws NoSuchWorkspaceException if <code>workspaceName</code> is unknown.
- * @throws RepositoryException if another error occurs.
- */
- public SessionInfo obtain(Credentials credentials, String workspaceName)
- throws LoginException, NoSuchWorkspaceException, RepositoryException {
- checkCredentials(credentials, workspaceName);
- checkWorkspace(workspaceName);
- return createSessionInfo(credentials, workspaceName == null ? defaulWsp : workspaceName);
- }
-
- /**
- * This default implementation returns the session info retuned by the call
- * to {@link #createSessionInfo(SessionInfo, String)} passing
- * <code>workspaceName</code> or the name of the default workspace if
- * <code>null</code></li>.
- */
- public SessionInfo obtain(SessionInfo sessionInfo, String workspaceName)
- throws LoginException, NoSuchWorkspaceException, RepositoryException {
- return createSessionInfo(sessionInfo, workspaceName == null ? defaulWsp : workspaceName);
- }
-
-
- /**
- * This default implementation returns the session info returned by the call
- * to {@link #obtain(Credentials, String)} with the workspaceName taken from
- * the passed <code>sessionInfo</code>.
- */
- public SessionInfo impersonate(SessionInfo sessionInfo, Credentials credentials)
- throws LoginException, RepositoryException {
- return obtain(credentials, sessionInfo.getWorkspaceName());
- }
-
- /**
- * This default implementation does nothing.
- */
- public void dispose(SessionInfo sessionInfo) throws RepositoryException {
- // do nothing
+ return super.createSessionInfo(credentials, workspaceName == null? defaulWsp : workspaceName);
}
//-----------------------------< reading >----------------------------------
/**
- * This default implementation returns an iterator over the item infos
- * returned by the call to {@link #getNodeInfo(SessionInfo, NodeId)}.
+ * This default implementation returns the first item returned by the call to
+ * {@link #getItemInfos(SessionInfo, NodeId)}. The underlying assumption here is that
+ * the implementation and the persistence layer are optimized for batch reading. That is,
+ * a call to <code>getItemInfos</code> is no more expensive than retrieving the single
+ * <code>NodeInfo</code> only. If this assumption does not hold, subclasses should override
+ * this method.
*/
- public Iterator<? extends ItemInfo> getItemInfos(SessionInfo sessionInfo, NodeId nodeId) throws
- ItemNotFoundException, RepositoryException {
- return Collections.singleton(getNodeInfo(sessionInfo, nodeId)).iterator();
- }
-
- //--------------------------< descriptors >---------------------------------
+ public NodeInfo getNodeInfo(SessionInfo sessionInfo, NodeId nodeId) throws ItemNotFoundException,
+ RepositoryException {
- /**
- * This default implementation returns the descriptors that were passed
- * to the constructor of this repository service.
- */
- public Map<String, QValue[]> getRepositoryDescriptors() throws RepositoryException {
- return descriptors;
+ return (NodeInfo) getItemInfos(sessionInfo, nodeId).next();
}
//-------------------------< workspace names >------------------------------
@@ -340,8 +136,7 @@
* with the <code>sessionInfo</code>, then returns the workspaces that were
* passed to the constructor of this repository service.
*/
- public String[] getWorkspaceNames(SessionInfo sessionInfo) throws
- RepositoryException {
+ public String[] getWorkspaceNames(SessionInfo sessionInfo) throws RepositoryException {
checkSessionInfo(sessionInfo);
return wspNames.toArray(new String[wspNames.size()]);
}
@@ -366,496 +161,4 @@
}
return true;
}
-
- //-----------------------------< node types >-------------------------------
-
- /**
- * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
- * with the <code>sessionInfo</code>,
- */
- public Iterator<QNodeTypeDefinition> getQNodeTypeDefinitions(SessionInfo sessionInfo) throws
- RepositoryException {
- checkSessionInfo(sessionInfo);
- return nodeTypeDefs.values().iterator();
- }
-
- /**
- * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
- * with the <code>sessionInfo</code>, then gathers the {@link QNodeTypeDefinition}s
- * with the given <code>nodetypeNames</code>. If one of the nodetypeNames
- * is not a valid node type definition then a {@link RepositoryException}
- * is thrown.
- */
- public Iterator<QNodeTypeDefinition> getQNodeTypeDefinitions(SessionInfo sessionInfo, Name[] nodetypeNames)
- throws RepositoryException {
- checkSessionInfo(sessionInfo);
- List<QNodeTypeDefinition> ntDefs = new ArrayList<QNodeTypeDefinition>();
- for (Name nodetypeName : nodetypeNames) {
- QNodeTypeDefinition def = nodeTypeDefs.get(nodetypeName);
- if (def == null) {
- throw new RepositoryException("unknown node type: " + nodetypeName);
- }
- ntDefs.add(def);
- }
- return ntDefs.iterator();
- }
-
- /**
- * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
- * with the <code>sessionInfo</code>, then lazily initializes {@link #rootNodeDefinition}
- * if <code>nodeId</code> denotes the root node; otherwise throws a
- * {@link UnsupportedRepositoryOperationException}.
- */
- public QNodeDefinition getNodeDefinition(SessionInfo sessionInfo,
- NodeId nodeId)
- throws RepositoryException {
- checkSessionInfo(sessionInfo);
- if (nodeId.getUniqueID() == null && nodeId.getPath().denotesRoot()) {
- synchronized (this) {
- if (rootNodeDefinition == null) {
- rootNodeDefinition = createRootNodeDefinition();
- }
- return rootNodeDefinition;
- }
- }
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public QPropertyDefinition getPropertyDefinition(SessionInfo sessionInfo,
- PropertyId propertyId)
- throws RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void registerNodeTypes(SessionInfo sessionInfo, QNodeTypeDefinition[] nodeTypeDefinitions, boolean allowUpdate) throws InvalidNodeTypeDefinitionException, NodeTypeExistsException, UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void unregisterNodeTypes(SessionInfo sessionInfo, Name[] nodeTypeNames) throws UnsupportedRepositoryOperationException, NoSuchNodeTypeException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- //-----------------------------< namespaces >-------------------------------
-
- /**
- * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
- * with the <code>sessionInfo</code>, then returns the prefix to namespace
- * URL mapping that was provided in the constructor of this repository
- * service.
- */
- public Map<String, String> getRegisteredNamespaces(SessionInfo sessionInfo) throws
- RepositoryException {
- checkSessionInfo(sessionInfo);
- return namespaces.getPrefixToURIMapping();
- }
-
- /**
- * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
- * with the <code>sessionInfo</code>, then returns the namepsace URI for the
- * given <code>prefix</code>.
- */
- public String getNamespaceURI(SessionInfo sessionInfo, String prefix)
- throws NamespaceException, RepositoryException {
- checkSessionInfo(sessionInfo);
- return namespaces.getURI(prefix);
- }
-
- /**
- * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
- * with the <code>sessionInfo</code>, then return the namespace prefix for
- * the given <code>uri</code>.
- */
- public String getNamespacePrefix(SessionInfo sessionInfo, String uri)
- throws NamespaceException, RepositoryException {
- checkSessionInfo(sessionInfo);
- return namespaces.getPrefix(uri);
- }
-
- //-----------------------------< write methods >----------------------------
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public Batch createBatch(SessionInfo sessionInfo, ItemId itemId)
- throws RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void submit(Batch batch) throws PathNotFoundException, ItemNotFoundException, NoSuchNodeTypeException, ValueFormatException, VersionException, LockException, ConstraintViolationException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void importXml(SessionInfo sessionInfo,
- NodeId parentId,
- InputStream xmlStream,
- int uuidBehaviour) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void move(SessionInfo sessionInfo,
- NodeId srcNodeId,
- NodeId destParentNodeId,
- Name destName) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void copy(SessionInfo sessionInfo,
- String srcWorkspaceName,
- NodeId srcNodeId,
- NodeId destParentNodeId,
- Name destName) throws NoSuchWorkspaceException, ConstraintViolationException, VersionException, AccessDeniedException, PathNotFoundException, ItemExistsException, LockException, UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void update(SessionInfo sessionInfo,
- NodeId nodeId,
- String srcWorkspaceName)
- throws NoSuchWorkspaceException, AccessDeniedException, LockException, InvalidItemStateException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void clone(SessionInfo sessionInfo,
- String srcWorkspaceName,
- NodeId srcNodeId,
- NodeId destParentNodeId,
- Name destName,
- boolean removeExisting) throws NoSuchWorkspaceException, ConstraintViolationException, VersionException, AccessDeniedException, PathNotFoundException, ItemExistsException, LockException, UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public LockInfo lock(SessionInfo sessionInfo,
- NodeId nodeId,
- boolean deep,
- boolean sessionScoped)
- throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public LockInfo lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep,
- boolean sessionScoped, long timeoutHint, String ownerHint)
- throws UnsupportedRepositoryOperationException, LockException,
- AccessDeniedException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @return <code>null</code>.
- */
- public LockInfo getLockInfo(SessionInfo sessionInfo, NodeId nodeId)
- throws AccessDeniedException, RepositoryException {
- return null;
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void refreshLock(SessionInfo sessionInfo, NodeId nodeId)
- throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void unlock(SessionInfo sessionInfo, NodeId nodeId)
- throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public NodeId checkin(SessionInfo sessionInfo, NodeId nodeId)
- throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void checkout(SessionInfo sessionInfo, NodeId nodeId)
- throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void checkout(SessionInfo sessionInfo, NodeId nodeId, NodeId activityId)
- throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public NodeId checkpoint(SessionInfo sessionInfo, NodeId nodeId)
- throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void removeVersion(SessionInfo sessionInfo,
- NodeId versionHistoryId,
- NodeId versionId)
- throws ReferentialIntegrityException, AccessDeniedException, UnsupportedRepositoryOperationException, VersionException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void restore(SessionInfo sessionInfo,
- NodeId nodeId,
- NodeId versionId,
- boolean removeExisting) throws VersionException, PathNotFoundException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void restore(SessionInfo sessionInfo,
- NodeId[] versionIds,
- boolean removeExisting) throws ItemExistsException, UnsupportedRepositoryOperationException, VersionException, LockException, InvalidItemStateException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException
- * always.
- */
- public Iterator<NodeId> merge(SessionInfo sessionInfo,
- NodeId nodeId,
- String srcWorkspaceName,
- boolean bestEffort) throws
- NoSuchWorkspaceException, AccessDeniedException, MergeException,
- LockException, InvalidItemStateException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException
- * always.
- */
- public Iterator<NodeId> merge(SessionInfo sessionInfo,
- NodeId nodeId,
- String srcWorkspaceName,
- boolean bestEffort,
- boolean isShallow) throws
- NoSuchWorkspaceException, AccessDeniedException, MergeException,
- LockException, InvalidItemStateException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void resolveMergeConflict(SessionInfo sessionInfo,
- NodeId nodeId,
- NodeId[] mergeFailedIds,
- NodeId[] predecessorIds)
- throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void addVersionLabel(SessionInfo sessionInfo,
- NodeId versionHistoryId,
- NodeId versionId,
- Name label,
- boolean moveLabel) throws VersionException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void removeVersionLabel(SessionInfo sessionInfo,
- NodeId versionHistoryId,
- NodeId versionId,
- Name label) throws VersionException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public NodeId createActivity(SessionInfo sessionInfo, String title) throws UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void removeActivity(SessionInfo sessionInfo, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
-
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public Iterator<NodeId> mergeActivity(SessionInfo sessionInfo, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
-
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public NodeId createConfiguration(SessionInfo sessionInfo, NodeId nodeId) throws UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- //-----------------------------< observation >------------------------------
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public EventFilter createEventFilter(SessionInfo sessionInfo,
- int eventTypes,
- Path absPath,
- boolean isDeep,
- String[] uuid,
- Name[] nodeTypeName,
- boolean noLocal)
- throws UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public Subscription createSubscription(SessionInfo sessionInfo,
- EventFilter[] filters)
- throws UnsupportedRepositoryOperationException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void updateEventFilters(Subscription subscription,
- EventFilter[] filters)
- throws RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public EventBundle[] getEvents(Subscription subscription, long timeout)
- throws RepositoryException, InterruptedException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public EventBundle getEvents(SessionInfo sessionInfo, EventFilter filter,
- long after) throws
- RepositoryException, UnsupportedRepositoryOperationException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void dispose(Subscription subscription) throws RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- //-------------------------------------------------< namespace registry >---
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void registerNamespace(SessionInfo sessionInfo,
- String prefix,
- String uri) throws NamespaceException, UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void unregisterNamespace(SessionInfo sessionInfo, String uri)
- throws NamespaceException, UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- //-----------------------------------------------< Workspace Management >---
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void createWorkspace(SessionInfo sessionInfo, String name, String srcWorkspaceName) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
-
- }
-
- /**
- * @throws UnsupportedRepositoryOperationException always.
- */
- public void deleteWorkspace(SessionInfo sessionInfo, String name) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
-
- }
-
- //-------------------------------< query >----------------------------------
-
- public String[] getSupportedQueryLanguages(SessionInfo sessionInfo) throws
- RepositoryException {
- checkSessionInfo(sessionInfo);
- return new String[0];
- }
-
- public String[] checkQueryStatement(SessionInfo sessionInfo, String statement,
- String language, Map<String, String> namespaces) throws
- InvalidQueryException, RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
-
- public QueryInfo executeQuery(SessionInfo sessionInfo, String statement,
- String language, Map<String, String> namespaces, long limit,
- long offset, Map<String, QValue> values) throws RepositoryException {
- throw new UnsupportedRepositoryOperationException();
- }
}
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java?rev=808006&r1=808005&r2=808006&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/AbstractRepositoryService.java Wed Aug 26 13:34:01 2009
@@ -16,18 +16,69 @@
*/
package org.apache.jackrabbit.spi.commons;
+import java.io.InputStream;
+import java.io.Reader;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.AccessDeniedException;
+import javax.jcr.Credentials;
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.ItemExistsException;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.LoginException;
+import javax.jcr.MergeException;
+import javax.jcr.NamespaceException;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.PropertyType;
+import javax.jcr.ReferentialIntegrityException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.ValueFormatException;
+import javax.jcr.lock.LockException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.nodetype.NodeTypeExistsException;
+import javax.jcr.query.InvalidQueryException;
+import javax.jcr.version.VersionException;
+
+import org.apache.jackrabbit.spi.Batch;
+import org.apache.jackrabbit.spi.EventBundle;
+import org.apache.jackrabbit.spi.EventFilter;
import org.apache.jackrabbit.spi.IdFactory;
+import org.apache.jackrabbit.spi.ItemId;
+import org.apache.jackrabbit.spi.LockInfo;
+import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.NameFactory;
+import org.apache.jackrabbit.spi.NodeId;
+import org.apache.jackrabbit.spi.Path;
import org.apache.jackrabbit.spi.PathFactory;
+import org.apache.jackrabbit.spi.PropertyId;
+import org.apache.jackrabbit.spi.QNodeDefinition;
+import org.apache.jackrabbit.spi.QNodeTypeDefinition;
+import org.apache.jackrabbit.spi.QPropertyDefinition;
+import org.apache.jackrabbit.spi.QValue;
import org.apache.jackrabbit.spi.QValueFactory;
+import org.apache.jackrabbit.spi.QueryInfo;
import org.apache.jackrabbit.spi.RepositoryService;
+import org.apache.jackrabbit.spi.SessionInfo;
+import org.apache.jackrabbit.spi.Subscription;
import org.apache.jackrabbit.spi.commons.identifier.IdFactoryImpl;
import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
import org.apache.jackrabbit.spi.commons.name.PathFactoryImpl;
+import org.apache.jackrabbit.spi.commons.namespace.NamespaceMapping;
+import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeStorage;
+import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeStorageImpl;
+import org.apache.jackrabbit.spi.commons.nodetype.compact.CompactNodeTypeDefReader;
+import org.apache.jackrabbit.spi.commons.nodetype.compact.ParseException;
import org.apache.jackrabbit.spi.commons.value.QValueFactoryImpl;
-import javax.jcr.RepositoryException;
-
/**
* <code>AbstractRepositoryService</code> provides an abstract base class for
* repository service implementations. This class provides default
@@ -42,6 +93,26 @@
public abstract class AbstractRepositoryService implements RepositoryService {
/**
+ * The repository descriptors.
+ */
+ protected final Map<String, QValue[]> descriptors = new HashMap<String, QValue[]>();
+
+ /**
+ * The fixed set of namespaces known to the repository service.
+ */
+ protected final NamespaceMapping namespaces = new NamespaceMapping();
+
+ /**
+ * The fixed set of node type definitions known to the repository service.
+ */
+ protected final NodeTypeStorage nodeTypeDefs = new NodeTypeStorageImpl();
+
+ /**
+ * The node definition of the root node.
+ */
+ protected QNodeDefinition rootNodeDefinition;
+
+ /**
* @return {@link IdFactoryImpl#getInstance()}.
* @throws RepositoryException if an error occurs.
*/
@@ -72,4 +143,726 @@
public QValueFactory getQValueFactory() throws RepositoryException {
return QValueFactoryImpl.getInstance();
}
+
+ protected AbstractRepositoryService() throws RepositoryException {
+ QValueFactory qvf = QValueFactoryImpl.getInstance();
+ QValue[] vFalse = new QValue[] {qvf.create(false)};
+
+ descriptors.put(Repository.WRITE_SUPPORTED, vFalse);
+ descriptors.put(Repository.IDENTIFIER_STABILITY,
+ new QValue[] {qvf.create(Repository.IDENTIFIER_STABILITY_SAVE_DURATION, PropertyType.STRING)});
+ descriptors.put(Repository.OPTION_XML_IMPORT_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_XML_EXPORT_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_UNFILED_CONTENT_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_VERSIONING_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_SIMPLE_VERSIONING_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_ACCESS_CONTROL_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_LOCKING_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_OBSERVATION_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_JOURNALED_OBSERVATION_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_RETENTION_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_LIFECYCLE_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_TRANSACTIONS_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_UPDATE_PRIMARY_NODE_TYPE_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_UPDATE_MIXIN_NODE_TYPES_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_SHAREABLE_NODES_SUPPORTED, vFalse);
+ descriptors.put(Repository.OPTION_NODE_TYPE_MANAGEMENT_SUPPORTED, vFalse);
+
+ descriptors.put(Repository.QUERY_LANGUAGES, new QValue[0]);
+ descriptors.put(Repository.QUERY_STORED_QUERIES_SUPPORTED, vFalse);
+ descriptors.put(Repository.QUERY_FULL_TEXT_SEARCH_SUPPORTED, vFalse);
+ descriptors.put(Repository.QUERY_JOINS,
+ new QValue[] {qvf.create(Repository.QUERY_JOINS_NONE, PropertyType.STRING)});
+
+ descriptors.putAll(descriptors);
+ }
+
+ public AbstractRepositoryService(Map<String, QValue[]> descriptors,
+ Map<String, String> namespaces,
+ QNodeTypeDefinition[] nodeTypeDefs)
+ throws RepositoryException {
+
+ this();
+ this.descriptors.putAll(descriptors);
+
+ for (Map.Entry<String, String> entry : namespaces.entrySet()) {
+ this.namespaces.setMapping(entry.getKey(), entry.getValue());
+ }
+
+ this.nodeTypeDefs.registerNodeTypes(nodeTypeDefs, true);
+ }
+
+ public AbstractRepositoryService(Map<String, QValue[]> descriptors,
+ Map<String, String> namespaces,
+ Reader cnd)
+ throws RepositoryException {
+
+ this();
+ this.descriptors.putAll(descriptors);
+
+ for (Map.Entry<String, String> entry : namespaces.entrySet()) {
+ this.namespaces.setMapping(entry.getKey(), entry.getValue());
+ }
+
+ CompactNodeTypeDefReader reader;
+ try {
+ reader = new CompactNodeTypeDefReader(cnd, "", this.namespaces);
+ List<QNodeTypeDefinition> ntds = reader.getNodeTypeDefinitions();
+ nodeTypeDefs.registerNodeTypes(ntds.toArray(new QNodeTypeDefinition[ntds.size()]), true);
+ }
+ catch (ParseException e) {
+ throw new RepositoryException("Error reading node type definitions", e);
+ }
+ }
+
+ //---------------------------< subclass responsibility >--------------------
+
+ /**
+ * Create the root node definition.
+ *
+ * @return the root node definition for a workspace.
+ * @throws RepositoryException if an error occurs.
+ */
+ protected abstract QNodeDefinition createRootNodeDefinition() throws RepositoryException;
+
+ //---------------------< may be overwritten by subclasses>------------------
+
+ /**
+ * Checks if the given <code>credentials</code> are valid. This default
+ * implementation is empty thus allowing all credentials.
+ *
+ * @param credentials the credentials to check.
+ * @param workspaceName the workspace to access.
+ * @throws LoginException if the credentials are invalid.
+ */
+ protected void checkCredentials(Credentials credentials, String workspaceName) throws LoginException {
+ // empty
+ }
+
+ /**
+ * Checks if the given workspace is available. The default implementation is empty
+ * thus admitting every workspace name.
+ * @param workspaceName Name of the workspace to check
+ * @throws NoSuchWorkspaceException If <code>workspaceName</code> is not available.
+ */
+ protected void checkWorkspace(String workspaceName) throws NoSuchWorkspaceException {
+ // empty
+ }
+
+ /**
+ * Creates a session info instance for the given <code>credentials</code> and
+ * <code>workspaceName</code>. This default implementation creates a
+ * {@link SessionInfoImpl} instance and sets the <code>userId</code> and
+ * workspaceName. The user <code>userId</code> is <code>null</code> or the
+ * <code>userId</code> from <code>credentials</code> if it is of type
+ * {@link SimpleCredentials}.
+ *
+ * @param credentials the credentials.
+ * @param workspaceName the name of the workspace to access or <code>null</code>
+ * for the default workspace.
+ * @return a session info instance for the given <code>credentials</code> and
+ * <code>workspaceName</code>.
+ * @throws RepositoryException
+ */
+ protected SessionInfo createSessionInfo(Credentials credentials, String workspaceName)
+ throws RepositoryException {
+
+ String userId = null;
+ if (credentials instanceof SimpleCredentials) {
+ userId = ((SimpleCredentials) credentials).getUserID();
+ }
+
+ SessionInfoImpl s = new SessionInfoImpl();
+ s.setUserID(userId);
+ s.setWorkspacename(workspaceName);
+ return s;
+ }
+
+ /**
+ * Creates a session info instance for the given <code>sessionInfo</code> and
+ * <code>workspaceName</code>. This default implementation creates a
+ * {@link SessionInfoImpl} instance and sets the <code>userId</code> and
+ * workspaceName. The user <code>userId</code> is set to the return value of
+ * {@link SessionInfo#getUserID()}.
+ *
+ * @param sessionInfo the sessionInfo.
+ * @param workspaceName the name of the workspace to access.
+ * @return a session info instance for the given <code>credentials</code> and
+ * <code>workspaceName</code>.
+ * @throws RepositoryException
+ */
+ protected SessionInfo createSessionInfo(SessionInfo sessionInfo, String workspaceName)
+ throws RepositoryException {
+
+ String userId = sessionInfo.getUserID();
+
+ SessionInfoImpl s = new SessionInfoImpl();
+ s.setUserID(userId);
+ s.setWorkspacename(workspaceName);
+ return s;
+ }
+
+ /**
+ * Checks the type of the <code>sessionInfo</code> instance. This default
+ * implementation checks if <code>sessionInfo</code> is of type
+ * {@link SessionInfoImpl}, otherwise throws a {@link RepositoryException}.
+ *
+ * @param sessionInfo the session info to check.
+ * @throws RepositoryException if the given <code>sessionInfo</code> is not
+ * of the required type for this repository
+ * service implementation.
+ */
+ protected void checkSessionInfo(SessionInfo sessionInfo)
+ throws RepositoryException {
+ if (sessionInfo instanceof SessionInfoImpl) {
+ return;
+ }
+ throw new RepositoryException("SessionInfo not of type "
+ + SessionInfoImpl.class.getName());
+ }
+
+ //--------------------------< descriptors >---------------------------------
+
+ /**
+ * This default implementation returns the descriptors that were passed
+ * to the constructor of this repository service.
+ */
+ public Map<String, QValue[]> getRepositoryDescriptors() throws RepositoryException {
+ return descriptors;
+ }
+
+ //----------------------------< login >-------------------------------------
+
+ /**
+ * This default implementation does:
+ * <ul>
+ * <li>calls {@link #checkCredentials(Credentials, String)}</li>
+ * <li>calls {@link #checkWorkspace(String)}</li>
+ * <li>calls {@link #createSessionInfo(Credentials, String)}</li>.
+ * </ul>
+ * @param credentials the credentials for the login.
+ * @param workspaceName the name of the workspace to log in.
+ * @return the session info.
+ * @throws LoginException if the credentials are invalid.
+ * @throws NoSuchWorkspaceException if <code>workspaceName</code> is unknown.
+ * @throws RepositoryException if another error occurs.
+ */
+ public SessionInfo obtain(Credentials credentials, String workspaceName)
+ throws LoginException, NoSuchWorkspaceException, RepositoryException {
+ checkCredentials(credentials, workspaceName);
+ checkWorkspace(workspaceName);
+ return createSessionInfo(credentials, workspaceName);
+ }
+
+ /**
+ * This default implementation returns the session info returned by the call
+ * to {@link #createSessionInfo(SessionInfo, String)}.
+ */
+ public SessionInfo obtain(SessionInfo sessionInfo, String workspaceName)
+ throws LoginException, NoSuchWorkspaceException, RepositoryException {
+ return createSessionInfo(sessionInfo, workspaceName);
+ }
+
+
+ /**
+ * This default implementation returns the session info returned by the call
+ * to {@link #obtain(Credentials, String)} with the workspaceName taken from
+ * the passed <code>sessionInfo</code>.
+ */
+ public SessionInfo impersonate(SessionInfo sessionInfo, Credentials credentials)
+ throws LoginException, RepositoryException {
+ return obtain(credentials, sessionInfo.getWorkspaceName());
+ }
+
+ /**
+ * This default implementation does nothing.
+ */
+ public void dispose(SessionInfo sessionInfo) throws RepositoryException {
+ // do nothing
+ }
+
+ //-----------------------------< node types >-------------------------------
+
+ /**
+ * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
+ * with the <code>sessionInfo</code>,
+ */
+ public Iterator<QNodeTypeDefinition> getQNodeTypeDefinitions(SessionInfo sessionInfo) throws
+ RepositoryException {
+
+ checkSessionInfo(sessionInfo);
+ return nodeTypeDefs.getAllDefinitions();
+ }
+
+ /**
+ * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
+ * with the <code>sessionInfo</code>, then gathers the {@link QNodeTypeDefinition}s
+ * with the given <code>nodetypeNames</code>. If one of the nodetypeNames
+ * is not a valid node type definition then a {@link RepositoryException}
+ * is thrown.
+ */
+ public Iterator<QNodeTypeDefinition> getQNodeTypeDefinitions(SessionInfo sessionInfo, Name[] nodetypeNames)
+ throws RepositoryException {
+
+ checkSessionInfo(sessionInfo);
+ return nodeTypeDefs.getDefinitions(nodetypeNames);
+ }
+
+ /**
+ * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
+ * with the <code>sessionInfo</code>, then lazily initializes {@link #rootNodeDefinition}
+ * if <code>nodeId</code> denotes the root node; otherwise throws a
+ * {@link UnsupportedRepositoryOperationException}.
+ */
+ public QNodeDefinition getNodeDefinition(SessionInfo sessionInfo,
+ NodeId nodeId)
+ throws RepositoryException {
+ checkSessionInfo(sessionInfo);
+ if (nodeId.getUniqueID() == null && nodeId.getPath().denotesRoot()) {
+ synchronized (this) {
+ if (rootNodeDefinition == null) {
+ rootNodeDefinition = createRootNodeDefinition();
+ }
+ return rootNodeDefinition;
+ }
+ }
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public QPropertyDefinition getPropertyDefinition(SessionInfo sessionInfo,
+ PropertyId propertyId)
+ throws RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void registerNodeTypes(SessionInfo sessionInfo, QNodeTypeDefinition[] nodeTypeDefinitions, boolean allowUpdate) throws InvalidNodeTypeDefinitionException, NodeTypeExistsException, UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void unregisterNodeTypes(SessionInfo sessionInfo, Name[] nodeTypeNames) throws UnsupportedRepositoryOperationException, NoSuchNodeTypeException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ //-----------------------------< namespaces >-------------------------------
+
+ /**
+ * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
+ * with the <code>sessionInfo</code>, then returns the prefix to namespace
+ * URL mapping that was provided in the constructor of this repository
+ * service.
+ */
+ public Map<String, String> getRegisteredNamespaces(SessionInfo sessionInfo) throws
+ RepositoryException {
+ checkSessionInfo(sessionInfo);
+ return namespaces.getPrefixToURIMapping();
+ }
+
+ /**
+ * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
+ * with the <code>sessionInfo</code>, then returns the namepsace URI for the
+ * given <code>prefix</code>.
+ */
+ public String getNamespaceURI(SessionInfo sessionInfo, String prefix)
+ throws NamespaceException, RepositoryException {
+ checkSessionInfo(sessionInfo);
+ return namespaces.getURI(prefix);
+ }
+
+ /**
+ * This default implementation first calls {@link #checkSessionInfo(SessionInfo)}
+ * with the <code>sessionInfo</code>, then return the namespace prefix for
+ * the given <code>uri</code>.
+ */
+ public String getNamespacePrefix(SessionInfo sessionInfo, String uri)
+ throws NamespaceException, RepositoryException {
+ checkSessionInfo(sessionInfo);
+ return namespaces.getPrefix(uri);
+ }
+
+ //-----------------------------< write methods >----------------------------
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public Batch createBatch(SessionInfo sessionInfo, ItemId itemId)
+ throws RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void submit(Batch batch) throws PathNotFoundException, ItemNotFoundException, NoSuchNodeTypeException, ValueFormatException, VersionException, LockException, ConstraintViolationException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void importXml(SessionInfo sessionInfo,
+ NodeId parentId,
+ InputStream xmlStream,
+ int uuidBehaviour) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void move(SessionInfo sessionInfo,
+ NodeId srcNodeId,
+ NodeId destParentNodeId,
+ Name destName) throws ItemExistsException, PathNotFoundException, VersionException, ConstraintViolationException, LockException, AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void copy(SessionInfo sessionInfo,
+ String srcWorkspaceName,
+ NodeId srcNodeId,
+ NodeId destParentNodeId,
+ Name destName) throws NoSuchWorkspaceException, ConstraintViolationException, VersionException, AccessDeniedException, PathNotFoundException, ItemExistsException, LockException, UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void update(SessionInfo sessionInfo,
+ NodeId nodeId,
+ String srcWorkspaceName)
+ throws NoSuchWorkspaceException, AccessDeniedException, LockException, InvalidItemStateException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void clone(SessionInfo sessionInfo,
+ String srcWorkspaceName,
+ NodeId srcNodeId,
+ NodeId destParentNodeId,
+ Name destName,
+ boolean removeExisting) throws NoSuchWorkspaceException, ConstraintViolationException, VersionException, AccessDeniedException, PathNotFoundException, ItemExistsException, LockException, UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public LockInfo lock(SessionInfo sessionInfo,
+ NodeId nodeId,
+ boolean deep,
+ boolean sessionScoped)
+ throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public LockInfo lock(SessionInfo sessionInfo, NodeId nodeId, boolean deep,
+ boolean sessionScoped, long timeoutHint, String ownerHint)
+ throws UnsupportedRepositoryOperationException, LockException,
+ AccessDeniedException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @return <code>null</code>.
+ */
+ public LockInfo getLockInfo(SessionInfo sessionInfo, NodeId nodeId)
+ throws AccessDeniedException, RepositoryException {
+ return null;
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void refreshLock(SessionInfo sessionInfo, NodeId nodeId)
+ throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void unlock(SessionInfo sessionInfo, NodeId nodeId)
+ throws UnsupportedRepositoryOperationException, LockException, AccessDeniedException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public NodeId checkin(SessionInfo sessionInfo, NodeId nodeId)
+ throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void checkout(SessionInfo sessionInfo, NodeId nodeId)
+ throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void checkout(SessionInfo sessionInfo, NodeId nodeId, NodeId activityId)
+ throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public NodeId checkpoint(SessionInfo sessionInfo, NodeId nodeId)
+ throws UnsupportedRepositoryOperationException, LockException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void removeVersion(SessionInfo sessionInfo,
+ NodeId versionHistoryId,
+ NodeId versionId)
+ throws ReferentialIntegrityException, AccessDeniedException, UnsupportedRepositoryOperationException, VersionException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void restore(SessionInfo sessionInfo,
+ NodeId nodeId,
+ NodeId versionId,
+ boolean removeExisting) throws VersionException, PathNotFoundException, ItemExistsException, UnsupportedRepositoryOperationException, LockException, InvalidItemStateException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void restore(SessionInfo sessionInfo,
+ NodeId[] versionIds,
+ boolean removeExisting) throws ItemExistsException, UnsupportedRepositoryOperationException, VersionException, LockException, InvalidItemStateException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException
+ * always.
+ */
+ public Iterator<NodeId> merge(SessionInfo sessionInfo,
+ NodeId nodeId,
+ String srcWorkspaceName,
+ boolean bestEffort) throws
+ NoSuchWorkspaceException, AccessDeniedException, MergeException,
+ LockException, InvalidItemStateException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException
+ * always.
+ */
+ public Iterator<NodeId> merge(SessionInfo sessionInfo,
+ NodeId nodeId,
+ String srcWorkspaceName,
+ boolean bestEffort,
+ boolean isShallow) throws
+ NoSuchWorkspaceException, AccessDeniedException, MergeException,
+ LockException, InvalidItemStateException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void resolveMergeConflict(SessionInfo sessionInfo,
+ NodeId nodeId,
+ NodeId[] mergeFailedIds,
+ NodeId[] predecessorIds)
+ throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void addVersionLabel(SessionInfo sessionInfo,
+ NodeId versionHistoryId,
+ NodeId versionId,
+ Name label,
+ boolean moveLabel) throws VersionException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void removeVersionLabel(SessionInfo sessionInfo,
+ NodeId versionHistoryId,
+ NodeId versionId,
+ Name label) throws VersionException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public NodeId createActivity(SessionInfo sessionInfo, String title) throws UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void removeActivity(SessionInfo sessionInfo, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public Iterator<NodeId> mergeActivity(SessionInfo sessionInfo, NodeId activityId) throws UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public NodeId createConfiguration(SessionInfo sessionInfo, NodeId nodeId) throws UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ //-----------------------------< observation >------------------------------
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public EventFilter createEventFilter(SessionInfo sessionInfo,
+ int eventTypes,
+ Path absPath,
+ boolean isDeep,
+ String[] uuid,
+ Name[] nodeTypeName,
+ boolean noLocal)
+ throws UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public Subscription createSubscription(SessionInfo sessionInfo,
+ EventFilter[] filters)
+ throws UnsupportedRepositoryOperationException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void updateEventFilters(Subscription subscription,
+ EventFilter[] filters)
+ throws RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public EventBundle[] getEvents(Subscription subscription, long timeout)
+ throws RepositoryException, InterruptedException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public EventBundle getEvents(SessionInfo sessionInfo, EventFilter filter,
+ long after) throws
+ RepositoryException, UnsupportedRepositoryOperationException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void dispose(Subscription subscription) throws RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ //-------------------------------------------------< namespace registry >---
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void registerNamespace(SessionInfo sessionInfo,
+ String prefix,
+ String uri) throws NamespaceException, UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void unregisterNamespace(SessionInfo sessionInfo, String uri)
+ throws NamespaceException, UnsupportedRepositoryOperationException, AccessDeniedException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ //-----------------------------------------------< Workspace Management >---
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void createWorkspace(SessionInfo sessionInfo, String name, String srcWorkspaceName) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ /**
+ * @throws UnsupportedRepositoryOperationException always.
+ */
+ public void deleteWorkspace(SessionInfo sessionInfo, String name) throws AccessDeniedException, UnsupportedRepositoryOperationException, NoSuchWorkspaceException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ //-------------------------------< query >----------------------------------
+
+ public String[] getSupportedQueryLanguages(SessionInfo sessionInfo) throws RepositoryException {
+ checkSessionInfo(sessionInfo);
+ return new String[0];
+ }
+
+ public String[] checkQueryStatement(SessionInfo sessionInfo, String statement,
+ String language, Map<String, String> namespaces) throws
+ InvalidQueryException, RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
+ public QueryInfo executeQuery(SessionInfo sessionInfo, String statement,
+ String language, Map<String, String> namespaces, long limit,
+ long offset, Map<String, QValue> values) throws RepositoryException {
+ throw new UnsupportedRepositoryOperationException();
+ }
+
}
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeStorageImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeStorageImpl.java?rev=808006&r1=808005&r2=808006&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeStorageImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/NodeTypeStorageImpl.java Wed Aug 26 13:34:01 2009
@@ -74,7 +74,7 @@
throw new IllegalArgumentException("nodeTypeDefs must not be null");
}
- if (allowUpdate) {
+ if (!allowUpdate) {
for (QNodeTypeDefinition ntd : nodeTypeDefs) {
Name name = ntd.getName();
if (definitions.containsKey(name)) {