javax.jcr.Node.merge()方法的使用及代码示例

x33g5p2x  于2022-01-24 转载在 其他  
字(13.6k)|赞(0)|评价(0)|浏览(239)

本文整理了Java中javax.jcr.Node.merge()方法的一些代码示例,展示了Node.merge()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Node.merge()方法的具体详情如下:
包路径:javax.jcr.Node
类名称:Node
方法名:merge

Node.merge介绍

[英]Support for this method is only required under full versioning.

This method can be thought of as a version-sensitive update.

It recursively tests each versionable node in the subgraph of this node against its corresponding node in srcWorkspace with respect to the relation between their respective base versions and either updates the node in question or not, depending on the outcome of the test.

A MergeException is thrown if bestEffort is false and a versionable node is encountered whose corresponding node's base version is on a divergent branch from this node's base version.

If successful, the changes are persisted immediately, there is no need to call save.

This method returns a NodeIterator over all versionable nodes in the subgraph that received a merge result of fail. If bestEffort is false, this iterator will be empty (since if merge returns successfully, instead of throwing an exception, it will be because no failures were encountered). If bestEffort is true, this iterator will contain all nodes that received a fail during the course of this merge operation.
[中]只有在完全版本控制下才需要支持此方法。
此方法可以被视为对版本敏感的更新。
它针对srcWorkspace中对应的节点,递归地测试该节点子图中的每个可版本节点各自的基本版本之间的关系,并根据测试结果更新相关节点或不更新相关节点。
如果bestEffortfalse,并且遇到可版本化节点,其对应节点的基本版本位于与此节点的基本版本不同的分支上,则会抛出MergeException
如果成功,更改将立即持久化,无需调用save
此方法返回子图中所有可版本化节点的NodeIterator,这些节点收到了失败的合并结果。如果bestEffortfalse,则此迭代器将为空(因为如果merge成功返回,而不是引发异常,这将是因为未遇到任何失败)。如果bestEfforttrue,则此迭代器将包含在此merge操作过程中接收到失败的所有节点。

代码示例

