|
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 |
| Free forum by Nabble | Edit this page |
