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/09/09 15:30:50 UTC
svn commit: r1167157 - in /ofbiz/branches/jackrabbit20100709:
applications/content/src/org/ofbiz/content/jcr/
framework/jcr/src/org/ofbiz/jcr/access/
framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/
framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/
Author: sascharodekamp
Date: Fri Sep 9 13:30:49 2011
New Revision: 1167157
URL: http://svn.apache.org/viewvc?rev=1167157&view=rev
Log:
Update: Enable versioning for hierarchy and unstructured nodes
Modified:
ofbiz/branches/jackrabbit20100709/applications/content/src/org/ofbiz/content/jcr/JackrabbitEvents.java
ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/RepositoryAccess.java
ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/VersioningManager.java
ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentReaderJackrabbit.java
ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentWriterJackrabbit.java
ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/RepositoryAccessJackrabbit.java
ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/VersioningManagerJackrabbit.java
ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitHierarchyNode.java
ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitUnstructured.java
Modified: ofbiz/branches/jackrabbit20100709/applications/content/src/org/ofbiz/content/jcr/JackrabbitEvents.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/applications/content/src/org/ofbiz/content/jcr/JackrabbitEvents.java?rev=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/applications/content/src/org/ofbiz/content/jcr/JackrabbitEvents.java (original)
+++ ofbiz/branches/jackrabbit20100709/applications/content/src/org/ofbiz/content/jcr/JackrabbitEvents.java Fri Sep 9 13:30:49 2011
@@ -120,13 +120,16 @@ public class JackrabbitEvents {
}
RepositoryAccess repositoryAccess = new RepositoryAccessJackrabbit(userLogin);
+
+ List<String> list = repositoryAccess.getVersionList(node);
+
OfbizRepositoryMappingJackrabbitArticle ormArticle = (OfbizRepositoryMappingJackrabbitArticle) repositoryAccess.getContentObject(node);
request.setAttribute("contentObject", ormArticle);
request.setAttribute("path", ormArticle.getPath());
request.setAttribute("language", ormArticle.getLanguage());
request.setAttribute("title", ormArticle.getTitle());
- request.setAttribute("version", ormArticle.getVersion());
+ request.setAttribute("version", list.get(list.size() - 1));
request.setAttribute("createDate", ormArticle.getCreationDate());
request.setAttribute("content", ormArticle.getContent());
Modified: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/RepositoryAccess.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/RepositoryAccess.java?rev=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/RepositoryAccess.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/RepositoryAccess.java Fri Sep 9 13:30:49 2011
@@ -1,5 +1,7 @@
package org.ofbiz.jcr.access;
+import java.util.List;
+
import javax.jcr.ItemExistsException;
import javax.jcr.RepositoryException;
@@ -72,4 +74,12 @@ public interface RepositoryAccess {
* @throws RepositoryException
*/
JSONArray getJsonFileTree() throws RepositoryException;
+
+ /**
+ * Returns a list of the available versions.
+ *
+ * @param nodePath
+ * @return
+ */
+ public List<String> getVersionList(String nodePath);
}
Modified: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/VersioningManager.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/VersioningManager.java?rev=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/VersioningManager.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/VersioningManager.java Fri Sep 9 13:30:49 2011
@@ -1,5 +1,46 @@
package org.ofbiz.jcr.access;
+import java.util.List;
+import java.util.Set;
+
public interface VersioningManager {
+ /**
+ * Returns a List of all available versions for the passed node.
+ *
+ * @param nodePath
+ * @return
+ */
+ public List<String> getVersionList(String nodePath);
+
+ /**
+ * Check Out a node from a repository
+ *
+ * @param nodePath
+ */
+ public void checkOutContentObject(String nodePath);
+
+ /**
+ * Check Out a node from a repository. If recursive is set to TRUE all
+ * related sub nodes and the parent node will also be checked out.
+ *
+ * @param nodePath
+ * @param recursiv
+ */
+ public void checkOutContentObject(String nodePath, boolean recursiv);
+
+ /**
+ * Saves the state of the session and checks in all checkout content nodes.
+ */
+ public void checkInContentAndSaveState();
+
+ /**
+ * Add a node path to a list of node path which will be checked in when the
+ * state is saved. This is to add new created nodes which could not checked
+ * out before.
+ *
+ * @param nodePath
+ */
+ public void addContentToCheckInList(String nodePath);
+
}
Modified: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentReaderJackrabbit.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentReaderJackrabbit.java?rev=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentReaderJackrabbit.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentReaderJackrabbit.java Fri Sep 9 13:30:49 2011
@@ -23,8 +23,6 @@ public class ContentReaderJackrabbit imp
@Override
public OfbizRepositoryMapping getContentObject(String nodePath) {
- // OfbizRepositoryMappingJackrabbit ofbizRepositoryMapping =
- // (OfbizRepositoryMappingJackrabbit) ocm.getObject(nodePath);
return (OfbizRepositoryMapping) ocm.getObject(nodePath);
}
Modified: ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentWriterJackrabbit.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentWriterJackrabbit.java?rev=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentWriterJackrabbit.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/ContentWriterJackrabbit.java Fri Sep 9 13:30:49 2011
@@ -10,6 +10,7 @@ import org.apache.jackrabbit.ocm.manager
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.jcr.access.ContentWriter;
+import org.ofbiz.jcr.access.VersioningManager;
import org.ofbiz.jcr.orm.OfbizRepositoryMapping;
public class ContentWriterJackrabbit implements ContentWriter {
@@ -17,6 +18,7 @@ public class ContentWriterJackrabbit imp
private static String module = ContentWriterJackrabbit.class.getName();
private ObjectContentManager ocm = null;
+ VersioningManager versioningManager = null;
/**
*
@@ -24,6 +26,7 @@ public class ContentWriterJackrabbit imp
*/
public ContentWriterJackrabbit(ObjectContentManager ocm) {
this.ocm = ocm;
+ versioningManager = new VersioningManagerJackrabbit(ocm);
}
/*
@@ -85,7 +88,10 @@ public class ContentWriterJackrabbit imp
}
newNode.setPath(parentNodePath + node);
+ versioningManager.checkOutContentObject(parentNode.getPath());
+
ocm.insert(newNode);
+ versioningManager.addContentToCheckInList(newNode.getPath());
parentNode = parentNode.getNode(node);
}
} catch (PathNotFoundException e) {
@@ -105,6 +111,8 @@ public class ContentWriterJackrabbit imp
}
ocm.insert(orm);
+ versioningManager.addContentToCheckInList(orm.getPath());
+
this.saveState();
}
@@ -117,6 +125,7 @@ public class ContentWriterJackrabbit imp
*/
@Override
public void updateContentObject(OfbizRepositoryMapping orm) throws ObjectContentManagerException {
+ versioningManager.checkOutContentObject(orm.getPath());
ocm.update(orm);
this.saveState();
}
@@ -129,13 +138,13 @@ public class ContentWriterJackrabbit imp
*/
@Override
public void removeContentObject(String nodePath) throws ObjectContentManagerException {
+ versioningManager.checkOutContentObject(nodePath, true);
+
ocm.remove(nodePath);
this.saveState();
}
private void saveState() {
- if (ocm != null) {
- ocm.save();
- }
+ versioningManager.checkInContentAndSaveState();
}
}
Modified: 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=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/RepositoryAccessJackrabbit.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/RepositoryAccessJackrabbit.java Fri Sep 9 13:30:49 2011
@@ -18,6 +18,7 @@ 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.access.VersioningManager;
import org.ofbiz.jcr.loader.JCRFactoryUtil;
import org.ofbiz.jcr.orm.OfbizRepositoryMapping;
import org.ofbiz.jcr.orm.jackrabbit.OfbizRepositoryMappingJackrabbitArticle;
@@ -160,6 +161,16 @@ public class RepositoryAccessJackrabbit
/*
* (non-Javadoc)
+ * @see org.ofbiz.jcr.access.RepositoryAccess#getVersionList(java.lang.String)
+ */
+ @Override
+ public List<String> getVersionList(String nodePath) {
+ VersioningManager versioningnManager = new VersioningManagerJackrabbit(this.ocm);
+ return versioningnManager.getVersionList(nodePath);
+ }
+
+ /*
+ * (non-Javadoc)
*
* @see org.ofbiz.jcr.orm.RepositoryAccess#getJsonFileTree()
*/
Modified: 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=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/VersioningManagerJackrabbit.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/access/jackrabbit/VersioningManagerJackrabbit.java Fri Sep 9 13:30:49 2011
@@ -2,15 +2,19 @@ package org.ofbiz.jcr.access.jackrabbit;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
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 javax.jcr.version.VersionException;
+import org.apache.jackrabbit.ocm.manager.ObjectContentManager;
+import org.apache.jackrabbit.ocm.version.Version;
+import org.apache.jackrabbit.ocm.version.VersionIterator;
import org.ofbiz.base.util.Debug;
import org.ofbiz.jcr.access.VersioningManager;
@@ -18,58 +22,123 @@ public class VersioningManagerJackrabbit
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;
+ ObjectContentManager ocm = null;
- VersioningManagerJackrabbit(Session session) throws UnsupportedRepositoryOperationException, RepositoryException {
- versionManager = session.getWorkspace().getVersionManager();
- this.session = session;
+ private Set<String> checkedOutNodeStore = Collections.synchronizedSet(new HashSet<String>());
+
+ VersioningManagerJackrabbit(ObjectContentManager ocm) {
+ this.ocm = ocm;
}
- public VersionManager getVersionManager() {
- return this.versionManager;
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.ofbiz.jcr.access.VersioningManager#getVersionList(java.lang.String)
+ */
+ @Override
+ public List<String> getVersionList(String nodePath) {
+ List<String> result = new ArrayList<String>();
+ VersionIterator versionIterator = null;
+ try {
+ versionIterator = this.ocm.getAllVersions(nodePath);
+ } catch (VersionException e) {
+ Debug.logError(e, module);
+ // return an empty List
+ return result;
+ }
+
+ // write the versions to the array list.
+ while (versionIterator.hasNext()) {
+ Version version = (Version) versionIterator.next();
+ result.add(version.getName());
+ }
+
+ return result;
}
- public void addNodeToCheckedOutStore(Node node) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.ofbiz.jcr.access.VersioningManager#checkOutContentObject(java.lang
+ * .String)
+ */
+ @Override
+ public void checkOutContentObject(String nodePath) {
+ // check if the parent node is the root node, because the
+ // root node can not be checked out.
+ if (ConstantsJackrabbit.ROOTPATH.equals(nodePath)) {
+ return;
+ }
+
try {
- if (!versionManager.isCheckedOut(node.getPath())) {
- checkedOutNodeStore.add(node);
+ if (this.ocm.getSession().nodeExists(nodePath) && !this.ocm.getSession().getWorkspace().getVersionManager().isCheckedOut(nodePath)) {
+ this.ocm.checkout(nodePath);
+ this.addContentToCheckInList(nodePath);
}
+ } catch (VersionException e) {
+ Debug.logError(e, module);
+ } catch (UnsupportedRepositoryOperationException e) {
+ Debug.logError(e, module);
} catch (RepositoryException e) {
Debug.logError(e, module);
}
}
- protected void saveSessionAndCheckinNode() {
- try {
- this.session.save();
+ public void checkOutContentObject(String nodePath, boolean recursiv) {
+ if (recursiv) {
+ try {
+ checkOutRelatedNodes(nodePath);
+ } catch (RepositoryException e) {
+ Debug.logError(e, module);
+ }
+ } else {
+ checkOutContentObject(nodePath);
+ }
+ }
- for (Node node : checkedOutNodeStore) {
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.ofbiz.jcr.access.VersioningManager#addContentToCheckInList(java.lang
+ * .String)
+ */
+ @Override
+ public void addContentToCheckInList(String nodePath) {
+ checkedOutNodeStore.add(nodePath);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.ofbiz.jcr.access.VersioningManager#checkInContentAndSaveState()
+ */
+ @Override
+ public void checkInContentAndSaveState() {
+ if (ocm != null) {
+ ocm.save();
+ }
+
+ try {
+ for (String nodePath : checkedOutNodeStore) {
// add the new resource content to the version history
- if (session.nodeExists(node.getPath()) && versionManager.isCheckedOut(node.getPath())) {
- versionManager.checkin(node.getPath());
+ if (this.ocm.getSession().nodeExists(nodePath) && this.ocm.getSession().getWorkspace().getVersionManager().isCheckedOut(nodePath)) {
+ this.ocm.checkin(nodePath);
}
}
// reset the node store after everything is checked in
- checkedOutNodeStore = new ArrayList<Node>();
- } catch (RepositoryException e) {
+ checkedOutNodeStore.clear();
+ } catch (VersionException e) {
+ Debug.logError(e, module);
+ } catch (UnsupportedRepositoryOperationException 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);
}
+
}
/**
@@ -79,16 +148,16 @@ public class VersioningManagerJackrabbit
* @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));
+ protected void checkOutRelatedNodes(String startNodePath) throws RepositoryException {
+ List<String> nodesToCheckOut = new ArrayList<String>();
+ nodesToCheckOut.add(startNodePath);
+ nodesToCheckOut.add(ocm.getSession().getNode(startNodePath).getParent().getPath());
+ if (ocm.getSession().getNode(startNodePath).hasNodes()) {
+ nodesToCheckOut.addAll(getAllChildNodes(startNodePath));
}
- for (Node node : nodesToCheckOut) {
- checkOutNode(node);
+ for (String node : nodesToCheckOut) {
+ this.checkOutContentObject(node);
}
}
@@ -100,19 +169,18 @@ public class VersioningManagerJackrabbit
* @return
* @throws RepositoryException
*/
- private List<Node> getAllChildNodes(Node startNode) throws RepositoryException {
- List<Node> nodes = new ArrayList<Node>();
- NodeIterator ni = startNode.getNodes();
+ private List<String> getAllChildNodes(String startNode) throws RepositoryException {
+ List<String> nodes = new ArrayList<String>();
+ NodeIterator ni = ocm.getSession().getNode(startNode).getNodes();
while (ni.hasNext()) {
Node nextNode = ni.nextNode();
if (nextNode.hasNodes()) {
- nodes.addAll(getAllChildNodes(nextNode));
+ nodes.addAll(getAllChildNodes(nextNode.getPath()));
}
- nodes.add(nextNode);
+ nodes.add(nextNode.getPath());
}
return nodes;
}
-
}
Modified: 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=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitHierarchyNode.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitHierarchyNode.java Fri Sep 9 13:30:49 2011
@@ -7,7 +7,7 @@ import org.apache.jackrabbit.ocm.mapper.
import org.ofbiz.jcr.access.jackrabbit.ConstantsJackrabbit;
import org.ofbiz.jcr.orm.OfbizRepositoryMapping;
-@Node(jcrType = "nt:hierarchyNode")
+@Node(jcrType = "nt:hierarchyNode", jcrMixinTypes="mix:versionable")
public class OfbizRepositoryMappingJackrabbitHierarchyNode implements OfbizRepositoryMapping {
@Field(path = true, id = true, jcrProtected = true)
protected String path;
Modified: 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=1167157&r1=1167156&r2=1167157&view=diff
==============================================================================
--- ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitUnstructured.java (original)
+++ ofbiz/branches/jackrabbit20100709/framework/jcr/src/org/ofbiz/jcr/orm/jackrabbit/OfbizRepositoryMappingJackrabbitUnstructured.java Fri Sep 9 13:30:49 2011
@@ -8,15 +8,19 @@ import org.apache.jackrabbit.ocm.mapper.
import org.ofbiz.jcr.access.jackrabbit.ConstantsJackrabbit;
import org.ofbiz.jcr.orm.OfbizRepositoryMapping;
-@Node(isAbstract = true)
+@Node(isAbstract = true, jcrMixinTypes = "mix:versionable")
public abstract class OfbizRepositoryMappingJackrabbitUnstructured implements OfbizRepositoryMapping {
protected static String module = OfbizRepositoryMappingJackrabbitUnstructured.class.getName();
- @Field(path = true) private String path;
- @Field private String version;
- @Field(jcrName = "jcr:created") private Calendar creationDate;
- @Field private boolean localized;
+ @Field(path = true)
+ private String path;
+ @Field
+ private String version;
+ @Field(jcrName = "jcr:created")
+ private Calendar creationDate;
+ @Field
+ private boolean localized;
protected OfbizRepositoryMappingJackrabbitUnstructured() {
// create an empty object