From eea947eb3da28018752927f573bb94c8b5e7126a Mon Sep 17 00:00:00 2001 From: Lars Johansson <lars.johansson@ess.eu> Date: Wed, 7 Dec 2022 13:36:51 +0100 Subject: [PATCH] Update documentation --- .../repository/IDeviceGroupRepository.java | 2 +- .../repository/IDeviceTypeRepository.java | 2 +- .../repository/IDisciplineRepository.java | 2 +- .../names/repository/INameRepository.java | 2 +- .../repository/ISubsystemRepository.java | 2 +- .../repository/ISystemGroupRepository.java | 2 +- .../names/repository/ISystemRepository.java | 2 +- .../openepics/names/rest/api/v1/INames.java | 13 +- .../names/rest/api/v1/IStructures.java | 18 +-- .../openepics/names/rest/beans/FieldName.java | 2 +- .../names/rest/beans/FieldStructure.java | 2 +- .../names/rest/beans/element/NameElement.java | 2 +- .../beans/element/NameElementCommand.java | 2 +- .../rest/beans/element/StructureElement.java | 2 +- .../element/StructureElementCommand.java | 2 +- .../controller/HealthcheckController.java | 8 +- .../rest/controller/NamesController.java | 39 ++++++ .../rest/controller/ReportController.java | 33 +++-- .../rest/controller/StructuresController.java | 100 +++++++++++++- .../controller/VerificationController.java | 14 +- .../openepics/names/service/NamesService.java | 49 +++---- .../names/service/StructuresService.java | 18 +-- .../names/util/EssNamingConvention.java | 5 +- .../openepics/names/util/NameElementUtil.java | 40 +++--- .../names/util/NamingConvention.java | 31 +++-- .../names/util/StructureElementUtil.java | 128 ++++++++---------- .../util/ValidateStructureElementUtil.java | 3 +- 27 files changed, 317 insertions(+), 208 deletions(-) diff --git a/src/main/java/org/openepics/names/repository/IDeviceGroupRepository.java b/src/main/java/org/openepics/names/repository/IDeviceGroupRepository.java index d47675e6..703f3e3b 100644 --- a/src/main/java/org/openepics/names/repository/IDeviceGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/IDeviceGroupRepository.java @@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** - * Find device group structure (name part) information from JPA. + * Find device group structure (name part) information in JPA. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/repository/IDeviceTypeRepository.java b/src/main/java/org/openepics/names/repository/IDeviceTypeRepository.java index 0a515a0d..b2559d4e 100644 --- a/src/main/java/org/openepics/names/repository/IDeviceTypeRepository.java +++ b/src/main/java/org/openepics/names/repository/IDeviceTypeRepository.java @@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** - * Find device type structure (name part) information from JPA. + * Find device type structure (name part) information in JPA. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/repository/IDisciplineRepository.java b/src/main/java/org/openepics/names/repository/IDisciplineRepository.java index 747363ba..835cd4ac 100644 --- a/src/main/java/org/openepics/names/repository/IDisciplineRepository.java +++ b/src/main/java/org/openepics/names/repository/IDisciplineRepository.java @@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** - * Find discipline structure (name part) information from JPA. + * Find discipline structure (name part) information in JPA. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/repository/INameRepository.java b/src/main/java/org/openepics/names/repository/INameRepository.java index 7a7a20cc..3bb4025a 100644 --- a/src/main/java/org/openepics/names/repository/INameRepository.java +++ b/src/main/java/org/openepics/names/repository/INameRepository.java @@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** - * Find name information from JPA. + * Find name information in JPA. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/repository/ISubsystemRepository.java b/src/main/java/org/openepics/names/repository/ISubsystemRepository.java index 34240620..a60e894b 100644 --- a/src/main/java/org/openepics/names/repository/ISubsystemRepository.java +++ b/src/main/java/org/openepics/names/repository/ISubsystemRepository.java @@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** - * Find subsystem structure (name part)information from JPA. + * Find subsystem structure (name part)information in JPA. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/repository/ISystemGroupRepository.java b/src/main/java/org/openepics/names/repository/ISystemGroupRepository.java index a61bbdfc..f8c5d60b 100644 --- a/src/main/java/org/openepics/names/repository/ISystemGroupRepository.java +++ b/src/main/java/org/openepics/names/repository/ISystemGroupRepository.java @@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** - * Find system group structure (name part) information from JPA. + * Find system group structure (name part) information in JPA. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/repository/ISystemRepository.java b/src/main/java/org/openepics/names/repository/ISystemRepository.java index 7e33eb14..4c0e96c8 100644 --- a/src/main/java/org/openepics/names/repository/ISystemRepository.java +++ b/src/main/java/org/openepics/names/repository/ISystemRepository.java @@ -26,7 +26,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; /** - * Find system structure (name part) information from JPA. + * Find system structure (name part) information in JPA. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/rest/api/v1/INames.java b/src/main/java/org/openepics/names/rest/api/v1/INames.java index 735694b9..97b1acfa 100644 --- a/src/main/java/org/openepics/names/rest/api/v1/INames.java +++ b/src/main/java/org/openepics/names/rest/api/v1/INames.java @@ -62,8 +62,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; public interface INames { /* - FieldName - UUID, NAME, NAMEEQUIVALENCE, SYSTEMSTRUCTURE, DEVICESTRUCTURE, DESCRIPTION - NameElementCommand - subset of NameElement attributes NameElement uuid (UUID) @@ -82,12 +80,6 @@ public interface INames { when (Date) who (String) - authentication/authorization - 3 levels - no, user, administrator - no - read - user - create, update, delete - ( administrator ) - Methods create POST /names - createNames (List<NameElementCommand>) create POST /names/upload - createNames (MultipartFile) @@ -117,6 +109,11 @@ public interface INames { Note read GET /names/{name} - both name and uuid (name - exact and search, uuid exact) /upload and /download endpoints handle Excel files + authentication/authorization + 3 levels - no, user, administrator + no - read + user - create, update, delete + ( administrator ) */ public static final String DEFAULT_PAGE = "0"; diff --git a/src/main/java/org/openepics/names/rest/api/v1/IStructures.java b/src/main/java/org/openepics/names/rest/api/v1/IStructures.java index 3971f3ac..cc5e8665 100644 --- a/src/main/java/org/openepics/names/rest/api/v1/IStructures.java +++ b/src/main/java/org/openepics/names/rest/api/v1/IStructures.java @@ -65,10 +65,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; public interface IStructures { /* - Type - SYSTEMGROUP, SYSTEM, SUBSYSTEM, DISCIPLINE, DEVICEGROUP, DEVICETYPE - Status - APPROVED, ARCHIVED, CANCELLED, PENDING, REJECTED - FieldStructure - UUID, PARENT, NAME, MNEMONIC, MNEMONICEQUIVALENCE, MNEMONICPATH, DESCRIPTION - StructureElementCommand - subset of StructureElement attributes StructureElement uuid (UUID) @@ -87,14 +83,6 @@ public interface IStructures { when (Date) who (String) - authentication/authorization - 3 levels - no, user, administrator - no - read - user - create, update, delete - administrator - approve, reject (, checkdevices) - - mnemonic path for structure includes all levels of mnemonics - Methods create POST /structures - createStructures (List<StructureElementCommand>) create POST /structures/upload - createStructures (MultipartFile) @@ -132,6 +120,12 @@ public interface IStructures { Note /upload and /download endpoints handle Excel files + authentication/authorization + 3 levels - no, user, administrator + no - read + user - create, update, delete + administrator - approve, cancel, reject + mnemonic path for structure includes all levels of mnemonics */ public static final String DEFAULT_PAGE = "0"; diff --git a/src/main/java/org/openepics/names/rest/beans/FieldName.java b/src/main/java/org/openepics/names/rest/beans/FieldName.java index 3853174a..c31906fb 100644 --- a/src/main/java/org/openepics/names/rest/beans/FieldName.java +++ b/src/main/java/org/openepics/names/rest/beans/FieldName.java @@ -21,7 +21,7 @@ package org.openepics.names.rest.beans; import io.swagger.v3.oas.annotations.media.Schema; /** - * This enum represents fields for name in beans and for communication. + * This enum represents fields for name in beans and for communication. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/rest/beans/FieldStructure.java b/src/main/java/org/openepics/names/rest/beans/FieldStructure.java index b25cf986..92002989 100644 --- a/src/main/java/org/openepics/names/rest/beans/FieldStructure.java +++ b/src/main/java/org/openepics/names/rest/beans/FieldStructure.java @@ -21,7 +21,7 @@ package org.openepics.names.rest.beans; import io.swagger.v3.oas.annotations.media.Schema; /** - * This enum represents fields for structures in beans and for communication. + * This enum represents fields for structures in beans and for communication. * * @author Lars Johansson */ diff --git a/src/main/java/org/openepics/names/rest/beans/element/NameElement.java b/src/main/java/org/openepics/names/rest/beans/element/NameElement.java index d0c2846f..3b389db6 100644 --- a/src/main/java/org/openepics/names/rest/beans/element/NameElement.java +++ b/src/main/java/org/openepics/names/rest/beans/element/NameElement.java @@ -28,7 +28,7 @@ import org.openepics.names.rest.beans.Status; import io.swagger.v3.oas.annotations.media.Schema; /** - * Bean (data transfer object) for communication and (json, xml) serialization. + * Bean (data transfer object) for communication and (json) serialization. * Intended for operations that read names. * * @author Lars Johansson diff --git a/src/main/java/org/openepics/names/rest/beans/element/NameElementCommand.java b/src/main/java/org/openepics/names/rest/beans/element/NameElementCommand.java index 25f24abc..bd07555e 100644 --- a/src/main/java/org/openepics/names/rest/beans/element/NameElementCommand.java +++ b/src/main/java/org/openepics/names/rest/beans/element/NameElementCommand.java @@ -25,7 +25,7 @@ import java.util.UUID; import io.swagger.v3.oas.annotations.media.Schema; /** - * Bean (data transfer object) for communication and (json, xml) serialization. + * Bean (data transfer object) for communication and (json) serialization. * Intended for operations that modify names. * * @author Lars Johansson diff --git a/src/main/java/org/openepics/names/rest/beans/element/StructureElement.java b/src/main/java/org/openepics/names/rest/beans/element/StructureElement.java index 5635749a..161d3652 100644 --- a/src/main/java/org/openepics/names/rest/beans/element/StructureElement.java +++ b/src/main/java/org/openepics/names/rest/beans/element/StructureElement.java @@ -29,7 +29,7 @@ import org.openepics.names.rest.beans.Type; import io.swagger.v3.oas.annotations.media.Schema; /** - * Bean (data transfer object) for communication and (json, xml) serialization. + * Bean (data transfer object) for communication and (json) serialization. * Intended for operations that read structures. * * @author Lars Johansson diff --git a/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommand.java b/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommand.java index 67a9cb31..d2589d9e 100644 --- a/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommand.java +++ b/src/main/java/org/openepics/names/rest/beans/element/StructureElementCommand.java @@ -27,7 +27,7 @@ import org.openepics.names.rest.beans.Type; import io.swagger.v3.oas.annotations.media.Schema; /** - * Bean (data transfer object) for communication and (json, xml) serialization. + * Bean (data transfer object) for communication and (json) serialization. * Intended for operations that modify structures. * * @author Lars Johansson diff --git a/src/main/java/org/openepics/names/rest/controller/HealthcheckController.java b/src/main/java/org/openepics/names/rest/controller/HealthcheckController.java index 62b17bee..2a564931 100644 --- a/src/main/java/org/openepics/names/rest/controller/HealthcheckController.java +++ b/src/main/java/org/openepics/names/rest/controller/HealthcheckController.java @@ -47,11 +47,9 @@ public class HealthcheckController { // note // global exception handler available - - /* - Methods - read GET /healthcheck - readHealthcheck() - */ + // + // methods + // read GET /healthcheck - readHealthcheck() /** * Perform healthcheck for Naming application in general and healtcheck endpoint in particular. diff --git a/src/main/java/org/openepics/names/rest/controller/NamesController.java b/src/main/java/org/openepics/names/rest/controller/NamesController.java index 814922d9..cbacb2aa 100644 --- a/src/main/java/org/openepics/names/rest/controller/NamesController.java +++ b/src/main/java/org/openepics/names/rest/controller/NamesController.java @@ -60,6 +60,12 @@ public class NamesController implements INames { // note // global exception handler available + // + // TODO validate authority + // either + // none + // naming user + // naming admin (& user) private static final Logger LOGGER = Logger.getLogger(NamesController.class.getName()); @@ -100,8 +106,10 @@ public class NamesController implements INames { public ResponseEntity<Resource> createNames(MultipartFile file) { // validate authority // naming user & admin + // convert from input // validate // do + // convert to output try { if (ExcelUtil.hasExcelFormat(file)) { @@ -135,6 +143,8 @@ public class NamesController implements INames { public ResponsePageNameElements readNames(Boolean deleted, String uuid, String name, String nameequivalence, String systemstructure, String devicestructure, String index, String description, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return namesService.readNames(deleted, uuid, name, nameequivalence, systemstructure, devicestructure, index, description, @@ -153,6 +163,9 @@ public class NamesController implements INames { public ResponseEntity<Resource> readNamesDownload(Boolean deleted, String uuid, String name, String nameequivalence, String systemstructure, String devicestructure, String index, String description, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + // convert to output + ResponsePageNameElements nameElements = readNames(deleted, uuid, name, nameequivalence, systemstructure, devicestructure, index, description, orderBy, isAsc, page, pageSize); @@ -166,6 +179,8 @@ public class NamesController implements INames { @Override public ResponsePageNameElements readNames(String name, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return namesService.readNames(name, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { @@ -181,6 +196,8 @@ public class NamesController implements INames { @Override public ResponsePageNameElements readNamesSystemStructure(String mnemonicpath, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return namesService.readNamesSystemStructure(mnemonicpath, orderBy, isAsc, page, pageSize); @@ -197,6 +214,8 @@ public class NamesController implements INames { @Override public ResponsePageNameElements readNamesDeviceStructure(String mnemonicpath, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return namesService.readNamesDeviceStructure(mnemonicpath, orderBy, isAsc, page, pageSize); @@ -213,6 +232,8 @@ public class NamesController implements INames { @Override public ResponsePageNameElements readNamesHistory(String uuid, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return namesService.readNamesHistory(uuid, orderBy, isAsc, page, pageSize); @@ -230,6 +251,8 @@ public class NamesController implements INames { @Override public String equivalenceName(String name) { + // do + try { return namesService.equivalenceName(name); } catch (ServiceException e) { @@ -244,6 +267,8 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBoolean> existsName(String name) { + // do + try { return new ResponseEntity<>(new ResponseBoolean(namesService.existsName(name)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { @@ -258,6 +283,8 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBoolean> isLegacyName(String name) { + // do + try { return new ResponseEntity<>(new ResponseBoolean(namesService.isLegacyName(name)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { @@ -272,6 +299,8 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBoolean> isValidToCreateName(String name) { + // do + try { return new ResponseEntity<>(new ResponseBoolean(namesService.isValidToCreateName(name)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { @@ -288,6 +317,8 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBooleanList> validateNamesCreate(List<NameElementCommand> nameElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -317,6 +348,8 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBooleanList> validateNamesUpdate(List<NameElementCommand> nameElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -346,6 +379,8 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBooleanList> validateNamesDelete(List<NameElementCommand> nameElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -399,8 +434,10 @@ public class NamesController implements INames { public ResponseEntity<Resource> updateNames(MultipartFile file) { // validate authority // naming user & admin + // convert from input // validate // do + // convert to output try { if (ExcelUtil.hasExcelFormat(file)) { @@ -454,8 +491,10 @@ public class NamesController implements INames { public ResponseEntity<Resource> deleteNames(MultipartFile file) { // validate authority // naming user & admin + // convert from input // validate // do + // convert to output try { if (ExcelUtil.hasExcelFormat(file)) { diff --git a/src/main/java/org/openepics/names/rest/controller/ReportController.java b/src/main/java/org/openepics/names/rest/controller/ReportController.java index 9821b834..5e46ff80 100644 --- a/src/main/java/org/openepics/names/rest/controller/ReportController.java +++ b/src/main/java/org/openepics/names/rest/controller/ReportController.java @@ -122,16 +122,29 @@ public class ReportController { produces = {"text/plain"}) public String reportAbout() { // report metrics about Naming - // ess names, system structure, device structure - - // status, latest, deleted - // status names - APPROVED, structures - APPROVED, ARCHIVED, CANCELLED, PENDING, REJECTED - // latest true (default) - // deleted null, false, true - - // metrics can be read with service layer or repository layer + // ess names + // read latest, latest deleted, latest not deleted + // count for kind of name + // system structure, device structure + // read latest per structure + // count for status + // + // note + // obsolete values are not shown + // metrics can be read with service layer or repository layer + + // do + // prepare metrics + // names - read, count + // structures - read, count + // prepare text + // names - format + // structures - format + // report // prepare metrics + // read names - latest, latest deleted, latest not deleted + // count names - kind of name ResponsePageNameElements nameElementsEssNames = namesService.readNames(null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null); ResponsePageNameElements nameElementsEssNamesDeleted = namesService.readNames(Boolean.TRUE, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null); ResponsePageNameElements nameElementsEssNamesNotDeleted = namesService.readNames(Boolean.FALSE, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null); @@ -159,6 +172,9 @@ public class ReportController { } } + // prepare metrics + // read structures - latest + // count structures - status ResponsePageStructureElements structureElementsSystemgroup = structuresService.readStructures(Type.SYSTEMGROUP, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE); ResponsePageStructureElements structureElementsSystem = structuresService.readStructures(Type.SYSTEM, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE); ResponsePageStructureElements structureElementsSubsystem = structuresService.readStructures(Type.SUBSYSTEM, null, null, null, null, null, null, null, null, null, Boolean.FALSE, null, null, null, null, StructureChoice.STRUCTURE); @@ -330,6 +346,7 @@ public class ReportController { } } + // prepare text int spaceUntilSizeStructure = 16; String metricsOverviewEssName = NBR_ACTIVE + nameElementsEssNamesNotDeleted.getListSize(); diff --git a/src/main/java/org/openepics/names/rest/controller/StructuresController.java b/src/main/java/org/openepics/names/rest/controller/StructuresController.java index 68d51237..02d0aa6b 100644 --- a/src/main/java/org/openepics/names/rest/controller/StructuresController.java +++ b/src/main/java/org/openepics/names/rest/controller/StructuresController.java @@ -62,13 +62,12 @@ public class StructuresController implements IStructures { // note // global exception handler available - + // // TODO validate authority // either - // no or + // none // naming user - // naming admin - // naming user & admin + // naming admin (& user) private static final Logger LOGGER = Logger.getLogger(StructuresController.class.getName()); @@ -109,8 +108,10 @@ public class StructuresController implements IStructures { public ResponseEntity<Resource> createStructures(MultipartFile file) { // validate authority // naming user & admin + // convert from input // validate // do + // convert to output try { if (ExcelUtil.hasExcelFormat(file)) { @@ -144,6 +145,8 @@ public class StructuresController implements IStructures { public ResponsePageStructureElements readStructures(Type type, Status[] statuses, Boolean deleted, String uuid, String parentuuid, String name, String mnemonic, String mnemonicequivalence, String mnemonicpath, String description, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return structuresService.readStructures(type, statuses, deleted, uuid, parentuuid, name, mnemonic, mnemonicequivalence, mnemonicpath, description, @@ -162,6 +165,9 @@ public class StructuresController implements IStructures { public ResponseEntity<Resource> readStructuresDownload(Type type, Status[] statuses, Boolean deleted, String uuid, String parentuuid, String name, String mnemonic, String mnemonicequivalence, String mnemonicpath, String description, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + // convert to output + ResponsePageStructureElements structureElements = readStructures(type, statuses, deleted, uuid, parentuuid, name, mnemonic, mnemonicequivalence, mnemonicpath, description, orderBy, isAsc, page, pageSize); @@ -176,6 +182,8 @@ public class StructuresController implements IStructures { public ResponsePageStructureElements readStructuresChildren(String uuid, Type type, Status[] statuses, Boolean deleted, String name, String mnemonic, String mnemonicequivalence, String mnemonicpath, String description, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return structuresService.readStructuresChildren(uuid, type, statuses, deleted, name, mnemonic, mnemonicequivalence, mnemonicpath, description, @@ -193,6 +201,8 @@ public class StructuresController implements IStructures { @Override public ResponsePageStructureElements readStructuresMnemonic(String mnemonic, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return structuresService.readStructuresMnemonic(mnemonic, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { @@ -208,6 +218,8 @@ public class StructuresController implements IStructures { @Override public ResponsePageStructureElements readStructuresMnemonicpath(String mnemonicpath, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return structuresService.readStructuresMnemonicpath(mnemonicpath, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { @@ -223,6 +235,8 @@ public class StructuresController implements IStructures { @Override public ResponsePageStructureElements readStructuresHistory(String uuid, Type type, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // do + try { return structuresService.readStructuresHistory(uuid, type, orderBy, isAsc, page, pageSize); @@ -240,6 +254,8 @@ public class StructuresController implements IStructures { @Override public String equivalenceMnemonic(String mnemonic) { + // do + try { return structuresService.equivalenceMnemonic(mnemonic); } catch (ServiceException e) { @@ -254,6 +270,8 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBoolean> existsStructure(Type type, String mnemonicpath) { + // do + try { return new ResponseEntity<>(new ResponseBoolean(structuresService.existsStructure(type, mnemonicpath)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { @@ -268,6 +286,8 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBoolean> isValidToCreateStructure(Type type, String mnemonicpath) { + // do + try { return new ResponseEntity<>(new ResponseBoolean(structuresService.isValidToCreateStructure(type, mnemonicpath)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { @@ -284,6 +304,8 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBooleanList> validateStructuresCreate(List<StructureElementCommand> structureElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -313,6 +335,8 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBooleanList> validateStructuresUpdate(List<StructureElementCommand> structureElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -342,6 +366,8 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBooleanList> validateStructuresDelete(List<StructureElementCommand> structureElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -371,6 +397,8 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBooleanList> validateStructuresApprove(List<StructureElementCommand> structureElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -400,6 +428,8 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBooleanList> validateStructuresCancel(List<StructureElementCommand> structureElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -429,6 +459,8 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBooleanList> validateStructuresReject(List<StructureElementCommand> structureElements) { + // validate + boolean response = true; String reason = ""; List<ResponseBoolean> responses = Lists.newArrayList(); @@ -460,6 +492,11 @@ public class StructuresController implements IStructures { @Override public List<StructureElement> updateStructures(List<StructureElementCommand> structureElements) { + // validate authority + // naming user & admin + // validate + // do + try { structuresService.validateStructuresUpdate(structureElements); return structuresService.updateStructures(structureElements); @@ -475,6 +512,13 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<Resource> updateStructures(MultipartFile file) { + // validate authority + // naming user & admin + // convert from input + // validate + // do + // convert to output + try { if (ExcelUtil.hasExcelFormat(file)) { List<StructureElementCommand> structureElementCommands = ExcelUtil.excelToStructureElementCommands(file.getInputStream()); @@ -505,6 +549,11 @@ public class StructuresController implements IStructures { @Override public List<StructureElement> deleteStructures(List<StructureElementCommand> structureElements) { + // validate authority + // naming user & admin + // validate + // do + try { structuresService.validateStructuresDelete(structureElements); return structuresService.deleteStructures(structureElements); @@ -520,6 +569,13 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<Resource> deleteStructures(MultipartFile file) { + // validate authority + // naming user & admin + // convert from input + // validate + // do + // convert to output + try { if (ExcelUtil.hasExcelFormat(file)) { List<StructureElementCommand> structureElementCommands = ExcelUtil.excelToStructureElementCommands(file.getInputStream()); @@ -550,6 +606,11 @@ public class StructuresController implements IStructures { @Override public List<StructureElement> approveStructures(List<StructureElementCommand> structureElements) { + // validate authority + // naming admin + // validate + // do + try { structuresService.validateStructuresApprove(structureElements); return structuresService.approveStructures(structureElements); @@ -565,6 +626,13 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<Resource> approveStructures(MultipartFile file) { + // validate authority + // naming admin + // convert from input + // validate + // do + // convert to output + try { if (ExcelUtil.hasExcelFormat(file)) { List<StructureElementCommand> structureElementCommands = ExcelUtil.excelToStructureElementCommands(file.getInputStream()); @@ -593,6 +661,11 @@ public class StructuresController implements IStructures { @Override public List<StructureElement> cancelStructures(List<StructureElementCommand> structureElements) { + // validate authority + // naming admin + // validate + // do + try { structuresService.validateStructuresCancel(structureElements); return structuresService.cancelStructures(structureElements); @@ -608,6 +681,13 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<Resource> cancelStructures(MultipartFile file) { + // validate authority + // naming admin + // convert from input + // validate + // do + // convert to output + try { if (ExcelUtil.hasExcelFormat(file)) { List<StructureElementCommand> structureElementCommands = ExcelUtil.excelToStructureElementCommands(file.getInputStream()); @@ -636,6 +716,11 @@ public class StructuresController implements IStructures { @Override public List<StructureElement> rejectStructures(List<StructureElementCommand> structureElements) { + // validate authority + // naming admin + // validate + // do + try { structuresService.validateStructuresReject(structureElements); return structuresService.rejectStructures(structureElements); @@ -651,6 +736,13 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<Resource> rejectStructures(MultipartFile file) { + // validate authority + // naming admin + // convert from input + // validate + // do + // convert to output + try { if (ExcelUtil.hasExcelFormat(file)) { List<StructureElementCommand> structureElementCommands = ExcelUtil.excelToStructureElementCommands(file.getInputStream()); diff --git a/src/main/java/org/openepics/names/rest/controller/VerificationController.java b/src/main/java/org/openepics/names/rest/controller/VerificationController.java index 40bc8f52..35b7937a 100644 --- a/src/main/java/org/openepics/names/rest/controller/VerificationController.java +++ b/src/main/java/org/openepics/names/rest/controller/VerificationController.java @@ -84,14 +84,12 @@ public class VerificationController { // note // global exception handler available - - /* - Methods - read GET /verification/migration_devicerevision - readMigrationDeviceRevision() - read GET /verification/migration_namepartrevision - readMigrationNamePartRevision - read GET /verification/data_reachable - readDataReachable() - read GET /verification/restapi_oldvsnew - readRestApiOldVsNew() - */ + // + // methods + // read GET /verification/migration_devicerevision - readMigrationDeviceRevision() + // read GET /verification/migration_namepartrevision - readMigrationNamePartRevision + // read GET /verification/data_reachable - readDataReachable() + // read GET /verification/restapi_oldvsnew - readRestApiOldVsNew() private static final Logger LOGGER = Logger.getLogger(VerificationController.class.getName()); diff --git a/src/main/java/org/openepics/names/service/NamesService.java b/src/main/java/org/openepics/names/service/NamesService.java index 97cb80a9..16e3b40c 100644 --- a/src/main/java/org/openepics/names/service/NamesService.java +++ b/src/main/java/org/openepics/names/service/NamesService.java @@ -135,8 +135,7 @@ public class NamesService { @Transactional public List<NameElement> createNames(List<NameElementCommand> nameElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each name element @@ -164,6 +163,7 @@ public class NamesService { } @Transactional(propagation = Propagation.MANDATORY) public NameElement createName(NameElementCommand nameElement, HolderSystemDeviceStructure holder, Date requested, String requestedBy) { + // validation outside method // transaction // support a current transaction, throw an exception if none exists // do @@ -507,15 +507,14 @@ public class NamesService { validateNamesCreate(nameElement, new HolderSystemDeviceStructure(holderIRepositories)); } public void validateNamesCreate(NameElementCommand nameElement, HolderSystemDeviceStructure holder) { - // validate authority - // elsewhere - // naming user & admin // validate input // name element // validate input itself // validate data // name element - // validate towards repository + // validate data + // itself + // relative other data // validate input ValidateNameElementUtil.validateNameElementInputCreate(nameElement); @@ -536,15 +535,14 @@ public class NamesService { validateNamesUpdate(nameElement, new HolderSystemDeviceStructure(holderIRepositories)); } public void validateNamesUpdate(NameElementCommand nameElement, HolderSystemDeviceStructure holder) { - // validate authority - // elsewhere - // naming user & admin // validate input // name element // validate input itself // validate data // name element - // validate towards repository + // validate data + // itself + // relative other data // validate input ValidateNameElementUtil.validateNameElementInputUpdate(nameElement); @@ -565,13 +563,14 @@ public class NamesService { validateNamesDelete(nameElement, new HolderSystemDeviceStructure(holderIRepositories)); } public void validateNamesDelete(NameElementCommand nameElement, HolderSystemDeviceStructure holder) { - // validate authority - // elsewhere - // naming user & admin - // validate input - // uuid - // validate data - // retrieve name (uuid, latest, not deleted) + // validate input + // name element + // validate input itself + // validate data + // name element + // validate data + // itself + // relative other data // validate input ValidateNameElementUtil.validateNameElementInputDelete(nameElement); @@ -580,16 +579,6 @@ public class NamesService { ValidateNameElementUtil.validateNameElementDataDelete(nameElement, namingConvention, holderIRepositories, nameRepository, holder); } public void validateNamesDelete(List<NameElementCommand> nameElements) { - // validate authority - // elsewhere - // naming user & admin - // validate input - // name element - // validate input itself - // validate data - // name element - // validate towards repository - // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -602,8 +591,7 @@ public class NamesService { @Transactional public List<NameElement> updateNames(List<NameElementCommand> nameElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each name element @@ -686,8 +674,7 @@ public class NamesService { @Transactional public List<NameElement> deleteNames(List<NameElementCommand> nameElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each name element diff --git a/src/main/java/org/openepics/names/service/StructuresService.java b/src/main/java/org/openepics/names/service/StructuresService.java index f80d0df8..a4d7c80b 100644 --- a/src/main/java/org/openepics/names/service/StructuresService.java +++ b/src/main/java/org/openepics/names/service/StructuresService.java @@ -139,8 +139,7 @@ public class StructuresService { @Transactional public List<StructureElement> createStructures(List<StructureElementCommand> structureElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each structure element @@ -840,8 +839,7 @@ public class StructuresService { @Transactional public List<StructureElement> updateStructures(List<StructureElementCommand> structureElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each structure element @@ -947,8 +945,7 @@ public class StructuresService { @Transactional public List<StructureElement> deleteStructures(List<StructureElementCommand> structureElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each structure element @@ -1084,8 +1081,7 @@ public class StructuresService { @Transactional public List<StructureElement> approveStructures(List<StructureElementCommand> structureElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each structure element @@ -1326,8 +1322,7 @@ public class StructuresService { @Transactional public List<StructureElement> cancelStructures(List<StructureElementCommand> structureElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each structure element @@ -1443,8 +1438,7 @@ public class StructuresService { @Transactional public List<StructureElement> rejectStructures(List<StructureElementCommand> structureElements) { - // validate - // outside of @Transactional + // validation outside method // transaction // do // for each structure element diff --git a/src/main/java/org/openepics/names/util/EssNamingConvention.java b/src/main/java/org/openepics/names/util/EssNamingConvention.java index 4c49ac78..ba772ddc 100644 --- a/src/main/java/org/openepics/names/util/EssNamingConvention.java +++ b/src/main/java/org/openepics/names/util/EssNamingConvention.java @@ -51,8 +51,6 @@ public class EssNamingConvention implements NamingConvention { // mnemonic for instance index may be omitted for ess name // ---------------------------------------------------------------------------------------------------- - // Note revision history of file in repository. - private static final String MNEMONIC_ALPHABETIC_LOWERCASE = "^[a-z]+$"; private static final String MNEMONIC_ALPHANUMERIC = "^[a-zA-Z0-9]+$"; private static final String MNEMONIC_NUMERIC = "^[0-9]+$"; @@ -76,6 +74,8 @@ public class EssNamingConvention implements NamingConvention { @Override public boolean isInstanceIndexValid(String conventionName, boolean overrideRuleset) { + // ability to override ruleset for administrator + String instanceIndex = NamingConventionUtil.extractInstanceIndex(conventionName); if (overrideRuleset) { // previous rules, less restrictions @@ -150,6 +150,7 @@ public class EssNamingConvention implements NamingConvention { // valid if // length 1, 2, 3 // same mnemonic only once in mnemonic path + if (!StringUtils.isEmpty(mnemonicPath)) { String[] values = NamingConventionUtil.string2MnemonicPath(mnemonicPath.trim()); if (values.length > 3) { diff --git a/src/main/java/org/openepics/names/util/NameElementUtil.java b/src/main/java/org/openepics/names/util/NameElementUtil.java index 6618c2dc..852bddcf 100644 --- a/src/main/java/org/openepics/names/util/NameElementUtil.java +++ b/src/main/java/org/openepics/names/util/NameElementUtil.java @@ -126,27 +126,25 @@ public class NameElementUtil { * @return true if name element and name have same content, false otherwise */ public static boolean hasSameContent(NameElementCommand nameElement, Name name, HolderIRepositories holderIRepositories, HolderSystemDeviceStructure holder) { - /* - NameElement - x parentsystemstructure (system group, system, subsystem) - x parentdevicestructure (device type) - x index - x name - NameElementCommand - uuid - parentsystemstructure - parentdevicestructure - index - description - comment - Name - x systemgroup_uuid - x system_uuid - x subsystem_uuid - x devicetype_uuid - x instance_index - x convention_name - */ + // NameElement + // x parentsystemstructure (system group, system, subsystem) + // x parentdevicestructure (device type) + // x index + // x name + // NameElementCommand + // uuid + // parentsystemstructure + // parentdevicestructure + // index + // description + // comment + // Name + // x systemgroup_uuid + // x system_uuid + // x subsystem_uuid + // x devicetype_uuid + // x instance_index + // x convention_name // find out system group, system, subsystem // one of the three expected to be non-null, other two expected to be null diff --git a/src/main/java/org/openepics/names/util/NamingConvention.java b/src/main/java/org/openepics/names/util/NamingConvention.java index db22c655..d02dfddf 100644 --- a/src/main/java/org/openepics/names/util/NamingConvention.java +++ b/src/main/java/org/openepics/names/util/NamingConvention.java @@ -35,20 +35,31 @@ import org.openepics.names.rest.beans.Type; * <p> * A device name consists of elements having general structure * <ul> - * <li> <pre>Sys-Sub:Dis-Dev-Idx</pre> - * <li> <pre>Sup-Sys-Sub:Dis-Dev-Idx</pre> + * <li> System structure + * <ul> + * <li> Sg + * <li> Sys + * <li> Sys-Sub + * </ul> + * <li> System structure + Device structure + Index + * <ul> + * <li> Sg:Dis-Dev-Idx + * <li> Sys:Dis-Dev-Idx + * <li> Sys-Sub:Dis-Dev-Idx + * </ul> * </ul> - * It consists of of <br/><br/> + * It consists of<br/><br/> * <ul> * <li> System structure * <ul> - * <li> System group (Sup)(optional) - * <li> System (Sys) - * <li> Subsystem (Sub) + * <li> System group (Sg)(optional) + * <li> System (Sys) + * <li> Subsystem (Sub) * </ul> * <li> Device structure * <ul> - * <li> Discipline (Dis) + * <li> Discipline (Dis) + * <li> Device group * <li> Device type (Dev) * </ul> * <li> Device @@ -104,10 +115,8 @@ import org.openepics.names.rest.beans.Type; * @author Karin Rathsman * @author Lars Johansson * - * @see <a href="https://confluence.esss.lu.se/display/NC/ESS+Naming+Convention"/> - * https://confluence.esss.lu.se/display/NC/ESS+Naming+Convention</a> - * @see <a href="https://chess.esss.lu.se/enovia/tvc-action/showObject/dmg_TechnicalSpecification/ESS-0000757/valid"> - * https://chess.esss.lu.se/enovia/tvc-action/showObject/dmg_TechnicalSpecification/ESS-0000757/valid</a> + * @see <a href="https://chess.esss.lu.se/enovia/link/ESS-0000757/21308.51166.45568.45993/valid"> + * https://chess.esss.lu.se/enovia/link/ESS-0000757/21308.51166.45568.45993/valid</a> * * @see NamingConventionUtil */ diff --git a/src/main/java/org/openepics/names/util/StructureElementUtil.java b/src/main/java/org/openepics/names/util/StructureElementUtil.java index 271182e6..4bb31efe 100644 --- a/src/main/java/org/openepics/names/util/StructureElementUtil.java +++ b/src/main/java/org/openepics/names/util/StructureElementUtil.java @@ -567,20 +567,18 @@ public class StructureElementUtil { private static boolean hasSameContent(StructureElement structureElement, NameStructure nameStructure) { - /* - StructureElement - x uuid - x description - x status - x latest - x deleted - NameStructure - x uuid - x description - x status - x latest - x deleted - */ + // StructureElement + // x uuid + // x description + // x status + // x latest + // x deleted + // NameStructure + // x uuid + // x description + // x status + // x latest + // x deleted if (structureElement == null && nameStructure == null) return true; @@ -619,14 +617,12 @@ public class StructureElementUtil { } private static boolean hasSameContent(StructureElement structureElement, Structure structure) { - /* - StructureElement - x name - x mnemonic - Structure - x name - x mnemonic - */ + // StructureElement + // x name + // x mnemonic + // Structure + // x name + // x mnemonic if (!hasSameContent(structureElement, (NameStructure) structure)) return false; @@ -649,11 +645,9 @@ public class StructureElementUtil { } public static boolean hasSameContent(StructureElement structureElement, SystemGroup systemGroup) { - /* - StructureElement - x type - SystemGroup - */ + // StructureElement + // x type + // SystemGroup if (!hasSameContent(structureElement, (Structure) systemGroup)) return false; @@ -662,13 +656,11 @@ public class StructureElementUtil { } public static boolean hasSameContent(StructureElement structureElement, System system) { - /* - StructureElement - x type - x parent - System - x parent_uuid - */ + // StructureElement + // x type + // x parent + // System + // x parent_uuid if (!hasSameContent(structureElement, (Structure) system)) return false; @@ -686,13 +678,11 @@ public class StructureElementUtil { } public static boolean hasSameContent(StructureElement structureElement, Subsystem subsystem) { - /* - StructureElement - x type - x parent - Subsystem - x parent_uuid - */ + // StructureElement + // x type + // x parent + // Subsystem + // x parent_uuid if (!hasSameContent(structureElement, (Structure) subsystem)) return false; @@ -710,11 +700,9 @@ public class StructureElementUtil { } public static boolean hasSameContent(StructureElement structureElement, Discipline discipline) { - /* - StructureElement - x type - Discipline - */ + // StructureElement + // x type + // Discipline if (!hasSameContent(structureElement, (Structure) discipline)) return false; @@ -723,37 +711,33 @@ public class StructureElementUtil { } public static boolean hasSameContent(StructureElement structureElement, DeviceGroup deviceGroup) { - /* - StructureElement - x type - x parent - Subsystem - x parent_uuid - */ - - if (!hasSameContent(structureElement, (Structure) deviceGroup)) - return false; + // StructureElement + // x type + // x parent + // Subsystem + // x parent_uuid - if (!Type.DEVICEGROUP.equals(structureElement.getType())) { - return false; - } - if (structureElement.getParent() == null) { - if (deviceGroup.getParentUuid() != null) - return false; - } else if (!structureElement.getParent().equals(deviceGroup.getParentUuid())) - return false; + if (!hasSameContent(structureElement, (Structure) deviceGroup)) + return false; - return true; + if (!Type.DEVICEGROUP.equals(structureElement.getType())) { + return false; + } + if (structureElement.getParent() == null) { + if (deviceGroup.getParentUuid() != null) + return false; + } else if (!structureElement.getParent().equals(deviceGroup.getParentUuid())) + return false; + + return true; } public static boolean hasSameContent(StructureElement structureElement, DeviceType deviceType) { - /* - StructureElement - x type - x parent - DeviceType - x parent_uuid - */ + // StructureElement + // x type + // x parent + // DeviceType + // x parent_uuid if (!hasSameContent(structureElement, (Structure) deviceType)) return false; diff --git a/src/main/java/org/openepics/names/util/ValidateStructureElementUtil.java b/src/main/java/org/openepics/names/util/ValidateStructureElementUtil.java index b6c75ac0..94792086 100644 --- a/src/main/java/org/openepics/names/util/ValidateStructureElementUtil.java +++ b/src/main/java/org/openepics/names/util/ValidateStructureElementUtil.java @@ -802,7 +802,8 @@ public class ValidateStructureElementUtil { for (String existingPath : mnemonicPaths) { validateStructuresMnemonicpathequivalenceDuplicate( !StringUtils.equals(mnemonicpathEquivalence, namingConvention.equivalenceClassRepresentative(existingPath)), - type, details, field); } + type, details, field); + } } else if (Type.DISCIPLINE.equals(type)) { validateStructuresMnemonicpathNotValid(path.length == 1, type, details, field); -- GitLab