You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by sa...@apache.org on 2011/03/07 11:24:22 UTC

svn commit: r1078730 - in /ofbiz/branches/jackrabbit20100709: ./ framework/base/config/ framework/jackrabbit/ framework/jcr/ framework/jcr/lib/ framework/jcr/src/org/ofbiz/jackrabbit/ framework/jcr/src/org/ofbiz/jcr/

Author: sascharodekamp
Date: Mon Mar  7 10:24:21 2011
New Revision: 1078730

URL: http://svn.apache.org/viewvc?rev=1078730&view=rev
Log:
Update - Moved the Jackrabbit implementation to a more common folder called "jcr" (JavaContentRepository),  updated the Jackrabbit Lib to version 2.2.4 and fixed the build process, there was a reference to the framework/lib folder missing.

Added:
    ofbiz/branches/jackrabbit20100709/framework/jcr/   (props changed)
      - copied from r1066170, ofbiz/branches/jackrabbit20100709/framework/jackrabbit/
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-api-2.2.4.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-core-2.2.4.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-jca-2.2.4.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-jcr-commons-2.2.4.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-spi-2.2.4.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-spi-commons-2.2.4.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/pdfbox-1.3.1.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/tika-core-0.8.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/tika-parsers-0.8.jar   (with props)
    ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/
    ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JackrabbitContainer.java
    ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JcrRepositoryFactory.java
    ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/LocalRepositoryFactory.java
    ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/OFBizLoginModule.java
    ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryFactory.java
Removed:
    ofbiz/branches/jackrabbit20100709/framework/jackrabbit/
    ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-api-2.1.0.jar
    ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jackrabbit/
Modified:
    ofbiz/branches/jackrabbit20100709/.classpath
    ofbiz/branches/jackrabbit20100709/framework/base/config/ofbiz-containers.xml
    ofbiz/branches/jackrabbit20100709/framework/jcr/build.xml
    ofbiz/branches/jackrabbit20100709/framework/jcr/ofbiz-component.xml

Modified: ofbiz/branches/jackrabbit20100709/.classpath
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/.classpath?rev=1078730&r1=1078729&r2=1078730&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/.classpath (original)
+++ ofbiz/branches/jackrabbit20100709/.classpath Mon Mar  7 10:24:21 2011
@@ -125,18 +125,18 @@
     <classpathentry kind="lib" path="framework/geronimo/lib/geronimo-transaction-2.1.1.jar"/>
     <classpathentry kind="lib" path="framework/guiapp/lib/XuiCoreSwing-v3.2rc2b.jar"/>
     <classpathentry kind="lib" path="framework/guiapp/lib/XuiOptional-v3.2rc2b.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/concurrent-1.3.4.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/jackrabbit-api-2.1.0.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/jackrabbit-core-2.1.0.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/jackrabbit-jcr-commons-2.1.0.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/jackrabbit-spi-2.1.0.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/jackrabbit-spi-commons-2.1.0.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/jcr-2.0.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/pdfbox-1.0.0.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/slf4j-api-1.5.8.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/slf4j-log4j12-1.5.8.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/tika-core-0.6.jar"/>
-    <classpathentry kind="lib" path="framework/jackrabbit/lib/tika-parsers-0.6.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/concurrent-1.3.4.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/jackrabbit-api-2.1.0.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/jackrabbit-core-2.1.0.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/jackrabbit-jcr-commons-2.1.0.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/jackrabbit-spi-2.1.0.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/jackrabbit-spi-commons-2.1.0.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/jcr-2.0.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/pdfbox-1.0.0.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/slf4j-api-1.5.8.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/slf4j-log4j12-1.5.8.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/tika-core-0.6.jar"/>
+    <classpathentry kind="lib" path="framework/jcr/lib/tika-parsers-0.6.jar"/>
     <classpathentry kind="lib" path="framework/jetty/lib/jasper-compiler-5.5.15.jar"/>
     <classpathentry kind="lib" path="framework/jetty/lib/jasper-runtime-5.5.15.jar"/>
     <classpathentry kind="lib" path="framework/jetty/lib/jetty-6.1.11.jar"/>
@@ -230,7 +230,7 @@
     <classpathentry kind="src" path="framework/example/src"/>
     <classpathentry kind="src" path="framework/geronimo/src"/>
     <classpathentry kind="src" path="framework/guiapp/src"/>
