diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApi.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApi.java index 9510360361f6329492a6b89d012f24af2b38e6cc..7de5bed2c77677506ab2360c6de8768eb4e007f9 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApi.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApi.java @@ -72,6 +72,7 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.update.SampleUpdate; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.Space; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.create.SpaceCreation; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.delete.SpaceDeletionOptions; @@ -594,16 +595,16 @@ public class ApplicationServerApi extends AbstractServer<IApplicationServerApi> @Override @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) - @Capability("LIST_SERVICES") - public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions) + @Capability("SEARCH_SERVICES") + public SearchResult<Service> searchServices(String sessionToken, ServiceSearchCriteria searchCriteria, ServiceFetchOptions fetchOptions) { - return serviceMethodsExecutor.listServices(sessionToken, fetchOptions); + return serviceMethodsExecutor.listServices(sessionToken, searchCriteria, fetchOptions); } @Override @RolesAllowed({ RoleWithHierarchy.SPACE_OBSERVER, RoleWithHierarchy.SPACE_ETL_SERVER }) @Capability("EXECUTE_SERVICE") - public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters) + public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters) { return serviceMethodsExecutor.executeService(sessionToken, serviceId, parameters); } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApiLogger.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApiLogger.java index 9b4557319371d45f75db74d68c2ec321b4c37fbf..899273b421ac38ce9a4fb196907860b124c14c53 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApiLogger.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/ApplicationServerApiLogger.java @@ -68,6 +68,7 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.update.SampleUpdate; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.Space; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.create.SpaceCreation; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.delete.SpaceDeletionOptions; @@ -347,14 +348,14 @@ public class ApplicationServerApiLogger extends AbstractServerLogger implements } @Override - public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions) + public SearchResult<Service> searchServices(String sessionToken, ServiceSearchCriteria searchCriteria, ServiceFetchOptions fetchOptions) { - logAccess(sessionToken, "list-services", "FETCH_OPTIONS(%s)", fetchOptions); + logAccess(sessionToken, "search-services", "SEARCH_CRITERIA(%s) FETCH_OPTIONS(%s)", searchCriteria, fetchOptions); return null; } @Override - public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters) + public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters) { logAccess(sessionToken, "execute-service", "SERVICE_ID(%s) PARAMETERS(%s)", serviceId, parameters); return null; diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/IServiceMethodsExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/IServiceMethodsExecutor.java index f2d5c228e3c8263bc6b7db28662c5f9a70e67e86..e8631cc69a593e888b867449b07cc055970c4f8a 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/IServiceMethodsExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/IServiceMethodsExecutor.java @@ -17,12 +17,13 @@ package ch.ethz.sis.openbis.generic.server.api.v3.executor.method; import java.io.Serializable; -import java.util.List; import java.util.Map; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.SearchResult; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria; /** * @@ -31,8 +32,8 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId; */ public interface IServiceMethodsExecutor { - public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions); + public SearchResult<Service> listServices(String sessionToken, ServiceSearchCriteria searchCriteria, ServiceFetchOptions fetchOptions); - public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters); + public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters); } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/ServiceMethodsExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/ServiceMethodsExecutor.java index 157793c5ed74fb3c27ad893b01d43e26f4b2d26e..98e135382bb97486a2a5ecc15557bef4e6ab11b6 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/ServiceMethodsExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/executor/method/ServiceMethodsExecutor.java @@ -29,10 +29,12 @@ import javax.annotation.Resource; import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.SearchResult; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId; -import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.ServicePermId; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.ServiceCode; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria; import ch.ethz.sis.openbis.generic.as.api.v3.exceptions.ObjectNotFoundException; import ch.ethz.sis.openbis.generic.as.api.v3.exceptions.UnsupportedObjectIdException; import ch.ethz.sis.openbis.generic.as.api.v3.plugin.IServiceExecutor; @@ -75,7 +77,7 @@ public class ServiceMethodsExecutor extends AbstractMethodExecutor implements IS Properties properties = sectionProperties.getProperties(); String className = PropertyUtils.getMandatoryProperty(properties, CLASS_KEY); Service service = new Service(); - service.setCode(code); + service.setCode(new ServiceCode(code)); service.setLabel(properties.getProperty(LABEL_KEY, code)); service.setDescription(properties.getProperty(DESCRIPTION_KEY, "")); IServiceExecutor serviceExecutor = ClassUtils.create(IServiceExecutor.class, className, properties); @@ -85,19 +87,21 @@ public class ServiceMethodsExecutor extends AbstractMethodExecutor implements IS } @Override - public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions) + public SearchResult<Service> listServices(String sessionToken, ServiceSearchCriteria searchCriteria, + ServiceFetchOptions fetchOptions) { - return Collections.unmodifiableList(services); + // TODO filter by searchCriteria + return new SearchResult<>(Collections.unmodifiableList(services), services.size()); } @Override - public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters) + public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters) { - if (serviceId instanceof ServicePermId == false) + if (serviceId instanceof ServiceCode == false) { throw new UnsupportedObjectIdException(serviceId); } - ServicePermId servicePermId = (ServicePermId) serviceId; + ServiceCode servicePermId = (ServiceCode) serviceId; IServiceExecutor serviceExecutor = executors.get(servicePermId.getPermId()); if (serviceExecutor == null) { diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/generators/Generator.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/generators/Generator.java index eea0560157228cc108671e143771550162cb2776..ef11dc9ff30531bcb6a7bdcdee68425cb46893cc 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/generators/Generator.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/generators/Generator.java @@ -60,6 +60,7 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.fetchoptions.SampleTypeF import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.id.SampleIdentifier; import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.id.SamplePermId; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.ServiceCode; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.fetchoptions.SpaceFetchOptions; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.id.SpacePermId; import ch.ethz.sis.openbis.generic.as.api.v3.dto.tag.fetchoptions.TagFetchOptions; @@ -546,7 +547,7 @@ public class Generator extends AbstractGenerator private static DtoGenerator createServiceGenerator() { DtoGenerator gen = new DtoGenerator("service", "Service", ServiceFetchOptions.class); - addCode(gen); + gen.addSimpleField(ServiceCode.class, "code"); gen.addStringField("label"); gen.addStringField("description"); diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/IServiceScriptRunner.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/IServiceScriptRunner.java index 74c6032e9e91e820879c81cc0ffe10a920117a99..42560c141506e0058d9e26c0fcece5cd0012ec3c 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/IServiceScriptRunner.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/IServiceScriptRunner.java @@ -26,5 +26,5 @@ import java.util.Map; */ public interface IServiceScriptRunner { - public Serializable process(Map<String, String> parameters); + public Serializable process(Map<String, Serializable> parameters); } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/JythonBasedServiceExecutor.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/JythonBasedServiceExecutor.java index 6ecdbe9d225ef4b1b474a08dd95aea3f01deb51e..b233a6707c5efe31a0ef11c827f2ef50421707e0 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/JythonBasedServiceExecutor.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/JythonBasedServiceExecutor.java @@ -48,7 +48,7 @@ public class JythonBasedServiceExecutor implements IServiceExecutor } @Override - public Serializable executeService(Map<String, String> parameters, ServiceContext context) + public Serializable executeService(Map<String, Serializable> parameters, ServiceContext context) { return factory.createServiceRunner(context).process(parameters); } diff --git a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/ScriptRunnerFactory.java b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/ScriptRunnerFactory.java index e259c17b920beedc067fa90d6ca33872d5c1fb71..b56cf07faf5b1deb175a72d78b830c50475a42eb 100644 --- a/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/ScriptRunnerFactory.java +++ b/openbis/source/java/ch/ethz/sis/openbis/generic/server/api/v3/helper/service/ScriptRunnerFactory.java @@ -84,7 +84,7 @@ class ScriptRunnerFactory implements IScriptRunnerFactory } @Override - public Serializable process(Map<String, String> parameters) + public Serializable process(Map<String, Serializable> parameters) { Object result = evaluator.evalFunction(PROCESS_FUNCTION_NAME, parameters); if (result == null || result instanceof Serializable) diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/IApplicationServerApi.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/IApplicationServerApi.java index 0645b6805f7bf8beb6db9986d0aa940434e1d6f1..29dff898981bd85754af755d9be0fbec475f8b8d 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/IApplicationServerApi.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/IApplicationServerApi.java @@ -67,6 +67,7 @@ import ch.ethz.sis.openbis.generic.as.api.v3.dto.sample.update.SampleUpdate; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.Service; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.search.ServiceSearchCriteria; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.Space; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.create.SpaceCreation; import ch.ethz.sis.openbis.generic.as.api.v3.dto.space.delete.SpaceDeletionOptions; @@ -154,6 +155,8 @@ public interface IApplicationServerApi extends IRpcService public SearchResult<Material> searchMaterials(String sessionToken, MaterialSearchCriteria searchCriteria, MaterialFetchOptions fetchOptions); + public SearchResult<Service> searchServices(String sessionToken, ServiceSearchCriteria searchCriteria, ServiceFetchOptions fetchOptions); + public void deleteSpaces(String sessionToken, List<? extends ISpaceId> spaceIds, SpaceDeletionOptions deletionOptions); public void deleteProjects(String sessionToken, List<? extends IProjectId> projectIds, ProjectDeletionOptions deletionOptions); @@ -172,8 +175,6 @@ public interface IApplicationServerApi extends IRpcService public void confirmDeletions(String sessionToken, List<? extends IDeletionId> deletionIds); - public List<Service> listServices(String sessionToken, ServiceFetchOptions fetchOptions); - - public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, String> parameters); + public Serializable executeService(String sessionToken, IServiceId serviceId, Map<String, Serializable> parameters); } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/Service.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/Service.java index 7da8d84ebb264fa0bab8f9871020ed3cbb4506c2..2ebc71ef332933b9a633d1bf2c4dbd34d219d3a4 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/Service.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/Service.java @@ -15,8 +15,8 @@ */ package ch.ethz.sis.openbis.generic.as.api.v3.dto.service; -import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.interfaces.ICodeHolder; import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.fetchoptions.ServiceFetchOptions; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.ServiceCode; import ch.ethz.sis.openbis.generic.as.api.v3.exceptions.NotFetchedException; import ch.systemsx.cisd.base.annotation.JsonObject; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -27,7 +27,7 @@ import java.io.Serializable; * Class automatically generated with DtoGenerator */ @JsonObject("dto.service.Service") -public class Service implements Serializable, ICodeHolder +public class Service implements Serializable { private static final long serialVersionUID = 1L; @@ -35,7 +35,7 @@ public class Service implements Serializable, ICodeHolder private ServiceFetchOptions fetchOptions; @JsonProperty - private String code; + private ServiceCode code; @JsonProperty private String label; @@ -58,14 +58,13 @@ public class Service implements Serializable, ICodeHolder // Method automatically generated with DtoGenerator @JsonIgnore - @Override - public String getCode() + public ServiceCode getCode() { return code; } // Method automatically generated with DtoGenerator - public void setCode(String code) + public void setCode(ServiceCode code) { this.code = code; } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServicePermId.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServiceCode.java similarity index 83% rename from openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServicePermId.java rename to openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServiceCode.java index e9b9a115ea5c9b2343e2d139ec06ff880ef7bb98..8e48b23e5368e8580b118910fda0092d792b678a 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServicePermId.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/id/ServiceCode.java @@ -24,21 +24,21 @@ import ch.systemsx.cisd.base.annotation.JsonObject; * * @author Franz-Josef Elmer */ -@JsonObject("dto.service.id.ServicePermId") -public class ServicePermId extends ObjectPermId implements IServiceId +@JsonObject("dto.service.id.ServiceCode") +public class ServiceCode extends ObjectPermId implements IServiceId { private static final long serialVersionUID = 1L; - public ServicePermId(String permId) + public ServiceCode(String code) { - super(permId); + super(code); } // // JSON-RPC // @SuppressWarnings("unused") - private ServicePermId() + private ServiceCode() { } } diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/search/ServiceSearchCriteria.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/search/ServiceSearchCriteria.java new file mode 100644 index 0000000000000000000000000000000000000000..3461345998c6cf4848f8b53c33d316a9a9f00cc4 --- /dev/null +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/dto/service/search/ServiceSearchCriteria.java @@ -0,0 +1,51 @@ +/* + * Copyright 2015 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.as.api.v3.dto.service.search; + +import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.AbstractObjectSearchCriteria; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.CodeSearchCriteria; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.common.search.SearchCriteriaToStringBuilder; +import ch.ethz.sis.openbis.generic.as.api.v3.dto.service.id.IServiceId; +import ch.systemsx.cisd.base.annotation.JsonObject; + +/** + * + * + * @author Franz-Josef Elmer + */ +@JsonObject("dto.service.search.ServiceSearchCriteria") +public class ServiceSearchCriteria extends AbstractObjectSearchCriteria<IServiceId> +{ + private static final long serialVersionUID = 1L; + + public ServiceSearchCriteria() + { + } + + public CodeSearchCriteria withCode() + { + return with(new CodeSearchCriteria()); + } + + @Override + protected SearchCriteriaToStringBuilder createBuilder() + { + SearchCriteriaToStringBuilder builder = super.createBuilder(); + builder.setName("SERVICE"); + return builder; + } +} diff --git a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/plugin/IServiceExecutor.java b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/plugin/IServiceExecutor.java index d9e30af0b75f878a77cf0c8b536c7677e3a5cfe5..a4e6cd8c0c8c23ce3181c1b283cc329df42296f0 100644 --- a/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/plugin/IServiceExecutor.java +++ b/openbis_api/source/java/ch/ethz/sis/openbis/generic/as/api/v3/plugin/IServiceExecutor.java @@ -29,5 +29,5 @@ import ch.ethz.sis.openbis.generic.as.api.v3.plugin.context.ServiceContext; */ public interface IServiceExecutor { - public Serializable executeService(Map<String, String> parameters, ServiceContext context); + public Serializable executeService(Map<String, Serializable> parameters, ServiceContext context); }