diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/ApplicationServerApi.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/ApplicationServerApi.java index 47c2079db25cc525ce43ef8e52f17facc4278d3c..02e10c898d321268365f52eb292949c27b79a586 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/ApplicationServerApi.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/ApplicationServerApi.java @@ -37,6 +37,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.Deletion; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.fetchoptions.DeletionFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.search.DeletionSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.search.EntityTypeSearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.delete.ExperimentDeletionOptions; @@ -68,9 +69,11 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search.ProjectSearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.update.ProjectUpdate; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria; @@ -129,6 +132,7 @@ import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method.ISearchMateri import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method.ISearchObjectKindModificationMethodExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method.ISearchProjectMethodExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method.ISearchSampleMethodExecutor; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method.ISearchSampleTypeMethodExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method.ISearchSpaceMethodExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method.ISearchVocabularyTermMethodExecutor; import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method.IUpdateDataSetMethodExecutor; @@ -240,6 +244,9 @@ public class ApplicationServerApi extends AbstractServer<IApplicationServerApi> @Autowired private ISearchSampleMethodExecutor searchSampleExecutor; + + @Autowired + private ISearchSampleTypeMethodExecutor searchSampleTypeExecutor; @Autowired private ISearchDataSetMethodExecutor searchDataSetExecutor; @@ -563,6 +570,15 @@ public class ApplicationServerApi extends AbstractServer<IApplicationServerApi> return searchSampleExecutor.search(sessionToken, searchCriteria, fetchOptions); } + @Override + @Transactional(readOnly = true) + @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) + public SearchResult<SampleType> searchSampleTypes(String sessionToken, EntityTypeSearchCriteria searchCriteria, + SampleTypeFetchOptions fetchOptions) + { + return searchSampleTypeExecutor.search(sessionToken, searchCriteria, fetchOptions); + } + @Override @Transactional(readOnly = true) @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/ApplicationServerApiLogger.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/ApplicationServerApiLogger.java index 8da9010651f8034389cf6e428b749cf4a516e31b..ddca7cecb99dfe8208b4a700a27b0e02854ac502 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/ApplicationServerApiLogger.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/ApplicationServerApiLogger.java @@ -33,6 +33,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.Deletion; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.fetchoptions.DeletionFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.search.DeletionSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.search.EntityTypeSearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.delete.ExperimentDeletionOptions; @@ -64,9 +65,11 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search.ProjectSearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.update.ProjectUpdate; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria; @@ -311,6 +314,14 @@ public class ApplicationServerApiLogger extends AbstractServerLogger implements return null; } + @Override + public SearchResult<SampleType> searchSampleTypes(String sessionToken, EntityTypeSearchCriteria searchCriteria, + SampleTypeFetchOptions fetchOptions) + { + logAccess(sessionToken, "search-sample-types", "SEARCH_CRITERIA:\n%s\nFETCH_OPTIONS:\n%s\n", searchCriteria, fetchOptions); + return null; + } + @Override public SearchResult<DataSet> searchDataSets(String sessionToken, DataSetSearchCriteria searchCriteria, DataSetFetchOptions fetchOptions) { diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/ISearchSampleTypeMethodExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/ISearchSampleTypeMethodExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..0041b545e00f3111699e9f001f60369f6297d7ba --- /dev/null +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/ISearchSampleTypeMethodExecutor.java @@ -0,0 +1,31 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method; + +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.search.EntityTypeSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions; + +/** + * + * + * @author Franz-Josef Elmer + */ +public interface ISearchSampleTypeMethodExecutor extends ISearchMethodExecutor<SampleType, EntityTypeSearchCriteria, SampleTypeFetchOptions> +{ + +} diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/SearchSampleTypeSqlMethodExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/SearchSampleTypeSqlMethodExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..cca225ff5be479b0353e793c585763477680b8af --- /dev/null +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/SearchSampleTypeSqlMethodExecutor.java @@ -0,0 +1,59 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.method; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.search.EntityTypeSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.IOperationContext; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.sample.ISearchSampleTypeExecutor; +import ch.ethz.sis.openbis.generic.server.asapi.v3.translator.ITranslator; +import ch.ethz.sis.openbis.generic.server.asapi.v3.translator.entity.sample.ISampleTypeTranslator; +import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; + +/** + * + * @author Franz-Josef Elmer + */ +@Component +public class SearchSampleTypeSqlMethodExecutor extends AbstractIdSearchMethodExecutor<SampleType, SampleTypePE, EntityTypeSearchCriteria, SampleTypeFetchOptions> + implements ISearchSampleTypeMethodExecutor +{ + @Autowired + private ISearchSampleTypeExecutor searchExecutor; + + @Autowired + private ISampleTypeTranslator translator; + + @Override + protected List<SampleTypePE> searchPEs(IOperationContext context, EntityTypeSearchCriteria criteria) + { + return searchExecutor.search(context, criteria); + } + + @Override + protected ITranslator<Long, SampleType, SampleTypeFetchOptions> getTranslator() + { + return translator; + } + +} diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/ISearchSampleTypeExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/ISearchSampleTypeExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..a54929725e35d3feb6f2290fe925f1cab0ed3b40 --- /dev/null +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/ISearchSampleTypeExecutor.java @@ -0,0 +1,31 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.sample; + +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.search.EntityTypeSearchCriteria; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.ISearchObjectExecutor; +import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; + +/** + * + * + * @author Franz-Josef Elmer + */ +public interface ISearchSampleTypeExecutor extends ISearchObjectExecutor<EntityTypeSearchCriteria, SampleTypePE> +{ + +} diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/SearchSampleTypeExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/SearchSampleTypeExecutor.java new file mode 100644 index 0000000000000000000000000000000000000000..32ab6f3d51d9bce05da039180faef1ff5268cc05 --- /dev/null +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/sample/SearchSampleTypeExecutor.java @@ -0,0 +1,60 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.ethz.sis.openbis.generic.server.asapi.v3.executor.sample; + +import java.util.List; + +import org.springframework.stereotype.Component; + +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.CodeSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.ISearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.PermIdSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.search.EntityTypeSearchCriteria; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.AbstractSearchObjectManuallyExecutor; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.CodeMatcher; +import ch.ethz.sis.openbis.generic.server.asapi.v3.executor.common.Matcher; +import ch.systemsx.cisd.openbis.generic.shared.dto.SampleTypePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; + +/** + * + * + * @author Franz-Josef Elmer + */ +@Component +public class SearchSampleTypeExecutor extends AbstractSearchObjectManuallyExecutor<EntityTypeSearchCriteria, SampleTypePE> + implements ISearchSampleTypeExecutor +{ + + @Override + protected List<SampleTypePE> listAll() + { + return daoFactory.getEntityTypeDAO(EntityKind.SAMPLE).listEntityTypes(); + } + + @Override + protected Matcher<SampleTypePE> getMatcher(ISearchCriteria criteria) + { + if (criteria instanceof PermIdSearchCriteria || criteria instanceof CodeSearchCriteria) + { + return new CodeMatcher<SampleTypePE>(); + } else + { + throw new IllegalArgumentException("Unknown search criteria: " + criteria.getClass()); + } + } +} diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java index a2a6e488f9c07bbd7040bac7d97b160f9e666078..650d15f0ba1582ef62089e5053d050bf049eaac7 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/AbstractTest.java @@ -23,12 +23,14 @@ import static org.testng.Assert.fail; import java.lang.reflect.Method; import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -47,6 +49,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.attachment.Attachment; import ch.ethz.sis.openbis.generic.asapi.v3.dto.attachment.create.AttachmentCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.id.IObjectId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IAttachmentsHolder; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.ICodeHolder; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IModifierHolder; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IParentChildrenHolder; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IPropertiesHolder; @@ -59,6 +62,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.history.HistoryEntry; import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.Material; import ch.ethz.sis.openbis.generic.asapi.v3.dto.material.id.MaterialPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.Project; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample; import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.Space; import ch.ethz.sis.openbis.generic.asapi.v3.dto.tag.Tag; @@ -665,6 +669,46 @@ public class AbstractTest extends SystemTestCase assertEquals(format.format(actualDate), format.format(new Date())); } + protected List<String> extractCodes(List<? extends ICodeHolder> types) + { + List<String> codes = new ArrayList<>(); + for (ICodeHolder sampleType : types) + { + codes.add(sampleType.getCode()); + } + return codes; + } + + protected PropertyAssignment getPropertyAssignment(List<PropertyAssignment> propertyAssignments, String code) + { + List<String> codes = new ArrayList<>(); + for (PropertyAssignment propertyAssignment : propertyAssignments) + { + String propertyCode = propertyAssignment.getPropertyType().getCode(); + codes.add(propertyCode); + if (propertyCode.equals(code)) + { + return propertyAssignment; + } + } + throw new AssertionError("No property '" + code + "' found in " + codes); + } + + protected void assertOrder(List<PropertyAssignment> propertyAssignments, String...codes) + { + Set<String> codesSet = new LinkedHashSet<>(Arrays.asList(codes)); + List<String> propertyCodes = new ArrayList<>(); + for (PropertyAssignment assignment : propertyAssignments) + { + String code = assignment.getPropertyType().getCode(); + if (codesSet.contains(code)) + { + propertyCodes.add(code); + } + } + assertEquals(propertyCodes.toString(), codesSet.toString()); + } + protected static void assertSpaceCodes(Collection<Space> spaces, String... expectedCodes) { Set<String> actualSet = new HashSet<String>(); diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/MapMaterialTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/MapMaterialTest.java index 50f08a0dfc0bc2eb7b106a935edb370030823311..24464038815cddf02e873520dca1e59a3d5acd15 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/MapMaterialTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/MapMaterialTest.java @@ -18,11 +18,9 @@ package ch.ethz.sis.openbis.systemtest.asapi.v3; import static org.testng.Assert.assertEquals; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -228,36 +226,6 @@ public class MapMaterialTest extends AbstractDataSetTest v3api.logout(sessionToken); } - private PropertyAssignment getPropertyAssignment(List<PropertyAssignment> propertyAssignments, String code) - { - List<String> codes = new ArrayList<>(); - for (PropertyAssignment propertyAssignment : propertyAssignments) - { - String propertyCode = propertyAssignment.getPropertyType().getCode(); - codes.add(propertyCode); - if (propertyCode.equals(code)) - { - return propertyAssignment; - } - } - throw new AssertionError("No property '" + code + "' found in " + codes); - } - - private void assertOrder(List<PropertyAssignment> propertyAssignments, String...codes) - { - Set<String> codesSet = new LinkedHashSet<>(Arrays.asList(codes)); - List<String> propertyCodes = new ArrayList<>(); - for (PropertyAssignment assignment : propertyAssignments) - { - String code = assignment.getPropertyType().getCode(); - if (codesSet.contains(code)) - { - propertyCodes.add(code); - } - } - assertEquals(propertyCodes.toString(), codesSet.toString()); - } - @Test public void testMapWithRegistrator() { diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchSampleTypeTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchSampleTypeTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4bd0cf93e24f196228215efc8a654a7aaad28676 --- /dev/null +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchSampleTypeTest.java @@ -0,0 +1,79 @@ +/* + * Copyright 2016 ETH Zuerich, SIS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.ethz.sis.openbis.systemtest.asapi.v3; + +import static org.testng.Assert.assertEquals; + +import java.util.Collections; +import java.util.List; + +import org.testng.annotations.Test; + +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.search.EntityTypeSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions; +import ch.ethz.sis.openbis.generic.server.asapi.v3.helper.sort.CodeComparator; + +/** + * + * + * @author Franz-Josef Elmer + */ +public class SearchSampleTypeTest extends AbstractTest +{ + @Test + public void testSearchWithCodeThatStartsWithD() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + EntityTypeSearchCriteria searchCriteria = new EntityTypeSearchCriteria(); + searchCriteria.withCode().thatStartsWith("D"); + SampleTypeFetchOptions fetchOptions = new SampleTypeFetchOptions(); + + SearchResult<SampleType> searchResult = v3api.searchSampleTypes(sessionToken, searchCriteria, fetchOptions); + + List<SampleType> types = searchResult.getObjects(); + List<String> codes = extractCodes(types); + Collections.sort(codes); + assertEquals(codes.toString(), "[DELETION_TEST, DILUTION_PLATE, DYNAMIC_PLATE]"); + assertEquals(types.get(0).getFetchOptions().hasPropertyAssignments(), false); + v3api.logout(sessionToken); + } + + @Test + public void testSearchWithPropertyAssignmentSortByLabelDesc() + { + String sessionToken = v3api.login(TEST_USER, PASSWORD); + EntityTypeSearchCriteria searchCriteria = new EntityTypeSearchCriteria(); + searchCriteria.withCode().thatStartsWith("D"); + SampleTypeFetchOptions fetchOptions = new SampleTypeFetchOptions(); + fetchOptions.withPropertyAssignments().sortBy().label().desc(); + + SearchResult<SampleType> searchResult = v3api.searchSampleTypes(sessionToken, searchCriteria, fetchOptions); + + List<SampleType> types = searchResult.getObjects(); + Collections.sort(types, new CodeComparator<SampleType>()); + List<String> codes = extractCodes(types); + assertEquals(codes.toString(), "[DELETION_TEST, DILUTION_PLATE, DYNAMIC_PLATE]"); + assertEquals(types.get(0).getFetchOptions().hasPropertyAssignments(), true); + List<PropertyAssignment> propertyAssignments = types.get(0).getPropertyAssignments(); + assertOrder(propertyAssignments, "BACTERIUM", "ORGANISM", "DESCRIPTION"); + v3api.logout(sessionToken); + } + +} diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/IApplicationServerApi.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/IApplicationServerApi.java index 2fe77b662536deb6aa78efb2494a21549356dbea..5f3fac64d8e30f839bae18195754aab9ddb5f6bc 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/IApplicationServerApi.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/IApplicationServerApi.java @@ -32,6 +32,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.Deletion; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.fetchoptions.DeletionFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.id.IDeletionId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.deletion.search.DeletionSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.search.EntityTypeSearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.Experiment; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.create.ExperimentCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.experiment.delete.ExperimentDeletionOptions; @@ -63,9 +64,11 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectPermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.search.ProjectSearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.update.ProjectUpdate; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.Sample; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.SampleType; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.create.SampleCreation; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.delete.SampleDeletionOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleFetchOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.fetchoptions.SampleTypeFetchOptions; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.ISampleId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.id.SamplePermId; import ch.ethz.sis.openbis.generic.asapi.v3.dto.sample.search.SampleSearchCriteria; @@ -173,6 +176,8 @@ public interface IApplicationServerApi extends IRpcService public SearchResult<Sample> searchSamples(String sessionToken, SampleSearchCriteria searchCriteria, SampleFetchOptions fetchOptions); + public SearchResult<SampleType> searchSampleTypes(String sessionToken, EntityTypeSearchCriteria searchCriteria, SampleTypeFetchOptions fetchOptions); + public SearchResult<DataSet> searchDataSets(String sessionToken, DataSetSearchCriteria searchCriteria, DataSetFetchOptions fetchOptions); public SearchResult<Material> searchMaterials(String sessionToken, MaterialSearchCriteria searchCriteria, MaterialFetchOptions fetchOptions);