use of org.pentaho.platform.api.repository2.unified.VersionSummary in project pentaho-platform by pentaho.
the class DefaultUnifiedRepositoryVersioningIT method testGetVersionSummaryInBatch.
@Test
public void testGetVersionSummaryInBatch() throws Exception {
loginAsSysTenantAdmin();
ITenant tenantAcme = tenantManager.createTenant(systemTenant, TENANT_ID_ACME, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME);
userRoleDao.createUser(tenantAcme, USERNAME_ADMIN, PASSWORD, "", new String[] { tenantAdminRoleName });
login(USERNAME_ADMIN, tenantAcme, new String[] { tenantAdminRoleName, tenantAuthenticatedRoleName });
userRoleDao.createUser(tenantAcme, USERNAME_SUZY, PASSWORD, "", null);
login(USERNAME_SUZY, tenantAcme, new String[] { tenantAuthenticatedRoleName });
final String parentFolderPath = ClientRepositoryPaths.getUserHomeFolderPath(PentahoSessionHolder.getSession().getName());
RepositoryFile parentFolder = repo.getFile(parentFolderPath);
final String dataString = "Hello World!";
final String encoding = "UTF-8";
byte[] data = dataString.getBytes(encoding);
ByteArrayInputStream dataStream = new ByteArrayInputStream(data);
final String mimeType = "text/plain";
final String fileName1 = "helloworld1.xaction";
final String fileName2 = "helloworld2.xaction";
final SimpleRepositoryFileData content = new SimpleRepositoryFileData(dataStream, encoding, mimeType);
RepositoryFile newFile1 = repo.createFile(parentFolder.getId(), new RepositoryFile.Builder(fileName1).versioned(true).build(), content, "created helloworld.xaction");
final String createMsg = "created helloworld2.xaction";
RepositoryFile newFile2 = repo.createFile(parentFolder.getId(), new RepositoryFile.Builder(fileName2).versioned(true).build(), content, createMsg);
final String updateMsg1 = "updating 1";
newFile1 = repo.updateFile(newFile1, content, updateMsg1);
// Update file2 but don't save the info. We'll look up the original revision
repo.updateFile(newFile2, content, "updating 2");
// Create a new file with just the Id set so we get the latest revision
RepositoryFile lookup1 = new RepositoryFile.Builder(newFile1.getId(), null).build();
// Create a new file with the original version id and file id for file #2
RepositoryFile lookup2 = new RepositoryFile.Builder(newFile2.getId(), null).versionId(newFile2.getVersionId()).build();
List<VersionSummary> versionSummaries = repo.getVersionSummaryInBatch(Arrays.asList(lookup1, lookup2));
assertNotNull(versionSummaries);
assertEquals(2, versionSummaries.size());
VersionSummary summary = versionSummaries.get(0);
// First version summary should be for the latest version of file1
assertEquals(newFile1.getId(), summary.getVersionedFileId());
assertEquals(updateMsg1, summary.getMessage());
assertEquals(newFile1.getVersionId(), summary.getId());
summary = versionSummaries.get(1);
// Second version summary should be for the first version of file2
assertEquals(newFile2.getId(), summary.getVersionedFileId());
assertEquals(newFile2.getVersionId(), summary.getId());
assertEquals(createMsg, summary.getMessage());
}
use of org.pentaho.platform.api.repository2.unified.VersionSummary in project pentaho-platform by pentaho.
the class JcrRepositoryFileDaoIT method testUpdateFile2.
@Test
public // Running without defined date
void testUpdateFile2() throws Exception {
RepositoryFile newFile = createFile("JcrRepositoryFileDaoTest1.test");
IRepositoryFileData dataMock = new SampleRepositoryFileData("", true, 0);
Date startDate = new Date();
newFile = new RepositoryFile.Builder(newFile).createdDate(null).build();
repo.updateFile(newFile, dataMock, "edition #2");
Date finishDate = new Date();
List<VersionSummary> summaries = repo.getVersionSummaries(newFile.getId());
Date lastVersionDate = summaries.get(summaries.size() - 1).getDate();
if (lastVersionDate.before(startDate) || lastVersionDate.after(finishDate)) {
fail("incorrect version date");
}
}
use of org.pentaho.platform.api.repository2.unified.VersionSummary in project pentaho-platform by pentaho.
the class DefaultUnifiedRepositoryJaxwsWebServiceIT method testEverything.
@Test
public void testEverything() throws Exception {
login(sysAdminUserName, systemTenant, new String[] { tenantAdminRoleName, tenantAuthenticatedRoleName });
ITenant tenantAcme = tenantManager.createTenant(systemTenant, TENANT_ID_ACME, tenantAdminRoleName, tenantAuthenticatedRoleName, ANONYMOUS_ROLE_NAME);
userRoleDao.createUser(tenantAcme, USERNAME_SUZY, PASSWORD, "", new String[] { tenantAdminRoleName });
logout();
login(USERNAME_SUZY, tenantAcme, new String[] { tenantAdminRoleName, tenantAuthenticatedRoleName });
logger.info("getFile");
JcrRepositoryDumpToFile dumpToFile = new JcrRepositoryDumpToFile(testJcrTemplate, jcrTransactionTemplate, repositoryAdminUsername, "c:/build/testrepo_9", Mode.CUSTOM);
dumpToFile.execute();
RepositoryFile f = repo.getFile(ClientRepositoryPaths.getUserHomeFolderPath(USERNAME_SUZY));
assertNotNull(f.getId());
assertEquals(ClientRepositoryPaths.getUserHomeFolderPath(USERNAME_SUZY), f.getPath());
assertNotNull(f.getCreatedDate());
assertEquals(USERNAME_SUZY, f.getName());
assertTrue(f.isFolder());
logger.info("getFileById");
assertNotNull(repo.getFileById(f.getId()));
logger.info("createFolder");
RepositoryFile folder1 = repo.createFolder(f.getId(), new RepositoryFile.Builder("folder1").folder(true).build(), null);
assertNotNull(folder1);
assertEquals("folder1", folder1.getName());
assertNotNull(folder1.getId());
NodeRepositoryFileData data = makeNodeRepositoryFileData1();
logger.info("createFile");
RepositoryFile file1 = repo.createFile(folder1.getId(), new RepositoryFile.Builder("file1.whatever").versioned(true).build(), data, null);
assertNotNull(file1);
assertNotNull(file1.getId());
logger.info("getDataForRead");
NodeRepositoryFileData file1Data = repo.getDataForRead(file1.getId(), NodeRepositoryFileData.class);
assertNotNull(file1Data);
assertEquals("testNode", file1Data.getNode().getName());
assertEquals("hello world", file1Data.getNode().getProperty("prop1").getString());
assertEquals(false, file1Data.getNode().getProperty("prop2").getBoolean());
assertEquals(DataPropertyType.BOOLEAN, file1Data.getNode().getProperty("prop2").getType());
assertEquals(12L, file1Data.getNode().getProperty("prop3").getLong());
logger.info("createFile (binary)");
SimpleRepositoryFileData simpleData = new SimpleRepositoryFileData(new ByteArrayInputStream("Hello World!".getBytes("UTF-8")), "UTF-8", "text/plain");
RepositoryFile simpleFile = repo.createFile(folder1.getId(), new RepositoryFile.Builder("file2.whatever").versioned(true).build(), simpleData, null);
Serializable simpleVersion = simpleFile.getVersionId();
logger.info("getDataForRead (binary)");
SimpleRepositoryFileData simpleFileData = repo.getDataForRead(simpleFile.getId(), SimpleRepositoryFileData.class);
assertNotNull(simpleFileData);
assertEquals("Hello World!", IOUtils.toString(simpleFileData.getInputStream(), simpleFileData.getEncoding()));
assertEquals("text/plain", simpleFileData.getMimeType());
assertEquals("UTF-8", simpleFileData.getEncoding());
logger.info("updateFile (binary)");
simpleData = new SimpleRepositoryFileData(new ByteArrayInputStream("Ciao World!".getBytes("UTF-8")), "UTF-8", "text/plain");
simpleFile = repo.updateFile(simpleFile, simpleData, null);
assertNotNull(simpleFile.getLastModifiedDate());
logger.info("getDataForRead (binary)");
simpleFileData = repo.getDataForRead(simpleFile.getId(), SimpleRepositoryFileData.class);
assertNotNull(simpleFileData);
assertEquals("Ciao World!", IOUtils.toString(simpleFileData.getInputStream(), simpleFileData.getEncoding()));
logger.info("getDataForReadAtVersion (binary)");
simpleFileData = repo.getDataAtVersionForRead(simpleFile.getId(), simpleVersion, SimpleRepositoryFileData.class);
assertNotNull(simpleFileData);
assertEquals("Hello World!", IOUtils.toString(simpleFileData.getInputStream(), simpleFileData.getEncoding()));
logger.info("getChildren");
List<RepositoryFile> folder1Children = repo.getChildren(new RepositoryRequest(String.valueOf(folder1.getId()), true, -1, null));
assertNotNull(folder1Children);
assertEquals(2, folder1Children.size());
logger.info("getChildren");
List<RepositoryFile> folder1ChildrenFiltered = repo.getChildren(new RepositoryRequest(String.valueOf(folder1.getId()), true, -1, "*.sample"));
assertNotNull(folder1ChildrenFiltered);
assertEquals(0, folder1ChildrenFiltered.size());
logger.info("getDeletedFiles");
assertEquals(0, repo.getDeletedFiles().size());
logger.info("deleteFile");
repo.deleteFile(file1.getId(), null);
logger.info("getDeletedFiles");
assertEquals(0, repo.getDeletedFiles(folder1.getPath(), "*.sample").size());
logger.info("hasAccess");
assertFalse(repo.hasAccess("/pentaho", EnumSet.of(RepositoryFilePermission.WRITE)));
logger.info("getEffectiveAces");
List<RepositoryFileAce> folder1EffectiveAces = repo.getEffectiveAces(folder1.getId());
assertEquals(1, folder1EffectiveAces.size());
logger.info("getAcl");
RepositoryFileAcl folder1Acl = repo.getAcl(folder1.getId());
assertEquals(USERNAME_SUZY, folder1Acl.getOwner().getName());
logger.info("updateAcl");
userRoleDao.createUser(tenantAcme, USERNAME_TIFFANY, PASSWORD, "", null);
RepositoryFileAcl updatedFolder1Acl = repo.updateAcl(new RepositoryFileAcl.Builder(folder1Acl).entriesInheriting(false).ace(userNameUtils.getPrincipleId(tenantAcme, USERNAME_TIFFANY), RepositoryFileSid.Type.USER, RepositoryFilePermission.ALL).build());
assertNotNull(updatedFolder1Acl);
assertEquals(1, updatedFolder1Acl.getAces().size());
logger.info("lockFile");
assertFalse(file1.isLocked());
repo.lockFile(file1.getId(), "I locked this file");
logger.info("canUnlockFile");
assertTrue(repo.canUnlockFile(file1.getId()));
logger.info("unlockFile");
repo.unlockFile(file1.getId());
logger.info("moveFile");
repo.moveFile(file1.getId(), ClientRepositoryPaths.getUserHomeFolderPath(USERNAME_SUZY) + "/folder1", null);
logger.info("copyFile");
repo.copyFile(file1.getId(), ClientRepositoryPaths.getUserHomeFolderPath(USERNAME_SUZY) + "/folder1/fileB.whatever", null);
RepositoryFile copiedFile = repo.getFile(ClientRepositoryPaths.getUserHomeFolderPath(USERNAME_SUZY) + "/folder1/fileB.whatever");
copiedFile = repo.updateFile(copiedFile, data, null);
logger.info("getVersionSummaries");
List<VersionSummary> versionSummaries = repo.getVersionSummaries(file1.getId());
assertNotNull(versionSummaries);
// copy doesn't increase version number
assertTrue(versionSummaries.size() >= 1);
assertEquals(USERNAME_SUZY, versionSummaries.get(0).getAuthor());
logger.info("getVersionSummary");
VersionSummary versionSummary = repo.getVersionSummary(file1.getId(), null);
assertNotNull(versionSummary);
assertNotNull(versionSummary.getId());
logger.info("getFileAtVersion");
RepositoryFile file1AtVersion = repo.getFileAtVersion(file1.getId(), versionSummary.getId());
assertNotNull(file1AtVersion);
assertEquals(versionSummary.getId(), file1AtVersion.getVersionId());
logger.info("getTree");
RepositoryFileTree tree = repo.getTree(new RepositoryRequest(ClientRepositoryPaths.getRootFolderPath(), true, -1, null));
assertNotNull(tree.getFile().getId());
logger.info("getDataForReadInBatch");
List<NodeRepositoryFileData> result = repo.getDataForReadInBatch(Arrays.asList(file1, copiedFile), NodeRepositoryFileData.class);
assertEquals(2, result.size());
logger.info("getVersionSummaryInBatch");
List<VersionSummary> vResult = repo.getVersionSummaryInBatch(Arrays.asList(file1, simpleFile));
assertEquals(2, vResult.size());
logger.info("getReservedChars");
assertFalse(repo.getReservedChars().isEmpty());
}
use of org.pentaho.platform.api.repository2.unified.VersionSummary in project pentaho-platform by pentaho.
the class JcrRepositoryFileUtils method toVersionSummary.
private static VersionSummary toVersionSummary(final PentahoJcrConstants pentahoJcrConstants, final VersionHistory versionHistory, final Version version) throws RepositoryException {
List<String> labels = Arrays.asList(versionHistory.getVersionLabels(version));
// get custom Hitachi Vantara properties (i.e. author and message)
Node nodeAtVersion = getNodeAtVersion(pentahoJcrConstants, version);
String author = "BASE_VERSION";
if (nodeAtVersion.hasProperty(pentahoJcrConstants.getPHO_VERSIONAUTHOR())) {
author = nodeAtVersion.getProperty(pentahoJcrConstants.getPHO_VERSIONAUTHOR()).getString();
}
String message = null;
if (nodeAtVersion.hasProperty(pentahoJcrConstants.getPHO_VERSIONMESSAGE())) {
message = nodeAtVersion.getProperty(pentahoJcrConstants.getPHO_VERSIONMESSAGE()).getString();
}
boolean aclOnlyChange = false;
if (nodeAtVersion.hasProperty(pentahoJcrConstants.getPHO_ACLONLYCHANGE()) && nodeAtVersion.getProperty(pentahoJcrConstants.getPHO_ACLONLYCHANGE()).getBoolean()) {
aclOnlyChange = true;
}
return new VersionSummary(version.getName(), versionHistory.getVersionableIdentifier(), aclOnlyChange, version.getCreated().getTime(), author, message, labels);
}
use of org.pentaho.platform.api.repository2.unified.VersionSummary in project pentaho-platform by pentaho.
the class JcrRepositoryFileUtils method checkinNearestVersionableNodeIfNecessary.
/**
* Conditionally checks in node if node is versionable.
* <p/>
* TODO mlowery move commented out version labeling to its own method
*/
public static void checkinNearestVersionableNodeIfNecessary(final Session session, final PentahoJcrConstants pentahoJcrConstants, final Node node, final String versionMessage, Date versionDate, final boolean aclOnlyChange) throws RepositoryException {
Assert.notNull(node);
session.save();
/*
* session.save must be called inside the versionable node block and outside to ensure user changes are made when a
* file is not versioned.
*/
Node versionableNode = findNearestVersionableNode(session, pentahoJcrConstants, node);
if (versionableNode != null) {
versionableNode.setProperty(pentahoJcrConstants.getPHO_VERSIONAUTHOR(), getUsername());
if (StringUtils.hasText(versionMessage)) {
versionableNode.setProperty(pentahoJcrConstants.getPHO_VERSIONMESSAGE(), versionMessage);
} else {
// TODO mlowery why do I need to check for hasProperty here? in JR 1.6, I didn't need to
if (versionableNode.hasProperty(pentahoJcrConstants.getPHO_VERSIONMESSAGE())) {
versionableNode.setProperty(pentahoJcrConstants.getPHO_VERSIONMESSAGE(), (String) null);
}
}
if (aclOnlyChange) {
versionableNode.setProperty(pentahoJcrConstants.getPHO_ACLONLYCHANGE(), true);
} else {
// TODO mlowery why do I need to check for hasProperty here? in JR 1.6, I didn't need to
if (versionableNode.hasProperty(pentahoJcrConstants.getPHO_ACLONLYCHANGE())) {
versionableNode.getProperty(pentahoJcrConstants.getPHO_ACLONLYCHANGE()).remove();
}
}
// required before checkin since we set some properties above
session.save();
Calendar cal = Calendar.getInstance();
if (versionDate != null) {
cal.setTime(versionDate);
} else {
cal.setTime(new Date());
}
((VersionManagerImpl) session.getWorkspace().getVersionManager()).checkin(versionableNode.getPath(), cal);
// prevent the number of versions from increasing. We still need a versioned node
if (!getRepositoryVersionManager().isVersioningEnabled(versionableNode.getPath())) {
List<VersionSummary> versionSummaries = (List<VersionSummary>) getVersionSummaries(session, pentahoJcrConstants, versionableNode.getIdentifier(), Boolean.TRUE);
if ((versionSummaries != null) && (versionSummaries.size() > 1)) {
VersionSummary versionSummary = (VersionSummary) versionSummaries.toArray()[versionSummaries.size() - 2];
if (versionSummary != null) {
String versionId = (String) versionSummary.getId();
session.getWorkspace().getVersionManager().getVersionHistory(versionableNode.getPath()).removeVersion(versionId);
session.save();
}
}
}
}
}
Aggregations