From add6a343062b623e3c76148ff37957190d5473ac Mon Sep 17 00:00:00 2001 From: felmer <franz-josef.elmer@id.ethz.ch> Date: Thu, 31 Jan 2019 08:04:37 +0100 Subject: [PATCH] SSDM-7204: harvester: update registrator and registration timestamp for materials --- .../synchronizer/EntitySynchronizer.java | 79 +++++++++++-------- .../synchronizer/IHarvesterQuery.java | 8 +- .../synchronizer/MaterialTypeRecord.java | 28 +++++++ .../synchronizer/RegistrationDTO.java | 12 +++ 4 files changed, 93 insertions(+), 34 deletions(-) create mode 100644 datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MaterialTypeRecord.java diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/EntitySynchronizer.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/EntitySynchronizer.java index 27acb973269..960fbaf0005 100644 --- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/EntitySynchronizer.java +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/EntitySynchronizer.java @@ -271,12 +271,20 @@ public class EntitySynchronizer Map<String, Long> userTechIdsByUserId, Monitor monitor) { monitor.log("update " + materials.size() + " materials"); + List<MaterialTypeRecord> listAllMaterialTypes = query.listAllMaterialTypes(); + Map<String, Long> materialTypeIdsByCode = new HashMap<>(); + for (MaterialTypeRecord materialTypeRecord : listAllMaterialTypes) + { + materialTypeIdsByCode.put(materialTypeRecord.code, materialTypeRecord.id); + } List<RegistrationDTO> registrations = new ArrayList<>(); for (IncomingMaterial incomingMaterial : materials) { -// addRegistration(registrations, incomingMaterial.getPermID(), incomingMaterial, userTechIdsByUserId); + NewMaterialWithType material = incomingMaterial.getMaterial(); + Long typeId = materialTypeIdsByCode.get(material.getType()); + addRegistration(registrations, material.getCode(), typeId, incomingMaterial, userTechIdsByUserId); } - query.updateProjectRegistrations(registrations); + query.updateMaterialRegistrations(registrations); } private void updateProjects(Collection<IncomingProject> projects, IHarvesterQuery query, @@ -290,7 +298,7 @@ public class EntitySynchronizer } query.updateProjectRegistrations(registrations); } - + private void updateExperiments(Collection<IncomingExperiment> experiments, IHarvesterQuery query, Map<String, Long> userTechIdsByUserId, Monitor monitor) { @@ -345,41 +353,47 @@ public class EntitySynchronizer { monitor.log("update " + dataSets.size() + " data sets"); BatchOperationExecutor.executeInBatches(new IBatchOperation<IncomingDataSet>() - { - @Override - public List<IncomingDataSet> getAllEntities() { - return new ArrayList<>(dataSets); - } - - @Override - public void execute(List<IncomingDataSet> dataSets) - { - List<RegistrationDTO> registrations = new ArrayList<>(); - for (IncomingDataSet incomingDataSet : dataSets) + @Override + public List<IncomingDataSet> getAllEntities() { - addRegistration(registrations, incomingDataSet.getFullDataSet().getMetadataCreation().getCode(), - incomingDataSet, userTechIdsByUserId); + return new ArrayList<>(dataSets); } - query.updateDataSetRegistrations(registrations); - } - - @Override - public String getEntityName() - { - return "data set"; - } - - @Override - public String getOperationName() - { - return "update registration"; - } - }); + + @Override + public void execute(List<IncomingDataSet> dataSets) + { + List<RegistrationDTO> registrations = new ArrayList<>(); + for (IncomingDataSet incomingDataSet : dataSets) + { + addRegistration(registrations, incomingDataSet.getFullDataSet().getMetadataCreation().getCode(), + incomingDataSet, userTechIdsByUserId); + } + query.updateDataSetRegistrations(registrations); + } + + @Override + public String getEntityName() + { + return "data set"; + } + + @Override + public String getOperationName() + { + return "update registration"; + } + }); } - + private void addRegistration(List<RegistrationDTO> registrations, String permID, AbstractRegistrationHolder entity, Map<String, Long> userTechIdsByUserId) + { + addRegistration(registrations, permID, null, entity, userTechIdsByUserId); + } + + private void addRegistration(List<RegistrationDTO> registrations, String permID, Long typeId, AbstractRegistrationHolder entity, + Map<String, Long> userTechIdsByUserId) { String registrator = entity.getRegistrator(); Long registratorId = userTechIdsByUserId.get(registrator); @@ -387,6 +401,7 @@ public class EntitySynchronizer { RegistrationDTO registration = new RegistrationDTO(); registration.setPermId(permID); + registration.setTypeId(typeId); registration.setRegistrationTimestamp(entity.getRegistrationTimestamp()); registration.setRegistratorId(registratorId); registrations.add(registration); diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/IHarvesterQuery.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/IHarvesterQuery.java index a56bbaa8cb7..f6c790f9e84 100644 --- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/IHarvesterQuery.java +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/IHarvesterQuery.java @@ -34,8 +34,12 @@ public interface IHarvesterQuery extends BaseQuery @Select("select id,user_id as userId from persons") public List<PersonRecord> listAllUsers(); -// @Update(sql = "update materials " + UPDATE2, batchUpdate = true) -// public void updateMaterialRegistrations(List<RegistrationDTO> registrations); + @Select("select id,code from material_types") + public List<MaterialTypeRecord> listAllMaterialTypes(); + + @Update(sql = "update materials set registration_timestamp = ?{1.registrationTimestamp}, pers_id_registerer = ?{1.registratorId} " + + "where code = ?{1.permId} and maty_id = ?{1.typeId}", batchUpdate = true) + public void updateMaterialRegistrations(List<RegistrationDTO> registrations); @Update(sql = "update projects " + UPDATE2, batchUpdate = true) public void updateProjectRegistrations(List<RegistrationDTO> registrations); diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MaterialTypeRecord.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MaterialTypeRecord.java new file mode 100644 index 00000000000..5bfc4625f94 --- /dev/null +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/MaterialTypeRecord.java @@ -0,0 +1,28 @@ +/* + * Copyright 2019 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.dss.plugins.sync.harvester.synchronizer; + +/** + * @author Franz-Josef Elmer + * + */ +public class MaterialTypeRecord +{ + public long id; + public String code; + +} diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/RegistrationDTO.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/RegistrationDTO.java index 8aa31fe1a2d..de5777cfe3e 100644 --- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/RegistrationDTO.java +++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/RegistrationDTO.java @@ -24,6 +24,8 @@ import java.util.Date; public class RegistrationDTO { private String permId; + + private Long typeId; private Date registrationTimestamp; @@ -39,6 +41,16 @@ public class RegistrationDTO this.permId = permId; } + public Long getTypeId() + { + return typeId; + } + + public void setTypeId(Long typeId) + { + this.typeId = typeId; + } + public Date getRegistrationTimestamp() { return registrationTimestamp; -- GitLab