Author: angela
Date: Tue Mar 27 15:00:42 2012
New Revision: 1305860
URL: http://svn.apache.org/viewvc?rev=1305860&view=rev
Log:
OAK-15 : Clean up oak-jcr
- move login to oak-core (work in progress)
- remove workspace mgt from oak-jcr (-> should go to oak-core)
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/AuthenticationService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionInfo.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/AuthenticationServiceImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/SessionInfoImpl.java
Removed:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionFactory.java
Modified:
jackrabbit/oak/trunk/oak-core/pom.xml
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/GlobalContext.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
Modified: jackrabbit/oak/trunk/oak-core/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/pom.xml?rev=1305860&r1=1305859&r2=1305860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-core/pom.xml Tue Mar 27 15:00:42 2012
@@ -48,7 +48,27 @@
true
-
+
+
+ javax.jcr
+ jcr
+ 2.0
+
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.4
+
+
+ org.slf4j
+ jcl-over-slf4j
+ 1.6.4
+
+
+
junit
junit
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/AuthenticationService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/AuthenticationService.java?rev=1305860&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/AuthenticationService.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/AuthenticationService.java Tue Mar 27 15:00:42 2012
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.api;
+
+import javax.jcr.NoSuchWorkspaceException;
+import javax.security.auth.login.LoginException;
+
+/**
+ * AuthenticationService... TODO: WORK IN PROGRESS
+ */
+public interface AuthenticationService {
+
+ /**
+ *
+ * @param credentials
+ * @param workspaceName
+ * @return
+ * @throws javax.security.auth.login.LoginException
+ * @throws javax.jcr.NoSuchWorkspaceException
+ */
+ SessionInfo login(Object credentials, String workspaceName) throws LoginException, NoSuchWorkspaceException;
+
+}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionInfo.java?rev=1305860&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionInfo.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/SessionInfo.java Tue Mar 27 15:00:42 2012
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.api;
+
+/**
+ * The {@code SessionInfo} TODO... describe how obtained, when disposed, used for communication with oak-api, identification, authorization....
+ */
+public interface SessionInfo {
+
+ /**
+ * Return the user ID to be exposed on the JCR Session object. It refers
+ * to the ID of the user associated with the Credentials passed to the
+ * repository login.
+ *
+ * @return the user ID such as exposed on the JCR Session object.
+ */
+ String getUserID();
+
+ /**
+ * Returns the attribute names associated with this instance.
+ *
+ * @return The attribute names with that instance or an empty array if
+ * no attributes are present.
+ */
+ String[] getAttributeNames();
+
+ /**
+ * Returns the attribute with the given name or {@code null} if no attribute
+ * with that {@code attributeName} exists.
+ *
+ * @param attributeName The attribute name.
+ * @return The attribute or {@code null}.
+ */
+ Object getAttribute(String attributeName);
+
+ /**
+ * Returns the current revision the associated session is operating on.
+ * Upon creation of a given {@code SessionInfo} instance the initial
+ * revision is always set to the head revision. Upon successful commit
+ * of changes the revision is reset to match the latest state.
+ *
+ * TODO: define how the desired initial revision is passed to the oak-api / mk
+ * TODO: define how and when the revision is updated (would a setRevision required? and who would use it?)
+ * TODO: define default value (head-revision?)
+ *
+ * @return the revision.
+ */
+ String getRevision();
+
+ /**
+ * The immutable name of the workspace this instance has been created for.
+ *
+ * @return name of the workspace this instance has been created for.
+ */
+ String getWorkspaceName();
+
+ /**
+ * Dispose this instance of {@code SessionInfo} as the associated
+ * JCR Session instance was logged out. This method allows an implementation
+ * to free any resources that may possibly be associated with this instance.
+ */
+ void dispose();
+}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/AuthenticationServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/AuthenticationServiceImpl.java?rev=1305860&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/AuthenticationServiceImpl.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/AuthenticationServiceImpl.java Tue Mar 27 15:00:42 2012
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.api.impl;
+
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.AuthenticationService;
+import org.apache.jackrabbit.oak.api.SessionInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.GuestCredentials;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.SimpleCredentials;
+import javax.security.auth.login.LoginException;
+
+/**
+ * AuthenticationServiceImpl...
+ */
+public class AuthenticationServiceImpl implements AuthenticationService {
+
+ /**
+ * logger instance
+ */
+ private static final Logger log = LoggerFactory.getLogger(AuthenticationServiceImpl.class);
+
+ // TODO: retrieve default wsp-name from configuration
+ private static final String DEFAULT_WORKSPACE_NAME = "default";
+
+ private final MicroKernel mk;
+
+ public AuthenticationServiceImpl(MicroKernel mk) {
+ this.mk = mk;
+
+ // FIXME: default mk-setup must be done elsewhere...
+ String headRev = mk.getHeadRevision();
+ if (!mk.nodeExists("/" + DEFAULT_WORKSPACE_NAME, headRev)) {
+ mk.commit("/", "+ \"" + DEFAULT_WORKSPACE_NAME + "\" : {}", headRev, null);
+ }
+ }
+
+ @Override
+ public SessionInfo login(Object credentials, String workspaceName) throws LoginException, NoSuchWorkspaceException {
+ // TODO: add proper implementation
+ // TODO - authentication against configurable spi-authentication
+ // TODO - validation of workspace name (including access rights for the given 'user')
+
+ final SimpleCredentials sc;
+ if (credentials == null || credentials instanceof GuestCredentials) {
+ sc = new SimpleCredentials("anonymous", new char[0]);
+ } else if (credentials instanceof SimpleCredentials) {
+ sc = (SimpleCredentials) credentials;
+ } else {
+ sc = null;
+ }
+
+ final String wspName = (workspaceName == null) ? DEFAULT_WORKSPACE_NAME : workspaceName;
+ final String revision = getRevision(credentials);
+
+ if (sc != null) {
+ return new SessionInfoImpl(sc, wspName, revision);
+ } else {
+ throw new LoginException("login failed...");
+ }
+ }
+
+ /**
+ * @param credentials The credentials object used for authentication.
+ * @return The microkernal revision. If the give credentials don't specify
+ * a specific revision number the current head revision is returned.
+ */
+ private String getRevision(Object credentials) {
+ // TODO: define if/how desired revision can be passed in by the credentials object.
+ return mk.getHeadRevision();
+ }
+}
\ No newline at end of file
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/SessionInfoImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/SessionInfoImpl.java?rev=1305860&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/SessionInfoImpl.java (added)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/api/impl/SessionInfoImpl.java Tue Mar 27 15:00:42 2012
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.oak.api.impl;
+
+import org.apache.jackrabbit.oak.api.SessionInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.SimpleCredentials;
+
+/**
+ * SessionInfoImpl...
+ */
+public class SessionInfoImpl implements SessionInfo {
+
+ /**
+ * logger instance
+ */
+ private static final Logger log = LoggerFactory.getLogger(SessionInfoImpl.class);
+
+ private final SimpleCredentials sc;
+ private final String workspaceName;
+
+ private String revision;
+
+ SessionInfoImpl(SimpleCredentials sc, String workspaceName, String revision) {
+ this.sc = sc;
+ this.workspaceName = workspaceName;
+ this.revision = revision;
+ }
+
+ @Override
+ public String getUserID() {
+ return sc.getUserID();
+ }
+
+ @Override
+ public String[] getAttributeNames() {
+ return sc.getAttributeNames();
+ }
+
+ @Override
+ public Object getAttribute(String attributeName) {
+ return sc.getAttribute(attributeName);
+ }
+
+ @Override
+ public String getRevision() {
+ return revision;
+ }
+
+ @Override
+ public String getWorkspaceName() {
+ return workspaceName;
+ }
+
+ @Override
+ public void dispose() {
+ // TODO
+
+ }
+
+ //--------------------------------------------------------------------------
+ // TODO: tmp solution as long as oak-jcr still writes to MK directly
+ public void setRevision(String revision) {
+ this.revision = revision;
+ }
+
+}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/GlobalContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/GlobalContext.java?rev=1305860&r1=1305859&r2=1305860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/GlobalContext.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/GlobalContext.java Tue Mar 27 15:00:42 2012
@@ -21,6 +21,8 @@ package org.apache.jackrabbit.oak.jcr;
import org.apache.jackrabbit.mk.MicroKernelFactory;
import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.oak.api.AuthenticationService;
+import org.apache.jackrabbit.oak.api.impl.AuthenticationServiceImpl;
import org.apache.jackrabbit.oak.jcr.configuration.RepositoryConfiguration;
import org.apache.jackrabbit.oak.jcr.util.Unchecked;
@@ -34,6 +36,7 @@ import static java.text.MessageFormat.fo
/**
* Poor man's dependency injection
* todo: OAK-17: replace by some more sophisticated mechanism
+ * todo: OAK-20: remove usages of mk on oak-jcr
* This class implements a poor man's dependency injection mechanism.
* It should be replaced by a more sophisticated mechanism for compile
* time dependency injection mechanism.
@@ -42,10 +45,12 @@ public class GlobalContext {
private final Map, Object> instances = new HashMap, Object>();
public GlobalContext(RepositoryConfiguration repositoryConfiguration) throws RepositoryException {
+ MicroKernel mk = MicroKernelFactory.getInstance(repositoryConfiguration.getMicrokernelUrl());
+ AuthenticationService authenticationService = new AuthenticationServiceImpl(mk);
put(RepositoryConfiguration.class, repositoryConfiguration);
- put(MicroKernel.class, MicroKernelFactory.getInstance(repositoryConfiguration.getMicrokernelUrl()));
+ put(AuthenticationService.class, authenticationService);
+ put(MicroKernel.class, mk);
put(Repository.class, new RepositoryImpl(this));
- put(SessionFactory.class, SessionImpl.FACTORY);
}
public T getInstance(Class forClass) {
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java?rev=1305860&r1=1305859&r2=1305860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/RepositoryImpl.java Tue Mar 27 15:00:42 2012
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.oak.jcr;
+import org.apache.jackrabbit.oak.api.AuthenticationService;
+import org.apache.jackrabbit.oak.api.SessionInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,6 +26,7 @@ import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
+import javax.security.auth.login.LoginException;
/**
* {@code RepositoryImpl}...
@@ -85,8 +88,14 @@ public class RepositoryImpl implements R
public Session login(Credentials credentials, String workspaceName) throws RepositoryException {
// TODO: needs complete refactoring
- SessionFactory sessionFactory = context.getInstance(SessionFactory.class);
- return sessionFactory.createSession(context, credentials, workspaceName);
+ AuthenticationService authentication = context.getInstance(AuthenticationService.class);
+ try {
+ SessionInfo sessionInfo = authentication.login(credentials, workspaceName);
+ return new SessionImpl(context, sessionInfo);
+ } catch (LoginException e) {
+ throw new javax.jcr.LoginException(e.getMessage());
+ }
+
}
/**
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java?rev=1305860&r1=1305859&r2=1305860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionContext.java Tue Mar 27 15:00:42 2012
@@ -30,7 +30,7 @@ public interface SessionContext sessionContext = new Context();
- return new SessionImpl(globalContext, workspaceName, revision);
- }
- };
-
- private final SessionContext sessionContext = new SessionContext() {
-
- @Override
- public SessionImpl getSession() {
- return SessionImpl.this;
- }
-
- @Override
- public GlobalContext getGlobalContext() {
- return globalContext;
- }
-
- @Override
- public String getWorkspaceName() {
- return workspaceName;
- }
-
- @Override
- public MicroKernel getMicrokernel() {
- return microKernel;
- }
-
- @Override
- public String getRevision() {
- return revision;
- }
-
- @Override
- public ValueFactory getValueFactory() {
- return valueFactory;
- }
-
- @Override
- public NodeStateProvider getNodeStateProvider() {
- return nodeStateProvider;
- }
- };
-
- private SessionImpl(GlobalContext globalContext, String workspaceName,
- String revision) {
+ SessionImpl(GlobalContext globalContext, SessionInfo sessionInfo) {
this.globalContext = globalContext;
- this.workspaceName = workspaceName;
- this.revision = revision;
+ this.sessionInfo = sessionInfo;
+ this.revision = sessionInfo.getRevision();
valueFactory = new ValueFactoryImpl();
repository = new RepositoryAdaptor(globalContext.getInstance(Repository.class), valueFactory);
workspace = new WorkspaceImpl(sessionContext);
- microKernel = globalContext.getInstance(MicroKernel.class);
- transientSpace = new TransientSpace(workspaceName, microKernel, revision);
+ transientSpace = new TransientSpace(sessionContext.getWorkspaceName(), sessionContext.getMicrokernel(), revision);
nodeStateProvider = new NodeStateProvider(sessionContext, transientSpace);
}
@@ -158,19 +92,17 @@ public class SessionImpl extends Abstrac
@Override
public String getUserID() {
- // TODO
- return null;
+ return sessionInfo.getUserID();
}
@Override
public String[] getAttributeNames() {
- // TODO
- return null; }
+ return sessionInfo.getAttributeNames();
+ }
@Override
public Object getAttribute(String name) {
- // TODO
- return null;
+ return sessionInfo.getAttribute(name);
}
@Override
@@ -200,7 +132,7 @@ public class SessionImpl extends Abstrac
@Override
public Node getRootNode() throws RepositoryException {
checkIsAlive();
- return NodeImpl.create(sessionContext, Path.create(workspaceName));
+ return NodeImpl.create(sessionContext, Path.create(sessionContext.getWorkspaceName()));
}
@Override
@@ -220,12 +152,12 @@ public class SessionImpl extends Abstrac
@Override
public Node getNode(String absPath) throws RepositoryException {
- return NodeImpl.create(sessionContext, Path.create(workspaceName, absPath));
+ return NodeImpl.create(sessionContext, Path.create(sessionContext.getWorkspaceName(), absPath));
}
@Override
public boolean nodeExists(String absPath) throws RepositoryException {
- Path path = Path.create(workspaceName, absPath);
+ Path path = Path.create(sessionContext.getWorkspaceName(), absPath);
return path.isRoot() || NodeImpl.exist(sessionContext, path);
}
@@ -235,12 +167,12 @@ public class SessionImpl extends Abstrac
throw new ItemNotFoundException(absPath);
}
- return PropertyImpl.create(sessionContext, Path.create(workspaceName, absPath));
+ return PropertyImpl.create(sessionContext, Path.create(sessionContext.getWorkspaceName(), absPath));
}
@Override
public boolean propertyExists(String absPath) throws RepositoryException {
- Path path = Path.create(workspaceName, absPath);
+ Path path = Path.create(sessionContext.getWorkspaceName(), absPath);
return !path.isRoot() && PropertyImpl.exist(sessionContext, path);
}
@@ -265,13 +197,13 @@ public class SessionImpl extends Abstrac
@Override
public void move(String srcAbsPath, String destAbsPath) throws RepositoryException {
checkIsAlive();
- Path sourcePath = Path.create(workspaceName, srcAbsPath);
+ Path sourcePath = Path.create(sessionContext.getWorkspaceName(), srcAbsPath);
TransientNodeState sourceParent = nodeStateProvider.getNodeState(sourcePath.getParent());
if (sourceParent == null) {
throw new PathNotFoundException(srcAbsPath);
}
- sourceParent.move(sourcePath.getName(), Path.create(workspaceName, destAbsPath));
+ sourceParent.move(sourcePath.getName(), Path.create(sessionContext.getWorkspaceName(), destAbsPath));
}
//------------------------------------------------------------< state >---
@@ -296,7 +228,7 @@ public class SessionImpl extends Abstrac
return transientSpace.isDirty();
}
- //------------------------------------------------------------< Lifecycle >---
+ //----------------------------------------------------------< Lifecycle >---
@Override
public boolean isLive() {
@@ -313,9 +245,11 @@ public class SessionImpl extends Abstrac
isAlive = false;
// TODO
+
+ sessionInfo.dispose();
}
- //------------------------------------------------------------< Import / Export >---
+ //----------------------------------------------------< Import / Export >---
@Override
public ContentHandler getImportContentHandler(String parentAbsPath, int uuidBehavior) throws RepositoryException {
@@ -363,7 +297,7 @@ public class SessionImpl extends Abstrac
}
}
- //------------------------------------------------------------< AccessControl >---
+ //------------------------------------------------------< AccessControl >---
@Override
public boolean hasPermission(String absPath, String actions) throws RepositoryException {
@@ -399,14 +333,14 @@ public class SessionImpl extends Abstrac
return null;
}
- //------------------------------------------------------------< Retention >---
+ //----------------------------------------------------------< Retention >---
@Override
public RetentionManager getRetentionManager() throws RepositoryException {
throw new UnsupportedRepositoryOperationException("Retention Management is not supported.");
}
- //------------------------------------------------------------< check methods >---
+ //--------------------------------------------------------------------------
/**
* Performs a sanity check on this session.
@@ -519,4 +453,43 @@ public class SessionImpl extends Abstrac
}
}
+ //--------------------------------------------------------------------------
+
+ private class Context implements SessionContext {
+
+ @Override
+ public SessionImpl getSession() {
+ return SessionImpl.this;
+ }
+
+ @Override
+ public GlobalContext getGlobalContext() {
+ return globalContext;
+ }
+
+ @Override
+ public String getWorkspaceName() {
+ return sessionInfo.getWorkspaceName();
+ }
+
+ @Override
+ public MicroKernel getMicrokernel() {
+ return globalContext.getInstance(MicroKernel.class);
+ }
+
+ @Override
+ public String getRevision() {
+ return revision;
+ }
+
+ @Override
+ public ValueFactory getValueFactory() {
+ return valueFactory;
+ }
+
+ @Override
+ public NodeStateProvider getNodeStateProvider() {
+ return nodeStateProvider;
+ }
+ }
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java?rev=1305860&r1=1305859&r2=1305860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java Tue Mar 27 15:00:42 2012
@@ -16,9 +16,6 @@
*/
package org.apache.jackrabbit.oak.jcr;
-import org.apache.jackrabbit.mk.api.MicroKernel;
-import org.apache.jackrabbit.mk.model.ChildNodeEntry;
-import org.apache.jackrabbit.oak.kernel.KernelNodeState;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.ContentHandler;
@@ -27,7 +24,6 @@ import javax.jcr.NamespaceRegistry;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Workspace;
import javax.jcr.lock.LockManager;
import javax.jcr.nodetype.NodeTypeManager;
@@ -37,14 +33,11 @@ import javax.jcr.version.Version;
import javax.jcr.version.VersionManager;
import java.io.IOException;
import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
/**
* {@code WorkspaceImpl}...
*/
public class WorkspaceImpl implements Workspace {
- public static final String DEFAULT_WORKSPACE_NAME = "default";
/**
* logger instance
@@ -76,8 +69,8 @@ public class WorkspaceImpl implements Wo
@SuppressWarnings("deprecation")
@Override
public void copy(String srcWorkspace, String srcAbsPath, String destAbsPath) throws RepositoryException {
- getOakSession().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
- getOakSession().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
+ getSessionImpl().checkIsAlive();
// TODO -> SPI
@@ -86,8 +79,8 @@ public class WorkspaceImpl implements Wo
@SuppressWarnings("deprecation")
@Override
public void clone(String srcWorkspace, String srcAbsPath, String destAbsPath, boolean removeExisting) throws RepositoryException {
- getOakSession().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
- getOakSession().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
+ getSessionImpl().checkIsAlive();
// TODO -> SPI
@@ -96,8 +89,8 @@ public class WorkspaceImpl implements Wo
@SuppressWarnings("deprecation")
@Override
public void move(String srcAbsPath, String destAbsPath) throws RepositoryException {
- getOakSession().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
- getOakSession().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
+ getSessionImpl().checkIsAlive();
// TODO -> SPI
@@ -110,8 +103,8 @@ public class WorkspaceImpl implements Wo
@Override
public LockManager getLockManager() throws RepositoryException {
- getOakSession().checkIsAlive();
- getOakSession().checkSupportedOption(Repository.OPTION_LOCKING_SUPPORTED);
+ getSessionImpl().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.OPTION_LOCKING_SUPPORTED);
// TODO
return null;
@@ -119,7 +112,7 @@ public class WorkspaceImpl implements Wo
@Override
public QueryManager getQueryManager() throws RepositoryException {
- getOakSession().checkIsAlive();
+ getSessionImpl().checkIsAlive();
// TODO
return null;
@@ -127,7 +120,7 @@ public class WorkspaceImpl implements Wo
@Override
public NamespaceRegistry getNamespaceRegistry() throws RepositoryException {
- getOakSession().checkIsAlive();
+ getSessionImpl().checkIsAlive();
// TODO
return null;
@@ -135,50 +128,43 @@ public class WorkspaceImpl implements Wo
@Override
public NodeTypeManager getNodeTypeManager() throws RepositoryException {
- getOakSession().checkIsAlive();
+ getSessionImpl().checkIsAlive();
// TODO
- throw new UnsupportedRepositoryOperationException();
+ return null;
}
@Override
public ObservationManager getObservationManager() throws RepositoryException {
- getOakSession().checkSupportedOption(Repository.OPTION_OBSERVATION_SUPPORTED);
- getOakSession().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.OPTION_OBSERVATION_SUPPORTED);
+ getSessionImpl().checkIsAlive();
// TODO
- throw new UnsupportedRepositoryOperationException();
+ return null;
}
@Override
public VersionManager getVersionManager() throws RepositoryException {
- getOakSession().checkIsAlive();
- getOakSession().checkSupportedOption(Repository.OPTION_VERSIONING_SUPPORTED);
+ getSessionImpl().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.OPTION_VERSIONING_SUPPORTED);
// TODO
- throw new UnsupportedRepositoryOperationException();
+ return null;
}
@Override
public String[] getAccessibleWorkspaceNames() throws RepositoryException {
- getOakSession().checkIsAlive();
+ getSessionImpl().checkIsAlive();
- MicroKernel microKernel = sessionContext.getMicrokernel();
- String revision = sessionContext.getRevision();
- KernelNodeState rootState = new KernelNodeState(microKernel, "/", revision);
- List workspaces = new ArrayList();
- for (ChildNodeEntry entry : rootState.getChildNodeEntries(0, -1)) {
- workspaces.add(entry.getName());
- }
-
- return workspaces.toArray(new String[workspaces.size()]);
+ // TODO -> SPI
+ return null;
}
@SuppressWarnings("deprecation")
@Override
public ContentHandler getImportContentHandler(String parentAbsPath, int uuidBehavior) throws RepositoryException {
- getOakSession().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
- getOakSession().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
+ getSessionImpl().checkIsAlive();
// TODO
return null;
@@ -187,47 +173,38 @@ public class WorkspaceImpl implements Wo
@SuppressWarnings("deprecation")
@Override
public void importXML(String parentAbsPath, InputStream in, int uuidBehavior) throws IOException, RepositoryException {
- getOakSession().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
- getOakSession().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.LEVEL_2_SUPPORTED);
+ getSessionImpl().checkIsAlive();
// TODO -> SPI
}
@Override
public void createWorkspace(String name) throws RepositoryException {
- getOakSession().checkIsAlive();
- getOakSession().checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
+ getSessionImpl().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
- createWorkspace(sessionContext.getMicrokernel(), name);
+ // TODO -> SPI
}
@Override
public void createWorkspace(String name, String srcWorkspace) throws RepositoryException {
- getOakSession().checkIsAlive();
- getOakSession().checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
+ getSessionImpl().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
// TODO -> SPI
}
@Override
public void deleteWorkspace(String name) throws RepositoryException {
- getOakSession().checkIsAlive();
- getOakSession().checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
+ getSessionImpl().checkIsAlive();
+ getSessionImpl().checkSupportedOption(Repository.OPTION_WORKSPACE_MANAGEMENT_SUPPORTED);
- MicroKernel microKernel = sessionContext.getMicrokernel();
- String revision = microKernel.getHeadRevision();
- microKernel.commit("/", "- \"" + name + '\"', revision, null);
+ // TODO -> SPI
}
//------------------------------------------------------------< private >---
-
- private SessionImpl getOakSession() {
+ private SessionImpl getSessionImpl() {
return sessionContext.getSession();
}
-
- static void createWorkspace(MicroKernel microKernel,String name) {
- String revision = microKernel.getHeadRevision();
- microKernel.commit("/", "+ \"" + name + "\" : {}", revision, null);
- }
-
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java?rev=1305860&r1=1305859&r2=1305860&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java Tue Mar 27 15:00:42 2012
@@ -114,51 +114,6 @@ public class RepositoryTest extends Abst
assertNotNull(getSession());
}
- @Test(expected = NoSuchWorkspaceException.class)
- public void loginInvalidWorkspace() throws RepositoryException {
- Repository repository = getRepository();
- repository.login("invalid");
- }
-
- @Test
- public void getWorkspaceNames() throws RepositoryException {
- String[] workspaces = getSession().getWorkspace().getAccessibleWorkspaceNames();
-
- Set names = new HashSet() {{
- add("default");
- }};
-
- assertTrue(asList(workspaces).containsAll(names));
- assertTrue(names.containsAll(asList(workspaces)));
- }
-
- @Test
- public void createDeleteWorkspace() throws RepositoryException {
- getSession().getWorkspace().createWorkspace("new");
-
- Session session2 = getRepository().login();
- try {
- String[] workspaces = session2.getWorkspace().getAccessibleWorkspaceNames();
- assertTrue(asList(workspaces).contains("new"));
- Session session3 = getRepository().login("new");
- assertEquals("new", session3.getWorkspace().getName());
- session3.logout();
- session2.getWorkspace().deleteWorkspace("new");
- }
- finally {
- session2.logout();
- }
-
- Session session4 = getRepository().login();
- try {
- String[] workspaces = session4.getWorkspace().getAccessibleWorkspaceNames();
- assertFalse(asList(workspaces).contains("new"));
- }
- finally {
- session4.logout();
- }
- }
-
@Test
public void getRoot() throws RepositoryException {
Node root = getSession().getRootNode();