+ service = policyData.getServiceType();
+ version = policyData.getVersion();
+ }
+
+ if (!Strings.isNullOrEmpty(version)) {
+ MicroServiceModels returnModel = getAttributeObject(service, version);
+
+ if (returnModel != null) {
+
+ String annotation = returnModel.getAnnotation();
+ String refAttributes = returnModel.getRefAttributes();
+ String subAttributes = returnModel.getSubAttributes();
+ String modelAttributes = returnModel.getAttributes();
+
+ if (!Strings.isNullOrEmpty(annotation)) {
+ Map<String, String> rangeMap = Splitter.on(",").withKeyValueSeparator("=").split(annotation);
+ for (Entry<String, String> raMap : rangeMap.entrySet()) {
+ if (raMap.getValue().contains("range::")) {
+ String value = mapAttribute.get(raMap.getKey().trim());
+ String[] tempString = raMap.getValue().split("::")[1].split("-");
+ int startNum = Integer.parseInt(tempString[0]);
+ int endNum = Integer.parseInt(tempString[1]);
+ String returnString = "InvalidreturnModel Range:" + raMap.getKey() + " must be between "
+ + startNum + " - " + endNum + ",";
+
+ if (value != null) {
+ if (PolicyUtils.isInteger(value.replace("\"", ""))) {
+ int result = Integer.parseInt(value.replace("\"", ""));
+ if (result < startNum || result > endNum) {
+ responseString.append(returnString);
+ valid = false;
+ }
+ } else {
+ responseString.append(returnString);
+ valid = false;
+ }
+ } else {
+ responseString.append("<b>" + raMap.getKey() + "</b>:<i>" + raMap.getKey()
+ + " is required for the MicroService model " + service
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+
+ }
+ }
+ } else if (!DECISION_MS_MODEL.equals(policyData.getRuleProvider())) {
+ // Validate for configName, location, uuid, and policyScope if no annotations exist for this
+ // model
+ if (Strings.isNullOrEmpty(policyData.getLocation())) {
+ responseString.append("<b>Micro Service Model</b>:<i> location is required for this model"
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+
+ if (Strings.isNullOrEmpty(policyData.getConfigName())) {
+ responseString.append("<b>Micro Service Model</b>:<i> configName is required for this model"
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+
+ if (Strings.isNullOrEmpty(policyData.getUuid())) {
+ responseString.append("<b>Micro Service Model</b>:<i> uuid is required for this model"
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+
+ if (Strings.isNullOrEmpty(policyData.getPolicyScope())) {
+ responseString.append(
+ "<b>Micro Service Model</b>:<i> policyScope is required for this model"
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+ }
+
+ // If request comes from the API we need to validate required fields in the Micro Service Model
+ // GUI request are already validated from the SDK-APP
+ if ("API".equals(policyData.getApiflag())) {
+ // first , get the complete set of required fields
+ populateReqFieldSet(new String[]
+ { refAttributes, modelAttributes }, subAttributes);
+
+ // ignore req fields in which parent is not reqd
+ populateRequiredFields(new String[]
+ { refAttributes, modelAttributes }, subAttributes, modelAttributes);
+
+ if (modelRequiredFieldsList != null && !modelRequiredFieldsList.isEmpty()) {
+ // create jsonRequestMap with all json keys and values from request
+ JsonNode rootNode = (JsonNode) policyData.getPolicyJSON();
+ jsonRequestMap.clear();
+ pullModelJsonKeyPairs(rootNode);
+
+ // validate if the requiredFields are in the request
+ for (String requiredField : modelRequiredFieldsList) {
+ if (jsonRequestMap.containsKey(requiredField)) {
+ String value = jsonRequestMap.get(requiredField);
+ if (StringUtils.isBlank(value) || "\"\"".equals(value)) {
+ responseString.append("<b>Micro Service Model</b>:<i> " + requiredField
+ + ISREQUIRED + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+ } else {
+ responseString.append("<b>Micro Service Model</b>:<i> " + requiredField + ISREQUIRED
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+ }
+ }
+ }
+ } else {
+ responseString.append("<b>Micro Service Model</b>:<i> Invalid Model. The model name, " + service
+ + " of version, " + version + " was not found in the dictionary"
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+ } else {
+ responseString.append("<b>Micro Service Version</b>:<i> Micro Service Version is required"
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+ } else {
+ responseString.append("<b>Micro Service</b>:<i> Micro Service Model is required" + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+
+ if (Strings.isNullOrEmpty(policyData.getPriority())
+ && !DECISION_MS_MODEL.equals(policyData.getRuleProvider())) {
+ responseString.append("<b>Priority</b>:<i> Priority is required" + HTML_ITALICS_LNBREAK);
+ }
+
+ return valid;
+ }
+
+ private boolean validateOptimization(PolicyRestAdapter policyData, StringBuilder responseString) {
+ boolean valid = true;
+
+ // Checks for required policy data in request
+ if (Strings.isNullOrEmpty(policyData.getServiceType())) {
+ responseString.append("<b>Optimization Service</b>:<i> Optimization policy data is missing or invalid Json."
+ + HTML_ITALICS_LNBREAK);
+ return false;
+ }
+
+ modelRequiredFieldsList.clear();
+ pullJsonKeyPairs((JsonNode) policyData.getPolicyJSON());
+
+ // parse the service and version from the policy data
+ String service;
+ String version;
+ if (policyData.getServiceType().contains("-v")) {
+ service = policyData.getServiceType().split("-v")[0];
+ version = policyData.getServiceType().split("-v")[1];
+ } else {
+ service = policyData.getServiceType();
+ version = policyData.getVersion();
+ }
+
+ // Checks for required version in policy data
+ if (Strings.isNullOrEmpty(version)) {
+ responseString.append("<b>Optimization Service Version</b>:<i> Optimization Service Version is required"
+ + HTML_ITALICS_LNBREAK);
+ return false;
+ }
+
+ OptimizationModels returnModel = getOptimizationModelData(service, version);
+
+ // Checks if valid model exists in the database
+ if (returnModel == null) {
+ responseString.append("<b>Optimization Service Model</b>:<i> Invalid Model. The model name, " + service
+ + " of version, " + version + " was not found in the dictionary" + HTML_ITALICS_LNBREAK);
+ return false;
+ }
+
+ String annotation = returnModel.getAnnotation();
+ String refAttributes = returnModel.getRefattributes();
+ String subAttributes = returnModel.getSubattributes();
+ String modelAttributes = returnModel.getAttributes();
+
+ if (!Strings.isNullOrEmpty(annotation)) {
+ Map<String, String> rangeMap = Splitter.on(",").withKeyValueSeparator("=").split(annotation);
+ for (Entry<String, String> rangeMapEntry : rangeMap.entrySet()) {
+ if (rangeMapEntry.getValue().contains("range::")) {
+ String value = mapAttribute.get(rangeMapEntry.getKey().trim());
+ String[] tempString = rangeMapEntry.getValue().split("::")[1].split("-");
+ int startNum = Integer.parseInt(tempString[0]);
+ int endNum = Integer.parseInt(tempString[1]);
+ String returnString = "InvalidreturnModel Range:" + rangeMapEntry.getKey() + " must be between "
+ + startNum + " - " + endNum + ",";
+
+ if (value != null) {
+ if (PolicyUtils.isInteger(value.replace("\"", ""))) {
+ int result = Integer.parseInt(value.replace("\"", ""));
+ if (result < startNum || result > endNum) {
+ responseString.append(returnString);
+ valid = false;
+ }
+ } else {
+ responseString.append(returnString);
+ valid = false;
+ }
+ } else {
+ responseString.append("<b>" + rangeMapEntry.getKey() + "</b>:<i>" + rangeMapEntry.getKey()
+ + " is required for the Optimization model " + service + HTML_ITALICS_LNBREAK);
+ valid = false;
+ }
+