diff --git a/src/main/java/org/openepics/names/service/DeviceGroupService.java b/src/main/java/org/openepics/names/service/DeviceGroupService.java index 3281ef282e7711311890578e9a0c33e2fdd99d3a..1203b1fd5dbc352817b9a260c9e2938ef247bc08 100644 --- a/src/main/java/org/openepics/names/service/DeviceGroupService.java +++ b/src/main/java/org/openepics/names/service/DeviceGroupService.java @@ -61,7 +61,8 @@ public class DeviceGroupService { @Autowired public DeviceGroupService( IDeviceGroupRepository iDeviceGroupRepository, - DeviceGroupRepository deviceGroupRepository) { + DeviceGroupRepository deviceGroupRepository, + NamesService namesService) { this.iDeviceGroupRepository = iDeviceGroupRepository; this.deviceGroupRepository = deviceGroupRepository; } @@ -86,6 +87,10 @@ public class DeviceGroupService { // system structure should exist (uuid), one entry that is not deleted // name should not exist (system structure mnemonic) // within current transaction + // approve update + // update related names + // for different mnemonic + // not for device group // return // structure element for approved structure diff --git a/src/main/java/org/openepics/names/service/DeviceTypeService.java b/src/main/java/org/openepics/names/service/DeviceTypeService.java index e90de7fda81e62471965954e198f91310fd0a66e..df0e34a1e06734dbdec2dd8d15a5bce6f4d48e73 100644 --- a/src/main/java/org/openepics/names/service/DeviceTypeService.java +++ b/src/main/java/org/openepics/names/service/DeviceTypeService.java @@ -57,13 +57,16 @@ public class DeviceTypeService { private IDeviceTypeRepository iDeviceTypeRepository; private DeviceTypeRepository deviceTypeRepository; + private NamesService namesService; @Autowired public DeviceTypeService( IDeviceTypeRepository iDeviceTypeRepository, - DeviceTypeRepository deviceTypeRepository) { + DeviceTypeRepository deviceTypeRepository, + NamesService namesService) { this.iDeviceTypeRepository = iDeviceTypeRepository; this.deviceTypeRepository = deviceTypeRepository; + this.namesService = namesService; } @Transactional(propagation = Propagation.MANDATORY) @@ -86,6 +89,10 @@ public class DeviceTypeService { // system structure should exist (uuid), one entry that is not deleted // name should not exist (system structure mnemonic) // within current transaction + // approve update + // update related names + // for different mnemonic + // not for device group // return // structure element for approved structure @@ -122,6 +129,11 @@ public class DeviceTypeService { DeviceType previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null; LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); + // approve update + if (StructureCommand.UPDATE.equals(structureCommandCUD)) { + namesService.updateNames(previous, deviceType); + } + 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 a3142e3a66bf3ed5cdd944de1ed5abb5023173c5..31c84067dc0db53ed67fa04c3e1008e8119f30f8 100644 --- a/src/main/java/org/openepics/names/service/DisciplineService.java +++ b/src/main/java/org/openepics/names/service/DisciplineService.java @@ -57,13 +57,16 @@ public class DisciplineService { private IDisciplineRepository iDisciplineRepository; private DisciplineRepository disciplineRepository; + private NamesService namesService; @Autowired public DisciplineService( IDisciplineRepository iDisciplineRepository, - DisciplineRepository disciplineRepository) { + DisciplineRepository disciplineRepository, + NamesService namesService) { this.iDisciplineRepository = iDisciplineRepository; this.disciplineRepository = disciplineRepository; + this.namesService = namesService; } @Transactional(propagation = Propagation.MANDATORY) @@ -86,6 +89,10 @@ public class DisciplineService { // system structure should exist (uuid), one entry that is not deleted // name should not exist (system structure mnemonic) // within current transaction + // approve update + // update related names + // for different mnemonic + // not for device group // return // structure element for approved structure @@ -121,6 +128,11 @@ public class DisciplineService { Discipline previous = previouses != null && !previouses.isEmpty() ? previouses.get(0) : null; LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); + // approve update + if (StructureCommand.UPDATE.equals(structureCommandCUD)) { + namesService.updateNames(previous, discipline); + } + 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 d480eb14c7edd6fca8295383b8167cdbf7fbafc3..df34b7730ba780203429bc4e6174b686054e4deb 100644 --- a/src/main/java/org/openepics/names/service/NamesService.java +++ b/src/main/java/org/openepics/names/service/NamesService.java @@ -24,6 +24,7 @@ import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; +import org.apache.commons.lang3.StringUtils; import org.openepics.names.repository.DeviceGroupRepository; import org.openepics.names.repository.DeviceTypeRepository; import org.openepics.names.repository.DisciplineRepository; @@ -42,6 +43,7 @@ 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.Name; +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; @@ -91,6 +93,8 @@ public class NamesService { private static final Logger LOGGER = Logger.getLogger(NamesService.class.getName()); + private static final String UPDATE_AFTER_APPROVE_STRUCTURE_CHANGE = "Update after APPROVE structure change"; + private EssNamingConvention namingConvention; private HolderIRepositories holderIRepositories; @@ -625,6 +629,111 @@ public class NamesService { return updatedNameElements; } + @Transactional(propagation = Propagation.MANDATORY) + public List<NameElement> updateNames(Structure previousStructure, Structure structure) { + // validation outside method + // transaction + // use active transaction or, if not available, create new + // do + // find out names referenced by structure + // not for device group + // sg, sys, sys-sub, sg:di-dt-idx, sys:di-dt-idx, sys-sub:di-dt-idx + // prepare name element commands + // update names + // re-calculate names + // return + // name elements for updated names + + List<NameElement> updatedNameElements = Lists.newArrayList(); + if (previousStructure != null + && structure != null + && !StringUtils.equals(structure.getMnemonic(), previousStructure.getMnemonic()) + && !StringUtils.isEmpty(structure.getMnemonic())) { + List<Name> names = null; + List<NameElementCommand> nameElements = Lists.newArrayList(); + UUID parentsystemstructure = null; + if (previousStructure instanceof SystemGroup && structure instanceof SystemGroup) { + // find + // prepare + names = holderIRepositories.getNameRepository().findLatestBySystemGroupUuid(structure.getUuid().toString()); + for (Name name : names) { + nameElements.add( + new NameElementCommand( + name.getUuid(), name.getSystemgroupUuid(), name.getDevicetypeUuid(), + name.getInstanceIndex(), name.getDescription(), UPDATE_AFTER_APPROVE_STRUCTURE_CHANGE)); + } + } else if (previousStructure instanceof System && structure instanceof System) { + // find + // prepare + names = holderIRepositories.getNameRepository().findLatestBySystemUuid(structure.getUuid().toString()); + for (Name name : names) { + nameElements.add( + new NameElementCommand( + name.getUuid(), name.getSystemUuid(), name.getDevicetypeUuid(), + name.getInstanceIndex(), name.getDescription(), UPDATE_AFTER_APPROVE_STRUCTURE_CHANGE)); + } + + names = holderIRepositories.getNameRepository().findLatestBySystemUuidThroughSubsystem(structure.getUuid().toString()); + for (Name name : names) { + nameElements.add( + new NameElementCommand( + name.getUuid(), name.getSubsystemUuid(), name.getDevicetypeUuid(), + name.getInstanceIndex(), name.getDescription(), UPDATE_AFTER_APPROVE_STRUCTURE_CHANGE)); + } + } else if (previousStructure instanceof Subsystem && structure instanceof Subsystem) { + // find + // prepare + names = holderIRepositories.getNameRepository().findLatestBySubsystemUuid(structure.getUuid().toString()); + for (Name name : names) { + nameElements.add( + new NameElementCommand( + name.getUuid(), name.getSubsystemUuid(), name.getDevicetypeUuid(), + name.getInstanceIndex(), name.getDescription(), UPDATE_AFTER_APPROVE_STRUCTURE_CHANGE)); + } + } else if (previousStructure instanceof Discipline && structure instanceof Discipline) { + // find + // prepare + names = holderIRepositories.getNameRepository().findLatestByDisciplineUuid(structure.getUuid().toString()); + for (Name name : names) { + parentsystemstructure = name.getSubsystemUuid() != null + ? name.getSubsystemUuid() + : name.getSystemUuid() != null + ? name.getSystemUuid() + : name.getSystemgroupUuid() != null + ? name.getSystemgroupUuid() + : null; + nameElements.add( + new NameElementCommand( + name.getUuid(), parentsystemstructure, name.getDevicetypeUuid(), + name.getInstanceIndex(), name.getDescription(), UPDATE_AFTER_APPROVE_STRUCTURE_CHANGE)); + } + } else if (previousStructure instanceof DeviceType && structure instanceof DeviceType) { + // find + // prepare + names = holderIRepositories.getNameRepository().findLatestByDeviceTypeUuid(structure.getUuid().toString()); + for (Name name : names) { + parentsystemstructure = name.getSubsystemUuid() != null + ? name.getSubsystemUuid() + : name.getSystemUuid() != null + ? name.getSystemUuid() + : name.getSystemgroupUuid() != null + ? name.getSystemgroupUuid() + : null; + nameElements.add( + new NameElementCommand( + name.getUuid(), parentsystemstructure, name.getDevicetypeUuid(), + name.getInstanceIndex(), name.getDescription(), UPDATE_AFTER_APPROVE_STRUCTURE_CHANGE)); + } + } + + // update names + // use active transaction or, if not available, create new + LOGGER.log(Level.FINE, "updateNames, structure change, nameElements.size: {0}", nameElements.size()); + updatedNameElements = updateNames(nameElements); + } + return updatedNameElements; + } + // ---------------------------------------------------------------------------------------------------- @Transactional diff --git a/src/main/java/org/openepics/names/service/StructuresService.java b/src/main/java/org/openepics/names/service/StructuresService.java index 86b772f45c11fd60ba25984bb08fa19510860939..f53559041b75784c24661fd5ee77c9384ba43df4 100644 --- a/src/main/java/org/openepics/names/service/StructuresService.java +++ b/src/main/java/org/openepics/names/service/StructuresService.java @@ -1064,7 +1064,10 @@ public class StructuresService { // system structure should exist (uuid), one entry that is not deleted // name should not exist (system structure mnemonic) // within current transaction - // add to list + // approve update + // update related names + // for different mnemonic + // not for device group // 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 c2e253db8b44a991fa19b866b2a8071421c8d7f0..3252263d0bfcc59ada312dc8137b633dd73e88b0 100644 --- a/src/main/java/org/openepics/names/service/SubsystemService.java +++ b/src/main/java/org/openepics/names/service/SubsystemService.java @@ -92,6 +92,10 @@ public class SubsystemService { // system structure should exist (uuid), one entry that is not deleted // name should not exist (system structure mnemonic) // within current transaction + // approve update + // update related names + // for different mnemonic + // not for device group // return // structure element for approved structure @@ -129,6 +133,7 @@ public class SubsystemService { LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); // approve create + // approve update if (StructureCommand.CREATE.equals(structureCommandCUD)) { boolean existsName = !StringUtils.isEmpty(subsystem.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(subsystem, holder)); if (!existsName) { @@ -136,6 +141,8 @@ public class SubsystemService { NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); LOGGER.log(Level.FINE, "approveStructures, nameElement created, name: {0}", createdNameElement.getName()); } + } else if (StructureCommand.UPDATE.equals(structureCommandCUD)) { + namesService.updateNames(previous, subsystem); } 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 21accef029e1d7642843de012e6104b2faa7184f..bf3e2eb8875143d69bdf9cebde11957b59fc5429 100644 --- a/src/main/java/org/openepics/names/service/SystemGroupService.java +++ b/src/main/java/org/openepics/names/service/SystemGroupService.java @@ -92,6 +92,10 @@ public class SystemGroupService { // system structure should exist (uuid), one entry that is not deleted // name should not exist (system structure mnemonic) // within current transaction + // approve update + // update related names + // for different mnemonic + // not for device group // return // structure element for approved structure @@ -129,6 +133,7 @@ public class SystemGroupService { LOGGER.log(Level.INFO, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); // approve create + // approve update if (StructureCommand.CREATE.equals(structureCommandCUD)) { boolean existsName = !StringUtils.isEmpty(systemGroup.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(systemGroup, holder)); if (!existsName) { @@ -136,7 +141,8 @@ public class SystemGroupService { NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); LOGGER.log(Level.FINE, "approveStructure, nameElement created, name: {0}", createdNameElement.getName()); } - + } else if (StructureCommand.UPDATE.equals(structureCommandCUD)) { + namesService.updateNames(previous, systemGroup); } 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 6366b055174d947dfea11bea08754a43381ec5cc..73e61ef29ec18db5190ecc542eeaa3d27f04d424 100644 --- a/src/main/java/org/openepics/names/service/SystemService.java +++ b/src/main/java/org/openepics/names/service/SystemService.java @@ -92,6 +92,10 @@ public class SystemService { // system structure should exist (uuid), one entry that is not deleted // name should not exist (system structure mnemonic) // within current transaction + // approve update + // update related names + // for different mnemonic + // not for device group // return // structure element for approved structure @@ -129,6 +133,7 @@ public class SystemService { LOGGER.log(Level.FINE, "approveStructure, structureCommandCUD: {0}", structureCommandCUD); // approve create + // approve update if (StructureCommand.CREATE.equals(structureCommandCUD)) { boolean existsName = !StringUtils.isEmpty(system.getMnemonic()) && namesService.existsName(StructureUtil.getMnemonicPath(system, holder)); if (!existsName) { @@ -136,7 +141,8 @@ public class SystemService { NameElement createdNameElement = namesService.createName(nameElement, holder, processed, processedBy); LOGGER.log(Level.FINE, "approveStructure, nameElement created, name: {0}", createdNameElement.getName()); } - + } else if (StructureCommand.UPDATE.equals(structureCommandCUD)) { + namesService.updateNames(previous, system); } LOGGER.log(Level.FINE, "approveStructure, structureElement: {0}", structureElement); diff --git a/src/test/java/org/openepics/names/docker/complex/StructuresCUDNamesIT.java b/src/test/java/org/openepics/names/docker/complex/StructuresCUDNamesIT.java new file mode 100644 index 0000000000000000000000000000000000000000..fcdc10b2aa7abe11df3b576b7b53efd019f89b41 --- /dev/null +++ b/src/test/java/org/openepics/names/docker/complex/StructuresCUDNamesIT.java @@ -0,0 +1,588 @@ +/* + * Copyright (C) 2022 European Spallation Source ERIC. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package org.openepics.names.docker.complex; + +import java.io.File; +import java.util.UUID; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.openepics.names.docker.ITUtil; +import org.openepics.names.docker.ITUtilNameElement; +import org.openepics.names.docker.ITUtilStructureElement; +import org.openepics.names.rest.beans.Type; +import org.openepics.names.rest.beans.element.NameElementCommand; +import org.openepics.names.rest.beans.element.StructureElement; +import org.openepics.names.rest.beans.element.StructureElementCommand; +import org.openepics.names.rest.beans.response.ResponsePageStructureElements; +import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +/** + * Integration tests for Naming and PostgreSQL that make use of existing dockerization + * with docker-compose.yml / Dockerfile. + * + * <p> + * Focus of this class is names endpoint and rules for legacy name. + * In practice, this class contains tests for structures and names, before and after delete of structures. + * </p> + * + * @author Lars Johansson + */ +@Testcontainers +class StructuresCUDNamesIT { + + // test + // create update delete structures and ensure name is as expected + // + // setup + // system structure + // Sg + // Sys + // Sys-Sub + // system structure + device structure + index + // Sg:Di-Dt-Idx + // Sys:Di-Dt-Idx + // Sys-Sub:Di-Dt-Idx + // + // note + // namecommand + // cud - create update delete + // structurecommand + // cud - create update delete + // acr - approve cancel reject + + @Container + public static final DockerComposeContainer<?> ENVIRONMENT = + new DockerComposeContainer<>(new File("docker-compose-integrationtest.yml")) + .waitingFor(ITUtil.NAMING, Wait.forLogMessage(".*Started NamingApplication.*", 1)); + + // system group + private static UUID sg1 = null; + private static UUID sg2 = null; + + // system + private static UUID sys11, sys12, sys13 = null; + private static UUID sys21, sys22, sys23 = null; + + // subsystem + // sub111, sub112, sub113 + // sub121, sub122, sub123 + // sub131, sub132, sub133 + // sub211, sub212, sub213 + // sub221, sub222, sub223 + // sub231, sub232, sub233 + private static UUID sub132 = null; + private static UUID sub231, sub232, sub233 = null; + + // discipline + private static UUID di2 = null; + + // device group + private static UUID dg21, dg22, dg23 = null; + + // device type + private static UUID dt211, dt212, dt213 = null; + private static UUID dt221, dt222, dt223 = null; + private static UUID dt231, dt232, dt233 = null; + + // name + // n211, n212, n213 + // n221, n222, n223 + // n231, n232, n233 + + @BeforeAll + public static void initAll() { + // init system group, system, subsystem, discipline, device group, device type + // + // test create structure and ensure name is as expected + + NameElementCommand nameElement = null; + StructureElementCommand structureElement = null; + StructureElement approvedStructureElement = null; + + String name = "name"; + String description = "description"; + String comment = "comment"; + + structureElement = new StructureElementCommand(null, Type.SYSTEMGROUP, null, name, "Sg1", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sg1 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SYSTEM, sg1, name, "Sys11", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sys11 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SYSTEM, sg1, name, "Sys12", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sys12 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SYSTEM, sg1, name, "Sys13", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sys13 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys11, name, "Sub111", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys11, name, "Sub112", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys11, name, "Sub113", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys12, name, "Sub121", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys12, name, "Sub122", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys12, name, "Sub123", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys13, name, "Sub131", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys13, name, "Sub132", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sub132 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys13, name, "Sub133", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + ITUtilStructureElement.assertRead("/SYSTEMGROUP", 1); + ITUtilStructureElement.assertRead("/SYSTEM", 3); + ITUtilStructureElement.assertRead("/SUBSYSTEM", 9); + ITUtilNameElement.assertRead("", 13); + + + // at this point + // system group + // Sg1 + // system + // Sys11, Sys12, Sys13 + // subsystem + // Sub111, Sub112, Sub113 + // Sub121, Sub122, Sub123 + // Sub131, Sub132, Sub133 + // name (system structure only) + // Sg1 + // Sys11, Sys12, Sys13 + // Sys11-Sub111, Sys11-Sub112, Sys11-Sub113 + // Sys12-Sub121, Sys12-Sub122, Sys12-Sub123 + // Sys13-Sub131, Sys13-Sub132, Sys13-Sub133 + + structureElement = new StructureElementCommand(null, Type.SYSTEMGROUP, null, name, "Sg2", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sg2 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SYSTEM, sg2, name, "Sys21", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sys21 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SYSTEM, sg2, name, "Sys22", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sys22 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SYSTEM, sg2, name, "Sys23", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sys23 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys21, name, "Sub211", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys21, name, "Sub212", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys21, name, "Sub213", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys22, name, "Sub221", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys22, name, "Sub222", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys22, name, "Sub223", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys23, name, "Sub231", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sub231 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys23, name, "Sub232", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sub232 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.SUBSYSTEM, sys23, name, "Sub233", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + sub233 = approvedStructureElement.getUuid(); + + ITUtilStructureElement.assertRead("/SYSTEMGROUP", 2); + ITUtilStructureElement.assertRead("/SYSTEM", 6); + ITUtilStructureElement.assertRead("/SUBSYSTEM", 18); + ITUtilNameElement.assertRead("", 26); + + // at this point + // above + // + + // system group + // Sg2 + // system + // Sys21, Sys22, Sys23 + // subsystem + // Sub211, Sub212, Sub213 + // Sub221, Sub222, Sub223 + // Sub231, Sub232, Sub233 + // name (system structure only) + // Sg2 + // Sys21, Sys22, Sys23 + // Sys21-Sub211, Sys21-Sub212, Sys21-Sub213 + // Sys22-Sub221, Sys22-Sub222, Sys22-Sub223 + // Sys23-Sub231, Sys23-Sub232, Sys23-Sub233 + + structureElement = new StructureElementCommand(null, Type.DISCIPLINE, null, name, "Di2", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + di2 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICEGROUP, di2, name, "", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dg21 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICEGROUP, di2, name, "", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dg22 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICEGROUP, di2, name, "", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dg23 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg21, name, "Dt211", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt211 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg21, name, "Dt212", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt212 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg21, name, "Dt213", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt213 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg22, name, "Dt221", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt221 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg22, name, "Dt222", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt222 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg22, name, "Dt223", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt223 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg23, name, "Dt231", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt231 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg23, name, "Dt232", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt232 = approvedStructureElement.getUuid(); + + structureElement = new StructureElementCommand(null, Type.DEVICETYPE, dg23, name, "Dt233", description, comment); + approvedStructureElement = ITUtilStructureElement.assertCreateApprove(structureElement); + dt233 = approvedStructureElement.getUuid(); + + ITUtilStructureElement.assertRead("/SYSTEMGROUP", 2); + ITUtilStructureElement.assertRead("/SYSTEM", 6); + ITUtilStructureElement.assertRead("/SUBSYSTEM", 18); + ITUtilStructureElement.assertRead("/DISCIPLINE", 1); + ITUtilStructureElement.assertRead("/DEVICEGROUP", 3); + ITUtilStructureElement.assertRead("/DEVICETYPE", 9); + ITUtilNameElement.assertRead("", 26); + + // at this point + // above + // + + // discipline + // Di2 + // device group + // -, -, - + // device type + // Dt211, Dt212, Dt213 + // Dt221, Dt222, Dt223 + // Dt231, Dt232, Dt233 + + nameElement = new NameElementCommand(null, sg2, dt211, "211", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + nameElement = new NameElementCommand(null, sg2, dt212, "212", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + nameElement = new NameElementCommand(null, sg2, dt213, "213", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + nameElement = new NameElementCommand(null, sys22, dt221, "221", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + nameElement = new NameElementCommand(null, sys22, dt222, "222", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + nameElement = new NameElementCommand(null, sys22, dt223, "223", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + nameElement = new NameElementCommand(null, sub231, dt231, "231", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + nameElement = new NameElementCommand(null, sub232, dt232, "232", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + nameElement = new NameElementCommand(null, sub233, dt233, "233", description, comment); + ITUtilNameElement.assertCreate(nameElement); + + ITUtilStructureElement.assertRead("/SYSTEMGROUP", 2); + ITUtilStructureElement.assertRead("/SYSTEM", 6); + ITUtilStructureElement.assertRead("/SUBSYSTEM", 18); + ITUtilStructureElement.assertRead("/DISCIPLINE", 1); + ITUtilStructureElement.assertRead("/DEVICEGROUP", 3); + ITUtilStructureElement.assertRead("/DEVICETYPE", 9); + ITUtilNameElement.assertRead("", 35); + + // at this point + // above + // + + // name (system structure + device structure + index) + // Sg2:Di2-Dt211-211 + // Sg2:Di2-Dt212-212 + // Sg2:Di2-Dt213-213 + // Sys22:Di2-Dt221-221 + // Sys22:Di2-Dt222-222 + // Sys22:Di2-Dt223-223 + // Sys23-Sub231:Di2-Dt231-231 + // Sys23-Sub232:Di2-Dt232-232 + // Sys23-Sub233:Di2-Dt233-233 + + ITUtilNameElement.assertExists("Sg1", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys11", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys12", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys13", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys11-Sub111", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys11-Sub112", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys11-Sub113", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys12-Sub121", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys12-Sub122", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys12-Sub123", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys13-Sub131", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys13-Sub132", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys13-Sub133", Boolean.TRUE); + + ITUtilNameElement.assertExists("Sg2", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys21", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys21-Sub211", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys21-Sub212", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys21-Sub213", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22-Sub221", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22-Sub222", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22-Sub223", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub231", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub232", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub233", Boolean.TRUE); + + ITUtilNameElement.assertExists("Sg2:Di2-Dt211-211", Boolean.TRUE); + ITUtilNameElement.assertExists("Sg2:Di2-Dt212-212", Boolean.TRUE); + ITUtilNameElement.assertExists("Sg2:Di2-Dt213-213", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt221-221", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt222-222", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt223-223", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub231:Di2-Dt231-231", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub232:Di2-Dt232-232", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub233:Di2-Dt233-233", Boolean.TRUE); + } + + @Test + void updateSystemStructure() { + // purpose + // test update system structure and ensure name is as expected + + ResponsePageStructureElements responsePage = null; + StructureElementCommand structureElement = null; + + responsePage = ITUtilStructureElement.assertRead("/SUBSYSTEM?uuid=" + sub132, 1); + structureElement = responsePage.getList().get(0); + structureElement.setDescription("asdf"); + structureElement = ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sys13-Sub132", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys13-Su132", Boolean.FALSE); + + structureElement.setMnemonic("Su132"); + ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sys13-Sub132", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys13-Su132", Boolean.TRUE); + + // ---------------------------------------- + + responsePage = ITUtilStructureElement.assertRead("/SYSTEM?uuid=" + sys12, 1); + structureElement = responsePage.getList().get(0); + structureElement.setDescription("asdf"); + structureElement = ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sys12", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys12-Sub121", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys12-Sub122", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys12-Sub123", Boolean.TRUE); + ITUtilNameElement.assertExists("Sy12", Boolean.FALSE); + ITUtilNameElement.assertExists("Sy12-Sub121", Boolean.FALSE); + ITUtilNameElement.assertExists("Sy12-Sub122", Boolean.FALSE); + ITUtilNameElement.assertExists("Sy12-Sub123", Boolean.FALSE); + + structureElement.setMnemonic("Sy12"); + ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sys12", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys12-Sub121", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys12-Sub122", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys12-Sub123", Boolean.FALSE); + ITUtilNameElement.assertExists("Sy12", Boolean.TRUE); + ITUtilNameElement.assertExists("Sy12-Sub121", Boolean.TRUE); + ITUtilNameElement.assertExists("Sy12-Sub122", Boolean.TRUE); + ITUtilNameElement.assertExists("Sy12-Sub123", Boolean.TRUE); + + // ---------------------------------------- + + responsePage = ITUtilStructureElement.assertRead("/SYSTEMGROUP?uuid=" + sg1, 1); + structureElement = responsePage.getList().get(0); + structureElement.setDescription("asdf"); + structureElement = ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sg1", Boolean.TRUE); + ITUtilNameElement.assertExists("S1", Boolean.FALSE); + + structureElement.setMnemonic("S1"); + ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sg1", Boolean.FALSE); + ITUtilNameElement.assertExists("S1", Boolean.TRUE); + } + + @Test + void updateDeviceStructure() { + // purpose + // test update system structure and ensure name is as expected + + ResponsePageStructureElements responsePage = null; + StructureElementCommand structureElement = null; + + responsePage = ITUtilStructureElement.assertRead("/DEVICETYPE?uuid=" + dt232, 1); + structureElement = responsePage.getList().get(0); + structureElement.setDescription("asdf"); + structureElement = ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sys23-Sub232:Di2-Dt232-232", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub232:Di2-D232-232", Boolean.FALSE); + + structureElement.setMnemonic("D232"); + ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sys23-Sub232:Di2-Dt232-232", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub232:Di2-D232-232", Boolean.TRUE); + + // ---------------------------------------- + + responsePage = ITUtilStructureElement.assertRead("/DEVICEGROUP?uuid=" + dg22, 1); + structureElement = responsePage.getList().get(0); + structureElement.setDescription("asdf"); + structureElement = ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sg2:Di2-Dt211-211", Boolean.TRUE); + ITUtilNameElement.assertExists("Sg2:Di2-Dt212-212", Boolean.TRUE); + ITUtilNameElement.assertExists("Sg2:Di2-Dt213-213", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt221-221", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt222-222", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt223-223", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub231:Di2-Dt231-231", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub232:Di2-D232-232", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub233:Di2-Dt233-233", Boolean.TRUE); + + ITUtilNameElement.assertExists("Sg2:D2-Dt211-211", Boolean.FALSE); + ITUtilNameElement.assertExists("Sg2:D2-Dt212-212", Boolean.FALSE); + ITUtilNameElement.assertExists("Sg2:D2-Dt213-213", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:D2-Dt221-221", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:D2-Dt222-222", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:D2-Dt223-223", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub231:D2-Dt231-231", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub232:D2-D232-232", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub233:D2-Dt233-233", Boolean.FALSE); + + // ---------------------------------------- + + responsePage = ITUtilStructureElement.assertRead("/DISCIPLINE?uuid=" + di2, 1); + structureElement = responsePage.getList().get(0); + structureElement.setDescription("asdf"); + structureElement = ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sg2:Di2-Dt211-211", Boolean.TRUE); + ITUtilNameElement.assertExists("Sg2:Di2-Dt212-212", Boolean.TRUE); + ITUtilNameElement.assertExists("Sg2:Di2-Dt213-213", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt221-221", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt222-222", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt223-223", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub231:Di2-Dt231-231", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub232:Di2-D232-232", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub233:Di2-Dt233-233", Boolean.TRUE); + + ITUtilNameElement.assertExists("Sg2:D2-Dt211-211", Boolean.FALSE); + ITUtilNameElement.assertExists("Sg2:D2-Dt212-212", Boolean.FALSE); + ITUtilNameElement.assertExists("Sg2:D2-Dt213-213", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:D2-Dt221-221", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:D2-Dt222-222", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:D2-Dt223-223", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub231:D2-Dt231-231", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub232:D2-D232-232", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub233:D2-Dt233-233", Boolean.FALSE); + + structureElement.setMnemonic("D2"); + ITUtilStructureElement.assertUpdateApprove(structureElement); + + ITUtilNameElement.assertExists("Sg2:Di2-Dt211-211", Boolean.FALSE); + ITUtilNameElement.assertExists("Sg2:Di2-Dt212-212", Boolean.FALSE); + ITUtilNameElement.assertExists("Sg2:Di2-Dt213-213", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt221-221", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt222-222", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys22:Di2-Dt223-223", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub231:Di2-Dt231-231", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub232:Di2-D232-232", Boolean.FALSE); + ITUtilNameElement.assertExists("Sys23-Sub233:Di2-Dt233-233", Boolean.FALSE); + + ITUtilNameElement.assertExists("Sg2:D2-Dt211-211", Boolean.TRUE); + ITUtilNameElement.assertExists("Sg2:D2-Dt212-212", Boolean.TRUE); + ITUtilNameElement.assertExists("Sg2:D2-Dt213-213", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:D2-Dt221-221", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:D2-Dt222-222", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys22:D2-Dt223-223", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub231:D2-Dt231-231", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub232:D2-D232-232", Boolean.TRUE); + ITUtilNameElement.assertExists("Sys23-Sub233:D2-Dt233-233", Boolean.TRUE); + } + +} diff --git a/src/test/java/org/openepics/names/docker/complex/NamesLegacyIT.java b/src/test/java/org/openepics/names/docker/complex/StructuresCUDNamesLegacyIT.java similarity index 98% rename from src/test/java/org/openepics/names/docker/complex/NamesLegacyIT.java rename to src/test/java/org/openepics/names/docker/complex/StructuresCUDNamesLegacyIT.java index ffbb8256a649053dd0a1631bd35946f93d785c58..7a82218c4b8089b0ed4eae3f72c3a7429a5054d0 100644 --- a/src/test/java/org/openepics/names/docker/complex/NamesLegacyIT.java +++ b/src/test/java/org/openepics/names/docker/complex/StructuresCUDNamesLegacyIT.java @@ -48,9 +48,14 @@ import org.testcontainers.junit.jupiter.Testcontainers; * @author Lars Johansson */ @Testcontainers -class NamesLegacyIT { +class StructuresCUDNamesLegacyIT { - // test if name is legacy names in various ways + // test + // name is legacy in various ways + // delete system structure entries and check that legacy as intended + // delete device structure entries and check that legacy as intended + // + // setup // system structure // Sg // Sys @@ -60,8 +65,12 @@ class NamesLegacyIT { // Sys:Di-Dt-Idx // Sys-Sub:Di-Dt-Idx // - // delete system structure entries and check that legacy as intended - // delete device structure entries and check that legacy as intended + // note + // namecommand + // cud - create update delete + // structurecommand + // cud - create update delete + // acr - approve cancel reject @Container public static final DockerComposeContainer<?> ENVIRONMENT =