From 14ce7da79fb88be7c25bef94ed1961aadaa25012 Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Tue, 16 Feb 2016 12:56:38 +0000 Subject: [PATCH] SSDM-2362 : V3 AS API - global search - making the criteria objects structure/naming consistent (js part still todo) SVN: 35687 --- ...hObjectKindModificationMethodExecutor.java | 59 ++++++++++++++----- .../v3/SearchObjectKindModificationTest.java | 26 ++++---- .../search/ObjectKindCriteria.java | 59 +++++++++++++++++++ .../ObjectKindModificationSearchCriteria.java | 35 ++++------- .../search/OperationKindCriteria.java | 59 +++++++++++++++++++ .../generic/sharedapi/v3/dictionary.txt | 7 ++- 6 files changed, 190 insertions(+), 55 deletions(-) create mode 100644 openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/ObjectKindCriteria.java create mode 100644 openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/OperationKindCriteria.java diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/SearchObjectKindModificationMethodExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/SearchObjectKindModificationMethodExecutor.java index a6192e68a47..4981fffcc8c 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/SearchObjectKindModificationMethodExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/asapi/v3/executor/method/SearchObjectKindModificationMethodExecutor.java @@ -24,18 +24,19 @@ 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.common.search.ISearchCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchResult; import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.ObjectKind; import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.ObjectKindModification; import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.OperationKind; import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.fetchoptions.ObjectKindModificationFetchOptions; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.search.ObjectKindCriteria; import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.search.ObjectKindModificationSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.search.OperationKindCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.LastModificationState; /** - * - * * @author Franz-Josef Elmer */ @Component @@ -62,27 +63,57 @@ public class SearchObjectKindModificationMethodExecutor implements ISearchObject objectKindModification.setLastModificationTimeStamp(date); objectKindModification.setFetchOptions(fetchOptions); result.add(objectKindModification); - } + } } return new SearchResult<>(result, result.size()); } - - private List<ObjectKind> getObjectKinds(ObjectKindModificationSearchCriteria searchCriteria) + + private List<ObjectKind> getObjectKinds(ObjectKindModificationSearchCriteria criteria) { - List<ObjectKind> objectKinds = searchCriteria.getObjectKinds(); - return objectKinds == null || objectKinds.isEmpty() ? Arrays.asList(ObjectKind.values()) : objectKinds; + ObjectKindCriteria lastCriteria = null; + + for (ISearchCriteria subCriteria : criteria.getCriteria()) + { + if (subCriteria instanceof ObjectKindCriteria) + { + lastCriteria = (ObjectKindCriteria) subCriteria; + } + } + + if (lastCriteria == null || lastCriteria.getObjectKinds() == null || lastCriteria.getObjectKinds().isEmpty()) + { + return Arrays.asList(ObjectKind.values()); + } else + { + return lastCriteria.getObjectKinds(); + } } - - private List<OperationKind> getOperationKinds(ObjectKindModificationSearchCriteria searchCriteria) + + private List<OperationKind> getOperationKinds(ObjectKindModificationSearchCriteria criteria) { - List<OperationKind> operationKinds = searchCriteria.getOperationKinds(); - return operationKinds == null || operationKinds.isEmpty() ? Arrays.asList(OperationKind.values()) : operationKinds; + OperationKindCriteria lastCriteria = null; + + for (ISearchCriteria subCriteria : criteria.getCriteria()) + { + if (subCriteria instanceof OperationKindCriteria) + { + lastCriteria = (OperationKindCriteria) subCriteria; + } + } + + if (lastCriteria == null || lastCriteria.getOperationKinds() == null || lastCriteria.getOperationKinds().isEmpty()) + { + return Arrays.asList(OperationKind.values()); + } else + { + return lastCriteria.getOperationKinds(); + } } - + private DatabaseModificationKind translate(ObjectKind objectKind, OperationKind operationKind) { - ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind translatedObjectKind - = DatabaseModificationKind.ObjectKind.valueOf(objectKind.name()); + ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind translatedObjectKind = + DatabaseModificationKind.ObjectKind.valueOf(objectKind.name()); switch (operationKind) { case CREATE_OR_DELETE: diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchObjectKindModificationTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchObjectKindModificationTest.java index 619ee133d94..955b9614087 100644 --- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchObjectKindModificationTest.java +++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/SearchObjectKindModificationTest.java @@ -36,8 +36,6 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.id.ProjectIdentifier; import ch.ethz.sis.openbis.generic.asapi.v3.dto.project.update.ProjectUpdate; /** - * - * * @author Franz-Josef Elmer */ public class SearchObjectKindModificationTest extends AbstractTest @@ -47,13 +45,12 @@ public class SearchObjectKindModificationTest extends AbstractTest { ObjectKindModificationSearchCriteria searchCriteria = new ObjectKindModificationSearchCriteria(); ObjectKindModificationFetchOptions fetchOptions = new ObjectKindModificationFetchOptions(); - - SearchResult<ObjectKindModification> searchResult - = v3api.searchObjectKindModifications(systemSessionToken, searchCriteria, fetchOptions); - + + SearchResult<ObjectKindModification> searchResult = v3api.searchObjectKindModifications(systemSessionToken, searchCriteria, fetchOptions); + assertEquals(searchResult.getTotalCount(), ObjectKind.values().length * OperationKind.values().length); } - + @Test public void testSearchForProjectModifications() { @@ -64,13 +61,12 @@ public class SearchObjectKindModificationTest extends AbstractTest projectUpdate.setDescription("time stamp: " + date); v3api.updateProjects(systemSessionToken, Arrays.asList(projectUpdate)); ObjectKindModificationSearchCriteria searchCriteria = new ObjectKindModificationSearchCriteria(); - searchCriteria.withObjectKinds(ObjectKind.PROJECT, ObjectKind.SAMPLE); - searchCriteria.withOperationKinds(OperationKind.UPDATE); + searchCriteria.withObjectKind().thatIn(ObjectKind.PROJECT, ObjectKind.SAMPLE); + searchCriteria.withOperationKind().thatIn(OperationKind.UPDATE); ObjectKindModificationFetchOptions fetchOptions = new ObjectKindModificationFetchOptions(); - - SearchResult<ObjectKindModification> searchResult - = v3api.searchObjectKindModifications(systemSessionToken, searchCriteria, fetchOptions); - + + SearchResult<ObjectKindModification> searchResult = v3api.searchObjectKindModifications(systemSessionToken, searchCriteria, fetchOptions); + assertEquals(searchResult.getTotalCount(), 2); List<ObjectKindModification> modifications = searchResult.getObjects(); for (ObjectKindModification modification : modifications) @@ -79,11 +75,11 @@ public class SearchObjectKindModificationTest extends AbstractTest ObjectKind objectKind = modification.getObjectKind(); if (objectKind == ObjectKind.SAMPLE) { - assertTrue(lastModificationTimeStamp.getTime() < date.getTime(), + assertTrue(lastModificationTimeStamp.getTime() < date.getTime(), "Expected date (" + date + ") >= " + modification); } else if (objectKind == ObjectKind.PROJECT) { - assertTrue(lastModificationTimeStamp.getTime() >= date.getTime(), + assertTrue(lastModificationTimeStamp.getTime() >= date.getTime(), "Expected date (" + date + ") < " + modification); } else { diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/ObjectKindCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/ObjectKindCriteria.java new file mode 100644 index 00000000000..3b3f73f4a49 --- /dev/null +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/ObjectKindCriteria.java @@ -0,0 +1,59 @@ +/* + * Copyright 2016 ETH Zuerich, CISD + * + * 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.asapi.v3.dto.objectkindmodification.search; + +import java.util.Arrays; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.AbstractSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.ObjectKind; +import ch.systemsx.cisd.base.annotation.JsonObject; + +/** + * @author pkupczyk + */ +@JsonObject("as.dto.objectkindmodification.search.ObjectKindCriteria") +public class ObjectKindCriteria extends AbstractSearchCriteria +{ + private static final long serialVersionUID = 1L; + + @JsonProperty + private List<ObjectKind> objectKinds; + + public void thatIn(List<ObjectKind> kinds) + { + this.objectKinds = kinds; + } + + public void thatIn(ObjectKind... kinds) + { + this.objectKinds = Arrays.asList(kinds); + } + + public List<ObjectKind> getObjectKinds() + { + return objectKinds; + } + + @Override + public String toString() + { + return "with object kinds " + objectKinds; + } +} diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.java index 2aeaa605af0..e2d3d6ce903 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/ObjectKindModificationSearchCriteria.java @@ -16,46 +16,35 @@ package ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.search; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.ISearchCriteria; -import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.ObjectKind; -import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.OperationKind; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.AbstractCompositeSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.SearchCriteriaToStringBuilder; import ch.systemsx.cisd.base.annotation.JsonObject; /** * @author Franz-Josef Elmer */ @JsonObject("as.dto.objectkindmodification.search.ObjectKindModificationSearchCriteria") -public class ObjectKindModificationSearchCriteria implements ISearchCriteria +public class ObjectKindModificationSearchCriteria extends AbstractCompositeSearchCriteria { - private List<ObjectKind> objectKinds = new ArrayList<>(); - - private List<OperationKind> operationKinds = new ArrayList<>(); private static final long serialVersionUID = 1L; - public ObjectKindModificationSearchCriteria withObjectKinds(ObjectKind... someObjectKinds) + public ObjectKindCriteria withObjectKind() { - this.objectKinds.addAll(Arrays.asList(someObjectKinds)); - return this; + return with(new ObjectKindCriteria()); } - public ObjectKindModificationSearchCriteria withOperationKinds(OperationKind... someOperationKinds) + public OperationKindCriteria withOperationKind() { - this.operationKinds.addAll(Arrays.asList(someOperationKinds)); - return this; + return with(new OperationKindCriteria()); } - public List<ObjectKind> getObjectKinds() + @Override + protected SearchCriteriaToStringBuilder createBuilder() { - return objectKinds; + SearchCriteriaToStringBuilder builder = super.createBuilder(); + builder.setName("OBJECT_KIND_MODIFICATION_SEARCH"); + return builder; } - public List<OperationKind> getOperationKinds() - { - return operationKinds; - } } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/OperationKindCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/OperationKindCriteria.java new file mode 100644 index 00000000000..99b2d495145 --- /dev/null +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/asapi/v3/dto/objectkindmodification/search/OperationKindCriteria.java @@ -0,0 +1,59 @@ +/* + * Copyright 2016 ETH Zuerich, CISD + * + * 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.asapi.v3.dto.objectkindmodification.search; + +import java.util.Arrays; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.search.AbstractSearchCriteria; +import ch.ethz.sis.openbis.generic.asapi.v3.dto.objectkindmodification.OperationKind; +import ch.systemsx.cisd.base.annotation.JsonObject; + +/** + * @author pkupczyk + */ +@JsonObject("as.dto.objectkindmodification.search.OperationKindCriteria") +public class OperationKindCriteria extends AbstractSearchCriteria +{ + private static final long serialVersionUID = 1L; + + @JsonProperty + private List<OperationKind> operationKinds; + + public void thatIn(List<OperationKind> kinds) + { + this.operationKinds = kinds; + } + + public void thatIn(OperationKind... kinds) + { + this.operationKinds = Arrays.asList(kinds); + } + + public List<OperationKind> getOperationKinds() + { + return operationKinds; + } + + @Override + public String toString() + { + return "with operation kinds " + operationKinds; + } +} diff --git a/openbis_api/sourceTest/java/ch/ethz/sis/openbis/generic/sharedapi/v3/dictionary.txt b/openbis_api/sourceTest/java/ch/ethz/sis/openbis/generic/sharedapi/v3/dictionary.txt index 1479533843f..00b85cd3ef2 100644 --- a/openbis_api/sourceTest/java/ch/ethz/sis/openbis/generic/sharedapi/v3/dictionary.txt +++ b/openbis_api/sourceTest/java/ch/ethz/sis/openbis/generic/sharedapi/v3/dictionary.txt @@ -936,8 +936,10 @@ search Object Kind Modifications set Last Modification Time Stamp set Object Kind set Operation Kind -with Object Kinds -with Operation Kinds +with Object Kind +with Operation Kind +ObjectKindCriteria +OperationKindCriteria AUTHORIZATION_GROUP CREATE_OR_DELETE @@ -990,7 +992,6 @@ setRegistratorEmail withDataSetUsing withMaterial withMaterialUsing -withObjectKind withText getDataProducer getDataProductionDate -- GitLab