@Test public void testPublishing() { DocumentModel folder = session.createDocumentModel("/", "folder", "Folder"); folder = session.createDocument(folder); DocumentModel doc = session.createDocumentModel("/", "file", "File"); doc = session.createDocument(doc); checkVersions(doc); // publish DocumentModel proxy = session.publishDocument(doc, folder); session.save(); String versionSeriesId = doc.getVersionSeriesId(); assertFalse(proxy.isVersion()); assertTrue(proxy.isProxy()); assertTrue(proxy.hasFacet(FacetNames.IMMUTABLE)); assertTrue(proxy.isImmutable()); assertEquals(versionSeriesId, proxy.getVersionSeriesId()); assertNotSame(versionSeriesId, proxy.getId()); assertEquals("0.1", proxy.getVersionLabel()); assertNull(proxy.getCheckinComment()); assertFalse(proxy.isMajorVersion()); assertTrue(proxy.isLatestVersion()); assertFalse(proxy.isLatestMajorVersion()); checkVersions(doc, "0.1"); VersionModel lastVersion = session.getLastVersion(doc.getRef()); assertNotNull(lastVersion); assertEquals("0.1", lastVersion.getLabel()); DocumentModel lastVersionDocument = session.getLastDocumentVersion(doc.getRef()); assertNotNull(lastVersionDocument); assertEquals("file", lastVersionDocument.getName()); }
@Test public void testCopy() { DocumentModel doc = session.createDocumentModel("/", "file", "File"); doc = session.createDocument(doc); session.save(); String versionSeriesId = doc.getVersionSeriesId(); // copy DocumentModel copy = session.copy(doc.getRef(), session.getRootDocument().getRef(), "fileCopied"); // check different version series id assertNotSame(versionSeriesId, copy.getVersionSeriesId()); // create version and proxy DocumentModel folder = session.createDocumentModel("/", "folder", "Folder"); folder = session.createDocument(folder); DocumentModel proxy = session.publishDocument(doc, folder); // check same version series id assertEquals(versionSeriesId, proxy.getVersionSeriesId()); // copy proxy DocumentModel proxyCopy = session.copy(proxy.getRef(), session.getRootDocument().getRef(), "proxyCopied"); // check same version series id assertEquals(versionSeriesId, proxyCopy.getVersionSeriesId()); }
@Test public void testVersionRemoval() throws Exception { DocumentModel folder = session.createDocumentModel("/", "folder", "Folder"); folder = session.createDocument(folder); DocumentModel file = session.createDocumentModel("/folder", "file", "File"); file = session.createDocument(file); DocumentModel proxy = session.publishDocument(file, folder); DocumentModel version = session.getLastDocumentVersion(file.getRef()); session.save(); // even Administrator/system cannot remove a version with a proxy try { session.removeDocument(version.getRef()); fail("Admin should not be able to remove version"); } catch (DocumentSecurityException e) { // ok } // remove the proxy first session.removeDocument(proxy.getRef()); session.save(); // we can now remove the version session.removeDocument(version.getRef()); session.save(); }
@Test public void testPublishingAfterVersionDelete() { DocumentModel folder = session.createDocumentModel("/", "folder", "Folder"); folder = session.createDocument(folder); DocumentModel doc = session.createDocumentModel("/", "file", "File"); doc = session.createDocument(doc); checkVersions(doc); VersionModel lastVersion = session.getLastVersion(doc.getRef()); assertNull(lastVersion); DocumentModel lastVersionDocument = session.getLastDocumentVersion(doc.getRef()); assertNull(lastVersionDocument); // publish DocumentModel proxy = session.publishDocument(doc, folder); checkVersions(doc, "0.1"); lastVersion = session.getLastVersion(doc.getRef()); assertNotNull(lastVersion); assertEquals("0.1", lastVersion.getLabel()); lastVersionDocument = session.getLastDocumentVersion(doc.getRef()); assertNotNull(lastVersionDocument); assertEquals("file", lastVersionDocument.getName()); // unpublish session.removeDocument(proxy.getRef()); // delete the version List<VersionModel> versions = session.getVersionsForDocument(doc.getRef()); assertEquals(1, versions.size()); DocumentModel docVersion = session.getDocumentWithVersion(doc.getRef(), versions.get(0)); session.removeDocument(docVersion.getRef()); checkVersions(doc); lastVersion = session.getLastVersion(doc.getRef()); assertNull(lastVersion); lastVersionDocument = session.getLastDocumentVersion(doc.getRef()); assertNull(lastVersionDocument); // republish DocumentModel newProxy = session.publishDocument(doc, folder); checkVersions(doc, "0.2"); lastVersion = session.getLastVersion(doc.getRef()); assertNotNull(lastVersion); assertEquals("0.2", lastVersion.getLabel()); lastVersionDocument = session.getLastDocumentVersion(doc.getRef()); assertNotNull(lastVersionDocument); assertEquals("file", lastVersionDocument.getName()); }
@Test public void testPublishingAfterCopy() { DocumentModel folder = session.createDocumentModel("/", "folder", "Folder"); folder = session.createDocument(folder); DocumentModel doc = session.createDocumentModel("/", "file", "File"); doc = session.createDocument(doc); checkVersions(doc); // publish DocumentModel proxy = session.publishDocument(doc, folder); checkVersions(doc, "0.1"); DocumentModel lastVersion = session.getLastDocumentVersion(doc.getRef()); assertNotNull(lastVersion); assertEquals("0.1", lastVersion.getVersionLabel()); DocumentModel lastVersionDocument = session.getLastDocumentVersion(doc.getRef()); assertNotNull(lastVersionDocument); assertEquals("file", lastVersionDocument.getName()); // copy published file, version is reset DocumentModel copy = session.copy(doc.getRef(), folder.getRef(), "fileCopied"); checkVersions(copy); lastVersion = session.getLastDocumentVersion(copy.getRef()); assertNull(lastVersion); lastVersionDocument = session.getLastDocumentVersion(copy.getRef()); assertNull(lastVersionDocument); // republish DocumentModel newProxy = session.publishDocument(copy, folder); checkVersions(copy, "0.1"); lastVersion = session.getLastDocumentVersion(copy.getRef()); assertNotNull(lastVersion); assertEquals("0.1", lastVersion.getVersionLabel()); lastVersionDocument = session.getLastDocumentVersion(copy.getRef()); assertNotNull(lastVersionDocument); assertEquals("fileCopied", lastVersionDocument.getName()); }
// security on versions, see TestLocalAPIWithCustomVersioning @Test public void testVersionSecurity() throws Exception { DocumentModel folder = new DocumentModelImpl("/", "folder", "Folder"); folder = session.createDocument(folder); ACP acp = new ACPImpl(); ACE ace = new ACE("princ1", "perm1", true); ACL acl = new ACLImpl("acl1", false); acl.add(ace); acp.addACL(acl); session.setACP(folder.getRef(), acp, true); DocumentModel file = new DocumentModelImpl("/folder", "file", "File"); file = session.createDocument(file); // set security acp = new ACPImpl(); ace = new ACE("princ2", "perm2", true); acl = new ACLImpl("acl2", false); acl.add(ace); acp.addACL(acl); session.setACP(file.getRef(), acp, true); session.save(); DocumentModel proxy = session.publishDocument(file, folder); DocumentModel version = session.getLastDocumentVersion(file.getRef()); session.save(); // check security on version acp = session.getACP(version.getRef()); ACL[] acls = acp.getACLs(); assertEquals(2, acls.length); acl = acls[0]; assertEquals(1, acl.size()); assertEquals("princ2", acl.get(0).getUsername()); acl = acls[1]; assertEquals(1 + 3, acl.size()); // 1 + 3 root defaults assertEquals("princ1", acl.get(0).getUsername()); // remove live document (there's a proxy so the version stays) session.removeDocument(file.getRef()); session.save(); // recheck security on version (works because we're administrator) acp = session.getACP(version.getRef()); assertNull(acp); // check proxy still accessible (in another session) try (CoreSession session2 = openSessionAs(SecurityConstants.ADMINISTRATOR)) { session2.getDocument(proxy.getRef()); } }
@Test public void testTransitionProxy() throws Exception { DocumentModel root = session.getRootDocument(); DocumentModel doc = new DocumentModelImpl("/", "doc", "File"); doc = session.createDocument(doc); doc.setProperty("dublincore", "title", "t1"); doc = session.saveDocument(doc); DocumentModel proxy = session.publishDocument(doc, root); session.save(); Collection<String> transitions = proxy.getAllowedStateTransitions(); assertEquals(3, transitions.size()); if (proxy.getAllowedStateTransitions().contains("delete")) { proxy.followTransition("delete"); } assertEquals("deleted", proxy.getCurrentLifeCycleState()); }
@Test public void testVersionLifecycle() throws Exception { DocumentModel root = session.getRootDocument(); DocumentModel doc = new DocumentModelImpl("/", "doc", "File"); doc = session.createDocument(doc); doc.setProperty("dublincore", "title", "t1"); doc = session.saveDocument(doc); session.publishDocument(doc, root); session.save(); // get version DocumentModel ver = session.getLastDocumentVersion(doc.getRef()); assertTrue(ver.isVersion()); assertEquals("project", ver.getCurrentLifeCycleState()); ver.followTransition("approve"); session.save(); doc = session.getDocument(new PathRef("/doc")); ver = session.getLastDocumentVersion(doc.getRef()); assertEquals("approved", ver.getCurrentLifeCycleState()); }
@Test public void testStandardVersioning() throws Exception { DocumentModel folder = session.createDocumentModel("/", "folder", "Folder"); folder = session.createDocument(folder); DocumentModel doc = session.createDocumentModel("/", "testfile1", "File"); doc = session.createDocument(doc); doc.setPropertyValue("dc:title", "A"); doc = session.saveDocument(doc); DocumentRef docRef = doc.getRef(); assertTrue(doc.isCheckedOut()); assertVersion("0.0", doc); assertVersionLabel("0.0", doc); assertLatestVersion(null, doc); // save with no option, use default doc.setPropertyValue("dc:title", "B"); doc = session.saveDocument(doc); assertTrue(doc.isCheckedOut()); assertVersion("0.0", doc); assertVersionLabel("0.0", doc); assertLatestVersion(null, doc); // change and save with new minor doc.setPropertyValue("dc:title", "C"); doc.putContextData(VersioningService.VERSIONING_OPTION, VersioningOption.MINOR); maybeSleepToNextSecond(); doc = session.saveDocument(doc); assertFalse(doc.isCheckedOut()); assertVersion("0.1", doc); assertVersionLabel("0.1", doc); assertLatestVersion("0.1", doc); DocumentModel v01 = session.getLastDocumentVersion(docRef); assertEquals(v01.getId(), session.getBaseVersion(docRef).reference()); // checkout doc.checkOut(); assertTrue(doc.isCheckedOut()); assertVersion("0.1", doc); assertVersionLabel("0.1+", doc); assertLatestVersion("0.1", doc); // change and save with new major doc.setPropertyValue("dc:title", "D"); doc.putContextData(VersioningService.VERSIONING_OPTION, VersioningOption.MAJOR); maybeSleepToNextSecond(); doc = session.saveDocument(doc); assertFalse(doc.isCheckedOut()); assertVersion("1.0", doc); assertVersionLabel("1.0", doc); assertLatestVersion("1.0", doc); DocumentModel v10 = session.getLastDocumentVersion(docRef); assertEquals(v10.getId(), session.getBaseVersion(docRef).reference()); // direct save for autocheckout doc.setPropertyValue("dc:title", "E"); doc = session.saveDocument(doc); assertTrue(doc.isCheckedOut()); assertVersion("1.0", doc); assertVersionLabel("1.0+", doc); assertLatestVersion("1.0", doc); // checkin maybeSleepToNextSecond(); DocumentRef v11ref = doc.checkIn(VersioningOption.MINOR, "foo"); assertFalse(doc.isCheckedOut()); assertVersion("1.1", doc); assertVersionLabel("1.1", doc); assertLatestVersion("1.1", doc); assertEquals(v11ref.reference(), session.getBaseVersion(docRef).reference()); // wait before doing a restore session.save(); waitForAsyncCompletion(); // restore 0.1 doc = session.restoreToVersion(docRef, v01.getRef()); assertFalse(doc.isCheckedOut()); assertVersion("0.1", doc); assertVersionLabel("0.1", doc); assertLatestVersion("1.1", doc); assertEquals(v01.getId(), session.getBaseVersion(docRef).reference()); // checkout restored version doc.checkOut(); assertTrue(doc.isCheckedOut()); assertVersion("1.1", doc); assertVersionLabel("1.1+", doc); assertLatestVersion("1.1", doc); // publish (checks in first) maybeSleepToNextSecond(); DocumentModel proxy = session.publishDocument(doc, folder); assertFalse(doc.isCheckedOut()); assertVersion("1.2", doc); assertVersionLabel("1.2", doc); assertLatestVersion("1.2", doc); assertVersion("1.2", proxy); // republish, no new version proxy = session.publishDocument(doc, folder); assertFalse(doc.isCheckedOut()); assertVersion("1.2", doc); assertVersionLabel("1.2", doc); assertLatestVersion("1.2", doc); assertVersion("1.2", proxy); // do a change (autocheckout), and republish doc.setPropertyValue("dc:title", "F"); session.saveDocument(doc); maybeSleepToNextSecond(); proxy = session.publishDocument(doc, folder); assertFalse(doc.isCheckedOut()); assertVersion("1.3", doc); assertVersionLabel("1.3", doc); assertLatestVersion("1.3", doc); }
@Test public void documentManagementInTestCasesExample() throws ClientException { SchemaManager typeService = Framework.getLocalService(SchemaManager.class); DocumentType[] types = typeService.getDocumentTypes(); for (DocumentType type : types) { System.out.println(type.getName()); } DocumentModel mydoc = session.createDocumentModel("File"); // DocumentModel mydoc = session.createDocumentModel("/", "toto", // "File"); mydoc.setPathInfo("/", "toto"); mydoc.setPropertyValue("dc:title", "Toto"); mydoc = session.createDocument(mydoc); session.save(); DocumentModelList docs = session.query("SELECT * FROM Document WHERE dc:title = 'Toto'"); assertEquals(1, docs.size()); mydoc = docs.get(0); assertEquals("toto", mydoc.getName()); assertEquals("project", mydoc.getCurrentLifeCycleState()); for (String state : mydoc.getAllowedStateTransitions()) { System.out.println("Transition : " + state); } // session.followTransition(mydoc.getRef(), "approve"); mydoc.followTransition("approve"); mydoc.setPropertyValue("dc:description", "My Description"); mydoc = session.saveDocument(mydoc); session.save(); assertEquals("approved", mydoc.getCurrentLifeCycleState()); assertEquals("0.0", mydoc.getVersionLabel()); assertEquals(0, session.getVersions(mydoc.getRef()).size()); session.checkIn(mydoc.getRef(), VersioningOption.MINOR, ""); mydoc = session.getDocument(mydoc.getRef()); assertEquals("0.1", mydoc.getVersionLabel()); assertEquals(1, session.getVersions(mydoc.getRef()).size()); DocumentModel folder = session.createDocumentModel("/", "folder", "Folder"); folder.setPropertyValue("dc:title", "Folder"); folder = session.createDocument(folder); session.save(); assertEquals(0, session.getChildren(folder.getRef()).size()); session.publishDocument(mydoc, folder); assertEquals(1, session.getChildren(folder.getRef()).size()); DocumentModel folder2 = session.createDocumentModel("/", "folder2", "Folder"); folder2.setPropertyValue("dc:title", "Folder2"); folder2 = session.createDocument(folder2); session.save(); DocumentModel proxy = session.createProxy(mydoc.getRef(), folder2.getRef()); assertEquals("Toto", proxy.getPropertyValue("dc:title")); mydoc.setPropertyValue("dc:title", "Tutu"); session.saveDocument(mydoc); session.save(); proxy = session.getDocument(proxy.getRef()); assertEquals("Tutu", proxy.getPropertyValue("dc:title")); proxy.setPropertyValue("dc:title", "Tata"); session.saveDocument(proxy); session.save(); mydoc = session.getDocument(mydoc.getRef()); assertEquals("Tata", mydoc.getPropertyValue("dc:title")); }