diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/TranslatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/TranslatorTest.java index 1bee35cdcb0c545f1933cefd64197e0582af6f6b..c5a05cbfc77015b23ab6a1bdd30766a9083020e2 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/TranslatorTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/TranslatorTest.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.openbis.generic.shared.api.v1; +import java.util.Arrays; import java.util.Date; import java.util.EnumSet; import java.util.HashMap; @@ -25,8 +26,10 @@ import org.testng.AssertJUnit; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Attachment; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.Connections; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.ExperimentPermIdId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; @@ -38,6 +41,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.ExperimentBuil import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.LinkDataSetBuilder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.SampleBuilder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.SampleTypeBuilder; +import ch.systemsx.cisd.openbis.generic.shared.dto.AttachmentPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; /** * @author Franz-Josef Elmer @@ -236,6 +242,85 @@ public class TranslatorTest extends AssertJUnit assertEquals(edms, translated.getExternalDataManagementSystem()); } + @Test + public void testTranslateAttachmentsWithAllVersions() + { + AttachmentPE a1 = attachment("test.txt", 1); + AttachmentPE a2 = attachment("test.txt", 2); + ExperimentPE attachmentHolder = new ExperimentPE(); + attachmentHolder.setId(1234L); + + List<Attachment> attachments = + Translator.translateAttachments("st-1", new ExperimentPermIdId("perm1"), + attachmentHolder, Arrays.asList(a1, a2), true); + + assertEquals("[Attachment [fileName=test.txt, version=2, title=Title, " + + "description=File:test.txt, version:2, " + + "registrationDate=Thu Jan 01 01:00:04 CET 1970, " + + "userFirstName=Albert, userLastName=Einstein, " + + "userEmail=ae@ae.ch, userId=ae, " + + "downloadLink=/openbis/attachment-download?sessionID=st-1&" + + "attachmentHolder=EXPERIMENT&id=1234&fileName=test.txt&version=2], " + + "Attachment [fileName=test.txt, version=1, title=Title, " + + "description=File:test.txt, version:1, " + + "registrationDate=Thu Jan 01 01:00:04 CET 1970, " + + "userFirstName=Albert, userLastName=Einstein, userEmail=ae@ae.ch, userId=ae, " + + "downloadLink=/openbis/attachment-download?sessionID=st-1&" + + "attachmentHolder=EXPERIMENT&id=1234&fileName=test.txt&version=1]]", + attachments.toString()); + assertEquals(2, attachments.size()); + } + + @Test + public void testTranslateAttachmentsWithLatestVersions() + { + AttachmentPE a1 = attachment("test.txt", 1); + AttachmentPE a2 = attachment("greetings.txt", 1); + AttachmentPE a3 = attachment("greetings.txt", 2); + AttachmentPE a4 = attachment("test.txt", 2); + AttachmentPE a5 = attachment("test.txt", 3); + ExperimentPE attachmentHolder = new ExperimentPE(); + attachmentHolder.setId(1234L); + + List<Attachment> attachments = + Translator.translateAttachments("st-1", new ExperimentPermIdId("perm1"), + attachmentHolder, Arrays.asList(a1, a2, a3, a4, a5), false); + + assertEquals("[Attachment [fileName=greetings.txt, version=2, title=Title, " + + "description=File:greetings.txt, version:2, " + + "registrationDate=Thu Jan 01 01:00:04 CET 1970, " + + "userFirstName=Albert, userLastName=Einstein, " + + "userEmail=ae@ae.ch, userId=ae, " + + "downloadLink=/openbis/attachment-download?sessionID=st-1&" + + "attachmentHolder=EXPERIMENT&id=1234&fileName=greetings.txt&version=2], " + + "Attachment [fileName=test.txt, version=3, title=Title, " + + "description=File:test.txt, version:3, " + + "registrationDate=Thu Jan 01 01:00:04 CET 1970, " + + "userFirstName=Albert, userLastName=Einstein, userEmail=ae@ae.ch, userId=ae, " + + "downloadLink=/openbis/attachment-download?sessionID=st-1&" + + "attachmentHolder=EXPERIMENT&id=1234&fileName=test.txt&version=3]]", + attachments.toString()); + assertEquals(2, attachments.size()); + + } + + private AttachmentPE attachment(String fileName, int version) + { + AttachmentPE attachment = new AttachmentPE(); + attachment.setFileName(fileName); + attachment.setVersion(version); + attachment.setTitle("Title"); + attachment.setDescription("File:" + fileName + ", version:" + version); + PersonPE registrator = new PersonPE(); + registrator.setUserId("ae"); + registrator.setFirstName("Albert"); + registrator.setLastName("Einstein"); + registrator.setEmail("ae@ae.ch"); + attachment.setRegistrator(registrator); + attachment.setRegistrationDate(new Date(4711)); + return attachment; + } + private void assertBasicAttributes( ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData originalDataSet, DataSet translatedDataSet) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/remoteapitest/api/v1/GeneralInformationServiceJsonApiTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/remoteapitest/api/v1/GeneralInformationServiceJsonApiTest.java index c46048cf353c0f0d07c6bf69c33d9036a2ce2d65..fb05bb00546f66abe46937e0c84a961417d0a12f 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/remoteapitest/api/v1/GeneralInformationServiceJsonApiTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/remoteapitest/api/v1/GeneralInformationServiceJsonApiTest.java @@ -22,10 +22,13 @@ import static org.testng.AssertJUnit.assertTrue; import static org.testng.AssertJUnit.fail; import java.net.MalformedURLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.EnumSet; import java.util.List; import java.util.Map; @@ -36,9 +39,11 @@ import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.string.ToStringComparator; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationChangingService; import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Attachment; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSet.Connections; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetType; @@ -54,7 +59,15 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria.MatchCl import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchSubCriteria; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SpaceWithProjectsAndRoleAssignments; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.Vocabulary; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.ExperimentIdentifierId; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.ExperimentPermIdId; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.ExperimentTechIdId; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.MetaprojectIdentifierId; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.project.ProjectIdentifierId; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.project.ProjectPermIdId; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.sample.SampleIdentifierId; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.sample.SamplePermIdId; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.sample.SampleTechIdId; import ch.systemsx.cisd.openbis.remoteapitest.RemoteApiTestCase; /** @@ -783,171 +796,173 @@ public class GeneralInformationServiceJsonApiTest extends RemoteApiTestCase return null; } - // @Test - // public void testListAttachmentsForExperimentAllVersions() - // { - // final List<Experiment> experiments = - // generalInformationService.listExperiments(sessionToken, - // Collections.singletonList("/CISD/NEMO/EXP1")); - // assertEquals(1, experiments.size()); - // - // final List<Attachment> attachments = - // generalInformationService.listAttachmentsForExperiment(sessionToken, - // ExperimentIdentifier.createFromEntity(experiments.get(0)), - // true); - // assertEquals(4, attachments.size()); - // int version = 4; - // for (Attachment a : attachments) - // { - // assertEquals("exampleExperiments.txt", a.getFileName()); - // assertEquals(version, a.getVersion()); - // assertEquals("", a.getTitle()); - // assertEquals("", a.getDescription()); - // assertTrue(a.getRegistrationDate().getTime() > 0); - // assertEquals("test", a.getUserId()); - // assertEquals("franz-josef.elmer@systemsx.ch", a.getUserEmail()); - // assertNotNull(a.getUserFirstName()); - // assertNotNull(a.getUserLastName()); - // assertEquals( - // String.format( - // "http://localhost/openbis/index.html?viewMode=SIMPLE#action=DOWNLOAD_ATTACHMENT&file=exampleExperiments.txt&version=%d&entity=EXPERIMENT&permId=200811050951882-1028", - // version), - // a.getPermLink()); - // --version; - // } - // } - // - // @Test - // public void testListAttachmentsForExperimentLatestVersion() - // { - // final List<Experiment> experiments = - // generalInformationService.listExperiments(sessionToken, - // Collections.singletonList("/CISD/NEMO/EXP1")); - // assertEquals(1, experiments.size()); - // - // final List<Attachment> attachments = - // generalInformationService.listAttachmentsForExperiment(sessionToken, - // ExperimentIdentifier.createFromEntity(experiments.get(0)), false); - // assertEquals(1, attachments.size()); - // final Attachment a = attachments.get(0); - // assertEquals("exampleExperiments.txt", a.getFileName()); - // assertEquals(4, a.getVersion()); - // assertEquals("", a.getTitle()); - // assertEquals("", a.getDescription()); - // assertTrue(a.getRegistrationDate().getTime() > 0); - // assertEquals("test", a.getUserId()); - // assertEquals("franz-josef.elmer@systemsx.ch", a.getUserEmail()); - // assertNotNull(a.getUserFirstName()); - // assertNotNull(a.getUserLastName()); - // assertEquals( - // "http://localhost/openbis/index.html?viewMode=SIMPLE#action=DOWNLOAD_ATTACHMENT&file=exampleExperiments.txt&version=4&entity=EXPERIMENT&permId=200811050951882-1028", - // a.getPermLink()); - // - // final List<Attachment> attachments2 = - // generalInformationService.listAttachmentsForExperiment(sessionToken, - // ExperimentIdentifier.createFromAugmentedCode("/CISD/NEMO/EXP1"), false); - // - // assertEquals(1, attachments2.size()); - // - // final Attachment a2 = attachments2.get(0); - // assertEquals(a, a2); - // } - // - // @Test - // public void testListAttachmentsForSample() - // { - // SearchCriteria searchCriteria = new SearchCriteria(); - // searchCriteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.CODE, - // "3VCP6")); - // - // final List<Sample> samples = - // generalInformationService.searchForSamples(sessionToken, searchCriteria); - // assertEquals(1, samples.size()); - // - // final List<Attachment> attachments = - // generalInformationService.listAttachmentsForSample(sessionToken, - // SampleIdentifier.createFromEntity(samples.get(0)), - // true); - // assertEquals(1, attachments.size()); - // - // final Attachment a = attachments.get(0); - // assertEquals("sampleHistory.txt", a.getFileName()); - // assertEquals("", a.getTitle()); - // assertEquals("", a.getDescription()); - // assertEquals(1, a.getVersion()); - // assertTrue(a.getRegistrationDate().getTime() > 0); - // assertEquals("test", a.getUserId()); - // assertEquals("franz-josef.elmer@systemsx.ch", a.getUserEmail()); - // assertNotNull(a.getUserFirstName()); - // assertNotNull(a.getUserLastName()); - // assertEquals( - // "http://localhost/openbis/index.html?viewMode=SIMPLE#action=DOWNLOAD_ATTACHMENT&file=sampleHistory.txt&version=1&entity=SAMPLE&permId=200811050946559-980", - // a.getPermLink()); - // - // final List<Attachment> attachments2 = - // generalInformationService.listAttachmentsForSample(sessionToken, - // SampleIdentifier.createFromPermId("200811050946559-980"), true); - // - // assertEquals(1, attachments2.size()); - // - // final Attachment a2 = attachments2.get(0); - // assertEquals(a, a2); - // - // final List<Attachment> attachments3 = - // generalInformationService.listAttachmentsForSample(sessionToken, - // SampleIdentifier.createFromAugmentedCode("/CISD/3VCP6"), true); - // - // assertEquals(1, attachments3.size()); - // - // final Attachment a3 = attachments3.get(0); - // assertEquals(a, a3); - // } - // - // @Test - // public void testListAttachmentsForProjectNoAttachment() - // { - // final List<Attachment> attachments = - // generalInformationService.listAttachmentsForProject(sessionToken, - // ProjectIdentifier.createFromAugmentedCode("/CISD/DEFAULT"), true); - // - // assertEquals(0, attachments.size()); - // } - // - // @Test - // public void testListAttachmentsForProjectNonExisting() - // { - // final List<Attachment> attachments = - // generalInformationService.listAttachmentsForProject(sessionToken, - // ProjectIdentifier.createFromAugmentedCode("/NONE/EXISTENT"), true); - // - // assertEquals(0, attachments.size()); - // } - // - // @Test - // public void testListAttachmentsForProjects() throws ParseException - // { - // final List<Attachment> attachments = - // generalInformationService.listAttachmentsForProject(sessionToken, - // ProjectIdentifier.createFromPermId("20120814110011738-103"), true); - // - // assertEquals(1, attachments.size()); - // - // final Attachment a = attachments.get(0); - // assertEquals("projectDescription.txt", a.getFileName()); - // assertEquals("The Project", a.getTitle()); - // assertEquals("All about it.", a.getDescription()); - // assertEquals(1, a.getVersion()); - // final Date date = - // new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS Z") - // .parse("2012-01-03 08:27:57.123 +0100"); - // assertEquals(date, a.getRegistrationDate()); - // assertEquals("test", a.getUserId()); - // assertEquals("franz-josef.elmer@systemsx.ch", a.getUserEmail()); - // assertNotNull(a.getUserFirstName()); - // assertNotNull(a.getUserLastName()); - // assertEquals( - // "http://localhost/openbis/index.html?viewMode=SIMPLE#action=DOWNLOAD_ATTACHMENT&file=projectDescription.txt&version=1&entity=PROJECT&code=NEMO&space=CISD", - // a.getPermLink()); - // } + @Test + public void testListAttachmentsForExperimentAllVersions() + { + final List<Experiment> experiments = + generalInformationService.listExperiments(sessionToken, + Collections.singletonList("/CISD/NEMO/EXP1")); + assertEquals(1, experiments.size()); + + final List<Attachment> attachments = + generalInformationService.listAttachmentsForExperiment(sessionToken, + new ExperimentTechIdId(experiments.get(0).getId()), true); + assertEquals(4, attachments.size()); + int version = 4; + for (Attachment a : attachments) + { + assertEquals("exampleExperiments.txt", a.getFileName()); + assertEquals(version, a.getVersion()); + assertEquals("", a.getTitle()); + assertEquals("", a.getDescription()); + assertTrue(a.getRegistrationDetails().getRegistrationDate().getTime() > 0); + assertEquals("test", a.getRegistrationDetails().getUserId()); + assertEquals("franz-josef.elmer@systemsx.ch", a.getRegistrationDetails().getUserEmail()); + assertNotNull(a.getRegistrationDetails().getUserFirstName()); + assertNotNull(a.getRegistrationDetails().getUserLastName()); + assertEquals("/openbis/attachment-download?sessionID=" + sessionToken + + "&attachmentHolder=EXPERIMENT&id=2&fileName=exampleExperiments.txt&version=" + + version, a.getDownloadLink()); + --version; + } + } + + @Test + public void testListAttachmentsForExperimentLatestVersion() throws ParseException + { + final List<Experiment> experiments = + generalInformationService.listExperiments(sessionToken, + Collections.singletonList("/CISD/NEMO/EXP1")); + assertEquals(1, experiments.size()); + + final List<Attachment> attachments = + generalInformationService.listAttachmentsForExperiment(sessionToken, + new ExperimentPermIdId(experiments.get(0).getPermId()), false); + assertEquals(1, attachments.size()); + final Attachment a = attachments.get(0); + assertEquals("exampleExperiments.txt", a.getFileName()); + assertEquals(4, a.getVersion()); + assertEquals("", a.getTitle()); + assertEquals("", a.getDescription()); + final Date date = + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS Z") + .parse("2008-12-10 13:49:27.901 +0100"); + assertEquals(date, a.getRegistrationDetails().getRegistrationDate()); + assertEquals("test", a.getRegistrationDetails().getUserId()); + assertEquals("franz-josef.elmer@systemsx.ch", a.getRegistrationDetails().getUserEmail()); + assertNotNull(a.getRegistrationDetails().getUserFirstName()); + assertNotNull(a.getRegistrationDetails().getUserLastName()); + assertEquals("/openbis/attachment-download?sessionID=" + sessionToken + + "&attachmentHolder=EXPERIMENT&id=2&fileName=exampleExperiments.txt&version=4", + a.getDownloadLink()); + + final List<Attachment> attachments2 = + generalInformationService.listAttachmentsForExperiment(sessionToken, + new ExperimentIdentifierId("/CISD/NEMO/EXP1"), false); + + assertEquals(1, attachments2.size()); + + final Attachment a2 = attachments2.get(0); + assertEquals(a, a2); + } + + @Test + public void testListAttachmentsForSample() + { + SearchCriteria searchCriteria = new SearchCriteria(); + searchCriteria.addMatchClause(MatchClause.createAttributeMatch(MatchClauseAttribute.CODE, + "3VCP6")); + + final List<Sample> samples = + generalInformationService.searchForSamples(sessionToken, searchCriteria); + assertEquals(1, samples.size()); + + final List<Attachment> attachments = + generalInformationService.listAttachmentsForSample(sessionToken, + new SampleTechIdId(samples.get(0).getId()), true); + assertEquals(1, attachments.size()); + + final Attachment a = attachments.get(0); + assertEquals("sampleHistory.txt", a.getFileName()); + assertEquals("", a.getTitle()); + assertEquals("", a.getDescription()); + assertEquals(1, a.getVersion()); + assertTrue(a.getRegistrationDetails().getRegistrationDate().getTime() > 0); + assertEquals("test", a.getRegistrationDetails().getUserId()); + assertEquals("franz-josef.elmer@systemsx.ch", a.getRegistrationDetails().getUserEmail()); + assertNotNull(a.getRegistrationDetails().getUserFirstName()); + assertNotNull(a.getRegistrationDetails().getUserLastName()); + assertEquals("/openbis/attachment-download?sessionID=" + sessionToken + + "&attachmentHolder=SAMPLE&id=987&fileName=sampleHistory.txt&version=1", + a.getDownloadLink()); + + final List<Attachment> attachments2 = + generalInformationService.listAttachmentsForSample(sessionToken, + new SamplePermIdId("200811050946559-980"), true); + + assertEquals(1, attachments2.size()); + + final Attachment a2 = attachments2.get(0); + assertEquals(a, a2); + + final List<Attachment> attachments3 = + generalInformationService.listAttachmentsForSample(sessionToken, + new SampleIdentifierId("/CISD/3VCP6"), true); + + assertEquals(1, attachments3.size()); + + final Attachment a3 = attachments3.get(0); + assertEquals(a, a3); + } + + @Test + public void testListAttachmentsForProjectNoAttachment() + { + final List<Attachment> attachments = + generalInformationService.listAttachmentsForProject(sessionToken, + new ProjectIdentifierId("/CISD/DEFAULT"), true); + + assertEquals(0, attachments.size()); + } + + @Test + public void testListAttachmentsForProjectNonExisting() + { + try + { + generalInformationService.listAttachmentsForProject(sessionToken, + new ProjectIdentifierId("/NONE/EXISTENT"), true); + } catch (UserFailureException ex) + { + assertEquals("No project found for id '/NONE/EXISTENT'.", ex.getMessage()); + } + } + + @Test + public void testListAttachmentsForProjects() throws ParseException + { + final List<Attachment> attachments = + generalInformationService.listAttachmentsForProject(sessionToken, + new ProjectPermIdId("20120814110011738-103"), true); + + assertEquals(1, attachments.size()); + + final Attachment a = attachments.get(0); + assertEquals("projectDescription.txt", a.getFileName()); + assertEquals("The Project", a.getTitle()); + assertEquals("All about it.", a.getDescription()); + assertEquals(1, a.getVersion()); + final Date date = + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS Z") + .parse("2012-01-03 08:27:57.123 +0100"); + assertEquals(date, a.getRegistrationDetails().getRegistrationDate()); + assertEquals("test", a.getRegistrationDetails().getUserId()); + assertEquals("franz-josef.elmer@systemsx.ch", a.getRegistrationDetails().getUserEmail()); + assertNotNull(a.getRegistrationDetails().getUserFirstName()); + assertNotNull(a.getRegistrationDetails().getUserLastName()); + assertEquals("/openbis/attachment-download?sessionID=" + sessionToken + + "&attachmentHolder=PROJECT&id=3&fileName=projectDescription.txt&version=1", + a.getDownloadLink()); + } }