代码示例来源:origin: org.onehippo.cms7/hippo-repository-connector

  1. /**
  2. * @inheritDoc
  3. */
  4. public NodeIterator merge(String srcWorkspace, boolean bestEffort) throws NoSuchWorkspaceException,
  5. AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException {
  6. NodeIterator nodes = node.merge(srcWorkspace, bestEffort);
  7. return new NodeIteratorDecorator(factory, session, nodes);
  8. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Perform a merge on a node with a unkwnown workspacename
  3. */
  4. @SuppressWarnings("deprecation")
  5. public void testMergeUnknownWorkspaceName() throws RepositoryException {
  6. try {
  7. nodeToMerge.merge(getNonExistingWorkspaceName(superuser), false);
  8. } catch (NoSuchWorkspaceException e) {
  9. // success expected exception
  10. }
  11. }

代码示例来源:origin: nl.vpro/jcr-criteria

  1. @Override
  2. @Deprecated
  3. public NodeIterator merge(String srcWorkspace, boolean bestEffort) throws RepositoryException {
  4. return getNode().merge(srcWorkspace, bestEffort);
  5. }

代码示例来源:origin: info.magnolia/magnolia-core

  1. @Override
  2. public NodeIterator merge(String srcWorkspace, boolean bestEffort) throws NoSuchWorkspaceException, AccessDeniedException, MergeException, LockException, InvalidItemStateException, RepositoryException {
  3. return getWrappedNode().merge(srcWorkspace, bestEffort);
  4. }

代码示例来源:origin: net.adamcin.commons/net.adamcin.commons.jcr

  1. public NodeIterator merge(String s, boolean b) throws RepositoryException {
  2. return new NodeIteratorProxy(this.item.merge(s, b));
  3. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): If this node does not have a corresponding node in the
  3. * indicated workspace <br> then the merge method returns quietly and no
  4. * changes are made.<br>
  5. */
  6. @SuppressWarnings("deprecation")
  7. public void testMergeNodeNonCorrespondingNode() throws RepositoryException {
  8. // create new node - this node has no corresponding node in default workspace
  9. Node subNode = nodeToMerge.addNode(nodeName3, versionableNodeType);
  10. subNode.setProperty(propertyName1, CHANGED_STRING);
  11. superuserW2.save();
  12. subNode.checkin();
  13. subNode.merge(workspace.getName(), true);
  14. assertTrue(subNode.getProperty(propertyName1).getString().equals(CHANGED_STRING));
  15. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): InvalidItemStateException if unsaved changes within the
  3. * current Session<br>
  4. */
  5. @SuppressWarnings("deprecation")
  6. public void testMergeNodeWithUnsavedStates() throws RepositoryException {
  7. // set a property and do not save workspace
  8. nodeToMerge.setProperty(propertyName1, CHANGED_STRING);
  9. try {
  10. nodeToMerge.merge(workspace.getName(), false);
  11. fail("InvalidItemStateException if unsaved changes within the current Session was expected.");
  12. } catch (InvalidItemStateException e) {
  13. // success
  14. }
  15. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): nonversionable subNode N: if it has no versionable
  3. * ancestor, then it is updated to reflect the state of its corresponding
  4. * node.<br>
  5. */
  6. public void testMergeNodeNonVersionableSubNodeNonVersionableAncestor() throws RepositoryException {
  7. String nodeToMergePath = nodeName1 + "/" + nodeName2 + "/" + nodeName3;
  8. // node to merge in second workspace
  9. Node nodeToMerge = testRootNodeW2.getNode(nodeToMergePath);
  10. // corresponding node to nodeToMerge in default workspace
  11. Node correspondingNode = testRootNode.getNode(nodeToMergePath);
  12. // modify value for non'v node in workspace2 so we can check if node in workspace2 after merge is updated
  13. // to reflect the state of its corresponding node in default workspace....
  14. nodeToMerge.setProperty(propertyName1, CHANGED_STRING);
  15. nodeToMerge.save();
  16. nodeToMerge.merge(workspace.getName(), true);
  17. // test if modification on non-v node is done according to corresponding node.
  18. assertTrue(nodeToMerge.getProperty(propertyName1).getString().equals(correspondingNode.getName()));
  19. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): For each versionable node N in the subtree rooted at this
  3. * node,<br> a merge test is performed comparing N with its corresponding
  4. * node in workspace, N'.<br>
  5. */
  6. @SuppressWarnings("deprecation")
  7. public void disable_testMergeNodeSubNodesMergeTest() throws RepositoryException {
  8. //setCheckProperty(nodeToMerge);
  9. nodeToMerge.checkout();
  10. nodeToMerge.merge(workspace.getName(), true);
  11. // check subnodes if they were touched
  12. for (NodeIterator ni = nodeToMerge.getNodes(); ni.hasNext();) {
  13. Node n = ni.nextNode();
  14. if (n.getBaseVersion() != null) {
  15. assertTrue(n.getProperty(propertyName1).getString().equals(CHANGED_STRING));
  16. }
  17. }
  18. }

代码示例来源:origin: brix-cms/brix-cms

  1. /**
  2. * @deprecated
  3. */
  4. @Deprecated
  5. public NodeIterator merge(String srcWorkspace, boolean bestEffort) throws RepositoryException {
  6. return NodeIteratorWrapper.wrap(getDelegate().merge(srcWorkspace, bestEffort),
  7. getSessionWrapper());
  8. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): nonversionable subNode N: is left unchanged if the nearest
  3. * versionable ancestor has state leave.<br>
  4. */
  5. public void testMergeNodeNonVersionableSubNodeLeave() throws RepositoryException {
  6. // modify non versionable subnode so we can check if it's updated after merge
  7. String changedString = CHANGED_STRING + System.currentTimeMillis();
  8. String nvSubNodePath = nodeName2 + "/" + nodeName3;
  9. // versionable ancestor to merge in first workspace (N)
  10. Node n = testRootNodeW2.getNode(nodeName1);
  11. // versionable ancestor to merge in second workspace (N')
  12. Node np = testRootNodeW2.getNode(nodeName1);
  13. // checkout N' and make change
  14. np.checkout();
  15. Node nvSubNodeP = np.getNode(nvSubNodePath);
  16. nvSubNodeP.setProperty(propertyName1, changedString);
  17. np.save();
  18. np.checkin();
  19. // merge into N'
  20. np.merge(workspaceW2.getName(), true);
  21. // corresponding node to nvSubNode in 2nd workspace
  22. Node nvSubNode = np.getNode(nvSubNodePath);
  23. // test if modification on N' was not modified
  24. assertTrue(nvSubNode.getProperty(propertyName1).getString().equals(changedString));
  25. }

代码示例来源:origin: apache/jackrabbit

  1. /** {@inheritDoc} */
  2. public RemoteIterator merge(String workspace, boolean bestEffort)
  3. throws RepositoryException, RemoteException {
  4. try {
  5. return getFactory().getRemoteNodeIterator(node.merge(workspace, bestEffort));
  6. } catch (RepositoryException ex) {
  7. throw getRepositoryException(ex);
  8. }
  9. }

代码示例来源:origin: brix-cms/brix-cms

  1. public JcrNodeIterator execute() throws Exception {
  2. return JcrNodeIterator.Wrapper.wrap(getDelegate().merge(srcWorkspace, bestEffort),
  3. getJcrSession());
  4. }
  5. });

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): If V' of a versionable subnode N' in the source workspace
  3. * is a predeccessor of V or V' identical to V (the base version of a
  4. * subnode N in this workspace), calling merge must be leave.
  5. */
  6. public void testLeaveIfCorrespondingNodeIsPredeccessor() throws RepositoryException {
  7. // make V' of a subnode N' in source workspace be a predeccessor version of
  8. // the base version of the corresponding subnode.
  9. Node n = testRootNodeW2.getNode(nodeName1 + "/" + nodeName2);
  10. n.checkout();
  11. n.setProperty(propertyName1, CHANGED_STRING);
  12. testRootNodeW2.save();
  13. n.checkin();
  14. n.checkout();
  15. // merge, besteffort set to false to stop at the first failure
  16. nodeToMerge.merge(workspace.getName(), false);
  17. // check if subnode has status "leave"
  18. assertTrue(n.getProperty(propertyName1).getString().equals(CHANGED_STRING));
  19. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): bestEffort is false and any merge fails a MergeException is
  3. * thrown.<br>
  4. */
  5. @SuppressWarnings("deprecation")
  6. public void testMergeNodeBestEffortFalse() throws RepositoryException {
  7. /// create successor versions for a node
  8. // so merge fails for this node
  9. // default workspace
  10. Node originalNode = testRootNode.getNode(nodeName1);
  11. originalNode.checkout();
  12. originalNode.checkin();
  13. // "merge" the clonedNode with the newNode from the default workspace
  14. // merge, besteffort set to false
  15. try {
  16. nodeToMerge.merge(workspace.getName(), false);
  17. fail("bestEffort is false and any merge should throw a MergeException.");
  18. } catch (MergeException e) {
  19. // successful
  20. }
  21. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): versionable subNode N checked-in: If V' is a successor (to
  3. * any degree) of V, then the merge result for N is update<br> modify a node
  4. * on the workspace1 and then merge the one in workspace2 with the one in
  5. * workspace1 precondition is that the node in workspace2 is checked in
  6. */
  7. @SuppressWarnings("deprecation")
  8. public void disable_testMergeNodeFromUpdatedSourceWorkspace() throws RepositoryException {
  9. Node originalNode = testRootNode.getNode(nodeName1);
  10. // update nodeName1 on workspace1
  11. originalNode.checkout();
  12. originalNode.checkin();
  13. testRootNode.getSession().save();
  14. // "merge" the clonedNode with the newNode from the default workspace
  15. // besteffort set to false to stop at the first failure
  16. nodeToMerge.merge(workspace.getName(), false);
  17. final String originalBaseVersionUUID = originalNode.getBaseVersion().getUUID();
  18. final String clonedBaseVersionUUID = nodeToMerge.getBaseVersion().getUUID();
  19. assertTrue("clonedNode has different version UUID than expected, it should be updated with the newNode version UUID", originalBaseVersionUUID.equals(clonedBaseVersionUUID));
  20. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): If V' of a versionable subnode N' in the source workspace
  3. * is a successor of V (the base version of a subnode N in this workspace),
  4. * calling merge must fail.
  5. */
  6. public void testFailIfCorrespondingNodeIsSuccessor() throws RepositoryException {
  7. // make V' of a subnode N' in source workspace be a successor version of
  8. // the base version of the corresponding subnode.
  9. Node n = testRootNode.getNode(nodeName1 + "/" + nodeName2);
  10. n.checkout();
  11. n.checkin();
  12. n.checkout();
  13. try {
  14. // merge, besteffort set to false to stop at the first failure
  15. nodeToMerge.merge(workspace.getName(), false);
  16. fail("Merging a checkedout node if the version V' of the corresponding node is a successor of this node's base version must fail.");
  17. } catch (MergeException e) {
  18. // success
  19. }
  20. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): versionable subNode N checked-in: If V is neither a
  3. * successor of, predecessor of, nor identical with V', then the merge
  4. * result for N is failed<br>
  5. */
  6. @SuppressWarnings("deprecation")
  7. public void testMergeNodeVersionAmbiguous() throws RepositoryException {
  8. // create 2 independent versions for a node and its corresponding node
  9. // so merge fails for this node
  10. // default workspace
  11. Node originalNode = testRootNode.getNode(nodeName1);
  12. originalNode.checkout();
  13. originalNode.checkin();
  14. // second workspace
  15. nodeToMerge.checkin();
  16. // "merge" the clonedNode with the newNode from the default workspace
  17. // besteffort set to false to stop at the first failure
  18. try {
  19. nodeToMerge.checkout();
  20. nodeToMerge.merge(workspace.getName(), false);
  21. fail("Node has ambigous versions. Merge must throw a MergeException");
  22. } catch (MergeException e) {
  23. // success if the merge exception thrown
  24. }
  25. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): versionable subNode N: If N has status leave but parent is
  3. * update, then the subnode N is removed<br> retrieve the initialised node
  4. * to perform operations we need before for this test<br>
  5. */
  6. @SuppressWarnings("deprecation")
  7. public void disable_testRemoveNodeFromSourceWorkspaceAndMergeWithUpdate() throws RepositoryException {
  8. // status 'update' for parent
  9. nodeToMerge.checkin();
  10. nodeToMerge.checkout();
  11. // status 'leave' for subnode
  12. Node originalNode = testRootNode.getNode(nodeName1);
  13. Node originalSubNode = originalNode.getNode(nodeName2);
  14. originalSubNode.checkout();
  15. originalSubNode.checkin();
  16. // "merge" the nodeToMerge with the newNode from the default workspace
  17. // besteffort set to false to stop at the first failure
  18. nodeToMerge.merge(workspace.getName(), false);
  19. // if merge passed newSubNode1 should be also removed from workspace2
  20. assertFalse("subNode1 not removed from " + workspaceW2.getName() + " as expected", nodeToMerge.hasNode(nodeName2));
  21. // return version info about the clonedNode as it must also be updated
  22. final String originalBaseVersionUUID = originalNode.getBaseVersion().getUUID();
  23. final String clonedBaseVersionUUID = nodeToMerge.getBaseVersion().getUUID();
  24. assertTrue("clonedNode has different version UUID than expected, it should be updated with the newNode version UUID", originalBaseVersionUUID.equals(clonedBaseVersionUUID));
  25. }

代码示例来源:origin: apache/jackrabbit

  1. /**
  2. * Node.merge(): versionable subNode N checked-in: If V' is a predecessor
  3. * (to any degree) of V or if V and V' are identical (i.e., are actually the
  4. * same version), then the merge result for N is leave<br> modify a node on
  5. * the workspace2 and then merge the one in workspace2 with the one in
  6. * workspace1<br> the node in workspace2 should be updated<br> precondition
  7. * is that the node in workspace2 is checked in
  8. */
  9. @SuppressWarnings("deprecation")
  10. public void testMergeNodeFromOlderSourceWorkspace() throws RepositoryException {
  11. // touch the version on workspace2
  12. nodeToMerge.checkin();
  13. nodeToMerge.checkout();
  14. String baseVersionUUIDbeforeMerge = nodeToMerge.getBaseVersion().getUUID();
  15. // "merge" the clonedNode with the newNode from the default workspace
  16. // besteffort set to false to stop at the first failure
  17. nodeToMerge.merge(workspace.getName(), false);
  18. assertTrue("clonedNode has different UUID than expected, it should be left unchanged", baseVersionUUIDbeforeMerge.equals(nodeToMerge.getBaseVersion().getUUID()));
  19. }

相关文章