You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by cl...@apache.org on 2007/09/25 00:20:16 UTC
svn commit: r578997 - in
/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping: ./
src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/
src/main/java/org/apache/jackrabbit/ocm/manager/impl/
src/main/java/org/apache/jackrabbi...
Author: clombart
Date: Mon Sep 24 15:19:48 2007
New Revision: 578997
URL: http://svn.apache.org/viewvc?rev=578997&view=rev
Log:
Reorganise the ocm project - second step : Remove all Jackrabbit dependencies.
right now, Jackrabbit is only used for the unit tests.
RepositoryUtil has been split into 2 distincts classes :
1/ NodeUtil : utility class for managing jcr nodes.
2/ RepositoryUtil : utility class to connect & setup a Jackrabbit repo. This could be rename into JackrabbitRepoUtil :-)
Added:
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/repository/NodeUtil.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/NodeUtilTest.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtil.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleAccessManager.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleLoginModule.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/transaction/
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/transaction/jackrabbit/
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/transaction/jackrabbit/UserTransactionImpl.java
Removed:
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/repository/RepositoryUtil.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/security/
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/transaction/
Modified:
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/pom.xml
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/NTCollectionConverterImpl.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/AllTests.java
jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtilTest.java
Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/pom.xml?rev=578997&r1=578996&r2=578997&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/pom.xml (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/pom.xml Mon Sep 24 15:19:48 2007
@@ -1,178 +1,193 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
- 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.
- -->
+ 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.
+-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd ">
- <modelVersion>4.0.0</modelVersion>
+ <modelVersion>4.0.0</modelVersion>
- <!-- ====================================================================== -->
- <!-- P R O J E C T D E S C R I P T I O N -->
- <!-- ====================================================================== -->
- <parent>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit</artifactId>
- <version>1.4-SNAPSHOT</version>
- </parent>
- <artifactId>jackrabbit-ocm</artifactId>
- <packaging>jar</packaging>
- <name>Jackrabbit Object Content Mapping</name>
- <description>This Jackrabbit subproject is an object/JCR persistence and query service. This tools lets you to persist java objects into a JCR compliant repository - including association, inheritance, polymorphism, composition, and the Java collections framework. Furthermore, this jcr-mapping allows you to express queries in Java-based Criteria, as well as in JCR query language. It offers also features like version support and object locking.</description>
- <inceptionYear>2007</inceptionYear>
-
- <!-- ====================================================================== -->
- <!-- B U I L D -->
- <!-- ====================================================================== -->
- <build>
- <plugins>
- <plugin>
- <inherited>true</inherited>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <target>1.5</target>
- <source>1.5</source>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-surefire-plugin</artifactId>
- <configuration>
- <argLine>-Xmx256m</argLine>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <!-- ====================================================================== -->
- <!-- D E P E N D E N C I E S -->
- <!-- ====================================================================== -->
- <dependencies>
- <dependency>
- <groupId>javax.jcr</groupId>
- <artifactId>jcr</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-api</artifactId>
- <version>1.4-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-core</artifactId>
- <version>1.4-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-jcr-commons</artifactId>
- <version>1.4-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.lucene</groupId>
- <artifactId>lucene-core</artifactId>
- <version>2.2.0</version>
- </dependency>
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.1</version>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.0.2</version>
- </dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.1</version>
- </dependency>
-
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.0</version>
- </dependency>
- <dependency>
- <groupId>cglib</groupId>
- <artifactId>cglib</artifactId>
- <version>2.1_3</version>
- </dependency>
- <dependency>
- <groupId>commons-beanutils</groupId>
- <artifactId>commons-beanutils</artifactId>
- <version>1.7.0</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.8</version>
- </dependency>
- <!-- Test -->
- <dependency>
- <groupId>geronimo-spec</groupId>
- <artifactId>geronimo-spec-jta</artifactId>
- <version>1.0-M1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- <version>2.6.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xmlParserAPIs</artifactId>
- <version>2.0.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.derby</groupId>
- <artifactId>derby</artifactId>
- <version>10.2.1.6</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>commons-digester</groupId>
- <artifactId>commons-digester</artifactId>
- <version>1.7</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <scm>
- <connection>
- scm:svn:http://svn.apache.org/repos/asf/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping
- </connection>
- <developerConnection>
- scm:svn:https://svn.apache.org/repos/asf/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping
- </developerConnection>
- <url>
- http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping
- </url>
- </scm>
+ <!-- ====================================================================== -->
+ <!-- P R O J E C T D E S C R I P T I O N -->
+ <!-- ====================================================================== -->
+ <parent>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ </parent>
+ <artifactId>jackrabbit-ocm</artifactId>
+ <packaging>jar</packaging>
+ <name>Jackrabbit Object Content Mapping</name>
+ <description>
+ This Jackrabbit subproject is an object/JCR persistence and
+ query service. This tools lets you to persist java objects into
+ a JCR compliant repository - including association, inheritance,
+ polymorphism, composition, and the Java collections framework.
+ Furthermore, this jcr-mapping allows you to express queries in
+ Java-based Criteria, as well as in JCR query language. It offers
+ also features like version support and object locking.
+ </description>
+ <inceptionYear>2007</inceptionYear>
+
+ <!-- ====================================================================== -->
+ <!-- B U I L D -->
+ <!-- ====================================================================== -->
+ <build>
+ <plugins>
+ <plugin>
+ <inherited>true</inherited>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <target>1.5</target>
+ <source>1.5</source>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <argLine>-Xmx256m</argLine>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <!-- ====================================================================== -->
+ <!-- D E P E N D E N C I E S -->
+ <!-- ====================================================================== -->
+ <dependencies>
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>cglib</groupId>
+ <artifactId>cglib</artifactId>
+ <version>2.1_3</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-beanutils</groupId>
+ <artifactId>commons-beanutils</artifactId>
+ <version>1.7.0</version>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.8</version>
+ </dependency>
+
+ <!-- Test -->
+
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-api</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-core</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-jcr-commons</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.lucene</groupId>
+ <artifactId>lucene-core</artifactId>
+ <version>2.2.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>geronimo-spec</groupId>
+ <artifactId>geronimo-spec-jta</artifactId>
+ <version>1.0-M1</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ <version>2.6.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xmlParserAPIs</artifactId>
+ <version>2.0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.2.1.6</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-digester</groupId>
+ <artifactId>commons-digester</artifactId>
+ <version>1.7</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <scm>
+ <connection>
+ scm:svn:http://svn.apache.org/repos/asf/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping
+ </connection>
+ <developerConnection>
+ scm:svn:https://svn.apache.org/repos/asf/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping
+ </developerConnection>
+ <url>
+ http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping
+ </url>
+ </scm>
</project>
Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/NTCollectionConverterImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/NTCollectionConverterImpl.java?rev=578997&r1=578996&r2=578997&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/NTCollectionConverterImpl.java (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/NTCollectionConverterImpl.java Mon Sep 24 15:19:48 2007
@@ -18,8 +18,6 @@
package org.apache.jackrabbit.ocm.manager.collectionconverter.impl;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -47,7 +45,6 @@
import org.apache.jackrabbit.ocm.mapper.model.ClassDescriptor;
import org.apache.jackrabbit.ocm.mapper.model.CollectionDescriptor;
import org.apache.jackrabbit.ocm.reflection.ReflectionUtils;
-import org.apache.jackrabbit.util.ISO9075;
/**
* Collection Mapping/convertion based on node type.
Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java?rev=578997&r1=578996&r2=578997&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java Mon Sep 24 15:19:48 2007
@@ -61,7 +61,6 @@
import org.apache.jackrabbit.ocm.query.Query;
import org.apache.jackrabbit.ocm.query.QueryManager;
import org.apache.jackrabbit.ocm.query.impl.QueryManagerImpl;
-import org.apache.jackrabbit.ocm.repository.RepositoryUtil;
import org.apache.jackrabbit.ocm.version.Version;
import org.apache.jackrabbit.ocm.version.VersionIterator;
/**
@@ -120,7 +119,6 @@
this.requestObjectCache = new RequestObjectCacheImpl();
this.objectConverter = new ObjectConverterImpl(mapper, converterProvider, new ProxyManagerImpl(), requestObjectCache);
- RepositoryUtil.setupSession(session);
}
catch (RepositoryException e)
{
@@ -148,8 +146,7 @@
this.queryManager = new QueryManagerImpl(mapper, atomicTypeConverters, session.getValueFactory());
this.requestObjectCache = new RequestObjectCacheImpl();
this.objectConverter = new ObjectConverterImpl(mapper, converterProvider, new ProxyManagerImpl(), requestObjectCache);
-
- RepositoryUtil.setupSession(session);
+
}
catch (RepositoryException e)
{
@@ -178,7 +175,6 @@
this.requestObjectCache = new RequestObjectCacheImpl();
this.objectConverter = new ObjectConverterImpl(mapper, converterProvider, new ProxyManagerImpl(), requestObjectCache);
- RepositoryUtil.setupSession(session);
}
catch (RepositoryException e)
{
@@ -207,8 +203,7 @@
this.objectConverter = converter;
this.queryManager = queryManager;
this.requestObjectCache = requestObjectCache;
-
- RepositoryUtil.setupSession(session);
+
}
/**
Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java?rev=578997&r1=578996&r2=578997&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/manager/objectconverter/impl/ObjectConverterImpl.java Mon Sep 24 15:19:48 2007
@@ -49,7 +49,7 @@
import org.apache.jackrabbit.ocm.mapper.model.CollectionDescriptor;
import org.apache.jackrabbit.ocm.mapper.model.FieldDescriptor;
import org.apache.jackrabbit.ocm.reflection.ReflectionUtils;
-import org.apache.jackrabbit.ocm.repository.RepositoryUtil;
+import org.apache.jackrabbit.ocm.repository.NodeUtil;
/**
* Default implementation for {@link ObjectConverterImpl}
@@ -139,8 +139,8 @@
public void insert(Session session, Object object) {
String path = this.getPath(session, object);
try {
- String parentPath = RepositoryUtil.getParentPath(path);
- String nodeName = RepositoryUtil.getNodeName(path);
+ String parentPath = NodeUtil.getParentPath(path);
+ String nodeName = NodeUtil.getNodeName(path);
Node parentNode = (Node) session.getItem(parentPath);
this.insert(session, parentNode, nodeName, object);
@@ -227,8 +227,8 @@
public void update(Session session, Object object) {
String path = this.getPath(session, object);
try {
- String parentPath = RepositoryUtil.getParentPath(path);
- String nodeName = RepositoryUtil.getNodeName(path);
+ String parentPath = NodeUtil.getParentPath(path);
+ String nodeName = NodeUtil.getNodeName(path);
Node parentNode = (Node) session.getItem(parentPath);
this.update(session, parentNode, nodeName, object);
} catch (PathNotFoundException pnfe) {
Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/repository/NodeUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/repository/NodeUtil.java?rev=578997&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/repository/NodeUtil.java (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/main/java/org/apache/jackrabbit/ocm/repository/NodeUtil.java Mon Sep 24 15:19:48 2007
@@ -0,0 +1,116 @@
+/*
+ * 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.ocm.repository;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.ocm.exception.JcrMappingException;
+import org.apache.jackrabbit.ocm.exception.ObjectContentManagerException;
+
+/**
+* Utility class for managing JCR nodes.
+*
+*
+* @author <a href="mailto:christophe.lombart@sword-technologies.com">Lombart Christophe </a>
+* @version $Id: Exp $
+*/
+public class NodeUtil
+{
+
+
+ /** Item path separator */
+ public static final String PATH_SEPARATOR = "/";
+
+ private final static Log log = LogFactory.getLog(NodeUtil.class);
+
+
+ /**
+ * Check if a path is valid
+ *
+ * @param path The path to validate
+ * @return true if the path is valid, else false
+ */
+ public static boolean isValidPath(String path)
+ {
+ if ((path == null) ||
+ (path.equals(PATH_SEPARATOR)) ||
+ (path.endsWith(PATH_SEPARATOR)) ||
+ (! path.startsWith(PATH_SEPARATOR)) ||
+ (path.equals("")))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Get the parent path
+ * @param path The path from wich the parent path has to be returned
+ * @return The parent path
+ *
+ * @throws ObjectContentManagerException when the path is invalid
+ */
+ public static String getParentPath(String path) throws ObjectContentManagerException
+ {
+ String parentPath = "";
+
+ if (!isValidPath(path))
+ {
+ throw new JcrMappingException("Invalid path : " + path);
+ }
+
+ String[] pathElements = path.split(PATH_SEPARATOR);
+
+ // Firts path element should be = empty string because a uri always start with '/'
+ // So, if len=2, means it is a root folder like '/foo'.
+ // In this case the uri has not parent folder => return "/"
+ if (pathElements.length == 2)
+ {
+ return PATH_SEPARATOR;
+ }
+
+ for(int i=0; i < pathElements.length -1; i++)
+ {
+ if (! pathElements[i].equals(""))
+ {
+ parentPath += PATH_SEPARATOR + pathElements[i];
+ }
+ }
+ return parentPath;
+ }
+
+ /**
+ * Get the node name
+ * @param path The path from which the node name has to be retrieved
+ * @return The node name
+ *
+ * @throws ObjectContentManagerException when the path is invalid
+ */
+ public static String getNodeName(String path) throws ObjectContentManagerException
+ {
+
+ String[] pathElements = path.split(PATH_SEPARATOR);
+
+ if (! isValidPath(path))
+ {
+ throw new JcrMappingException("Invalid path : " + path);
+ }
+ return pathElements[pathElements.length-1];
+ }
+
+
+}
Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java?rev=578997&r1=578996&r2=578997&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/TestBase.java Mon Sep 24 15:19:48 2007
@@ -98,6 +98,7 @@
if (!isInit) {
initObjectContentManager();
+ RepositoryUtil.setupSession(getSession());
registerNodeTypes(getSession());
isInit = true;
}
@@ -129,6 +130,7 @@
if (ocm == null)
{
initObjectContentManager();
+ RepositoryUtil.setupSession(getSession());
registerNodeTypes(getSession());
}
return ocm;
Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/AllTests.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/AllTests.java?rev=578997&r1=578996&r2=578997&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/AllTests.java (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/AllTests.java Mon Sep 24 15:19:48 2007
@@ -37,6 +37,7 @@
TestSuite suite= new TestSuite("Test for org.apache.jackrabbit.ocm.repository");
//$JUnit-BEGIN$
suite.addTestSuite(RepositoryUtilTest.class);
+ suite.addTestSuite(NodeUtilTest.class);
//$JUnit-END$
Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/NodeUtilTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/NodeUtilTest.java?rev=578997&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/NodeUtilTest.java (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/NodeUtilTest.java Mon Sep 24 15:19:48 2007
@@ -0,0 +1,125 @@
+/*
+ * 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.ocm.repository;
+
+import junit.extensions.TestSetup;
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/** Testcase for RepositoryUtil.
+ *
+ * @author <a href="mailto:christophe.lombart@sword-technologies.com">Christophe Lombart</a>
+ * @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a>
+ */
+public class NodeUtilTest extends TestCase
+{
+
+ /**
+ * <p>Defines the test case name for junit.</p>
+ * @param testName The test case name.
+ */
+ public NodeUtilTest(String testName)
+ {
+ super(testName);
+ }
+
+ /**
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ }
+
+ /**
+ * @see junit.framework.TestCase#tearDown()
+ */
+ public void tearDown() throws Exception
+ {
+ super.tearDown();
+ }
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite(NodeUtilTest.class);
+ // All methods starting with "test" will be executed in the test suite.
+ return new TestSetup(suite) {
+ protected void setUp() throws Exception {
+ super.setUp();
+ RepositoryUtil.registerRepository("repositoryTest", "./src/test/test-config/repository-derby.xml", "target/repository");
+ }
+
+ protected void tearDown() throws Exception {
+ RepositoryUtil.unRegisterRepository("repositoryTest");
+ super.tearDown();
+ }
+
+ };
+ }
+
+
+ /**
+ * Test for getParentPath()
+ *
+ */
+ public void testGetParentPath()
+ {
+ try
+ {
+ String parentPath = NodeUtil.getParentPath("/test");
+ assertNotNull("parent path is null for /test", parentPath);
+ assertTrue("parent path is incorrect for /test", parentPath.equals("/"));
+
+ parentPath = NodeUtil.getParentPath("/test/test2");
+ assertNotNull("parent path is null for /test/test2", parentPath);
+ assertTrue("parent path is incorrect for /test/test2", parentPath.equals("/test"));
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("Unable to find the repository : " + e);
+ }
+ }
+
+ /**
+ * Test for getNodeName()
+ *
+ */
+ public void testGetNodeName()
+ {
+ try
+ {
+ String nodeName = NodeUtil.getNodeName("/test");
+ assertNotNull("node name is null for /test", nodeName);
+ assertTrue("node name is incorrect for /test", nodeName.equals("test"));
+
+ nodeName = NodeUtil.getNodeName("/test/test2");
+ assertNotNull("node name is null for /test/test2", nodeName);
+ assertTrue("node name is incorrect for /test/test2", nodeName.equals("test2"));
+
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ fail("Unable to find the repository : " + e);
+ }
+ }
+
+
+}
\ No newline at end of file
Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtil.java?rev=578997&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtil.java (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtil.java Mon Sep 24 15:19:48 2007
@@ -0,0 +1,227 @@
+/*
+ * 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.ocm.repository;
+
+import java.util.Hashtable;
+
+import javax.jcr.Repository;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.jackrabbit.core.jndi.RegistryHelper;
+import org.apache.jackrabbit.ocm.exception.JcrMappingException;
+import org.apache.jackrabbit.ocm.exception.ObjectContentManagerException;
+import org.apache.jackrabbit.ocm.exception.RepositoryException;
+import org.apache.jackrabbit.util.ISO9075;
+import org.apache.jackrabbit.util.Text;
+
+/**
+* Utility class for managing JCR repositories.
+* <b>Note</b>: most of the utility methods in this class can be used only with Jackrabbit.
+*
+* @author <a href="mailto:christophe.lombart@sword-technologies.com">Lombart Christophe </a>
+* @version $Id: Exp $
+*/
+public class RepositoryUtil
+{
+
+ /** namespace prefix constant */
+ public static final String OCM_NAMESPACE_PREFIX = "ocm";
+
+ /** namespace constant */
+ public static final String OCM_NAMESPACE = "http://jackrabbit.apache.org/ocm";
+
+ /** Item path separator */
+ public static final String PATH_SEPARATOR = "/";
+
+ private final static Log log = LogFactory.getLog(RepositoryUtil.class);
+
+ /**
+ * Register a new repository
+ *
+ * @param repositoryName The repository unique name
+ * @param configFile The JCR config file
+ * @param homeDir The directory containing the complete repository settings (workspace, node types, ...)
+ *
+ * @throws RepositoryException when it is not possible to register the repository
+ */
+ public static void registerRepository(String repositoryName, String configFile, String homeDir) throws RepositoryException
+ {
+ try
+ {
+ Hashtable env = new Hashtable();
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
+ env.put(Context.PROVIDER_URL, "localhost");
+ InitialContext ctx = new InitialContext(env);
+
+ RegistryHelper.registerRepository(ctx, repositoryName, configFile, homeDir, true);
+ }
+ catch (Exception e)
+ {
+ throw new RepositoryException("Impossible to register the respository : " +
+ repositoryName + " - config file : " + configFile, e);
+ }
+
+ }
+
+
+ /**
+ * Unregister a repository
+ *
+ * @param repositoryName The repository unique name
+ *
+ * @throws RepositoryException when it is not possible to unregister the repository
+ */
+ public static void unRegisterRepository(String repositoryName) throws RepositoryException
+ {
+ try
+ {
+ Hashtable env = new Hashtable();
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
+ env.put(Context.PROVIDER_URL, "localhost");
+ InitialContext ctx = new InitialContext(env);
+
+ RegistryHelper.unregisterRepository(ctx, repositoryName);
+ }
+ catch (Exception e)
+ {
+ throw new RepositoryException("Impossible to unregister the respository : " +
+ repositoryName , e);
+ }
+
+ }
+
+ /**
+ * Get a repository
+ *
+ * @param repositoryName The repository name
+ * @return a JCR repository reference
+ *
+ * @throws RepositoryException when it is not possible to get the repository.
+ * Before calling this method, the repository has to be registered (@see RepositoryUtil#registerRepository(String, String, String)
+ */
+ public static Repository getRepository(String repositoryName) throws RepositoryException
+ {
+ try
+ {
+ Hashtable env = new Hashtable();
+ env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
+ env.put(Context.PROVIDER_URL, "localhost");
+ InitialContext ctx = new InitialContext(env);
+
+ Repository repository = (Repository) ctx.lookup(repositoryName);
+ return repository;
+ }
+ catch (Exception e)
+ {
+ throw new RepositoryException("Impossible to get the repository : " + repositoryName, e);
+ }
+ }
+
+ /**
+ * Connect to a JCR repository
+ *
+ * @param repository The JCR repository
+ * @param user The user name
+ * @param password The password
+ * @return a valid JCR session
+ *
+ * @throws RepositoryException when it is not possible to connect to the JCR repository
+ */
+ public static Session login(Repository repository, String user, String password) throws RepositoryException
+ {
+ try
+ {
+ Session session = repository.login(new SimpleCredentials(user, password.toCharArray()), null);
+
+
+ return session;
+ }
+ catch (Exception e)
+ {
+ throw new RepositoryException("Impossible to login ", e);
+ }
+ }
+
+
+
+
+
+ /**
+ * Setup the session.
+ * Until now, we check only if the namespace prefix exist in the repository
+ *
+ */
+ public static void setupSession(Session session) throws RepositoryException
+ {
+ try
+ {
+ log.info("Setup Jcr session setup ...");
+
+ String[] jcrNamespaces = session.getWorkspace().getNamespaceRegistry().getPrefixes();
+ boolean createNamespace = true;
+ for (int i = 0; i < jcrNamespaces.length; i++)
+ {
+ if (jcrNamespaces[i].equals(OCM_NAMESPACE_PREFIX))
+ {
+ createNamespace = false;
+ log.debug("Jackrabbit OCM namespace exists.");
+ }
+ }
+
+ if (createNamespace)
+ {
+ session.getWorkspace().getNamespaceRegistry().registerNamespace(OCM_NAMESPACE_PREFIX, OCM_NAMESPACE);
+ log.info("Successfully created Jackrabbit OCM namespace.");
+ }
+
+ if (session.getRootNode() != null)
+ {
+ log.info("Jcr session setup successfull.");
+ }
+
+
+ }
+ catch (Exception e)
+ {
+ log.error("Error while setting up the jcr session.", e);
+ throw new RepositoryException(e.getMessage());
+ }
+ }
+
+ /**
+ * Encode a path
+ * @TODO : drop Jackrabbit dependency
+ *
+ * @param path the path to encode
+ * @return the encoded path
+ *
+ */
+ public static String encodePath(String path)
+ {
+ String[] pathElements = Text.explode(path, '/');
+ for (int i=0;i<pathElements.length;i++)
+ {
+ pathElements[i] = ISO9075.encode(pathElements[i]);
+ }
+ return "/" + Text.implode(pathElements, "/");
+ }
+}
Modified: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtilTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtilTest.java?rev=578997&r1=578996&r2=578997&view=diff
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtilTest.java (original)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/repository/RepositoryUtilTest.java Mon Sep 24 15:19:48 2007
@@ -16,7 +16,6 @@
*/
package org.apache.jackrabbit.ocm.repository;
-import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.Session;
@@ -30,7 +29,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.jackrabbit.ocm.repository.RepositoryUtil;
import org.apache.jackrabbit.ocm.transaction.jackrabbit.UserTransactionImpl;
/** Testcase for RepositoryUtil.
@@ -140,53 +138,7 @@
}
}
- /**
- * Test for getParentPath()
- *
- */
- public void testGetParentPath()
- {
- try
- {
- String parentPath = RepositoryUtil.getParentPath("/test");
- assertNotNull("parent path is null for /test", parentPath);
- assertTrue("parent path is incorrect for /test", parentPath.equals("/"));
-
- parentPath = RepositoryUtil.getParentPath("/test/test2");
- assertNotNull("parent path is null for /test/test2", parentPath);
- assertTrue("parent path is incorrect for /test/test2", parentPath.equals("/test"));
-
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail("Unable to find the repository : " + e);
- }
- }
- /**
- * Test for getNodeName()
- *
- */
- public void testGetNodeName()
- {
- try
- {
- String nodeName = RepositoryUtil.getNodeName("/test");
- assertNotNull("node name is null for /test", nodeName);
- assertTrue("node name is incorrect for /test", nodeName.equals("test"));
-
- nodeName = RepositoryUtil.getNodeName("/test/test2");
- assertNotNull("node name is null for /test/test2", nodeName);
- assertTrue("node name is incorrect for /test/test2", nodeName.equals("test2"));
-
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail("Unable to find the repository : " + e);
- }
- }
public void testEncodePath()
{
Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleAccessManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleAccessManager.java?rev=578997&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleAccessManager.java (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleAccessManager.java Mon Sep 24 15:19:48 2007
@@ -0,0 +1,164 @@
+/*
+ * 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.ocm.security;
+
+import javax.jcr.AccessDeniedException;
+import javax.jcr.ItemNotFoundException;
+import javax.jcr.NoSuchWorkspaceException;
+import javax.jcr.RepositoryException;
+import javax.security.auth.Subject;
+
+import org.apache.jackrabbit.core.HierarchyManager;
+import org.apache.jackrabbit.core.ItemId;
+import org.apache.jackrabbit.core.security.AMContext;
+import org.apache.jackrabbit.core.security.AccessManager;
+import org.apache.jackrabbit.core.security.AnonymousPrincipal;
+import org.apache.jackrabbit.core.security.SystemPrincipal;
+import org.apache.log4j.Logger;
+
+/**
+ * <code>SimpleAccessManager</code> ...
+ */
+public class SimpleAccessManager implements AccessManager
+{
+
+ private static Logger log = Logger.getLogger(SimpleAccessManager.class);
+
+ /**
+ * Subject whose access rights this AccessManager should reflect
+ */
+ protected Subject subject;
+
+ /**
+ * hierarchy manager used for ACL-based access control model
+ */
+ protected HierarchyManager hierMgr;
+
+ private boolean initialized;
+
+ protected boolean system;
+
+ protected boolean anonymous;
+
+ /**
+ * Empty constructor
+ */
+ public SimpleAccessManager()
+ {
+ initialized = false;
+ anonymous = false;
+ system = false;
+ }
+
+ //--------------------------------------------------------< AccessManager >
+ /**
+ * {@inheritDoc}
+ */
+ public void init(AMContext context) throws AccessDeniedException, Exception
+ {
+ if (initialized)
+ {
+ throw new IllegalStateException("already initialized");
+ }
+
+ subject = context.getSubject();
+ hierMgr = context.getHierarchyManager();
+ anonymous = !subject.getPrincipals(AnonymousPrincipal.class).isEmpty();
+ system = !subject.getPrincipals(SystemPrincipal.class).isEmpty();
+
+ // @todo check permission to access given workspace based on principals
+ initialized = true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public synchronized void close() throws Exception
+ {
+ if (!initialized)
+ {
+ throw new IllegalStateException("not initialized");
+ }
+
+ initialized = false;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void checkPermission(ItemId id, int permissions) throws AccessDeniedException, ItemNotFoundException, RepositoryException
+ {
+ if (!initialized)
+ {
+ throw new IllegalStateException("not initialized");
+ }
+
+ if (system)
+ {
+ // system has always all permissions
+ return;
+ }
+ else if (anonymous)
+ {
+ // anonymous is always denied WRITE & REMOVE premissions
+ if ((permissions & WRITE) == WRITE || (permissions & REMOVE) == REMOVE)
+ {
+ throw new AccessDeniedException();
+ }
+ }
+ // @todo check permission based on principals
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean isGranted(ItemId id, int permissions) throws ItemNotFoundException, RepositoryException
+ {
+ if (!initialized)
+ {
+ throw new IllegalStateException("not initialized");
+ }
+
+ if (system)
+ {
+ // system has always all permissions
+ return true;
+ }
+ else if (anonymous)
+ {
+ // anonymous is always denied WRITE & REMOVE premissions
+ if ((permissions & WRITE) == WRITE || (permissions & REMOVE) == REMOVE)
+ {
+ return false;
+ }
+ }
+
+ // @todo check permission based on principals
+ return true;
+
+
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean canAccess(String workspaceName) throws NoSuchWorkspaceException, RepositoryException
+ {
+ // @todo check permission to access given workspace based on principals
+ return true;
+ }
+}
Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleLoginModule.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleLoginModule.java?rev=578997&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleLoginModule.java (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/security/SimpleLoginModule.java Mon Sep 24 15:19:48 2007
@@ -0,0 +1,221 @@
+/*
+ * 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.ocm.security;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.jcr.Credentials;
+import javax.jcr.SimpleCredentials;
+import javax.security.auth.Subject;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import javax.security.auth.login.FailedLoginException;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.spi.LoginModule;
+
+import org.apache.jackrabbit.core.security.AnonymousPrincipal;
+import org.apache.jackrabbit.core.security.CredentialsCallback;
+import org.apache.jackrabbit.core.security.SecurityConstants;
+import org.apache.jackrabbit.core.security.UserPrincipal;
+import org.apache.log4j.Logger;
+
+/**
+ * A <code>SimpleLoginModule</code> ...
+ */
+public class SimpleLoginModule implements LoginModule
+{
+
+ private static Logger log = Logger.getLogger(SimpleLoginModule.class);
+
+ /**
+ * Name of the anonymous user id option in the LoginModule configuration
+ */
+ private static final String OPT_ANONYMOUS = "anonymousId";
+
+ /**
+ * The default user id for anonymous login
+ */
+ private static final String DEFAULT_ANONYMOUS_ID = "anonymous";
+
+ // initial state
+ private Subject subject;
+
+ private CallbackHandler callbackHandler;
+
+ private Map sharedState;
+
+ private Map options;
+
+ // configurable options
+ //private boolean someOpt = false;
+
+ // local authentication state:
+ // the principals, i.e. the authenticated identities
+ private final Set principals = new HashSet();
+
+ /**
+ * Id of an anonymous user login
+ */
+ private String anonymousUserId = DEFAULT_ANONYMOUS_ID;
+
+ /**
+ * Constructor
+ */
+ public SimpleLoginModule()
+ {
+ }
+
+ //----------------------------------------------------------< LoginModule >
+ /**
+ * {@inheritDoc}
+ */
+ public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options)
+ {
+ this.subject = subject;
+ this.callbackHandler = callbackHandler;
+ this.sharedState = sharedState;
+ this.options = options;
+
+ // initialize any configured options
+ //someOpt = "true".equalsIgnoreCase((String)options.get("someOpt"));
+ String userId = (String) options.get(OPT_ANONYMOUS);
+ if (userId != null)
+ {
+ anonymousUserId = userId;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean login() throws LoginException
+ {
+ // prompt for a user name and password
+ if (callbackHandler == null)
+ {
+ throw new LoginException("no CallbackHandler available");
+ }
+
+ Callback[] callbacks = new Callback[]
+ { new CredentialsCallback() };
+
+ boolean authenticated = false;
+ principals.clear();
+ try
+ {
+ callbackHandler.handle(callbacks);
+ // credentials
+ CredentialsCallback ccb = (CredentialsCallback) callbacks[0];
+ Credentials creds = ccb.getCredentials();
+ if (creds != null)
+ {
+ if (creds instanceof SimpleCredentials)
+ {
+ SimpleCredentials sc = (SimpleCredentials) creds;
+ // authenticate
+
+ Object attr = sc.getAttribute(SecurityConstants.IMPERSONATOR_ATTRIBUTE);
+ if (attr != null && attr instanceof Subject)
+ {
+ Subject impersonator = (Subject) attr;
+ // @todo check privileges to 'impersonate' the user represented by the supplied credentials
+ }
+ else
+ {
+ // @todo implement simple username/password authentication
+ }
+
+ if (anonymousUserId.equals(sc.getUserID()))
+ {
+ principals.add(new AnonymousPrincipal());
+ }
+ else
+ {
+ // else assume the user we authenticated is the UserPrincipal
+ principals.add(new UserPrincipal(sc.getUserID()));
+ }
+ authenticated = true;
+ }
+ }
+ }
+ catch (java.io.IOException ioe)
+ {
+ throw new LoginException(ioe.toString());
+ }
+ catch (UnsupportedCallbackException uce)
+ {
+ throw new LoginException(uce.getCallback().toString() + " not available");
+ }
+
+ if (authenticated)
+ {
+ return !principals.isEmpty();
+ }
+ else
+ {
+ // authentication failed: clean out state
+ principals.clear();
+ throw new FailedLoginException();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean commit() throws LoginException
+ {
+ if (principals.isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ // add a principals (authenticated identities) to the Subject
+ subject.getPrincipals().addAll(principals);
+ return true;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean abort() throws LoginException
+ {
+ if (principals.isEmpty())
+ {
+ return false;
+ }
+ else
+ {
+ logout();
+ }
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public boolean logout() throws LoginException
+ {
+ subject.getPrincipals().removeAll(principals);
+ principals.clear();
+ return true;
+ }
+}
Added: jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/transaction/jackrabbit/UserTransactionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/transaction/jackrabbit/UserTransactionImpl.java?rev=578997&view=auto
==============================================================================
--- jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/transaction/jackrabbit/UserTransactionImpl.java (added)
+++ jackrabbit/trunk/contrib/jackrabbit-jcr-mapping/jcr-mapping/src/test/java/org/apache/jackrabbit/ocm/transaction/jackrabbit/UserTransactionImpl.java Mon Sep 24 15:19:48 2007
@@ -0,0 +1,213 @@
+/*
+ * 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.ocm.transaction.jackrabbit;
+
+import javax.jcr.Session;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.Status;
+import javax.transaction.SystemException;
+import javax.transaction.UserTransaction;
+import javax.transaction.xa.XAException;
+import javax.transaction.xa.XAResource;
+import javax.transaction.xa.Xid;
+
+import org.apache.jackrabbit.core.XASession;
+
+/**
+ * Internal {@link javax.transaction.UserTransaction} implementation.
+ */
+public class UserTransactionImpl implements UserTransaction {
+
+ /**
+ * Global transaction id counter
+ */
+ private static byte counter = 0;
+
+ /**
+ * XAResource
+ */
+ private final XAResource xares;
+
+ /**
+ * Xid
+ */
+ private Xid xid;
+
+ /**
+ * Status
+ */
+ private int status = Status.STATUS_NO_TRANSACTION;
+
+ /**
+ * Create a new instance of this class. Takes a session as parameter.
+ * @param session session. If session is not of type
+ * {@link XASession}, an <code>IllegalArgumentException</code>
+ * is thrown
+ */
+ public UserTransactionImpl(Session session) {
+ if (session instanceof XASession) {
+ xares = ((XASession) session).getXAResource();
+ } else {
+ throw new IllegalArgumentException("Session not of type XASession");
+ }
+ }
+
+ /**
+ * @see javax.transaction.UserTransaction#begin
+ */
+ public void begin() throws NotSupportedException, SystemException {
+ if (status != Status.STATUS_NO_TRANSACTION) {
+ throw new IllegalStateException("Transaction already active");
+ }
+
+ try {
+ xid = new XidImpl(counter++);
+ xares.start(xid, XAResource.TMNOFLAGS);
+ status = Status.STATUS_ACTIVE;
+
+ } catch (XAException e) {
+
+ throw new SystemException("Unable to begin transaction: " +
+ "XA_ERR=" + e.errorCode);
+ }
+ }
+
+ /**
+ * @see javax.transaction.UserTransaction#commit
+ */
+ public void commit() throws HeuristicMixedException,
+ HeuristicRollbackException, IllegalStateException,
+ RollbackException, SecurityException, SystemException {
+
+ if (status != Status.STATUS_ACTIVE) {
+ throw new IllegalStateException("Transaction not active");
+ }
+
+ try {
+ xares.end(xid, XAResource.TMSUCCESS);
+
+ status = Status.STATUS_PREPARING;
+ xares.prepare(xid);
+ status = Status.STATUS_PREPARED;
+
+ status = Status.STATUS_COMMITTING;
+ xares.commit(xid, false);
+ status = Status.STATUS_COMMITTED;
+
+ } catch (XAException e) {
+
+ if (e.errorCode >= XAException.XA_RBBASE &&
+ e.errorCode <= XAException.XA_RBEND) {
+ throw new RollbackException();
+ } else {
+ throw new SystemException("Unable to commit transaction: " +
+ "XA_ERR=" + e.errorCode);
+ }
+ }
+ }
+
+ /**
+ * @see javax.transaction.UserTransaction#getStatus
+ */
+ public int getStatus() throws SystemException {
+ return status;
+ }
+
+ /**
+ * @see javax.transaction.UserTransaction#rollback
+ */
+ public void rollback() throws IllegalStateException, SecurityException,
+ SystemException {
+
+ if (status != Status.STATUS_ACTIVE &&
+ status != Status.STATUS_MARKED_ROLLBACK) {
+
+ throw new IllegalStateException("Transaction not active");
+ }
+
+ try {
+ xares.end(xid, XAResource.TMFAIL);
+
+ status = Status.STATUS_ROLLING_BACK;
+ xares.rollback(xid);
+ status = Status.STATUS_ROLLEDBACK;
+
+ } catch (XAException e) {
+
+ throw new SystemException("Unable to rollback transaction: " +
+ "XA_ERR=" + e.errorCode);
+ }
+ }
+
+ /**
+ * @see javax.transaction.UserTransaction#setRollbackOnly()
+ */
+ public void setRollbackOnly() throws IllegalStateException, SystemException {
+ if (status != Status.STATUS_ACTIVE) {
+ throw new IllegalStateException("Transaction not active");
+ }
+ status = Status.STATUS_MARKED_ROLLBACK;
+ }
+
+ /**
+ * @see javax.transaction.UserTransaction#setTransactionTimeout
+ */
+ public void setTransactionTimeout(int seconds) throws SystemException {}
+
+
+ /**
+ * Internal {@link Xid} implementation.
+ */
+ class XidImpl implements Xid {
+
+ /** Global transaction id */
+ private final byte[] globalTxId;
+
+ /**
+ * Create a new instance of this class. Takes a global
+ * transaction number as parameter
+ * @param globalTxNumber global transaction number
+ */
+ public XidImpl(byte globalTxNumber) {
+ this.globalTxId = new byte[] { globalTxNumber };
+ }
+
+ /**
+ * @see javax.transaction.xa.Xid#getFormatId()
+ */
+ public int getFormatId() {
+ return 0;
+ }
+
+ /**
+ * @see javax.transaction.xa.Xid#getBranchQualifier()
+ */
+ public byte[] getBranchQualifier() {
+ return new byte[0];
+ }
+
+ /**
+ * @see javax.transaction.xa.Xid#getGlobalTransactionId()
+ */
+ public byte[] getGlobalTransactionId() {
+ return globalTxId;
+ }
+ }
+}