-    <classpathentry kind="src" path="framework/jackrabbit/src"/>
+    <classpathentry kind="src" path="framework/jcr/src"/>
     <classpathentry kind="src" path="framework/jetty/src"/>
     <classpathentry kind="src" path="framework/minilang/src"/>
     <classpathentry kind="src" path="framework/security/src"/>

Modified: ofbiz/branches/jackrabbit20100709/framework/base/config/ofbiz-containers.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/base/config/ofbiz-containers.xml?rev=1078730&r1=1078729&r2=1078730&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/base/config/ofbiz-containers.xml (original)
+++ ofbiz/branches/jackrabbit20100709/framework/base/config/ofbiz-containers.xml Mon Mar  7 10:24:21 2011
@@ -99,9 +99,9 @@ under the License.
 
     <!-- Load embedded Jackrabbit content repository. Since this container depends
          upon JNDI, it must be started after the naming-container container.-->
-    <container name="jackrabbit" class="org.ofbiz.jackrabbit.JackrabbitContainer">
+    <container name="jcr-container" class="org.ofbiz.jackrabbit.JackrabbitContainer">
         <property name="repHomeDir" value="runtime/data/jackrabbit/"/>
-        <property name="configFilePath" value="framework/jackrabbit/config/jackrabbit.xml"/>
+        <property name="configFilePath" value="framework/jcr/config/jackrabbit.xml"/>
         <property name="jndiName" value="jcr/local"/>
     </container>
 
@@ -265,7 +265,7 @@ under the License.
             <property name="ciphers" value=""/>
         </property>
     </container>
-    
+
     <!-- load the BIRT container -->
     <container name="birt-container" class="org.ofbiz.birt.container.BirtContainer">
         <property name="delegator-name" value="default"/>

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Mar  7 10:24:21 2011
@@ -0,0 +1 @@
+build

