@Override public JcrVersionHistoryNode getVersionHistory() throws UnsupportedRepositoryOperationException, RepositoryException { return versionManager().getVersionHistory(this); }
final JcrVersionManager versionManager() { if (versionManager == null) { try { lock.lock(); if (versionManager == null) versionManager = new JcrVersionManager(session); } finally { lock.unlock(); } } return versionManager; }
checkVersionable(node); SessionCache cache = cache(); NodeKey versionedKey = node.key(); Path versionHistoryPath = versionHistoryPathFor(versionedKey); CachedNode cachedNode = node.node(); DateTime now = session().dateFactory().create(); addVersionedPropertiesFor(node, false, versionableProps); PropertyFactory props = propertyFactory(); ReferenceFactory refFactory = session.referenceFactory(); Reference historyRef = refFactory.create(historyKey, true); for (ChildReference childRef : versionableNode.getChildReferences(versionSession)) { AbstractJcrNode child = session.node(childRef.getKey(), null, versionedKey); versionNodeAt(child, childRef.getName(), frozenNode, false, versionSession, systemSession);
session.save(); jcrVersionManager.checkin("/testNode"); jcrVersionManager.checkout("/testNode"); jcrVersionManager.checkin("/testNode"); JcrVersionHistoryNode originalVersionHistory = jcrVersionManager.getVersionHistory("/testNode"); Version originalBaseVersion = jcrVersionManager.getBaseVersion("/testNode"); jcrVersionManager.checkout("/testNode"); node.removeMixin(JcrMixLexicon.VERSIONABLE.getString()); session.save(); assertNotNull(node.getProperty(JcrLexicon.PREDECESSORS.getString())); JcrVersionHistoryNode versionHistory = jcrVersionManager.getVersionHistory("/testNode"); Version baseVersion = jcrVersionManager.getBaseVersion("/testNode");
@Test @FixFor( "MODE-2192" ) public void shouldImportSystemViewWithCheckedInNodes() throws Exception { tools.registerNodeTypes(session, "cnd/ecm.cnd"); InputStream stream = resourceStream("io/ecm.xml"); session.importXML("/", stream, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); session.save(); JcrVersionManager versionManager = session.getWorkspace().getVersionManager(); assertNode("/root"); Node file = assertNode("/root/file1", "nt:file"); assertTrue(file.isCheckedOut()); Version fileVersion = versionManager.checkin("/root/file1"); assertEquals("1.0", fileVersion.getName()); assertEquals(2, versionManager.getVersionHistory("/root/file1").getAllVersions().getSize()); Node doc1 = assertNode("/root/folder1/doc1", "nt:file"); assertTrue(doc1.isCheckedOut()); Version docVersion = versionManager.checkin("/root/folder1/doc1"); assertEquals("1.0", docVersion.getName()); assertEquals(2, versionManager.getVersionHistory("/root/folder1/doc1").getAllVersions().getSize()); Node content = assertNode("/root/folder1/doc1/jcr:content", "nt:resource"); assertTrue(content.isCheckedOut()); Version contentVersion = versionManager.checkin("/root/folder1/doc1/jcr:content"); assertEquals("1.0", contentVersion.getName()); assertEquals(2, versionManager.getVersionHistory("/root/folder1/doc1/jcr:content").getAllVersions().getSize()); }
JcrVersionHistoryNode getVersionHistory( AbstractJcrNode node ) throws RepositoryException { checkVersionable(node); NodeTypes nodeTypeCapabilities = repository().nodeTypeManager().getNodeTypes(); Name primaryType = mutable.getPrimaryType(cache); Set<Name> mixinTypes = mutable.getAddedMixins(cache); initializeVersionHistoryFor(node, historyKey, cache);
org.modeshape.jcr.value.Property primaryType = propertyFactory().create(JcrLexicon.PRIMARY_TYPE, JcrNtLexicon.VERSIONED_CHILD); Reference childVersionHistoryValue = session.referenceFactory().create(history.key(), true); org.modeshape.jcr.value.Property childVersionHistory = propertyFactory().create( JcrLexicon.CHILD_VERSION_HISTORY, childVersionHistoryValue); PropertyFactory factory = propertyFactory(); List<Property> props = new LinkedList<Property>(); props.add(factory.create(JcrLexicon.FROZEN_UUID, node.getIdentifier())); props.add(factory.create(JcrLexicon.UUID, key)); addVersionedPropertiesFor(node, forceCopy, props); MutableCachedNode newCopy = parentInVersionHistory.createChild(versionHistoryCache, key, nodeName, props); for (ChildReference childRef : node.node().getChildReferences(nodeCache)) { AbstractJcrNode child = session.node(childRef.getKey(), null, parentKey); versionNodeAt(child, childRef.getName(), newCopy, forceCopy, nodeCache, versionHistoryCache);
void cancelMerge( AbstractJcrNode targetNode, Version version ) throws RepositoryException { targetNode.session().checkLive(); checkVersionable(targetNode); if (targetNode.isNew() || targetNode.isModified()) { throw new InvalidItemStateException(JcrI18n.noPendingChangesAllowedForNode.text()); } if (!targetNode.isNodeType(JcrMixLexicon.VERSIONABLE)) { throw new UnsupportedRepositoryOperationException(JcrI18n.requiresVersionable.text()); } removeVersionFromMergeFailedProperty(targetNode, version); targetNode.session().save(); }
throw new UnsupportedRepositoryOperationException(JcrI18n.nodeIsShareable.text(node.getPath())); versionHistory = getVersionHistory(node); if (versionHistory.getAllVersions().getSize() > 1) { throw new UnsupportedRepositoryOperationException(JcrI18n.versionHistoryNotEmpty.text(node.getPath())); removeHistories((AbstractJcrNode)nodeIterator.nextNode(), systemSession);
@Override public Version checkin() throws VersionException, UnsupportedRepositoryOperationException, InvalidItemStateException, LockException, RepositoryException { return versionManager().checkin(this); }
@Override public void checkout() throws UnsupportedRepositoryOperationException, LockException, ActivityViolationException, RepositoryException { versionManager().checkout(this); }
@Override public void remove( String absPath ) throws UnsupportedOperationException, PathNotFoundException, VersionException, RepositoryException { if (LOGGER.isDebugEnabled()) LOGGER.debug("VersionManager.remove('{0}')", absPath); JcrSession removeSession = session.spawnSession(false); AbstractJcrNode node = removeSession.getNode(absPath); checkVersionable(node); SessionCache systemCache = session.createSystemCache(false); removeHistories(node, systemCache); node.remove(); removeSession.cache().save(systemCache, null); }
AbstractJcrNode frozenNode = versionManager.frozenNodeFor(version); MutableCachedNode mutableRoot = root.mutable(); restoreNodeMixins(frozenNode.node(), mutableRoot, cache); restoreNode(frozenNode, root, date(version.getCreated())); clearCheckoutStatus(mutableRoot, version.key(), cache, propFactory);
checkVersionable(node); MutableCachedNode versionable = versionSession.mutable(node.key()); NodeKey baseVersionKey = node.getBaseVersion().key(); PropertyFactory props = propertyFactory(); Reference baseVersionRef = session.referenceFactory().create(baseVersionKey, true); versionable.setProperty(versionSession, props.create(JcrLexicon.PREDECESSORS, new Object[] {baseVersionRef}));
@Test @FixFor( "MODE-2172" ) public void shouldDocumentImportCheckedInNodes() throws Exception { Node node1 = session.getRootNode().addNode("node1"); node1.addMixin("mix:versionable"); Node node2 = session.getRootNode().addNode("node2"); node2.addMixin("mix:versionable"); session.save(); JcrVersionManager versionManager = session.getWorkspace().getVersionManager(); versionManager.checkpoint("/node1"); session.getNode("/node1").setProperty("11", "some string"); session.getNode("/node1").setProperty("11a1", "some string"); session.save(); versionManager.checkin("/node1"); versionManager.checkpoint("/node2"); //export the data ByteArrayOutputStream baos = new ByteArrayOutputStream(); session.exportDocumentView("/", baos, false, false); session.getWorkspace().importXML("/", new ByteArrayInputStream(baos.toByteArray()), ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); assertEquals(((org.modeshape.jcr.api.Property) session.getItem("/node1/11")).getString(), "some string"); assertEquals(((org.modeshape.jcr.api.Property) session.getItem("/node1/11a1")).getString(), "some string"); }
@Override public void cancelMerge( Version version ) throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException { versionManager().cancelMerge(this, version); }
public JcrVersionManager( JcrSession session ) { super(); this.session = session; versionStoragePath = absolutePath(JcrLexicon.SYSTEM, JcrLexicon.VERSION_STORAGE); ExecutionContext context = session.context(); versionHistoryPathAlgorithm = new HiearchicalPathAlgorithm(versionStoragePath, context); readableSystem = new SystemContent(this.session.cache()); }
if (parent.isNodeType(JcrNtLexicon.VERSION)) { clearCheckoutStatus(mutableTarget, parent.key(), cache, propFactory);
checkVersionable(node); SessionCache cache = cache(); NodeKey versionedKey = node.key(); Path versionHistoryPath = versionHistoryPathFor(versionedKey); CachedNode cachedNode = node.node(); DateTime now = session().dateFactory().create(); addVersionedPropertiesFor(node, false, versionableProps); PropertyFactory props = propertyFactory(); ReferenceFactory refFactory = session.referenceFactory(); Reference historyRef = refFactory.create(historyKey, true); for (ChildReference childRef : versionableNode.getChildReferences(versionSession)) { AbstractJcrNode child = session.node(childRef.getKey(), null, versionedKey); versionNodeAt(child, childRef.getName(), frozenNode, false, versionSession, systemSession);