diff --git a/src/main/java/org/openepics/names/repository/IDeviceGroupRepository.java b/src/main/java/org/openepics/names/repository/IDeviceGroupRepository.java index 703f3e3bf4d66b283ca2134c0665ae65dbb72511..57384ae8a3ceb29994b416d34df7847a18c6074b 100644 --- a/src/main/java/org/openepics/names/repository/IDeviceGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/IDeviceGroupRepository.java @@ -60,4 +60,7 @@ public interface IDeviceGroupRepository extends JpaRepository<DeviceGroup, Long> @Query("FROM DeviceGroup dg WHERE dg.latest = true AND dg.deleted = false AND dg.parentUuid = ?1") List<DeviceGroup> findLatestNotDeletedByParent(String uuid); + @Query("FROM DeviceGroup dg WHERE dg.uuid = ?1 AND dg.id < ?2 ORDER BY dg.id DESC") + List<DeviceGroup> findPreviousByUuidAndId(String uuid, Long id); + } diff --git a/src/main/java/org/openepics/names/repository/IDeviceTypeRepository.java b/src/main/java/org/openepics/names/repository/IDeviceTypeRepository.java index b2559d4eb5253256efa52316652249b49b3e489b..1b641d281d0a69b7fc7320bafb4d5b3fcd3fbffb 100644 --- a/src/main/java/org/openepics/names/repository/IDeviceTypeRepository.java +++ b/src/main/java/org/openepics/names/repository/IDeviceTypeRepository.java @@ -60,4 +60,7 @@ public interface IDeviceTypeRepository extends JpaRepository<DeviceType, Long> { @Query("FROM DeviceType dt WHERE dt.latest = true AND dt.deleted = false AND dt.parentUuid = ?1") List<DeviceType> findLatestNotDeletedByParent(String uuid); + @Query("FROM DeviceType dt WHERE dt.uuid = ?1 AND dt.id < ?2 ORDER BY dt.id DESC") + List<DeviceType> findPreviousByUuidAndId(String uuid, Long id); + } diff --git a/src/main/java/org/openepics/names/repository/IDisciplineRepository.java b/src/main/java/org/openepics/names/repository/IDisciplineRepository.java index 835cd4ac2b4d41f65465f4ab9ffa20bd8a822663..2338f83c5d106801f30b4d886a0a1a1d922e9e95 100644 --- a/src/main/java/org/openepics/names/repository/IDisciplineRepository.java +++ b/src/main/java/org/openepics/names/repository/IDisciplineRepository.java @@ -54,4 +54,7 @@ public interface IDisciplineRepository extends JpaRepository<Discipline, Long> { @Query("FROM Discipline di WHERE di.latest = true AND di.deleted = false") List<Discipline> findLatestNotDeleted(); + @Query("FROM Discipline di WHERE di.uuid = ?1 AND di.id < ?2 ORDER BY di.id DESC") + List<Discipline> findPreviousByUuidAndId(String uuid, Long id); + } diff --git a/src/main/java/org/openepics/names/repository/INameRepository.java b/src/main/java/org/openepics/names/repository/INameRepository.java index 3bb4025a8203f0126af600b3a40fdca3b0740c33..1568efd3575e6581a0b19014f5f28314d1f659bc 100644 --- a/src/main/java/org/openepics/names/repository/INameRepository.java +++ b/src/main/java/org/openepics/names/repository/INameRepository.java @@ -18,6 +18,7 @@ package org.openepics.names.repository; +import java.util.Date; import java.util.List; import org.openepics.names.repository.model.Name; @@ -48,6 +49,13 @@ public interface INameRepository extends JpaRepository<Name, Long> { @Query("FROM Name n WHERE n.latest = true AND n.deleted = false") List<Name> findLatestNotDeleted(); + @Query("SELECT n FROM Name n, SystemGroup sg " + + "WHERE n.latest = true " + + "AND sg.uuid = n.systemgroupUuid " + + "AND sg.latest = true " + + "AND sg.uuid = ?1") + List<Name> findLatestBySystemGroupUuid(String uuid); + @Query("SELECT n FROM Name n, SystemGroup sg " + "WHERE n.latest = true " + "AND sg.uuid = n.systemgroupUuid " @@ -55,6 +63,13 @@ public interface INameRepository extends JpaRepository<Name, Long> { + "AND sg.mnemonic = ?1") List<Name> findLatestBySystemGroupMnemonic(String mnemonic); + @Query("SELECT n FROM Name n, System sys " + + "WHERE n.latest = true " + + "AND sys.uuid = n.systemUuid " + + "AND sys.latest = true " + + "AND sys.uuid = ?1") + List<Name> findLatestBySystemUuid(String uuid); + @Query("SELECT n FROM Name n, System sys " + "WHERE n.latest = true " + "AND sys.uuid = n.systemUuid " @@ -62,6 +77,15 @@ public interface INameRepository extends JpaRepository<Name, Long> { + "AND sys.mnemonic = ?1") List<Name> findLatestBySystemMnemonic(String mnemonic); + @Query("SELECT n FROM Name n, Subsystem sub, System sys " + + "WHERE n.latest = true " + + "AND sub.uuid = n.subsystemUuid " + + "AND sub.latest = true " + + "AND sys.uuid = sub.parentUuid " + + "AND sys.latest = true " + + "AND sys.uuid = ?1") + List<Name> findLatestBySystemUuidThroughSubsystem(String uuid); + @Query("SELECT n FROM Name n, Subsystem sub, System sys " + "WHERE n.latest = true " + "AND sub.uuid = n.subsystemUuid " @@ -71,6 +95,13 @@ public interface INameRepository extends JpaRepository<Name, Long> { + "AND sys.mnemonic = ?1") List<Name> findLatestBySystemMnemonicThroughSubsystem(String mnemonic); + @Query("SELECT n FROM Name n, Subsystem sub " + + "WHERE n.latest = true " + + "AND sub.uuid = n.subsystemUuid " + + "AND sub.latest = true " + + "AND sub.uuid = ?1") + List<Name> findLatestBySubsystemUuid(String uuid); + @Query("SELECT n FROM Name n, Subsystem sub " + "WHERE n.latest = true " + "AND sub.uuid = n.subsystemUuid " @@ -78,6 +109,17 @@ public interface INameRepository extends JpaRepository<Name, Long> { + "AND sub.mnemonic = ?1") List<Name> findLatestBySubsystemMnemonic(String mnemonic); + @Query("SELECT n FROM Name n, DeviceType dt, DeviceGroup dg, Discipline di " + + "WHERE n.latest = true " + + "AND dt.uuid = n.devicetypeUuid " + + "AND dt.latest = true " + + "AND dg.uuid = dt.parentUuid " + + "AND dg.latest = true " + + "AND di.uuid = dg.parentUuid " + + "AND di.latest = true " + + "AND di.uuid = ?1") + List<Name> findLatestByDisciplineUuid(String uuid); + @Query("SELECT n FROM Name n, DeviceType dt, DeviceGroup dg, Discipline di " + "WHERE n.latest = true " + "AND dt.uuid = n.devicetypeUuid " @@ -89,6 +131,13 @@ public interface INameRepository extends JpaRepository<Name, Long> { + "AND di.mnemonic = ?1") List<Name> findLatestByDisciplineMnemonic(String mnemonic); + @Query("SELECT n FROM Name n, DeviceType dt " + + "WHERE n.latest = true " + + "AND dt.uuid = n.devicetypeUuid " + + "AND dt.latest = true " + + "AND dt.uuid = ?1") + List<Name> findLatestByDeviceTypeUuid(String uuid); + @Query("SELECT n FROM Name n, DeviceType dt " + "WHERE n.latest = true " + "AND dt.uuid = n.devicetypeUuid " @@ -96,4 +145,7 @@ public interface INameRepository extends JpaRepository<Name, Long> { + "AND dt.mnemonic = ?1") List<Name> findLatestByDeviceTypeMnemonic(String mnemonic); + @Query("FROM Name n WHERE n.requested >= ?1 AND n.requested <= ?2") + List<Name> findByRequestedBetween(Date from, Date to); + } diff --git a/src/main/java/org/openepics/names/repository/ISubsystemRepository.java b/src/main/java/org/openepics/names/repository/ISubsystemRepository.java index a60e894bfd24bc9c9518e64930f74fc3cd53993e..d0f5f6a5608c1e8bf77556d17e6e7e24d4f6746d 100644 --- a/src/main/java/org/openepics/names/repository/ISubsystemRepository.java +++ b/src/main/java/org/openepics/names/repository/ISubsystemRepository.java @@ -60,4 +60,7 @@ public interface ISubsystemRepository extends JpaRepository<Subsystem, Long> { @Query("FROM Subsystem sub WHERE sub.latest = true AND sub.deleted = false AND sub.parentUuid = ?1") List<Subsystem> findLatestNotDeletedByParent(String uuid); + @Query("FROM Subsystem sub WHERE sub.uuid = ?1 AND sub.id < ?2 ORDER BY sub.id DESC") + List<Subsystem> findPreviousByUuidAndId(String uuid, Long id); + } diff --git a/src/main/java/org/openepics/names/repository/ISystemGroupRepository.java b/src/main/java/org/openepics/names/repository/ISystemGroupRepository.java index f8c5d60b1dab6c187a5369dc6dd4525634dd5262..1d38003276879092936f2957fd8c6535b682e030 100644 --- a/src/main/java/org/openepics/names/repository/ISystemGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/ISystemGroupRepository.java @@ -54,4 +54,7 @@ public interface ISystemGroupRepository extends JpaRepository<SystemGroup, Long> @Query("FROM SystemGroup sg WHERE sg.latest = true AND sg.deleted = false") List<SystemGroup> findLatestNotDeleted(); + @Query("FROM SystemGroup sg WHERE sg.uuid = ?1 AND sg.id < ?2 ORDER BY sg.id DESC") + List<SystemGroup> findPreviousByUuidAndId(String uuid, Long id); + } diff --git a/src/main/java/org/openepics/names/repository/ISystemRepository.java b/src/main/java/org/openepics/names/repository/ISystemRepository.java index 4c0e96c8044183667ce750e071b2c89a08b97648..d066b3e8d8d3257057a4fc1fef53cb818c2f102f 100644 --- a/src/main/java/org/openepics/names/repository/ISystemRepository.java +++ b/src/main/java/org/openepics/names/repository/ISystemRepository.java @@ -60,4 +60,7 @@ public interface ISystemRepository extends JpaRepository<System, Long> { @Query("FROM System sys WHERE sys.latest = true AND sys.deleted = false AND sys.parentUuid = ?1") List<System> findLatestNotDeletedByParent(String uuid); + @Query("FROM System sys WHERE sys.uuid = ?1 AND sys.id < ?2 ORDER BY sys.id DESC") + List<System> findPreviousByUuidAndId(String uuid, Long id); + } diff --git a/src/main/java/org/openepics/names/service/DeviceGroupService.java b/src/main/java/org/openepics/names/service/DeviceGroupService.java index d3b22727905e3839ea6b7ea7cf6413f31154f1b3..3281ef282e7711311890578e9a0c33e2fdd99d3a 100644 --- a/src/main/java/org/openepics/names/service/DeviceGroupService.java +++ b/src/main/java/org/openepics/names/service/DeviceGroupService.java @@ -24,13 +24,16 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.openepics.names.repository.DeviceGroupRepository; +import org.openepics.names.repository.IDeviceGroupRepository; import org.openepics.names.repository.model.DeviceGroup; import org.openepics.names.rest.beans.Status; import org.openepics.names.rest.beans.element.StructureElement; import org.openepics.names.rest.beans.element.StructureElementCommand; import org.openepics.names.util.HolderSystemDeviceStructure; import org.openepics.names.util.StructureChoice; +import org.openepics.names.util.StructureCommand; import org.openepics.names.util.StructureElementUtil; +import org.openepics.names.util.StructureUtil; import org.openepics.names.util.ValidateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -45,13 +48,21 @@ import org.springframework.transaction.annotation.Transactional; @Service public class DeviceGroupService { + // note + // structurecommand + // cud - create update delete + // acr - approve cancel reject + private static final Logger LOGGER = Logger.getLogger(DeviceGroupService.class.getName()); + private IDeviceGroupRepository iDeviceGroupRepository; private DeviceGroupRepository deviceGroupRepository; @Autowired public DeviceGroupService( + IDeviceGroupRepository iDeviceGroupRepository, DeviceGroupRepository deviceGroupRepository) { + this.iDeviceGroupRepository = iDeviceGroupRepository; this.deviceGroupRepository = deviceGroupRepository; } @@ -67,7 +78,14 @@ public class DeviceGroupService { // find // approve - update structure to status APPROVED, latest to true // possibly validate that approved - // automatically create name when system structure is approved + // additional + // find out previous to find out what is approved - create update delete + // approve create + // automatically create name when system structure is approved + // condition on name and structure entry + // system structure should exist (uuid), one entry that is not deleted + // name should not exist (system structure mnemonic) + // within current transaction // return // structure element for approved structure @@ -97,6 +115,13 @@ public class DeviceGroupService { deviceGroup.setLatest(Boolean.TRUE); deviceGroupRepository.updateDeviceGroup(deviceGroup); + // additional + // find out previous + List<DeviceGroup> previouses = iDeviceGroupRepository.findPreviousByUuidAndId(uuid, deviceGroup.getId()); + StructureCommand structureCommandCUD = StructureUtil.getStructureCommandCUD(previouses, deviceGroup); + DeviceGroup previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null; + LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); + LOGGER.log(Level.FINE, "approveStructure, structureElement: {0}", structureElement); return StructureElementUtil.getStructureElementProcessed(deviceGroup, holder, StructureChoice.STRUCTURE); } diff --git a/src/main/java/org/openepics/names/service/DeviceTypeService.java b/src/main/java/org/openepics/names/service/DeviceTypeService.java index 7f12429c159af2a9e65a276cc00ec0bb9638899f..e90de7fda81e62471965954e198f91310fd0a66e 100644 --- a/src/main/java/org/openepics/names/service/DeviceTypeService.java +++ b/src/main/java/org/openepics/names/service/DeviceTypeService.java @@ -24,13 +24,16 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.openepics.names.repository.DeviceTypeRepository; +import org.openepics.names.repository.IDeviceTypeRepository; import org.openepics.names.repository.model.DeviceType; import org.openepics.names.rest.beans.Status; import org.openepics.names.rest.beans.element.StructureElement; import org.openepics.names.rest.beans.element.StructureElementCommand; import org.openepics.names.util.HolderSystemDeviceStructure; import org.openepics.names.util.StructureChoice; +import org.openepics.names.util.StructureCommand; import org.openepics.names.util.StructureElementUtil; +import org.openepics.names.util.StructureUtil; import org.openepics.names.util.ValidateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -45,13 +48,21 @@ import org.springframework.transaction.annotation.Transactional; @Service public class DeviceTypeService { + // note + // structurecommand + // cud - create update delete + // acr - approve cancel reject + private static final Logger LOGGER = Logger.getLogger(DeviceTypeService.class.getName()); + private IDeviceTypeRepository iDeviceTypeRepository; private DeviceTypeRepository deviceTypeRepository; @Autowired public DeviceTypeService( + IDeviceTypeRepository iDeviceTypeRepository, DeviceTypeRepository deviceTypeRepository) { + this.iDeviceTypeRepository = iDeviceTypeRepository; this.deviceTypeRepository = deviceTypeRepository; } @@ -67,7 +78,14 @@ public class DeviceTypeService { // find // approve - update structure to status APPROVED, latest to true // possibly validate that approved - // automatically create name when system structure is approved + // additional + // find out previous to find out what is approved - create update delete + // approve create + // automatically create name when system structure is approved + // condition on name and structure entry + // system structure should exist (uuid), one entry that is not deleted + // name should not exist (system structure mnemonic) + // within current transaction // return // structure element for approved structure @@ -97,6 +115,13 @@ public class DeviceTypeService { deviceType.setLatest(Boolean.TRUE); deviceTypeRepository.updateDeviceType(deviceType); + // additional + // find out previous + List<DeviceType> previouses = iDeviceTypeRepository.findPreviousByUuidAndId(uuid, deviceType.getId()); + StructureCommand structureCommandCUD = StructureUtil.getStructureCommandCUD(previouses, deviceType); + DeviceType previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null; + LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); + LOGGER.log(Level.FINE, "approveStructure, structureElement: {0}", structureElement); return StructureElementUtil.getStructureElementProcessed(deviceType, holder, StructureChoice.STRUCTURE); } diff --git a/src/main/java/org/openepics/names/service/DisciplineService.java b/src/main/java/org/openepics/names/service/DisciplineService.java index b97c31e7b7796e41db628e7866d7b258ae5bea45..a3142e3a66bf3ed5cdd944de1ed5abb5023173c5 100644 --- a/src/main/java/org/openepics/names/service/DisciplineService.java +++ b/src/main/java/org/openepics/names/service/DisciplineService.java @@ -24,13 +24,16 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.openepics.names.repository.DisciplineRepository; +import org.openepics.names.repository.IDisciplineRepository; import org.openepics.names.repository.model.Discipline; import org.openepics.names.rest.beans.Status; import org.openepics.names.rest.beans.element.StructureElement; import org.openepics.names.rest.beans.element.StructureElementCommand; import org.openepics.names.util.HolderSystemDeviceStructure; import org.openepics.names.util.StructureChoice; +import org.openepics.names.util.StructureCommand; import org.openepics.names.util.StructureElementUtil; +import org.openepics.names.util.StructureUtil; import org.openepics.names.util.ValidateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -45,13 +48,21 @@ import org.springframework.transaction.annotation.Transactional; @Service public class DisciplineService { + // note + // structurecommand + // cud - create update delete + // acr - approve cancel reject + private static final Logger LOGGER = Logger.getLogger(DisciplineService.class.getName()); + private IDisciplineRepository iDisciplineRepository; private DisciplineRepository disciplineRepository; @Autowired public DisciplineService( + IDisciplineRepository iDisciplineRepository, DisciplineRepository disciplineRepository) { + this.iDisciplineRepository = iDisciplineRepository; this.disciplineRepository = disciplineRepository; } @@ -67,7 +78,14 @@ public class DisciplineService { // find // approve - update structure to status APPROVED, latest to true // possibly validate that approved - // automatically create name when system structure is approved + // additional + // find out previous to find out what is approved - create update delete + // approve create + // automatically create name when system structure is approved + // condition on name and structure entry + // system structure should exist (uuid), one entry that is not deleted + // name should not exist (system structure mnemonic) + // within current transaction // return // structure element for approved structure @@ -96,6 +114,13 @@ public class DisciplineService { discipline.setLatest(Boolean.TRUE); disciplineRepository.updateDiscipline(discipline); + // additional + // find out previous + List<Discipline> previouses = iDisciplineRepository.findPreviousByUuidAndId(uuid, discipline.getId()); + StructureCommand structureCommandCUD = StructureUtil.getStructureCommandCUD(previouses, discipline); + Discipline previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null; + LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); + LOGGER.log(Level.FINE, "approveStructure, structureElement: {0}", structureElement); return StructureElementUtil.getStructureElementProcessed(discipline, holder, StructureChoice.STRUCTURE); } diff --git a/src/main/java/org/openepics/names/service/NamesService.java b/src/main/java/org/openepics/names/service/NamesService.java index 2cfaeb3073a306561e07afc987e1adc5a5ba726a..d480eb14c7edd6fca8295383b8167cdbf7fbafc3 100644 --- a/src/main/java/org/openepics/names/service/NamesService.java +++ b/src/main/java/org/openepics/names/service/NamesService.java @@ -86,6 +86,8 @@ public class NamesService { // automatically not show names that do not come into play // = automatically exclude (approved and not latest) // otherwise refer to history + // namecommand + // cud - create update delete private static final Logger LOGGER = Logger.getLogger(NamesService.class.getName()); diff --git a/src/main/java/org/openepics/names/service/StructuresService.java b/src/main/java/org/openepics/names/service/StructuresService.java index a2eb45e327cf0ed22b94853e7bd16f3a1f8431ef..86b772f45c11fd60ba25984bb08fa19510860939 100644 --- a/src/main/java/org/openepics/names/service/StructuresService.java +++ b/src/main/java/org/openepics/names/service/StructuresService.java @@ -82,6 +82,9 @@ public class StructuresService { // automatically not show structures that do not come into play // = automatically exclude (approved and not latest) // otherwise refer to history + // structurecommand + // cud - create update delete + // acr - approve cancel reject private static final Logger LOGGER = Logger.getLogger(StructuresService.class.getName()); @@ -1053,7 +1056,14 @@ public class StructuresService { // find // approve - update structure to status APPROVED, latest to true // possibly validate that approved - // automatically create name when system structure is approved + // additional + // find out previous to find out what is approved - create update delete + // approve create + // automatically create name when system structure is approved + // condition on name and structure entry + // system structure should exist (uuid), one entry that is not deleted + // name should not exist (system structure mnemonic) + // within current transaction // add to list // return // structure elements for approved structures diff --git a/src/main/java/org/openepics/names/service/SubsystemService.java b/src/main/java/org/openepics/names/service/SubsystemService.java index e6d73a4079ef419209cc7d9f5b7891d5c1e6b05c..c2e253db8b44a991fa19b866b2a8071421c8d7f0 100644 --- a/src/main/java/org/openepics/names/service/SubsystemService.java +++ b/src/main/java/org/openepics/names/service/SubsystemService.java @@ -24,6 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.lang3.StringUtils; +import org.openepics.names.repository.ISubsystemRepository; import org.openepics.names.repository.SubsystemRepository; import org.openepics.names.repository.model.Subsystem; import org.openepics.names.rest.beans.Status; @@ -33,6 +34,7 @@ import org.openepics.names.rest.beans.element.StructureElement; import org.openepics.names.rest.beans.element.StructureElementCommand; import org.openepics.names.util.HolderSystemDeviceStructure; import org.openepics.names.util.StructureChoice; +import org.openepics.names.util.StructureCommand; import org.openepics.names.util.StructureElementUtil; import org.openepics.names.util.StructureUtil; import org.openepics.names.util.ValidateUtil; @@ -49,15 +51,23 @@ import org.springframework.transaction.annotation.Transactional; @Service public class SubsystemService { + // note + // structurecommand + // cud - create update delete + // acr - approve cancel reject + private static final Logger LOGGER = Logger.getLogger(SubsystemService.class.getName()); + private ISubsystemRepository iSubsystemRepository; private SubsystemRepository subsystemRepository; private NamesService namesService; @Autowired public SubsystemService( + ISubsystemRepository iSubsystemRepository, SubsystemRepository subsystemRepository, NamesService namesService) { + this.iSubsystemRepository = iSubsystemRepository; this.subsystemRepository = subsystemRepository; this.namesService = namesService; } @@ -74,7 +84,14 @@ public class SubsystemService { // find // approve - update structure to status APPROVED, latest to true // possibly validate that approved - // automatically create name when system structure is approved + // additional + // find out previous to find out what is approved - create update delete + // approve create + // automatically create name when system structure is approved + // condition on name and structure entry + // system structure should exist (uuid), one entry that is not deleted + // name should not exist (system structure mnemonic) + // within current transaction // return // structure element for approved structure @@ -104,17 +121,21 @@ public class SubsystemService { subsystem.setLatest(Boolean.TRUE); subsystemRepository.updateSubsystem(subsystem); - // automatically create name when system structure is approved (after create) - // condition on name and structure entry - // system structure should exist (uuid), one entry that is not deleted - // name should not exist (system structure mnemonic) - // create name within current transaction - subsystems = subsystemRepository.readSubsystems(null, Boolean.FALSE, uuid, null, null, null, null, null, null); - boolean existsName = !StringUtils.isEmpty(subsystem.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(subsystem, holder)); - if (ValidateUtil.isSize(subsystems, 1) && !existsName) { - NameElementCommand nameElement = new NameElementCommand(null, subsystem.getUuid(), null, null, StructuresService.SYSTEM_STRUCTURE_ONLY, null); - NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); - LOGGER.log(Level.FINE, "approveStructures, nameElement created, name: {0}", createdNameElement.getName()); + // additional + // find out previous + List<Subsystem> previouses = iSubsystemRepository.findPreviousByUuidAndId(uuid, subsystem.getId()); + StructureCommand structureCommandCUD = StructureUtil.getStructureCommandCUD(previouses, subsystem); + Subsystem previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null; + LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); + + // approve create + if (StructureCommand.CREATE.equals(structureCommandCUD)) { + boolean existsName = !StringUtils.isEmpty(subsystem.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(subsystem, holder)); + if (!existsName) { + NameElementCommand nameElement = new NameElementCommand(null, subsystem.getUuid(), null, null, StructuresService.SYSTEM_STRUCTURE_ONLY, null); + NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); + LOGGER.log(Level.FINE, "approveStructures, nameElement created, name: {0}", createdNameElement.getName()); + } } LOGGER.log(Level.FINE, "approveStructure, structureElement: {0}", structureElement); diff --git a/src/main/java/org/openepics/names/service/SystemGroupService.java b/src/main/java/org/openepics/names/service/SystemGroupService.java index cc829e0ee2d862837a9c4921275edab554871a45..21accef029e1d7642843de012e6104b2faa7184f 100644 --- a/src/main/java/org/openepics/names/service/SystemGroupService.java +++ b/src/main/java/org/openepics/names/service/SystemGroupService.java @@ -24,6 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.lang3.StringUtils; +import org.openepics.names.repository.ISystemGroupRepository; import org.openepics.names.repository.SystemGroupRepository; import org.openepics.names.repository.model.SystemGroup; import org.openepics.names.rest.beans.Status; @@ -33,6 +34,7 @@ import org.openepics.names.rest.beans.element.StructureElement; import org.openepics.names.rest.beans.element.StructureElementCommand; import org.openepics.names.util.HolderSystemDeviceStructure; import org.openepics.names.util.StructureChoice; +import org.openepics.names.util.StructureCommand; import org.openepics.names.util.StructureElementUtil; import org.openepics.names.util.StructureUtil; import org.openepics.names.util.ValidateUtil; @@ -49,15 +51,23 @@ import org.springframework.transaction.annotation.Transactional; @Service public class SystemGroupService { + // note + // structurecommand + // cud - create update delete + // acr - approve cancel reject + private static final Logger LOGGER = Logger.getLogger(SystemGroupService.class.getName()); + private ISystemGroupRepository iSystemGroupRepository; private SystemGroupRepository systemGroupRepository; private NamesService namesService; @Autowired public SystemGroupService( + ISystemGroupRepository iSystemGroupRepository, SystemGroupRepository systemGroupRepository, NamesService namesService) { + this.iSystemGroupRepository = iSystemGroupRepository; this.systemGroupRepository = systemGroupRepository; this.namesService = namesService; } @@ -74,7 +84,14 @@ public class SystemGroupService { // find // approve - update structure to status APPROVED, latest to true // possibly validate that approved - // automatically create name when system structure is approved + // additional + // find out previous to find out what is approved - create update delete + // approve create + // automatically create name when system structure is approved + // condition on name and structure entry + // system structure should exist (uuid), one entry that is not deleted + // name should not exist (system structure mnemonic) + // within current transaction // return // structure element for approved structure @@ -104,17 +121,22 @@ public class SystemGroupService { systemGroup.setLatest(Boolean.TRUE); systemGroupRepository.updateSystemGroup(systemGroup); - // automatically create name when system structure is approved (after create) - // condition on name and structure entry - // system structure should exist (uuid), one entry that is not deleted - // name should not exist (system structure mnemonic) - // create name within current transaction - systemGroups = systemGroupRepository.readSystemGroups(null, Boolean.FALSE, uuid, null, null, null, null, null); - boolean existsName = !StringUtils.isEmpty(systemGroup.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(systemGroup, holder)); - if (ValidateUtil.isSize(systemGroups, 1) && !existsName) { - NameElementCommand nameElement = new NameElementCommand(null, systemGroup.getUuid(), null, null, StructuresService.SYSTEM_STRUCTURE_ONLY, null); - NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); - LOGGER.log(Level.FINE, "approveStructure, nameElement created, name: {0}", createdNameElement.getName()); + // additional + // find out previous + List<SystemGroup> previouses = iSystemGroupRepository.findPreviousByUuidAndId(uuid, systemGroup.getId()); + StructureCommand structureCommandCUD = StructureUtil.getStructureCommandCUD(previouses, systemGroup); + SystemGroup previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null; + LOGGER.log(Level.INFO, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); + + // approve create + if (StructureCommand.CREATE.equals(structureCommandCUD)) { + boolean existsName = !StringUtils.isEmpty(systemGroup.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(systemGroup, holder)); + if (!existsName) { + NameElementCommand nameElement = new NameElementCommand(null, systemGroup.getUuid(), null, null, StructuresService.SYSTEM_STRUCTURE_ONLY, null); + NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); + LOGGER.log(Level.FINE, "approveStructure, nameElement created, name: {0}", createdNameElement.getName()); + } + } LOGGER.log(Level.FINE, "approveStructure, structureElement: {0}", structureElement); diff --git a/src/main/java/org/openepics/names/service/SystemService.java b/src/main/java/org/openepics/names/service/SystemService.java index 870dc869dea3748eb725e66a6bf229d4ec3a739e..6366b055174d947dfea11bea08754a43381ec5cc 100644 --- a/src/main/java/org/openepics/names/service/SystemService.java +++ b/src/main/java/org/openepics/names/service/SystemService.java @@ -24,6 +24,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.commons.lang3.StringUtils; +import org.openepics.names.repository.ISystemRepository; import org.openepics.names.repository.SystemRepository; import org.openepics.names.repository.model.System; import org.openepics.names.rest.beans.Status; @@ -33,6 +34,7 @@ import org.openepics.names.rest.beans.element.StructureElement; import org.openepics.names.rest.beans.element.StructureElementCommand; import org.openepics.names.util.HolderSystemDeviceStructure; import org.openepics.names.util.StructureChoice; +import org.openepics.names.util.StructureCommand; import org.openepics.names.util.StructureElementUtil; import org.openepics.names.util.StructureUtil; import org.openepics.names.util.ValidateUtil; @@ -49,15 +51,23 @@ import org.springframework.transaction.annotation.Transactional; @Service public class SystemService { + // note + // structurecommand + // cud - create update delete + // acr - approve cancel reject + private static final Logger LOGGER = Logger.getLogger(SystemService.class.getName()); + private ISystemRepository iSystemRepository; private SystemRepository systemRepository; private NamesService namesService; @Autowired public SystemService( + ISystemRepository iSystemRepository, SystemRepository systemRepository, NamesService namesService) { + this.iSystemRepository = iSystemRepository; this.systemRepository = systemRepository; this.namesService = namesService; } @@ -74,7 +84,14 @@ public class SystemService { // find // approve - update structure to status APPROVED, latest to true // possibly validate that approved - // automatically create name when system structure is approved + // additional + // find out previous to find out what is approved - create update delete + // approve create + // automatically create name when system structure is approved + // condition on name and structure entry + // system structure should exist (uuid), one entry that is not deleted + // name should not exist (system structure mnemonic) + // within current transaction // return // structure element for approved structure @@ -104,17 +121,22 @@ public class SystemService { system.setLatest(Boolean.TRUE); systemRepository.updateSystem(system); - // automatically create name when system structure is approved (after create) - // condition on name and structure entry - // system structure should exist (uuid), one entry that is not deleted - // name should not exist (system structure mnemonic) - // create name within current transaction - systems = systemRepository.readSystems(null, Boolean.FALSE, uuid, null, null, null, null, null, null); - boolean existsName = !StringUtils.isEmpty(system.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(system, holder)); - if (ValidateUtil.isSize(systems, 1) && !existsName) { - NameElementCommand nameElement = new NameElementCommand(null, system.getUuid(), null, null, StructuresService.SYSTEM_STRUCTURE_ONLY, null); - NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); - LOGGER.log(Level.FINE, "approveStructure, nameElement created, name: {0}", createdNameElement.getName()); + // additional + // find out previous + List<System> previouses = iSystemRepository.findPreviousByUuidAndId(uuid, system.getId()); + StructureCommand structureCommandCUD = StructureUtil.getStructureCommandCUD(previouses, system); + System previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null; + LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); + + // approve create + if (StructureCommand.CREATE.equals(structureCommandCUD)) { + boolean existsName = !StringUtils.isEmpty(system.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(system, holder)); + if (!existsName) { + NameElementCommand nameElement = new NameElementCommand(null, system.getUuid(), null, null, StructuresService.SYSTEM_STRUCTURE_ONLY, null); + NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); + LOGGER.log(Level.FINE, "approveStructure, nameElement created, name: {0}", createdNameElement.getName()); + } + } LOGGER.log(Level.FINE, "approveStructure, structureElement: {0}", structureElement); diff --git a/src/main/java/org/openepics/names/util/StructureUtil.java b/src/main/java/org/openepics/names/util/StructureUtil.java index d79cd5b23aa10ed338c0e71aa411be17c869844c..c5a6dfa1eae8510b1e175db6eba6d42c6e67fb1a 100644 --- a/src/main/java/org/openepics/names/util/StructureUtil.java +++ b/src/main/java/org/openepics/names/util/StructureUtil.java @@ -27,6 +27,7 @@ import org.apache.commons.lang3.StringUtils; import org.openepics.names.repository.model.DeviceGroup; import org.openepics.names.repository.model.DeviceType; import org.openepics.names.repository.model.Discipline; +import org.openepics.names.repository.model.Structure; import org.openepics.names.repository.model.Subsystem; import org.openepics.names.repository.model.System; import org.openepics.names.repository.model.SystemGroup; @@ -277,6 +278,24 @@ public class StructureUtil { // -------------------------------------------------- + /** + * Highly specialized method to find out kind of structure command (create, update, delete). + * Intended to be used for services purposes, including notification, in approve, cancel, reject operations. + * + * @param previous list of previous structures + * @param structure structure + * @return structure command + */ + public static StructureCommand getStructureCommandCUD(List<?> previous, Structure structure) { + if (previous == null || previous.isEmpty()) { + return StructureCommand.CREATE; + } else if (structure != null && Boolean.TRUE.equals(structure.isDeleted())) { + return StructureCommand.DELETE; + } else { + return StructureCommand.UPDATE; + } + } + protected static List<UUID> listSystemGroup2Uuid(List<SystemGroup> systemGroups) { final List<UUID> listUuid = Lists.newArrayList(); for (SystemGroup systemGroup : systemGroups) {