diff --git a/src/main/java/org/openepics/names/service/NamesService.java b/src/main/java/org/openepics/names/service/NamesService.java index ef6697389b17d643029c2c0ce079770209a7a197..7f2d65b30af37c488d09c66eac8db797d19293b9 100644 --- a/src/main/java/org/openepics/names/service/NamesService.java +++ b/src/main/java/org/openepics/names/service/NamesService.java @@ -58,6 +58,7 @@ import org.openepics.names.util.HolderSystemDeviceStructure; import org.openepics.names.util.NameElementUtil; import org.openepics.names.util.NameUtil; import org.openepics.names.util.TextUtil; +import org.openepics.names.util.Utilities; import org.openepics.names.util.ValidateNameElementUtil; import org.openepics.names.util.ValidateUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -144,7 +145,7 @@ public class NamesService { // return // name elements for created names - LOGGER.log(Level.FINE, "createNames, nameElements.size: {0}", String.valueOf(nameElements != null ? nameElements.size() : "null")); + LOGGER.log(Level.FINE, "createNames, nameElements.size: {0}", Utilities.getSize(nameElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -619,7 +620,7 @@ public class NamesService { // return // name elements for updated names - LOGGER.log(Level.FINE, "updateNames, nameElements.size: {0}", String.valueOf(nameElements != null ? nameElements.size() : "null")); + LOGGER.log(Level.FINE, "updateNames, nameElements.size: {0}", Utilities.getSize(nameElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -699,7 +700,7 @@ public class NamesService { // return // name element for deleted name - LOGGER.log(Level.FINE, "deleteNames, nameElements.size: {0}", String.valueOf(nameElements != null ? nameElements.size() : "null")); + LOGGER.log(Level.FINE, "deleteNames, nameElements.size: {0}", Utilities.getSize(nameElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); diff --git a/src/main/java/org/openepics/names/service/StructuresService.java b/src/main/java/org/openepics/names/service/StructuresService.java index 1b5bee770a4c28a65b41b12285a4e21e1a66ba10..95b71999496d6220e633f6665c96a41e9eed6333 100644 --- a/src/main/java/org/openepics/names/service/StructuresService.java +++ b/src/main/java/org/openepics/names/service/StructuresService.java @@ -59,6 +59,7 @@ import org.openepics.names.util.HolderRepositories; import org.openepics.names.util.HolderSystemDeviceStructure; import org.openepics.names.util.StructureElementUtil; import org.openepics.names.util.TextUtil; +import org.openepics.names.util.Utilities; import org.openepics.names.util.ValidateStructureElementUtil; import org.openepics.names.util.StructureElementUtil.StructureChoice; import org.openepics.names.util.ValidateUtil; @@ -147,7 +148,7 @@ public class StructuresService { // return // structure elements for created structures - LOGGER.log(Level.FINE, "createStructures, structureElements.size: {0}", String.valueOf(structureElements != null ? structureElements.size() : "null")); + LOGGER.log(Level.FINE, "createStructures, structureElements.size: {0}", Utilities.getSize(structureElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -273,7 +274,7 @@ public class StructuresService { StructureChoice structureChoice) { LOGGER.log(Level.FINE, "readStructures, type: {0}", type); - LOGGER.log(Level.FINE, "readStructures, statuses.length: {0}", String.valueOf(statuses != null ? statuses.length : "null")); + LOGGER.log(Level.FINE, "readStructures, statuses.length: {0}", Utilities.getLength(statuses)); LOGGER.log(Level.FINE, "readStructures, deleted: {0}", deleted); LOGGER.log(Level.FINE, "readStructures, uuid: {0}", uuid); LOGGER.log(Level.FINE, "readStructures, parentUuid: {0}", parentUuid); @@ -288,7 +289,7 @@ public class StructuresService { LOGGER.log(Level.FINE, "readStructures, offset: {0}", offset); LOGGER.log(Level.FINE, "readStructures, limit: {0}", limit); LOGGER.log(Level.FINE, "readStructures, structureChoice: {0}", structureChoice); - if (statuses != null && statuses.length > 0) { + if (statuses != null) { for (Status status : statuses) { LOGGER.log(Level.FINE, "readStructures, status: {0}", status); } @@ -406,13 +407,13 @@ public class StructuresService { // validate input ValidateUtil.validateInputUuid(uuid); - boolean typeSystemGroup = type != null && Type.SYSTEMGROUP.equals(type); - boolean typeSystem = type != null && Type.SYSTEM.equals(type); - boolean typeSubsystem = type != null && Type.SUBSYSTEM.equals(type); - boolean typeDiscipline = type != null && Type.DISCIPLINE.equals(type); - boolean typeDeviceGroup = type != null && Type.DEVICEGROUP.equals(type); - boolean typeDeviceType = type != null && Type.DEVICETYPE.equals(type); - boolean typeEither = typeSystemGroup || typeSystem || typeSubsystem || typeDiscipline || typeDeviceGroup || typeDeviceType; + boolean typeSystemGroup = Type.SYSTEMGROUP.equals(type); + boolean typeSystem = Type.SYSTEM.equals(type); + boolean typeSubsystem = Type.SUBSYSTEM.equals(type); + boolean typeDiscipline = Type.DISCIPLINE.equals(type); + boolean typeDeviceGroup = Type.DEVICEGROUP.equals(type); + boolean typeDeviceType = Type.DEVICETYPE.equals(type); + boolean typeEither = ValidateUtil.isAnyTrue(typeSystemGroup, typeSystem, typeSubsystem, typeDiscipline, typeDeviceGroup, typeDeviceType); // do final List<StructureElement> structureElements = Lists.newArrayList(); @@ -564,13 +565,13 @@ public class StructuresService { // validate input ValidateUtil.validateInputUuid(uuid); - boolean typeSystemGroup = type != null && Type.SYSTEMGROUP.equals(type); - boolean typeSystem = type != null && Type.SYSTEM.equals(type); - boolean typeSubsystem = type != null && Type.SUBSYSTEM.equals(type); - boolean typeDiscipline = type != null && Type.DISCIPLINE.equals(type); - boolean typeDeviceGroup = type != null && Type.DEVICEGROUP.equals(type); - boolean typeDeviceType = type != null && Type.DEVICETYPE.equals(type); - boolean typeEither = typeSystemGroup || typeSystem || typeSubsystem || typeDiscipline || typeDeviceGroup || typeDeviceType; + boolean typeSystemGroup = Type.SYSTEMGROUP.equals(type); + boolean typeSystem = Type.SYSTEM.equals(type); + boolean typeSubsystem = Type.SUBSYSTEM.equals(type); + boolean typeDiscipline = Type.DISCIPLINE.equals(type); + boolean typeDeviceGroup = Type.DEVICEGROUP.equals(type); + boolean typeDeviceType = Type.DEVICETYPE.equals(type); + boolean typeEither = ValidateUtil.isAnyTrue(typeSystemGroup, typeSystem, typeSubsystem, typeDiscipline, typeDeviceGroup, typeDeviceType); // mnemonic path does not make same sense for history // (very) tricky to find mnemonic path for uuid at proper time (history) @@ -887,7 +888,7 @@ public class StructuresService { // return // structure elements for updated structures - LOGGER.log(Level.FINE, "updateStructures, structureElements.size: {0}", String.valueOf(structureElements != null ? structureElements.size() : "null")); + LOGGER.log(Level.FINE, "updateStructures, structureElements.size: {0}", Utilities.getSize(structureElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -1013,7 +1014,7 @@ public class StructuresService { // structure elements for deleted structures // TODO continue ---> validation error - LOGGER.log(Level.FINE, "deleteStructures, structureElements.size: {0}", String.valueOf(structureElements != null ? structureElements.size() : "null")); + LOGGER.log(Level.FINE, "deleteStructures, structureElements.size: {0}", Utilities.getSize(structureElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -1171,7 +1172,7 @@ public class StructuresService { // updated structure element // TODO continue ---> validation error - LOGGER.log(Level.FINE, "approveStructures, structureElements.size: {0}", String.valueOf(structureElements != null ? structureElements.size() : "null")); + LOGGER.log(Level.FINE, "approveStructures, structureElements.size: {0}", Utilities.getSize(structureElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -1416,7 +1417,7 @@ public class StructuresService { // updated structure element // TODO continue ---> validation error - LOGGER.log(Level.FINE, "cancelStructures, structureElements.size: {0}", String.valueOf(structureElements != null ? structureElements.size() : "null")); + LOGGER.log(Level.FINE, "cancelStructures, structureElements.size: {0}", Utilities.getSize(structureElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); @@ -1548,7 +1549,7 @@ public class StructuresService { // updated structure element // TODO continue ---> validation error - LOGGER.log(Level.FINE, "rejectStructures, structureElements.size: {0}", String.valueOf(structureElements != null ? structureElements.size() : "null")); + LOGGER.log(Level.FINE, "rejectStructures, structureElements.size: {0}", Utilities.getSize(structureElements)); // initiate holder of containers for system and device structure content, for performance reasons HolderSystemDeviceStructure holder = new HolderSystemDeviceStructure(holderIRepositories); diff --git a/src/main/java/org/openepics/names/util/Utilities.java b/src/main/java/org/openepics/names/util/Utilities.java new file mode 100644 index 0000000000000000000000000000000000000000..c4f6fb25d2bee8237d57e5f1cdef562650b9cbb3 --- /dev/null +++ b/src/main/java/org/openepics/names/util/Utilities.java @@ -0,0 +1,64 @@ +/* + * 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.util; + +import java.util.Collection; + +/** + * Utility class to assist in handling of various things. + * + * @author Lars Johansson + */ +public class Utilities { + + /** + * This class is not to be instantiated. + */ + private Utilities() { + throw new IllegalStateException("Utility class"); + } + + /** + * Return size of collection, <tt>0</tt> if collection is <tt>null</tt>. + * + * @param <T> type parameter + * @param collection collection + * @return size of collection + */ + public static <T> int getSize(Collection<T> collection) { + return collection != null + ? collection.size() + : 0; + } + + /*** + * Return length of array, <tt>0</tt> if array is <tt>null</tt>. + * + * @param <T> type parameter + * @param values values + * @return length of array + */ + @SafeVarargs + public static <T> int getLength(T... values) { + return values != null + ? values.length + : 0; + } + +} diff --git a/src/main/java/org/openepics/names/util/ValidateUtil.java b/src/main/java/org/openepics/names/util/ValidateUtil.java index 06582b2133cecb028966c3e9f1c9add34301bf39..afc936971227de8627e2d63993662e433ac8bded 100644 --- a/src/main/java/org/openepics/names/util/ValidateUtil.java +++ b/src/main/java/org/openepics/names/util/ValidateUtil.java @@ -283,7 +283,7 @@ public class ValidateUtil { * @return boolean if validation is ok */ public static boolean isAnyEqual(Type type, Type... values) { - if (isAnyNull(type, values)) { + if (type == null || values == null) { return false; } for (Type value : values) { @@ -294,4 +294,22 @@ public class ValidateUtil { return false; } + /** + * Validate given values such that <tt>true</tt> is returned if any value is <tt>true</tt>. + * + * @param values values + * @return if validation is ok + */ + public static boolean isAnyTrue(boolean... values) { + if (values == null) { + return false; + } + for (boolean value : values) { + if (value) { + return true; + } + } + return false; + } + } diff --git a/src/test/java/org/openepics/names/util/UtilitiesTest.java b/src/test/java/org/openepics/names/util/UtilitiesTest.java new file mode 100644 index 0000000000000000000000000000000000000000..3d85986e5549c4200ef49e3ac0d288f2b40e24e1 --- /dev/null +++ b/src/test/java/org/openepics/names/util/UtilitiesTest.java @@ -0,0 +1,99 @@ +/* + * 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.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Collections; +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.openepics.names.rest.beans.Type; + +import com.google.common.collect.Lists; + +/** + * Unit tests for Utilities class. + * + * @author Lars Johansson + * + * @see Utilities + */ +class UtilitiesTest { + + /** + * Test of getting size of collection. + */ + @Test + void getSize() { + assertEquals(0, Utilities.getSize(null)); + assertEquals(0, Utilities.getSize(Collections.emptyList())); + assertEquals(0, Utilities.getSize(Collections.emptySet())); + + List<String> list = Lists.newArrayList(); + assertEquals(0, Utilities.getSize(list)); + list.add("a"); + assertEquals(1, Utilities.getSize(list)); + list.add("b"); + list.add("c"); + assertEquals(3, Utilities.getSize(list)); + list.add("d"); + list.add("e"); + list.add("f"); + assertEquals(6, Utilities.getSize(list)); + } + + /** + * Test of getting length of array. + */ + @Test + void getLength() { + Object[] values = null; + assertEquals(0, Utilities.getLength(values)); + values = new Object[]{"a", 1L}; + assertEquals(2, Utilities.getLength(values)); + + assertEquals(1, Utilities.getLength("a")); + assertEquals(2, Utilities.getLength("a", "b")); + assertEquals(3, Utilities.getLength("a", "b", "c")); + assertEquals(1, Utilities.getLength(1L)); + assertEquals(2, Utilities.getLength(1L, 2L)); + assertEquals(3, Utilities.getLength(1L, 2L, 3L)); + + assertEquals(1, Utilities.getLength(Type.SYSTEMGROUP)); + assertEquals(1, Utilities.getLength(Type.SYSTEM)); + assertEquals(1, Utilities.getLength(Type.SUBSYSTEM)); + assertEquals(1, Utilities.getLength(Type.DISCIPLINE)); + assertEquals(1, Utilities.getLength(Type.DEVICEGROUP)); + assertEquals(1, Utilities.getLength(Type.DEVICETYPE)); + + assertEquals(2, Utilities.getLength(Type.SYSTEMGROUP, Type.SYSTEM)); + assertEquals(3, Utilities.getLength(Type.SYSTEMGROUP, Type.SYSTEM, Type.SUBSYSTEM)); + assertEquals(4, Utilities.getLength(Type.SYSTEMGROUP, Type.SYSTEM, Type.SUBSYSTEM, Type.DISCIPLINE)); + assertEquals(5, Utilities.getLength(Type.SYSTEMGROUP, Type.SYSTEM, Type.SUBSYSTEM, Type.DISCIPLINE, Type.DEVICEGROUP)); + assertEquals(6, Utilities.getLength(Type.SYSTEMGROUP, Type.SYSTEM, Type.SUBSYSTEM, Type.DISCIPLINE, Type.DEVICEGROUP, Type.DEVICETYPE)); + + assertEquals(2, Utilities.getLength(Type.DEVICETYPE, Type.DEVICEGROUP)); + assertEquals(3, Utilities.getLength(Type.DEVICETYPE, Type.DEVICEGROUP, Type.DISCIPLINE)); + assertEquals(4, Utilities.getLength(Type.DEVICETYPE, Type.DEVICEGROUP, Type.DISCIPLINE, Type.SUBSYSTEM)); + assertEquals(5, Utilities.getLength(Type.DEVICETYPE, Type.DEVICEGROUP, Type.DISCIPLINE, Type.SUBSYSTEM, Type.SYSTEM)); + assertEquals(6, Utilities.getLength(Type.DEVICETYPE, Type.DEVICEGROUP, Type.DISCIPLINE, Type.SUBSYSTEM, Type.SYSTEM, Type.SYSTEMGROUP)); + } + +} diff --git a/src/test/java/org/openepics/names/util/ValidateUtilTest.java b/src/test/java/org/openepics/names/util/ValidateUtilTest.java index b36d77be8bde4cc2499cc4cfd3052878fe20b9cc..1f9c55590f530c7d634e785c76f88afadfdf75fb 100644 --- a/src/test/java/org/openepics/names/util/ValidateUtilTest.java +++ b/src/test/java/org/openepics/names/util/ValidateUtilTest.java @@ -580,6 +580,29 @@ class ValidateUtilTest { assertTrue (ValidateUtil.isAnyEqual(type, Type.DEVICETYPE, Type.DEVICEGROUP, Type.DISCIPLINE, Type.SUBSYSTEM, Type.SYSTEM, Type.SYSTEMGROUP)); } + /** + * Test to validate an array if any value in array is true. + * + * @param s string + * @param i integer + * @param f float + * @param expected expected + */ + @ParameterizedTest + @CsvSource(value = { + "false,false,false,false", + "false,false,true, true", + "false,true, false,true", + "false,true, true, true", + "true, false,false,true", + "true, false,true, true", + "true, true, false,true", + "true, true, true, true" + }) + void isAnyTrueParameterized(boolean b1, boolean b2, boolean b3, boolean expected) { + assertEquals(expected, ValidateUtil.isAnyTrue(b1, b2, b3)); + } + // ---------------------------------------------------------------------------------------------------- /**