Modified: ofbiz/branches/jackrabbit20100709/framework/jcr/build.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/build.xml?rev=1078730&r1=1066170&r2=1078730&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/build.xml (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/build.xml Mon Mar  7 10:24:21 2011
@@ -18,19 +18,20 @@ specific language governing permissions 
 under the License.
 -->
 
-<project name="OFBiz - Jackrabbit" default="jar" basedir=".">
+<project name="OFBiz - JCR" default="jar" basedir=".">
     <import file="../../common.xml"/>
 
     <!-- ================================================================== -->
     <!-- Initialization of all property settings                            -->
     <!-- ================================================================== -->
 
-    <property name="desc" value="Jackrabbit Component"/>
-    <property name="name" value="ofbiz-jackrabbit"/>
+    <property name="desc" value="JCR Component"/>
+    <property name="name" value="ofbiz-jcr"/>
     <property name="ofbiz.home.dir" value="../.."/>
 
     <path id="local.class.path">
         <fileset dir="${lib.dir}" includes="*.jar"/>
+        <fileset dir="../../framework/base/lib" includes="*.jar"/>
         <fileset dir="../../framework/base/lib/commons" includes="*.jar"/>
         <fileset dir="../../framework/base/build/lib" includes="*.jar"/>
         <fileset dir="../../framework/entity/build/lib" includes="*.jar"/>

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-api-2.2.4.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-api-2.2.4.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-api-2.2.4.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-core-2.2.4.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-core-2.2.4.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-core-2.2.4.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-jca-2.2.4.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-jca-2.2.4.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-jca-2.2.4.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-jcr-commons-2.2.4.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-jcr-commons-2.2.4.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-jcr-commons-2.2.4.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-spi-2.2.4.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-spi-2.2.4.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-spi-2.2.4.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-spi-commons-2.2.4.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-spi-commons-2.2.4.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/jackrabbit-spi-commons-2.2.4.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/pdfbox-1.3.1.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/pdfbox-1.3.1.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/pdfbox-1.3.1.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/tika-core-0.8.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/tika-core-0.8.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/tika-core-0.8.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/tika-parsers-0.8.jar
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/lib/tika-parsers-0.8.jar?rev=1078730&view=auto
==============================================================================
Binary file - no diff available.

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/lib/tika-parsers-0.8.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: ofbiz/branches/jackrabbit20100709/framework/jcr/ofbiz-component.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/ofbiz-component.xml?rev=1078730&r1=1066170&r2=1078730&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/ofbiz-component.xml (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/ofbiz-component.xml Mon Mar  7 10:24:21 2011
@@ -18,7 +18,7 @@ specific language governing permissions 
 under the License.
 -->
 
-<ofbiz-component name="jackrabbit"
+<ofbiz-component name="jcr"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/ofbiz-component.xsd">
     <resource-loader name="main" type="component"/>

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JackrabbitContainer.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JackrabbitContainer.java?rev=1078730&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JackrabbitContainer.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JackrabbitContainer.java Mon Mar  7 10:24:21 2011
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * 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.ofbiz.jcr;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+import javax.jcr.Credentials;
+import javax.jcr.LoginException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.naming.Reference;
+
+import org.apache.jackrabbit.core.TransientRepository;
+import org.ofbiz.base.container.Container;
+import org.ofbiz.base.container.ContainerConfig;
+import org.ofbiz.base.container.ContainerException;
+import org.ofbiz.base.location.FlexibleLocation;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.DelegatorFactory;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+
+/**
+ * A container for a local JCR-compliant content repository. The current
+ * implementation uses Apache Jackrabbit.
+ */
+public class JackrabbitContainer implements Container {
+
+    public static final String module = JackrabbitContainer.class.getName();
+
+    private static File homeDir = null;
+    private static File jackrabbitConfigFile = null;
+    private static String jndiName;
+    protected static Repository repository;
+    private static Session session;
+
+    @Override
+    public void init(String[] args, String configFile) throws ContainerException {
+        ContainerConfig.Container cc = ContainerConfig.getContainer("jackrabbit", configFile);
+        String homeDirURL;
+        try {
+            homeDirURL = ContainerConfig.getPropertyValue(cc, "repHomeDir", "runtime/data/jackrabbit/");
+            jndiName = ContainerConfig.getPropertyValue(cc, "jndiName", "jcr/local");
+            homeDir = new File(homeDirURL);
+            URL jackrabbitConfigUrl = FlexibleLocation.resolveLocation(ContainerConfig.getPropertyValue(cc, "configFilePath", "framework/jackrabbit/config/jackrabbit.xml"));
+            jackrabbitConfigFile = new File(jackrabbitConfigUrl.toURI());
+
+        } catch (MalformedURLException e) {
+            Debug.logError(e, module);
+        } catch (URISyntaxException e) {
+            Debug.logError(e, module);
+        }
+    }
+
+    @Override
+    public boolean start() throws ContainerException {
+        repository = new TransientRepository(jackrabbitConfigFile, homeDir);
+        try {
+            Delegator delegator = DelegatorFactory.getDelegator("default");
+            GenericValue userLogin = delegator.findOne("UserLogin", true, "userLoginId", "system");
+            // Open a session to get the repo running
+            session = JackrabbitContainer.getUserSession(userLogin);
+        } catch (LoginException e) {
+            Debug.logError(e, module);
+        } catch (RepositoryException e) {
+            Debug.logError(e, module);
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        }
+        try {
+            Reference ref = new Reference(Repository.class.getName(), LocalRepositoryFactory.class.getName(), null);
+            Context context = new InitialContext();
+            context.bind(jndiName, ref);
+        } catch (NamingException e) {
+            Debug.logError(e, module);
+        }
+        // Test JNDI bind
+        RepositoryFactory.getRepository();
+        return true;
+    }
+
+    @Override
+    public void stop() throws ContainerException {
+        try {
+            Context context = new InitialContext();
+            context.unbind(jndiName);
+        } catch (NamingException e) {
+            Debug.logError(e, module);
+        }
+        if (session != null) {
+            session.logout();
+        }
+        if (repository != null) {
+            // Not needed - Jackrabbit shuts down when the session is closed
+//            repository.shutdown();
+        }
+    }
+
+    public static Session getUserSession(GenericValue userLogin) throws RepositoryException {
+        String currentPassword = userLogin.getString("currentPassword") == null ? "" : userLogin.getString("currentPassword");
+        Credentials creds = new SimpleCredentials(userLogin.getString("userLoginId"), currentPassword.toCharArray());
+        return repository.login(creds);
+    }
+}

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JcrRepositoryFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JcrRepositoryFactory.java?rev=1078730&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JcrRepositoryFactory.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JcrRepositoryFactory.java Mon Mar  7 10:24:21 2011
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * 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.ofbiz.jcr;
+
+import javax.jcr.Repository;
+
+public interface JcrRepositoryFactory {
+    /**
+     *
+     * @param repositoryName The name specified in the <code>jcr-repositories.xml</code> file
+     * @return
+     */
+    Repository getInstance(String repositoryName);
+}

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/LocalRepositoryFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/LocalRepositoryFactory.java?rev=1078730&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/LocalRepositoryFactory.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/LocalRepositoryFactory.java Mon Mar  7 10:24:21 2011
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * 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.ofbiz.jcr;
+
+import java.util.Hashtable;
+
+import javax.jcr.Repository;
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.Reference;
+import javax.naming.spi.ObjectFactory;
+
+/**
+ * A JNDI <code>ObjectFactory</code> that returns a <code>javax.jcr.Repository</code>
+ * instance.
+ */
+public class LocalRepositoryFactory implements ObjectFactory {
+
+    @Override
+    public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {
+        if (obj instanceof Reference) {
+            Reference ref = (Reference)obj;
+            if (ref.getClassName().equals(Repository.class.getName())) {
+                return JackrabbitContainer.repository;
+            }
+        }
+        return null;
+    }
+}

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/OFBizLoginModule.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/OFBizLoginModule.java?rev=1078730&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/OFBizLoginModule.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/OFBizLoginModule.java Mon Mar  7 10:24:21 2011
@@ -0,0 +1,146 @@
+/*******************************************************************************
+ * 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.ofbiz.jcr;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.security.auth.Subject;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.spi.LoginModule;
+
+import javolution.util.FastMap;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.entity.Delegator;
+import org.ofbiz.entity.DelegatorFactory;
+import org.ofbiz.entity.GenericEntityException;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.service.GenericDispatcher;
+import org.ofbiz.service.GenericServiceException;
+import org.ofbiz.service.LocalDispatcher;
+import org.ofbiz.service.ServiceUtil;
+
+public class OFBizLoginModule implements LoginModule {
+
+    public static final String module = OFBizLoginModule.class.getName();
+
+    protected Subject subject;
+    protected CallbackHandler callbackHandler;
+    protected Map<String, ?> sharedState;
+    protected Map<String, ?> options;
+
+    private Delegator delegator;
+    private LocalDispatcher dispatcher;
+
+    private GenericValue userLogin;
+
+    @Override
+    public boolean abort() throws LoginException {
+        return logout();
+    }
+
+    @Override
+    public boolean commit() throws LoginException {
+        if (userLogin != null) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) {
+        // get the delegator
+        delegator = DelegatorFactory.getDelegator("default");
+
+        // get the dispatcher
+        dispatcher = GenericDispatcher.getLocalDispatcher("auth-dispatcher", delegator);
+
+        this.subject = subject;
+        this.callbackHandler = callbackHandler;
+        this.sharedState = sharedState;
+        this.options = options;
+
+        if (options != null) {
+            for (Map.Entry<String, ?> option : options.entrySet()) {
+                Debug.logWarning("OFBizLoginModule does not support provided option [" + option.getKey() + "] with value [" + option.getValue() + "], ignoring", module);
+            }
+        }
+    }
+
+    @Override
+    public boolean login() throws LoginException {
+        NameCallback nameCallback = new NameCallback("userLoginId");
+        PasswordCallback passwordCallback = new PasswordCallback("currentPassword", false);
+        Callback[] callbacks = new Callback[]{nameCallback, passwordCallback};
+        try {
+            callbackHandler.handle(callbacks);
+        } catch (IOException e) {
+            Debug.logError(e, module);
+            throw new LoginException(e.getMessage());
+        } catch (UnsupportedCallbackException e) {
+            Debug.logError(e, module);
+            throw new LoginException(e.getMessage());
+        }
+
+        String userLoginId = nameCallback.getName();
+        String password = String.valueOf(passwordCallback.getPassword());
+        passwordCallback.clearPassword();
+        // try matching against the encrypted password
+        try {
+            GenericValue newUserLogin = delegator.findOne("UserLogin", false, "userLoginId", userLoginId);
+            if (newUserLogin.getString("currentPassword") == null || newUserLogin.getString("currentPassword").equals(password)) {
+                userLogin = newUserLogin;
+                return true;
+            }
+        } catch (GenericEntityException e) {
+            Debug.logError(e, module);
+        }
+        // plain text password
+        if (UtilValidate.isNotEmpty(password)) {
+            Map<String, Object> loginCtx = FastMap.newInstance();
+            loginCtx.put("login.username", userLoginId);
+            loginCtx.put("login.password", password);
+            try {
+                Map<String, ? extends Object> result = dispatcher.runSync("userLogin", loginCtx);
+                if (ServiceUtil.isSuccess(result)) {
+                    userLogin = (GenericValue) result.get("userLogin");
+                    return true;
+                }
+            } catch (GenericServiceException e) {
+                Debug.logError(e, module);
+                throw new LoginException(e.getMessage());
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean logout() throws LoginException {
+        userLogin = null;
+        return true;
+    }
+
+}

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryFactory.java?rev=1078730&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryFactory.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryFactory.java Mon Mar  7 10:24:21 2011
@@ -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.ofbiz.jcr;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.Repository;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.base.util.UtilXml;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class RepositoryFactory {
+
+    public static final String module = RepositoryFactory.class.getName();
+    private static final Map<String, Repository> repositoryMap = createRepositoryMap();
+
+    private static Repository createFromFactory(String repositoryName, ClassLoader loader, String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
+        JcrRepositoryFactory factory = (JcrRepositoryFactory) loader.loadClass(className).newInstance();
+        return factory.getInstance(repositoryName);
+    }
+
+    private static Map<String, Repository> createRepositoryMap() {
+        Map<String, Repository> result = new HashMap<String, Repository>();
+        loadRepositories(result);
+        Debug.logInfo("Repositories loaded: " + result.size(), module);
+        return Collections.unmodifiableMap(result);
+    }
+
+    /**
+     * Returns the default repository.
+     *
+     * @return
+     */
+    public static Repository getRepository() {
+        return repositoryMap.get("default");
+    }
+
+    /**
+     * Returns the specified repository, or <code>null</code> if the
+     * specified repository doesn't exist.
+     *
+     * @param name
+     * @return
+     */
+    public static Repository getRepository(String name) {
+        return repositoryMap.get(name);
+    }
+
+    private static void loadRepositories(Map<String, Repository> map) {
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        Enumeration<URL> resources;
+        try {
+            resources = loader.getResources("jcr-repositories.xml");
+        } catch (IOException e) {
+            Debug.logError(e, "Could not load list of jcr-repositories.xml", module);
+            return;
+        }
+        while (resources.hasMoreElements()) {
+            URL repositoriesURL = resources.nextElement();
+            Debug.logInfo("Loading repositories from: " + repositoriesURL, module);
+            Document doc = null;
+            try {
+                doc = UtilXml.readXmlDocument(repositoriesURL, false);
+            } catch (Exception e) {
+                Debug.logError(e, module);
+                continue;
+            }
+            Element resourceElement = doc.getDocumentElement();
+            List<? extends Element> repositoryList = UtilXml.childElementList(resourceElement, "repository");
+            for (Element element : repositoryList) {
+                String name = element.getAttribute("name");
+                if (UtilValidate.isEmpty(name)) {
+                    continue;
+                }
+                String jndiName = element.getAttribute("jndi-name");
+                if (UtilValidate.isNotEmpty(jndiName)) {
+                    try {
+                        map.put(name, (Repository) new InitialContext().lookup(jndiName));
+                    } catch (NamingException e) {
+                        Debug.logError(e, module);
+                    }
+                    continue;
+                }
+                String className = element.getAttribute("class-name");
+                if (UtilValidate.isNotEmpty(className)) {
+                    try {
+                        map.put(name, createFromFactory(name, loader, className));
+                    } catch (Exception e) {
+                        Debug.logError(e, module);
+                    }
+                }
+            }
+        }
+
+    }
+
+    private RepositoryFactory() {}
+}