2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019 Nordix Foundation
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 * SPDX-License-Identifier: Apache-2.0
17 * ============LICENSE_END=========================================================
20 package org.onap.sdc.tosca.datatypes.model;
22 import java.util.Arrays;
23 import java.util.regex.Pattern;
24 import org.apache.commons.lang3.StringUtils;
27 * This Class is responsible for validating if a given value is a valid Tosca Scalar Unit Type.
29 public class ScalarUnitValidator {
31 private static final ScalarUnitValidator scalarUnitValidator = new ScalarUnitValidator();
34 * Tosca Scalar Unit Types structure.
36 * At least positive integers, no single white space, 1 to 3 chars
38 private final Pattern pattern = Pattern.compile("\\d+\\s*[a-zA-Z]{1,3}");
40 private ScalarUnitValidator() {
43 public static ScalarUnitValidator getInstance() {
44 return scalarUnitValidator;
48 * Validates if the given String matches with the Tosca Scalar Unit Types structure.
50 * @param value String to be validated.
51 * @return an {@Boolean}
53 public boolean isScalarUnit(final String value) {
54 if (value == null || value.isEmpty()) {
58 return pattern.matcher(value).matches();
62 * Validates if the given String has a Recognized Tosca unit.
64 * @param value String to be validated
65 * @param enumClass Enum that represents a Tosca Scalar Unit Type.
67 * @return an Enum that represents the Tosca Scalar Unit Type.
69 public <E extends Enum<E>> boolean isValueScalarUnit(final Object value, final Class<E> enumClass) {
70 final String stringToValidate = String.valueOf(value);
71 return isScalarUnit(stringToValidate) && Arrays.stream(StringUtils.split(stringToValidate))
72 .anyMatch(strValue -> Arrays.stream(enumClass.getEnumConstants())
73 .anyMatch(scalarUnit ->
74 scalarUnit.name().equalsIgnoreCase(strValue) || strValue.endsWith(scalarUnit.name())));