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 cbacb2aaf890abf6fb1a2e17f62a56b82fc1b5ee..4a0771fa3966e719983921208ff668619c2e460c 100644 --- a/src/main/java/org/openepics/names/rest/controller/NamesController.java +++ b/src/main/java/org/openepics/names/rest/controller/NamesController.java @@ -36,6 +36,8 @@ import org.openepics.names.service.LogService; import org.openepics.names.service.NamesService; import org.openepics.names.util.ExcelUtil; import org.openepics.names.util.TextUtil; +import org.openepics.names.util.ValidateNameElementUtil; +import org.openepics.names.util.ValidateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.core.io.InputStreamResource; @@ -58,15 +60,18 @@ import com.google.common.collect.Lists; @EnableAutoConfiguration public class NamesController implements INames { - // note - // global exception handler available - // // TODO validate authority // either // none // naming user // naming admin (& user) + // note + // global exception handler available + // controller layer to call validation prior to invoking service layer + // business logic may be validation + // different kinds of validation + private static final Logger LOGGER = Logger.getLogger(NamesController.class.getName()); private static final String ATTACHMENT_FILENAME_NAME_ELEMENT_XLSX = "attachment; filename=NameElement.xlsx"; @@ -143,9 +148,16 @@ 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) { + // validate // do try { + ValidateNameElementUtil.validateNamesInputRead( + deleted, + uuid, name, nameequivalence, systemstructure, devicestructure, description, + null, + orderBy, isAsc, + page, pageSize); return namesService.readNames(deleted, uuid, name, nameequivalence, systemstructure, devicestructure, index, description, orderBy, isAsc, page, pageSize); @@ -163,6 +175,7 @@ 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) { + // validate // do // convert to output @@ -179,9 +192,11 @@ public class NamesController implements INames { @Override public ResponsePageNameElements readNames(String name, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // validate // do try { + ValidateUtil.validateInputName(name); return namesService.readNames(name, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); @@ -196,9 +211,11 @@ public class NamesController implements INames { @Override public ResponsePageNameElements readNamesSystemStructure(String mnemonicpath, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // validate // do try { + ValidateUtil.validateInputMnemonicpath(mnemonicpath); return namesService.readNamesSystemStructure(mnemonicpath, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { @@ -214,9 +231,11 @@ public class NamesController implements INames { @Override public ResponsePageNameElements readNamesDeviceStructure(String mnemonicpath, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // validate // do try { + ValidateUtil.validateInputMnemonicpath(mnemonicpath); return namesService.readNamesDeviceStructure(mnemonicpath, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { @@ -232,9 +251,11 @@ public class NamesController implements INames { @Override public ResponsePageNameElements readNamesHistory(String uuid, FieldName orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // validate // do try { + ValidateUtil.validateInputUuid(uuid); return namesService.readNamesHistory(uuid, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { @@ -251,9 +272,11 @@ public class NamesController implements INames { @Override public String equivalenceName(String name) { + // validate // do try { + ValidateUtil.validateInputName(name); return namesService.equivalenceName(name); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); @@ -267,9 +290,11 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBoolean> existsName(String name) { + // validate // do try { + ValidateUtil.validateInputName(name); return new ResponseEntity<>(new ResponseBoolean(namesService.existsName(name)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); @@ -283,9 +308,11 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBoolean> isLegacyName(String name) { + // validate // do try { + ValidateUtil.validateInputName(name); return new ResponseEntity<>(new ResponseBoolean(namesService.isLegacyName(name)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); @@ -299,9 +326,11 @@ public class NamesController implements INames { @Override public ResponseEntity<ResponseBoolean> isValidToCreateName(String name) { + // validate // do try { + ValidateUtil.validateInputName(name); return new ResponseEntity<>(new ResponseBoolean(namesService.isValidToCreateName(name)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); 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 02d0aa6ba76849b942273c35310811f9eeda9666..98116510458928caa50026fd81e42256a0522571 100644 --- a/src/main/java/org/openepics/names/rest/controller/StructuresController.java +++ b/src/main/java/org/openepics/names/rest/controller/StructuresController.java @@ -38,6 +38,8 @@ import org.openepics.names.service.LogService; import org.openepics.names.service.StructuresService; import org.openepics.names.util.ExcelUtil; import org.openepics.names.util.TextUtil; +import org.openepics.names.util.ValidateStructureElementUtil; +import org.openepics.names.util.ValidateUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.core.io.InputStreamResource; @@ -60,15 +62,18 @@ import com.google.common.collect.Lists; @EnableAutoConfiguration public class StructuresController implements IStructures { - // note - // global exception handler available - // // TODO validate authority // either // none // naming user // naming admin (& user) + // note + // global exception handler available + // controller layer to call validation prior to invoking service layer + // business logic may be validation + // different kinds of validation + private static final Logger LOGGER = Logger.getLogger(StructuresController.class.getName()); private static final String ATTACHMENT_FILENAME_STRUCTURE_ELEMENT_XLSX = "attachment; filename=StructureElement.xlsx"; @@ -145,9 +150,13 @@ 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) { + // validate // do try { + ValidateStructureElementUtil.validateStructuresInputRead(type, statuses, deleted, + uuid, parentuuid, name, mnemonic, mnemonicequivalence, mnemonicpath, description, + null, orderBy, isAsc, page, pageSize); return structuresService.readStructures(type, statuses, deleted, uuid, parentuuid, name, mnemonic, mnemonicequivalence, mnemonicpath, description, orderBy, isAsc, page, pageSize); @@ -165,6 +174,7 @@ 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) { + // validate // do // convert to output @@ -182,9 +192,11 @@ 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) { + // validate // do try { + ValidateUtil.validateInputUuid(uuid); return structuresService.readStructuresChildren(uuid, type, statuses, deleted, name, mnemonic, mnemonicequivalence, mnemonicpath, description, orderBy, isAsc, page, pageSize); @@ -201,9 +213,11 @@ public class StructuresController implements IStructures { @Override public ResponsePageStructureElements readStructuresMnemonic(String mnemonic, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // validate // do try { + ValidateUtil.validateInputMnemonic(mnemonic); return structuresService.readStructuresMnemonic(mnemonic, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); @@ -218,9 +232,11 @@ public class StructuresController implements IStructures { @Override public ResponsePageStructureElements readStructuresMnemonicpath(String mnemonicpath, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // validate // do try { + ValidateUtil.validateInputMnemonicpath(mnemonicpath); return structuresService.readStructuresMnemonicpath(mnemonicpath, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); @@ -235,9 +251,11 @@ public class StructuresController implements IStructures { @Override public ResponsePageStructureElements readStructuresHistory(String uuid, Type type, FieldStructure orderBy, Boolean isAsc, Integer page, Integer pageSize) { + // validate // do try { + ValidateUtil.validateInputUuid(uuid); return structuresService.readStructuresHistory(uuid, type, orderBy, isAsc, page, pageSize); } catch (ServiceException e) { @@ -254,9 +272,11 @@ public class StructuresController implements IStructures { @Override public String equivalenceMnemonic(String mnemonic) { + // validate // do try { + ValidateUtil.validateInputMnemonic(mnemonic); return structuresService.equivalenceMnemonic(mnemonic); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); @@ -270,9 +290,12 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBoolean> existsStructure(Type type, String mnemonicpath) { + // validate // do try { + ValidateUtil.validateInputType(type); + ValidateUtil.validateInputMnemonicpath(mnemonicpath); return new ResponseEntity<>(new ResponseBoolean(structuresService.existsStructure(type, mnemonicpath)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); @@ -286,9 +309,12 @@ public class StructuresController implements IStructures { @Override public ResponseEntity<ResponseBoolean> isValidToCreateStructure(Type type, String mnemonicpath) { + // validate // do try { + ValidateUtil.validateInputType(type); + ValidateUtil.validateInputMnemonicpath(mnemonicpath); return new ResponseEntity<>(new ResponseBoolean(structuresService.isValidToCreateStructure(type, mnemonicpath)), Response.getHeaderJson(), HttpStatus.OK); } catch (ServiceException e) { logService.logServiceException(LOGGER, Level.WARNING, e); diff --git a/src/main/java/org/openepics/names/service/NamesService.java b/src/main/java/org/openepics/names/service/NamesService.java index 16e3b40ce10bfa1c0ed4884f30bb869f2f019600..5135ff22dd3b09606137414a7c39e4025326d8ef 100644 --- a/src/main/java/org/openepics/names/service/NamesService.java +++ b/src/main/java/org/openepics/names/service/NamesService.java @@ -224,6 +224,11 @@ public class NamesService { public ResponsePageNameElements readNames(Boolean deleted, String uuid, String name, String nameequivalence, String systemstructure, String devicestructure, String index, String description, Boolean includeHistory, FieldName orderBy, Boolean isAsc, Integer offset, Integer limit) { + // validation outside method + // do + // read names + // return + // name elements for names LOGGER.log(Level.FINE, "readNames, deleted: {0}", deleted); LOGGER.log(Level.FINE, "readNames, uuid: {0}", uuid); @@ -239,22 +244,6 @@ public class NamesService { LOGGER.log(Level.FINE, "readNames, offset: {0}", offset); LOGGER.log(Level.FINE, "readNames, limit: {0}", limit); - // validate input - // queryFields and queryValues - // uuid - // do - // read names - // return - // name elements for names - - // validate input - ValidateNameElementUtil.validateNamesInputRead( - deleted, - uuid, name, nameequivalence, systemstructure, devicestructure, description, - includeHistory, - orderBy, isAsc, - offset, limit); - // do List<Name> names = nameRepository.readNames(deleted, uuid, name, nameequivalence, systemstructure, devicestructure, index, description, includeHistory, orderBy, isAsc, offset, limit); Long totalCount = nameRepository.countNames(deleted, uuid, name, nameequivalence, systemstructure, devicestructure, index, description, includeHistory); @@ -271,19 +260,13 @@ public class NamesService { public ResponsePageNameElements readNames(String name, FieldName orderBy, Boolean isAsc, Integer offset, Integer limit) { - - LOGGER.log(Level.FINE, "readNames, name: {0}", name); - - // validate input - // name or uuid - // to work with both uuid and name + // validation outside method // do // name or uuid // return // name elements - // validate input - ValidateUtil.validateInputName(name); + LOGGER.log(Level.FINE, "readNames, name: {0}", name); // do final List<NameElement> nameElements = Lists.newArrayList(); @@ -305,18 +288,13 @@ public class NamesService { public ResponsePageNameElements readNamesSystemStructure(String mnemonicpath, FieldName orderBy, Boolean isAsc, Integer offset, Integer limit) { - - LOGGER.log(Level.FINE, "readNamesSystemStructure, mnemonicpath: {0}", mnemonicpath); - - // validate input - // mnemonic path + // validation outside method // do // mnemonic path // return // name elements - // validate input - ValidateUtil.validateInputMnemonicpath(mnemonicpath); + LOGGER.log(Level.FINE, "readNamesSystemStructure, mnemonicpath: {0}", mnemonicpath); // do return readNames(false, @@ -326,18 +304,13 @@ public class NamesService { public ResponsePageNameElements readNamesDeviceStructure(String mnemonicpath, FieldName orderBy, Boolean isAsc, Integer offset, Integer limit) { - - LOGGER.log(Level.FINE, "readNamesDeviceStructure, mnemonicpath: {0}", mnemonicpath); - - // validate input - // mnemonic path + // validation outside method // do // mnemonic path // return // name elements - // validate input - ValidateUtil.validateInputMnemonicpath(mnemonicpath); + LOGGER.log(Level.FINE, "readNamesDeviceStructure, mnemonicpath: {0}", mnemonicpath); // do return readNames(false, @@ -347,19 +320,13 @@ public class NamesService { public ResponsePageNameElements readNamesHistory(String uuid, FieldName orderBy, Boolean isAsc, Integer offset, Integer limit) { - LOGGER.log(Level.FINE, "readNamesHistory, uuid: {0}", uuid); - - // note - // HolderIRepositories and HolderSystemDeviceStructure may or may not be used for preparation of what to return - // validate input - // uuid + // validation outside method // do // read history for name // return // name elements for names - // validate input - ValidateUtil.validateInputUuid(uuid); + LOGGER.log(Level.FINE, "readNamesHistory, uuid: {0}", uuid); // do return readNames(null, @@ -370,28 +337,22 @@ public class NamesService { // ---------------------------------------------------------------------------------------------------- public String equivalenceName(String name) { - LOGGER.log(Level.FINE, "equivalenceName, name: {0}", name); - - // validate input + // validation outside method // do - // exists + // input available - // validate input - ValidateUtil.validateInputName(name); + LOGGER.log(Level.FINE, "equivalenceName, name: {0}", name); // do return namingConvention.equivalenceClassRepresentative(name); } public Boolean existsName(String name) { - LOGGER.log(Level.FINE, "existsName, name: {0}", name); - - // validate input + // validation outside method // do // exists - // validate input - ValidateUtil.validateInputName(name); + LOGGER.log(Level.FINE, "existsName, name: {0}", name); // do List<Name> names = nameRepository.readNames(false, @@ -400,14 +361,11 @@ public class NamesService { } public Boolean isLegacyName(String name) { - LOGGER.log(Level.FINE, "isLegacyName, name: {0}", name); - - // validate input + // validation outside method // do // name exists but either parent does not exist (latest, not deleted, by uuid) - // validate input - ValidateUtil.validateInputName(name); + LOGGER.log(Level.FINE, "isLegacyName, name: {0}", name); // do List<Name> names = nameRepository.readNames(false, null, name, null, null, null, null, null); @@ -482,20 +440,18 @@ public class NamesService { } public Boolean isValidToCreateName(String name) { - LOGGER.log(Level.FINE, "isValidToCreateName, name: {0}", name); - - // validate input - // validate data - // not exists + // validation outside method + // do + // validate data + // not exists - // validate input - ValidateUtil.validateInputName(name); + LOGGER.log(Level.FINE, "isValidToCreateName, name: {0}", name); // initiate holder of containers for system and device structure content, for performance reasons // note false to not include deleted entries HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories, false); - // validate data + // do ValidateNameElementUtil.validateNameDataCreate(name, namingConvention, holderRepositories, holder); return Boolean.TRUE; diff --git a/src/main/java/org/openepics/names/service/StructuresService.java b/src/main/java/org/openepics/names/service/StructuresService.java index a4d7c80b9c13b2a8e7ae9b79f43552ed302e07b8..ec4bbad208c6fe48ee51b34b6abb67bdbdf32663 100644 --- a/src/main/java/org/openepics/names/service/StructuresService.java +++ b/src/main/java/org/openepics/names/service/StructuresService.java @@ -255,6 +255,11 @@ public class StructuresService { String uuid, String parentUuid, String name, String mnemonic, String mnemonicequivalence, String mnemonicpath, String description, Boolean includeHistory, FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit, StructureChoice structureChoice) { + // validation outside method + // do + // read structures + // return + // structure elements for structures LOGGER.log(Level.FINE, "readStructures, type: {0}", type); LOGGER.log(Level.FINE, "readStructures, statuses.length: {0}", Utilities.getLength(statuses)); @@ -278,20 +283,6 @@ public class StructuresService { } } - // validate input - // type - // queryFields and queryValues - // uuid - // do - // read structures - // return - // structure elements for structures - - // validate input - ValidateStructureElementUtil.validateStructuresInputRead(type, statuses, deleted, - uuid, parentUuid, name, mnemonic, mnemonicequivalence, mnemonicpath, description, - includeHistory, orderBy, isAsc, offset, limit); - // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -376,9 +367,7 @@ public class StructuresService { 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 offset, Integer limit) { - - // validate input - // type, uuid + // validation outside method // do // read structure latest by uuid for type // return @@ -387,9 +376,6 @@ public class StructuresService { LOGGER.log(Level.FINE, "readStructuresChildren, uuid: {0}", uuid); LOGGER.log(Level.FINE, "readStructuresChildren, type: {0}", type); - // validate input - ValidateUtil.validateInputUuid(uuid); - boolean typeSystemGroup = Type.SYSTEMGROUP.equals(type); boolean typeSystem = Type.SYSTEM.equals(type); boolean typeSubsystem = Type.SUBSYSTEM.equals(type); @@ -436,9 +422,7 @@ public class StructuresService { public ResponsePageStructureElements readStructuresMnemonic(String mnemonic, FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) { - - // validate input - // mnemonic + // validation outside method // do // read structure latest by mnemonic // return @@ -446,9 +430,6 @@ public class StructuresService { LOGGER.log(Level.FINE, "readStructuresMnemonic, mnemonic: {0}", mnemonic); - // validate input - ValidateUtil.validateInputMnemonic(mnemonic); - // do // TODO handle orderBy, isAsc, offset, limit @@ -472,9 +453,7 @@ public class StructuresService { public ResponsePageStructureElements readStructuresMnemonicpath(String mnemonicpath, FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) { - - // validate input - // mnemonicpath + // validation outside method // do // read structure latest by mnemonicpath // return @@ -482,9 +461,6 @@ public class StructuresService { LOGGER.log(Level.FINE, "readStructuresMnemonicpath, mnemonicpath: {0}", mnemonicpath); - // validate input - ValidateUtil.validateInputMnemonic(mnemonicpath); - // do // TODO handle orderBy, isAsc, offset, limit @@ -515,23 +491,17 @@ public class StructuresService { */ public ResponsePageStructureElements readStructuresHistory(String uuid, Type type, FieldStructure orderBy, Boolean isAsc, Integer offset, Integer limit) { - - // note - // HolderIRepositories and HolderSystemDeviceStructure may or may not be used for preparation of what to return - // type may speed up read - // validate input - // uuid + // validation outside method // do // read history for structure // return // structure elements for structures + // note + // type may speed up read LOGGER.log(Level.FINE, "readStructuresHistory, uuid: {0}", uuid); LOGGER.log(Level.FINE, "readStructuresHistory, type: {0}", type); - // validate input - ValidateUtil.validateInputUuid(uuid); - boolean typeSystemGroup = Type.SYSTEMGROUP.equals(type); boolean typeSystem = Type.SYSTEM.equals(type); boolean typeSubsystem = Type.SUBSYSTEM.equals(type); @@ -590,30 +560,23 @@ public class StructuresService { // ---------------------------------------------------------------------------------------------------- public String equivalenceMnemonic(String mnemonic) { - // validate input + // validation outside method // do - // exists + // input available LOGGER.log(Level.FINE, "equivalenceMnemonic, mnemonic: {0}", mnemonic); - // validate input - ValidateUtil.validateInputMnemonic(mnemonic); - // do return namingConvention.equivalenceClassRepresentative(mnemonic); } public Boolean existsStructure(Type type, String mnemonicpath) { - // validate input + // validation outside method // do // exists LOGGER.log(Level.FINE, "existsStructure, mnemonicpath: {0}", mnemonicpath); - // validate input - ValidateUtil.validateInputType(type); - ValidateUtil.validateInputMnemonicpath(mnemonicpath); - // do if (Type.SYSTEMGROUP.equals(type)) { List<SystemGroup> systemGroups = holderRepositories.getSystemGroupRepository().readSystemGroups(Status.APPROVED, false, null, null, null, null, mnemonicpath, null); @@ -639,21 +602,18 @@ public class StructuresService { } public Boolean isValidToCreateStructure(Type type, String mnemonicpath) { - // validate input - // validate data - // not exists + // validation outside method + // do + // validate data + // not exists LOGGER.log(Level.FINE, "isValidToCreateStructure, mnemonicpath: {0}", mnemonicpath); - // validate input - ValidateUtil.validateInputType(type); - ValidateUtil.validateInputMnemonicpath(mnemonicpath); - // initiate holder of containers for system and device structure content, for performance reasons // note false to not include deleted entries HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories, false); - // validate data + // do ValidateStructureElementUtil.validateStructureDataCreate(type, mnemonicpath, namingConvention, holderIRepositories, holder); return Boolean.TRUE;