svn commit: r1156196 [2/2] - in /ofbiz/branches/jackrabbit20100709: ./ applications/content/src/org/ofbiz/content/jcr/ applications/content/src/org/ofbiz/content/jcr/helper/ applications/content/src/org/ofbiz/content/jcr/orm/ applications/content/src/o...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1156196 [2/2] - in /ofbiz/branches/jackrabbit20100709: ./ applications/content/src/org/ofbiz/content/jcr/ applications/content/src/org/ofbiz/content/jcr/helper/ applications/content/src/org/ofbiz/content/jcr/orm/ applications/content/src/o...

sascharodekamp
Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/RepositoryAccessJackrabbit.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/RepositoryAccessJackrabbit.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/RepositoryAccessJackrabbit.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/RepositoryAccessJackrabbit.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,176 @@
+package org.ofbiz.jcr.access.jackrabbit;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import net.sf.json.JSONArray;
+
+import org.apache.jackrabbit.ocm.exception.ObjectContentManagerException;
+import org.apache.jackrabbit.ocm.manager.impl.ObjectContentManagerImpl;
+import org.apache.jackrabbit.ocm.mapper.Mapper;
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.AnnotationMapperImpl;
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.jcr.access.ContentReader;
+import org.ofbiz.jcr.access.ContentWriter;
+import org.ofbiz.jcr.access.RepositoryAccess;
+import org.ofbiz.jcr.loader.JCRFactoryUtil;
+import org.ofbiz.jcr.orm.OfbizRepositoryMapping;
+import org.ofbiz.jcr.orm.jackrabbit.OfbizRepositoryMappingJackrabbitFile;
+import org.ofbiz.jcr.orm.jackrabbit.OfbizRepositoryMappingJackrabbitFolder;
+import org.ofbiz.jcr.orm.jackrabbit.OfbizRepositoryMappingJackrabbitHierarchyNode;
+import org.ofbiz.jcr.orm.jackrabbit.OfbizRepositoryMappingJackrabbitNews;
+import org.ofbiz.jcr.orm.jackrabbit.OfbizRepositoryMappingJackrabbitResource;
+import org.ofbiz.jcr.orm.jackrabbit.OfbizRepositoryMappingJackrabbitUnstructured;
+
+public class RepositoryAccessJackrabbit implements RepositoryAccess {
+
+    private static String module = RepositoryAccessJackrabbit.class.getName();
+
+    Session session = null;
+    ObjectContentManagerImpl ocm = null;
+
+    /**
+     * Create a repository Access object based on the userLogin.
+     *
+     * @param userLogin
+     */
+    public RepositoryAccessJackrabbit(GenericValue userLogin) {
+        // TODO pass the userLogin to the getSession() method and perform some
+        this(JCRFactoryUtil.getSession());
+    }
+
+    /**
+     * Create a repository Access object based on a JCR Session.
+     *
+     * @param userLogin
+     */
+    public RepositoryAccessJackrabbit(Session session) {
+        if (session == null) {
+            Debug.logWarning("A repository session is needed to create an OfbizContentMapping Object.", module);
+            return;
+        }
+
+        this.session = session;
+
+        List<Class> classes = new ArrayList<Class>();
+        // put this in an xml configuration file
+        // should the ocm classes be loaded in during the container startup?
+        classes.add(OfbizRepositoryMappingJackrabbitUnstructured.class);
+        classes.add(OfbizRepositoryMappingJackrabbitHierarchyNode.class);
+        classes.add(OfbizRepositoryMappingJackrabbitNews.class);
+        classes.add(OfbizRepositoryMappingJackrabbitFile.class);
+        classes.add(OfbizRepositoryMappingJackrabbitFolder.class);
+        classes.add(OfbizRepositoryMappingJackrabbitResource.class);
+
+        Mapper mapper = new AnnotationMapperImpl(classes);
+        this.ocm = new ObjectContentManagerImpl(session, mapper);
+
+        return;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.ofbiz.jcr.orm.RepositoryAccess#closeAccess()
+     */
+    @Override
+    public void closeAccess() {
+        if (this.ocm != null) {
+            this.ocm.logout();
+        }
+        this.ocm = null;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.ofbiz.jcr.orm.RepositoryAccess#getContentObject(java.lang.String)
+     */
+    @Override
+    public OfbizRepositoryMapping getContentObject(String nodePath) {
+        ContentReader contentReader = new ContentReaderJackrabbit(this.ocm);
+        return contentReader.getContentObject(nodePath);
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.ofbiz.jcr.orm.RepositoryAccess#storeContentObject(org.ofbiz.jcr.orm
+     * .OfbizRepositoryMapping)
+     */
+    @Override
+    public void storeContentObject(OfbizRepositoryMapping orm) throws ObjectContentManagerException {
+        ContentWriter contentWriter = new ContentWriterJackrabbit(this.ocm);
+        contentWriter.storeContentObject(orm);
+
+        return;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.ofbiz.jcr.orm.RepositoryAccess#updateContentObject(org.ofbiz.jcr.
+     * orm.OfbizRepositoryMapping)
+     */
+    @Override
+    public void updateContentObject(OfbizRepositoryMapping orm) throws ObjectContentManagerException {
+        ContentWriter contentWriter = new ContentWriterJackrabbit(this.ocm);
+        contentWriter.updateContentObject(orm);
+
+        return;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.ofbiz.jcr.orm.RepositoryAccess#removeContentObject(java.lang.String)
+     */
+    @Override
+    public void removeContentObject(String nodePath) throws ObjectContentManagerException {
+        ContentWriter contentWriter = new ContentWriterJackrabbit(this.ocm);
+        contentWriter.removeContentObject(nodePath);
+
+        return;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.ofbiz.jcr.orm.RepositoryAccess#removeContentObject(org.ofbiz.jcr.
+     * orm.OfbizRepositoryMapping)
+     */
+    @Override
+    public void removeContentObject(OfbizRepositoryMapping orm) throws ObjectContentManagerException {
+        removeContentObject(orm.getPath());
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.ofbiz.jcr.orm.RepositoryAccess#getJsonFileTree()
+     */
+    @Override
+    public JSONArray getJsonDataTree() throws RepositoryException {
+        ContentReader contentReader = new ContentReaderJackrabbit(this.ocm);
+        return contentReader.getJsonDataTree();
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.ofbiz.jcr.access.RepositoryAccess#getJsonFileTree()
+     */
+    @Override
+    public JSONArray getJsonFileTree() throws RepositoryException {
+        ContentReader contentReader = new ContentReaderJackrabbit(this.ocm);
+        return contentReader.getJsonFileTree();
+    }
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/RepositoryAccessJackrabbit.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/VersioningManagerJackrabbit.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/VersioningManagerJackrabbit.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/VersioningManagerJackrabbit.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/VersioningManagerJackrabbit.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,118 @@
+package org.ofbiz.jcr.access.jackrabbit;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.version.VersionManager;
+
+import org.ofbiz.base.util.Debug;
+import org.ofbiz.jcr.access.VersioningManager;
+
+public class VersioningManagerJackrabbit implements VersioningManager {
+
+    private static String module = VersioningManagerJackrabbit.class.getName();
+
+    private volatile VersionManager versionManager = null;
+    private List<Node> checkedOutNodeStore = Collections.synchronizedList(new ArrayList<Node>());
+    private Session session = null;
+
+    VersioningManagerJackrabbit(Session session) throws UnsupportedRepositoryOperationException, RepositoryException {
+        versionManager = session.getWorkspace().getVersionManager();
+        this.session = session;
+    }
+
+    public VersionManager getVersionManager() {
+        return this.versionManager;
+    }
+
+    public void addNodeToCheckedOutStore(Node node) {
+        try {
+            if (!versionManager.isCheckedOut(node.getPath())) {
+                checkedOutNodeStore.add(node);
+            }
+        } catch (RepositoryException e) {
+            Debug.logError(e, module);
+        }
+    }
+
+    protected void saveSessionAndCheckinNode() {
+        try {
+            this.session.save();
+
+            for (Node node : checkedOutNodeStore) {
+                // add the new resource content to the version history
+                if (session.nodeExists(node.getPath()) && versionManager.isCheckedOut(node.getPath())) {
+                    versionManager.checkin(node.getPath());
+                }
+            }
+
+            // reset the node store after everything is checked in
+            checkedOutNodeStore = new ArrayList<Node>();
+        } catch (RepositoryException e) {
+            Debug.logError(e, module);
+        }
+    }
+
+    protected void checkOutNode(Node node) {
+        try {
+            // make sure we don't checkout the root node, because it's not
+            // versionable
+            if (!ConstantsJackrabbit.ROOTPATH.equals(node.getPath())) {
+                versionManager.checkout(node.getPath());
+                checkedOutNodeStore.add(node);
+            }
+        } catch (RepositoryException e) {
+            Debug.logError(e, module);
+        }
+    }
+
+    /**
+     * Checks out recursively all related nodes (parent, all child's (if exists)
+     * and the node itself)
+     *
+     * @param startNode
+     * @throws RepositoryException
+     */
+    protected void checkOutRelatedNodes(Node startNode) throws RepositoryException {
+        List<Node> nodesToCheckOut = new ArrayList<Node>();
+        nodesToCheckOut.add(startNode);
+        nodesToCheckOut.add(startNode.getParent());
+        if (startNode.hasNodes()) {
+            nodesToCheckOut.addAll(getAllChildNodes(startNode));
+        }
+
+        for (Node node : nodesToCheckOut) {
+            checkOutNode(node);
+        }
+
+    }
+
+    /**
+     * Return recursively all child nodes
+     *
+     * @param startNode
+     * @return
+     * @throws RepositoryException
+     */
+    private List<Node> getAllChildNodes(Node startNode) throws RepositoryException {
+        List<Node> nodes = new ArrayList<Node>();
+        NodeIterator ni = startNode.getNodes();
+        while (ni.hasNext()) {
+            Node nextNode = ni.nextNode();
+            if (nextNode.hasNodes()) {
+                nodes.addAll(getAllChildNodes(nextNode));
+            }
+
+            nodes.add(nextNode);
+        }
+
+        return nodes;
+    }
+
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/VersioningManagerJackrabbit.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/handler/JcrEventHandler.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/handler/JcrEventHandler.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/handler/JcrEventHandler.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/handler/JcrEventHandler.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,5 @@
+package org.ofbiz.jcr.handler;
+
+public interface JcrEventHandler {
+
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/handler/JcrEventHandler.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRContainer.java (from r1140127, ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRContainer.java)
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRContainer.java?p2=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRContainer.java&p1=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRContainer.java&r1=1140127&r2=1156196&rev=1156196&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRContainer.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRContainer.java Wed Aug 10 14:29:40 2011
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.jcr;
+package org.ofbiz.jcr.loader;
 
+import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
-import javax.jcr.RepositoryFactory;
 import javax.naming.Context;
 import javax.naming.NamingException;
 import javax.naming.Reference;
@@ -35,8 +35,6 @@ import org.ofbiz.base.util.JNDIContextFa
 import org.ofbiz.base.util.UtilXml;
 import org.w3c.dom.Element;
 
-import com.sun.corba.se.spi.activation.Repository;
-
 /**
  * A container for a local JCR-compliant content repository. The default
  * implementation uses Apache Jackrabbit.
@@ -88,6 +86,7 @@ public class JCRContainer implements Con
             throw new ContainerException("No jcr configuration found in file " + configFilePath);
         }
 
+        homeDir = UtilXml.childElementAttribute(configRootElement, "home-dir", "path", "runtime/data/jcr/");
         Element childElement = UtilXml.firstChildElement(configRootElement, "jcr-context");
         jcrContextName = UtilXml.elementAttribute(childElement, "name", "default");
 
@@ -95,7 +94,6 @@ public class JCRContainer implements Con
         for (Element curElement : UtilXml.childElementList(configRootElement, "jcr")) {
             if (jcrContextName.equals(curElement.getAttribute("name"))) {
                 factoryClassName = curElement.getAttribute("class");
-                homeDir = curElement.getAttribute("home-dir");
                 jndiName = curElement.getAttribute("jndi-name");
                 break;
             }
@@ -182,7 +180,7 @@ public class JCRContainer implements Con
     protected void bindRepository() {
         if (this.jndiContext != null) {
             try {
-                Reference ref = new Reference(Repository.class.getName(), RepositoryFactory.class.getName(), null);
+                Reference ref = new Reference(Repository.class.getName(), org.ofbiz.jcr.loader.RepositoryFactory.class.getName(), null);
                 ref.add(new StringRefAddr(REP_HOME_DIR, homeDir));
                 ref.add(new StringRefAddr(CONFIG_FILE_PATH, configFilePath));
                 this.jndiContext.bind(jndiName, ref);

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRContainer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactory.java (from r1140127, ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRFactory.java)
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactory.java?p2=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactory.java&p1=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRFactory.java&r1=1140127&r2=1156196&rev=1156196&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRFactory.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactory.java Wed Aug 10 14:29:40 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.jcr;
+package org.ofbiz.jcr.loader;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactoryUtil.java (from r1140127, ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRFactoryUtil.java)
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactoryUtil.java?p2=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactoryUtil.java&p1=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRFactoryUtil.java&r1=1140127&r2=1156196&rev=1156196&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/JCRFactoryUtil.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactoryUtil.java Wed Aug 10 14:29:40 2011
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.jcr;
+package org.ofbiz.jcr.loader;
 
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/JCRFactoryUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/OFBizLoginModule.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/OFBizLoginModule.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/OFBizLoginModule.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/OFBizLoginModule.java Wed Aug 10 14:29:40 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.loader;
+
+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;
+    }
+
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/OFBizLoginModule.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryFactory.java (from r1140127, 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/loader/RepositoryFactory.java?p2=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryFactory.java&p1=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryFactory.java&r1=1140127&r2=1156196&rev=1156196&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryFactory.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryFactory.java Wed Aug 10 14:29:40 2011
@@ -1,4 +1,4 @@
-package org.ofbiz.jcr;
+package org.ofbiz.jcr.loader;
 
 import java.io.File;
 import java.util.Hashtable;

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryLoader.java (from r1140127, ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryLoader.java)
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryLoader.java?p2=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryLoader.java&p1=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryLoader.java&r1=1140127&r2=1156196&rev=1156196&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/RepositoryLoader.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryLoader.java Wed Aug 10 14:29:40 2011
@@ -1,4 +1,4 @@
-package org.ofbiz.jcr;
+package org.ofbiz.jcr.loader;
 
 import java.util.Map;
 

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/RepositoryLoader.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Copied: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/jackrabbit/JCRFactoryImpl.java (from r1140127, ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/jackrabbit/JCRFactoryImpl.java)
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/jackrabbit/JCRFactoryImpl.java?p2=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/jackrabbit/JCRFactoryImpl.java&p1=ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/jackrabbit/JCRFactoryImpl.java&r1=1140127&r2=1156196&rev=1156196&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/jackrabbit/JCRFactoryImpl.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/jackrabbit/JCRFactoryImpl.java Wed Aug 10 14:29:40 2011
@@ -16,27 +16,41 @@
  * specific language governing permissions and limitations
  * under the License.
  *******************************************************************************/
-package org.ofbiz.jcr.jackrabbit;
+package org.ofbiz.jcr.loader.jackrabbit;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
 
 import javax.jcr.Credentials;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
+import javax.jcr.Workspace;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.nodetype.NodeTypeManager;
 
 import org.apache.jackrabbit.core.TransientRepository;
+import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;
+import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
+import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
+import org.apache.jackrabbit.core.nodetype.xml.NodeTypeReader;
+import org.apache.jackrabbit.ocm.nodemanagement.impl.RepositoryUtil;
+import org.apache.jackrabbit.spi.QNodeTypeDefinition;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
-import org.ofbiz.jcr.JCRFactory;
+import org.ofbiz.jcr.loader.JCRFactory;
 import org.w3c.dom.Element;
 
 public class JCRFactoryImpl implements JCRFactory {
 
     public static final String module = JCRFactoryImpl.class.getName();
 
+    private static String CUSTOM_NODE_TYPES = "framework/jcr/config/custom-jackrabbit-nodetypes.xml";
+
     private static String homeDir = null;
     private static String jackrabbitConfigFile = null;
     private static String CREDENTIALS_USERNAME = null;
@@ -67,7 +81,8 @@ public class JCRFactoryImpl implements J
      */
     @Override
     public void start() throws RepositoryException {
-        // Transient repositories closes automatically when the last session is closed
+        // Transient repositories closes automatically when the last session is
+        // closed
         repository = new TransientRepository(jackrabbitConfigFile, homeDir);
         createSession();
     }
@@ -102,6 +117,17 @@ public class JCRFactoryImpl implements J
             Credentials credentials = new SimpleCredentials(CREDENTIALS_USERNAME, CREDENTIALS_PASSWORD);
             try {
                 session = repository.login(credentials);
+                // register NameSpaces
+                RepositoryUtil.setupSession(session);
+                try {
+                    // register the cool new noteTypes
+                    registerNodeTypes(session);
+                } catch (InvalidNodeTypeDefException e) {
+                    Debug.logError(e, module);
+                } catch (IOException e) {
+                    Debug.logError(e, module);
+                }
+
             } catch (RepositoryException e) {
                 Debug.logError(e, "Could not login to the workspace");
                 throw e;
@@ -130,4 +156,31 @@ public class JCRFactoryImpl implements J
     public Repository getRepository() {
         return repository;
     }
+
+    /*
+     * Register some new node types
+     */
+    protected void registerNodeTypes(Session session) throws InvalidNodeTypeDefException, javax.jcr.RepositoryException, IOException {
+        InputStream xml = new FileInputStream(CUSTOM_NODE_TYPES);
+
+        // HINT: throws InvalidNodeTypeDefException, IOException
+        QNodeTypeDefinition[] types = NodeTypeReader.read(xml);
+
+        Workspace workspace = session.getWorkspace();
+        NodeTypeManager ntMgr = workspace.getNodeTypeManager();
+        NodeTypeRegistry ntReg = ((NodeTypeManagerImpl) ntMgr).getNodeTypeRegistry();
+
+        for (int j = 0; j < types.length; j++) {
+            QNodeTypeDefinition def = types[j];
+
+            try {
+                ntReg.getNodeTypeDef(def.getName());
+            } catch (NoSuchNodeTypeException nsne) {
+                // HINT: if not already registered than register custom node
+                // type
+                ntReg.registerNodeType(def);
+            }
+
+        }
+    }
 }

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/loader/jackrabbit/JCRFactoryImpl.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/OfbizRepositoryMapping.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/OfbizRepositoryMapping.java?rev=1156196&r1=1156195&r2=1156196&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/OfbizRepositoryMapping.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/OfbizRepositoryMapping.java Wed Aug 10 14:29:40 2011
@@ -1,244 +1,16 @@
 package org.ofbiz.jcr.orm;
 
-import java.io.InputStream;
-import java.util.List;
-
-import javax.jcr.Node;
-import javax.jcr.PathNotFoundException;
-import javax.jcr.Property;
-import javax.jcr.RepositoryException;
-import javax.jcr.version.Version;
-
-import net.sf.json.JSONArray;
-
-import org.ofbiz.entity.Delegator;
-import org.ofbiz.entity.GenericEntityException;
-import org.ofbiz.entity.GenericValue;
 
 public interface OfbizRepositoryMapping {
-
-    /**
-     * Object delegator reference
-     */
-    public Delegator getDelegator();
-
-    /**
-     * Close the current repository session should be used when the operation
-     * with this object are finished.
-     */
-    public void closeSession();
-
-    /**
-     * Updates only the node text property data
-     *
-     * @param message
-     * @return
-     * @throws RepositoryException
-     * @throws GenericEntityException
-     */
-    public Version updateOrStoreTextData(String message) throws RepositoryException, GenericEntityException;
-
-    /**
-     * Updates only the node text property data
-     *
-     * @param message
-     * @param language
-     * @return
-     * @throws RepositoryException
-     * @throws GenericEntityException
-     */
-    public Version updateOrStoreTextData(String message, String language) throws RepositoryException, GenericEntityException;
-
-    /**
-     * Returns the related Content Object
-     *
-     * @return
-     */
-    public GenericValue getContentObject();
-
-    /**
-     * Returns the related Repository Node
-     *
-     * @return
-     */
-    public Node getNode();
-
-    /**
-     * Return the property of the current node. Return null if the property not
-     * exists or an exception is raised.
-     *
-     * @param propertyName
-     * @return
-     */
-    public Property getNodeProperty(String propertyName);
-
-    /**
-     * Returns the contentId from the related content object. If the content
-     * object is null, an empty string will be retunred.
-     *
-     * @return
-     */
-    public String getContentId();
-
-    /**
-     * Returns the absolute path of the node.
-     *
-     * @return
-     */
-    public String getNodePath();
-
-    /**
-     * Returns the name of the node.
-     *
-     * @return
-     */
-    public String getNodeName();
-
-    /**
-     * Remove a repository Node and the related database entry.
-     *
-     * @throws RepositoryException
-     * @throws GenericEntityException
-     */
-    public void removeRepositoryNode() throws RepositoryException, GenericEntityException;
-
-    /**
-     * Returns only the String Content of a node, if none exists an empty String
-     * will be returned.
-     *
-     * @return
-     * @throws PathNotFoundException
-     * @throws RepositoryException
-     */
-    public String getStringContent() throws PathNotFoundException, RepositoryException;
-
     /**
-     * Returns only the String Content of a node, if none exists an empty String
-     * will be returned.
-     *
-     * @param language
+     * Return the Node Path.
      * @return
-     * @throws PathNotFoundException
-     * @throws RepositoryException
      */
-    public String getStringContent(String language) throws PathNotFoundException, RepositoryException;
+    String getPath();
 
     /**
-     * Returns the text content in a defined language and a defined version
-     *
-     * @param language
-     * @param version
-     * @return
-     * @throws PathNotFoundException
-     * @throws RepositoryException
+     * Set the Node Path.
+     * @param path
      */
-    public String getStringContent(String language, String version) throws PathNotFoundException, RepositoryException;
-
-    /**
-     * Upload and store a file in the repository
-     *
-     * @param description
-     * @param file
-     * @return
-     * @throws PathNotFoundException
-     * @throws RepositoryException
-     * @throws GenericEntityException
-     */
-    public void uploadFileData(InputStream file, String fileName) throws PathNotFoundException, RepositoryException, GenericEntityException;
-
-    /**
-     * Upload and store a file in the repository und a givven language.
-     *
-     * @param file
-     * @param fileName
-     * @param language
-     * @param description
-     * @throws PathNotFoundException
-     * @throws RepositoryException
-     * @throws GenericEntityException
-     */
-    void uploadFileData(InputStream file, String fileName, String language, String description) throws PathNotFoundException, RepositoryException, GenericEntityException;
-
-    /**
-     * Return the file stream from the current node object.
-     *
-     * @param fileName
-     * @return
-     * @throws RepositoryException
-     */
-    public InputStream getFileContent(String fileName) throws RepositoryException;
-
-    /**
-     * Returns the content type of the file. An empty String will be returned if
-     * the node is not a file node or no mimeType exists.
-     *
-     * @return
-     * @throws RepositoryException
-     */
-    public String getFileMimeType() throws RepositoryException;
-
-    /**
-     * Returns the repository file tree as Json Object.
-     *
-     * @return
-     * @throws RepositoryException
-     */
-    public JSONArray getJsonFileTree() throws RepositoryException;
-
-    /**
-     * Returns the repository data (including all text content data) tree as
-     * Json Object.
-     *
-     * @return
-     * @throws RepositoryException
-     */
-    public JSONArray getJsonDataTree() throws RepositoryException;
-
-    /**
-     * Get the file stream from the current node.
-     *
-     * @return
-     * @throws RepositoryException
-     */
-    public InputStream getFileContent() throws RepositoryException;
-
-    /**
-     * Returns a List of available languages of the current node content
-     *
-     * @return
-     * @throws PathNotFoundException
-     * @throws RepositoryException
-     */
-    public List<String> getAvailableLanguages() throws PathNotFoundException, RepositoryException;
-
-    /**
-     * Get the current selected content language.
-     *
-     * @return
-     */
-    public String getSelctedLanguage();
-
-    /**
-     * Returns the current version of the node. If '0' is returned the node is
-     * not versinoed.
-     *
-     * @return
-     */
-    public String getCurrentBaseVersion();
-
-    /**
-     * Get the current version of the node. Returns the version of the
-     * currentliy selected language.
-     *
-     * @return
-     */
-    public String getCurrentLanguageVersion();
-
-    /**
-     * Returns a list of all versions to the current selected version.
-     *
-     * @return
-     */
-    public List<String> getAllLanguageVersions();
-
+    void setPath(String path);
 }
\ No newline at end of file

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFile.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFile.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFile.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFile.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,34 @@
+package org.ofbiz.jcr.orm.jackrabbit;
+
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Bean;
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
+import org.ofbiz.jcr.access.jackrabbit.ConstantsJackrabbit;
+
+@Node(jcrType = "nt:file", extend = OfbizRepositoryMappingJackrabbitHierarchyNode.class)
+public class OfbizRepositoryMappingJackrabbitFile extends OfbizRepositoryMappingJackrabbitHierarchyNode {
+
+    @Bean(jcrName = "jcr:content")
+    private OfbizRepositoryMappingJackrabbitResource resource;
+
+    public OfbizRepositoryMappingJackrabbitResource getResource() {
+        return resource;
+    }
+
+    public void setResource(OfbizRepositoryMappingJackrabbitResource resource) {
+        this.resource = resource;
+    }
+
+    public void setPath(String nodePath) {
+        // check that the path don't end with a /
+        if (nodePath.endsWith(ConstantsJackrabbit.ROOTPATH)) {
+            nodePath = nodePath.substring(0, nodePath.indexOf("/"));
+        }
+
+        // check that it is a relative path
+        if (nodePath.indexOf("/") != -1) {
+            nodePath = nodePath.substring(nodePath.indexOf("/") + 1);
+        }
+
+        super.path = nodePath;
+    }
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFile.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFolder.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFolder.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFolder.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFolder.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,30 @@
+package org.ofbiz.jcr.orm.jackrabbit;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.jackrabbit.ocm.manager.collectionconverter.impl.NTCollectionConverterImpl;
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Collection;
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
+
+@Node(jcrType = "nt:folder", extend = OfbizRepositoryMappingJackrabbitHierarchyNode.class)
+public class OfbizRepositoryMappingJackrabbitFolder extends OfbizRepositoryMappingJackrabbitHierarchyNode {
+    @Collection(autoUpdate = false, elementClassName = OfbizRepositoryMappingJackrabbitHierarchyNode.class, collectionConverter = NTCollectionConverterImpl.class)
+    private List<OfbizRepositoryMappingJackrabbitHierarchyNode> children;
+
+    public List<OfbizRepositoryMappingJackrabbitHierarchyNode> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<OfbizRepositoryMappingJackrabbitHierarchyNode> children) {
+        this.children = children;
+    }
+
+    public void addChild(OfbizRepositoryMappingJackrabbitHierarchyNode node) {
+        if (children == null) {
+            children = new ArrayList<OfbizRepositoryMappingJackrabbitHierarchyNode>();
+        }
+        children.add(node);
+    }
+
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitFolder.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitHierarchyNode.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitHierarchyNode.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitHierarchyNode.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitHierarchyNode.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,37 @@
+package org.ofbiz.jcr.orm.jackrabbit;
+
+import java.util.Calendar;
+
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Field;
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
+import org.ofbiz.jcr.access.jackrabbit.ConstantsJackrabbit;
+import org.ofbiz.jcr.orm.OfbizRepositoryMapping;
+
+@Node(jcrType = "nt:hierarchyNode")
+public class OfbizRepositoryMappingJackrabbitHierarchyNode implements OfbizRepositoryMapping {
+    @Field(path = true, id = true, jcrProtected = true)
+    protected String path;
+    @Field(jcrName = "jcr:created")
+    private Calendar creationDate;
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String nodePath) {
+        // check if the node path is an absolute path
+        if (!nodePath.startsWith(ConstantsJackrabbit.ROOTPATH)) {
+            nodePath = ConstantsJackrabbit.ROOTPATH + nodePath;
+        }
+
+        this.path = nodePath;
+    }
+
+    public Calendar getCreationDate() {
+        return creationDate;
+    }
+
+    public void setCreationDate(Calendar creationDate) {
+        this.creationDate = creationDate;
+    }
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitHierarchyNode.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitNews.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitNews.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitNews.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitNews.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,51 @@
+package org.ofbiz.jcr.orm.jackrabbit;
+
+import java.util.Calendar;
+
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Field;
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
+
+@Node(extend = OfbizRepositoryMappingJackrabbitUnstructured.class)
+public class OfbizRepositoryMappingJackrabbitNews extends OfbizRepositoryMappingJackrabbitUnstructured {
+
+    @Field(id = true) String title = null;
+    @Field(jcrType = "Date") Calendar pubDate = null;
+    @Field String content = null;
+
+    public OfbizRepositoryMappingJackrabbitNews() {
+        super();
+        // create an empty object
+    }
+
+    public OfbizRepositoryMappingJackrabbitNews(String nodePath, String language, String title, Calendar pubDate, String content) {
+        super(nodePath, language);
+        this.title = title;
+        this.pubDate = pubDate;
+        this.content = content;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public Calendar getPubDate() {
+        return pubDate;
+    }
+
+    public void setPubDate(Calendar pubDate) {
+        this.pubDate = pubDate;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitNews.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitResource.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitResource.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitResource.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitResource.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,43 @@
+package org.ofbiz.jcr.orm.jackrabbit;
+
+import java.io.InputStream;
+import java.util.Calendar;
+
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Field;
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
+
+@Node(jcrType = "nt:resource")
+public class OfbizRepositoryMappingJackrabbitResource {
+
+    @Field(jcrName = "jcr:mimeType")
+    private String mimeType;
+    @Field(jcrName = "jcr:data")
+    private InputStream data;
+    @Field(jcrName = "jcr:lastModified")
+    private Calendar lastModified;
+
+    public InputStream getData() {
+        return data;
+    }
+
+    public void setData(InputStream data) {
+        this.data = data;
+    }
+
+    public Calendar getLastModified() {
+        return lastModified;
+    }
+
+    public void setLastModified(Calendar lastModified) {
+        this.lastModified = lastModified;
+    }
+
+    public String getMimeType() {
+        return mimeType;
+    }
+
+    public void setMimeType(String mimeType) {
+        this.mimeType = mimeType;
+    }
+
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitResource.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitUnstructured.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitUnstructured.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitUnstructured.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitUnstructured.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,76 @@
+package org.ofbiz.jcr.orm.jackrabbit;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Field;
+import org.apache.jackrabbit.ocm.mapper.impl.annotation.Node;
+import org.ofbiz.base.util.UtilProperties;
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.jcr.access.jackrabbit.ConstantsJackrabbit;
+import org.ofbiz.jcr.orm.OfbizRepositoryMapping;
+
+@Node(isAbstract = true)
+public abstract class OfbizRepositoryMappingJackrabbitUnstructured implements OfbizRepositoryMapping {
+
+    protected static String module = OfbizRepositoryMappingJackrabbitUnstructured.class.getName();
+
+    @Field(path = true)
+    private String path;
+    @Field
+    private String language;
+    @Field
+    private String version;
+    @Field(jcrName = "jcr:created")
+    private Calendar creationDate;
+
+    protected OfbizRepositoryMappingJackrabbitUnstructured() {
+        // create an empty object
+    }
+
+    protected OfbizRepositoryMappingJackrabbitUnstructured(String nodePath, String language) {
+        this.setPath(nodePath);
+        this.creationDate = new GregorianCalendar();
+        if (UtilValidate.isEmpty(language)) {
+            language = UtilProperties.getPropertyValue("general", "locale.properties.fallback");
+        }
+        this.language = language;
+    }
+
+    public String getPath() {
+        return path;
+    }
+
+    public Calendar getCreationDate() {
+        return creationDate;
+    }
+
+    public void setCreationDate(Calendar creationDate) {
+        this.creationDate = creationDate;
+    }
+
+    public void setPath(String nodePath) {
+        // check if the node path is an absolute path
+        if (!nodePath.startsWith(ConstantsJackrabbit.ROOTPATH)) {
+            nodePath = ConstantsJackrabbit.ROOTPATH + nodePath;
+        }
+
+        this.path = nodePath;
+    }
+
+    public String getLanguage() {
+        return language;
+    }
+
+    public void setLanguage(String language) {
+        this.language = language;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitUnstructured.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/JcrUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/JcrUtil.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/JcrUtil.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/JcrUtil.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,5 @@
+package org.ofbiz.jcr.util;
+
+public interface JcrUtil {
+
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/JcrUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/jackrabbit/JcrUtilJackrabbit.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/jackrabbit/JcrUtilJackrabbit.java?rev=1156196&view=auto
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/jackrabbit/JcrUtilJackrabbit.java (added)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/jackrabbit/JcrUtilJackrabbit.java Wed Aug 10 14:29:40 2011
@@ -0,0 +1,89 @@
+package org.ofbiz.jcr.util.jackrabbit;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import javolution.util.FastList;
+import javolution.util.FastMap;
+
+import org.ofbiz.base.util.UtilValidate;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.jcr.loader.JCRFactoryUtil;
+import org.ofbiz.jcr.util.JcrUtil;
+
+public class JcrUtilJackrabbit implements JcrUtil {
+
+    public static final String module = JcrUtilJackrabbit.class.getName();
+
+    /**
+     * Just a dummy method to list all nodes in the repository.
+     *
+     * @param startNodePath
+     * @return
+     * @throws RepositoryException
+     */
+    public static List<Map<String, String>> getRepositoryNodes(GenericValue userLogin, String startNodePath) throws RepositoryException {
+        List<Map<String, String>> returnList = null;
+        Session session = JCRFactoryUtil.getSession();
+
+        try {
+            returnList = getRepositoryNodes(session, startNodePath);
+        } catch (RepositoryException e) {
+            throw new RepositoryException(e);
+        } finally {
+            session.logout();
+        }
+
+        return returnList;
+    }
+
+    /**
+     * Just a dummy method to list all nodes in the repository.
+     *
+     * @param startNodePath
+     * @return
+     * @throws RepositoryException
+     */
+    private static List<Map<String, String>> getRepositoryNodes(Session session, String startNodePath) throws RepositoryException {
+        Node node = null;
+
+        List<Map<String, String>> nodeList = FastList.newInstance();
+        if (UtilValidate.isEmpty(startNodePath)) {
+            node = session.getRootNode();
+        } else {
+            node = session.getNode(startNodePath);
+        }
+
+        NodeIterator nodeIterator = node.getNodes();
+        Map<String, String> nodeEntry = null;
+        while (nodeIterator.hasNext()) {
+            Node n = nodeIterator.nextNode();
+
+            // recursion - get all subnodes and add the results to our nodeList
+            if (n.getNodes().hasNext()) {
+                nodeList.addAll(getRepositoryNodes(session, n.getPath()));
+            }
+
+            nodeEntry = FastMap.newInstance();
+
+            // if the node path is a jcr:system node than ignore this
+            // entry
+            if (n.getPath().startsWith("/jcr:system")) {
+                continue;
+            }
+
+            nodeEntry.put("path", n.getPath());
+
+            nodeEntry.put("primaryNodeType", n.getPrimaryNodeType().getName());
+
+            nodeList.add(nodeEntry);
+        }
+
+        return nodeList;
+    }
+}

Propchange: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/util/jackrabbit/JcrUtilJackrabbit.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain