aboutsummaryrefslogtreecommitdiffstats
path: root/ONAP-REST/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'ONAP-REST/src/main/java/org')
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRest.java339
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java21
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/adapter/ReturnBlackList.java51
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Category.java333
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java2668
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java33
6 files changed, 1764 insertions, 1681 deletions
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRest.java b/ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRest.java
index 0912515e0..7cced5667 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRest.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRest.java
@@ -3,6 +3,7 @@
* ONAP-REST
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -44,174 +45,176 @@ import com.att.research.xacml.util.XACMLProperties;
*
*/
public class XACMLRest {
- private static final Log logger = LogFactory.getLog(XACMLRest.class);
- private static Properties restProperties = new Properties();
+ private static final Log logger = LogFactory.getLog(XACMLRest.class);
+ private static Properties restProperties = new Properties();
- private XACMLRest(){
- // Empty constructor
+ private XACMLRest(){
+ // Empty constructor
+ }
+ /**
+ * This must be called during servlet initialization. It sets up the xacml.?.properties
+ * file as a system property. If the System property is already set, then it does not
+ * do anything. This allows the developer to specify their own xacml.properties file to be
+ * used. They can 1) modify the default properties that comes with the project, or 2) change
+ * the WebInitParam annotation, or 3) specify an alternative path in the web.xml, or 4) set
+ * the Java System property to point to their xacml.properties file.
+ *
+ * The recommended way of overriding the default xacml.properties file is using a Java System
+ * property:
+ *
+ * -Dxacml.properties=/opt/app/xacml/etc/xacml.admin.properties
+ *
+ * This way one does not change any actual code or files in the project and can leave the
+ * defaults alone.
+ *
+ * @param config - The servlet config file passed from the javax servlet init() function
+ */
+ public static void xacmlInit(ServletConfig config) {
+ //
+ // Get the XACML Properties File parameter first
+ //
+ String propFile = config.getInitParameter("XACML_PROPERTIES_NAME");
+ if (propFile != null) {
+ //
+ // Look for system override
+ //
+ String xacmlPropertiesName = System.getProperty(XACMLProperties.XACML_PROPERTIES_NAME);
+ logger.info("\n\n" + xacmlPropertiesName + "\n" + XACMLProperties.XACML_PROPERTIES_NAME);
+ if (xacmlPropertiesName == null) {
+ //
+ // Set it to our servlet default
+ //
+ if (logger.isDebugEnabled()) {
+ logger.debug("Using Servlet Config Property for XACML_PROPERTIES_NAME:" + propFile);
+ }
+ System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME, propFile);
+ } else {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Using System Property for XACML_PROPERTIES_NAME:" + xacmlPropertiesName);
+ }
+ }
+ }
+ //
+ // Setup the remaining properties
+ //
+ Enumeration<String> params = config.getInitParameterNames();
+ while (params.hasMoreElements()) {
+ String param = params.nextElement();
+ if (! "XACML_PROPERTIES_NAME".equals(param)) {
+ String value = config.getInitParameter(param);
+ PolicyLogger.info(param + "=" + config.getInitParameter(param));
+ restProperties.setProperty(param, value);
+ }
+ }
+ }
+
+ /**
+ * Reset's the XACMLProperties internal properties object so we start
+ * in a fresh environment. Then adds back in our Servlet init properties that were
+ * passed in the javax Servlet init() call.
+ *
+ * This function is primarily used when a new configuration is passed in and the
+ * PDP servlet needs to load a new PDP engine instance.
+ *
+ * @param pipProperties - PIP configuration properties
+ * @param policyProperties - Policy configuration properties
+ */
+ public static void loadXacmlProperties(Properties policyProperties, Properties pipProperties) {
+ try {
+ //
+ // Start fresh
+ //
+ XACMLProperties.reloadProperties();
+ //
+ // Now load our init properties
+ //
+ XACMLProperties.getProperties().putAll(XACMLRest.restProperties);
+ //
+ // Load our policy properties
+ //
+ if (policyProperties != null) {
+ XACMLProperties.getProperties().putAll(policyProperties);
+ }
+ //
+ // Load our pip config properties
+ //
+ if (pipProperties != null) {
+ XACMLProperties.getProperties().putAll(pipProperties);
+ }
+ } catch (IOException e) {
+ PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "Failed to put init properties into Xacml properties");
+ }
+ //
+ // Dump them
+ //
+ if (logger.isDebugEnabled()) {
+ try {
+ logger.debug(XACMLProperties.getProperties().toString());
+ } catch (IOException e) {
+ PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "Cannot dump properties");
+ }
+ }
+ }
+
+ /**
+ * Helper routine to dump the HTTP servlet request being serviced. Primarily for debugging.
+ *
+ * @param request - Servlet request (from a POST/GET/PUT/etc.)
+ */
+ public static void dumpRequest(HttpServletRequest request) {
+ if (!logger.isDebugEnabled()) {
+ return;
+ }
+
+ // special-case for receiving heartbeat - don't need to repeatedly output all of the information in multiple lines
+ if ("GET".equals(request.getMethod()) && "hb".equals(request.getParameter("type")) ) {
+ PolicyLogger.debug("GET type=hb : heartbeat received");
+ return;
+ }
+ logger.debug(request.getMethod() + ":" + request.getRemoteAddr() + " " + request.getRemoteHost() + " " + request.getRemotePort());
+ logger.debug(request.getLocalAddr() + " " + request.getLocalName() + " " + request.getLocalPort());
+ Enumeration<String> en = request.getHeaderNames();
+ logger.debug("Headers:");
+ while (en.hasMoreElements()) {
+ String element = en.nextElement();
+ Enumeration<String> values = request.getHeaders(element);
+ while (values.hasMoreElements()) {
+ String value = values.nextElement();
+ logger.debug(element + ":" + value);
+ }
+ }
+ logger.debug("Attributes:");
+ en = request.getAttributeNames();
+ while (en.hasMoreElements()) {
+ String element = en.nextElement();
+ logger.debug(element + ":" + request.getAttribute(element));
+ }
+ logger.debug("ContextPath: " + request.getContextPath());
+ if ("PUT".equals(request.getMethod()) || "POST".equals(request.getMethod())) {
+ // POST and PUT are allowed to have parameters in the content, but in our usage the parameters are always in the Query string.
+ // More importantly, there are cases where the POST and PUT content is NOT parameters (e.g. it might contain a Policy file).
+ // Unfortunately the request.getParameterMap method reads the content to see if there are any parameters,
+ // and once the content is read it cannot be read again.
+ // Thus for PUT and POST we must avoid reading the content here so that the main code can read it.
+ logger.debug("Query String:" + request.getQueryString());
+ try {
+ if (request.getInputStream() == null) {
+ logger.debug("Content: No content inputStream");
+ } else {
+ logger.debug("Content available: " + request.getInputStream().available());
+ }
+ } catch (Exception e) {
+ logger.debug("Content: inputStream exception: " + e.getMessage() + "; (May not be relevant)" +e);
+ }
+ } else {
+ logger.debug("Parameters:");
+ Map<String, String[]> params = request.getParameterMap();
+ Set<String> keys = params.keySet();
+ for (String key : keys) {
+ String[] values = params.get(key);
+ logger.debug(key + "(" + values.length + "): " + (values.length > 0 ? values[0] : ""));
+ }
+ }
+ logger.debug("Request URL:" + request.getRequestURL());
}
- /**
- * This must be called during servlet initialization. It sets up the xacml.?.properties
- * file as a system property. If the System property is already set, then it does not
- * do anything. This allows the developer to specify their own xacml.properties file to be
- * used. They can 1) modify the default properties that comes with the project, or 2) change
- * the WebInitParam annotation, or 3) specify an alternative path in the web.xml, or 4) set
- * the Java System property to point to their xacml.properties file.
- *
- * The recommended way of overriding the default xacml.properties file is using a Java System
- * property:
- *
- * -Dxacml.properties=/opt/app/xacml/etc/xacml.admin.properties
- *
- * This way one does not change any actual code or files in the project and can leave the
- * defaults alone.
- *
- * @param config - The servlet config file passed from the javax servlet init() function
- */
- public static void xacmlInit(ServletConfig config) {
- //
- // Get the XACML Properties File parameter first
- //
- String propFile = config.getInitParameter("XACML_PROPERTIES_NAME");
- if (propFile != null) {
- //
- // Look for system override
- //
- String xacmlPropertiesName = System.getProperty(XACMLProperties.XACML_PROPERTIES_NAME);
- logger.info("\n\n" + xacmlPropertiesName + "\n" + XACMLProperties.XACML_PROPERTIES_NAME);
- if (xacmlPropertiesName == null) {
- //
- // Set it to our servlet default
- //
- if (logger.isDebugEnabled()) {
- logger.debug("Using Servlet Config Property for XACML_PROPERTIES_NAME:" + propFile);
- }
- System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME, propFile);
- } else {
- if (logger.isDebugEnabled()) {
- logger.debug("Using System Property for XACML_PROPERTIES_NAME:" + xacmlPropertiesName);
- }
- }
- }
- //
- // Setup the remaining properties
- //
- Enumeration<String> params = config.getInitParameterNames();
- while (params.hasMoreElements()) {
- String param = params.nextElement();
- if (! "XACML_PROPERTIES_NAME".equals(param)) {
- String value = config.getInitParameter(param);
- PolicyLogger.info(param + "=" + config.getInitParameter(param));
- restProperties.setProperty(param, value);
- }
- }
- }
-
- /**
- * Reset's the XACMLProperties internal properties object so we start
- * in a fresh environment. Then adds back in our Servlet init properties that were
- * passed in the javax Servlet init() call.
- *
- * This function is primarily used when a new configuration is passed in and the
- * PDP servlet needs to load a new PDP engine instance.
- *
- * @param pipProperties - PIP configuration properties
- * @param policyProperties - Policy configuration properties
- */
- public static void loadXacmlProperties(Properties policyProperties, Properties pipProperties) {
- try {
- //
- // Start fresh
- //
- XACMLProperties.reloadProperties();
- //
- // Now load our init properties
- //
- XACMLProperties.getProperties().putAll(XACMLRest.restProperties);
- //
- // Load our policy properties
- //
- if (policyProperties != null) {
- XACMLProperties.getProperties().putAll(policyProperties);
- }
- //
- // Load our pip config properties
- //
- if (pipProperties != null) {
- XACMLProperties.getProperties().putAll(pipProperties);
- }
- } catch (IOException e) {
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "Failed to put init properties into Xacml properties");
- }
- //
- // Dump them
- //
- if (logger.isDebugEnabled()) {
- try {
- logger.debug(XACMLProperties.getProperties().toString());
- } catch (IOException e) {
- PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "Cannot dump properties");
- }
- }
- }
-
- /**
- * Helper routine to dump the HTTP servlet request being serviced. Primarily for debugging.
- *
- * @param request - Servlet request (from a POST/GET/PUT/etc.)
- */
- public static void dumpRequest(HttpServletRequest request) {
- if (logger.isDebugEnabled()) {
- // special-case for receiving heartbeat - don't need to repeatedly output all of the information in multiple lines
- if ("GET".equals(request.getMethod()) && "hb".equals(request.getParameter("type")) ) {
- PolicyLogger.debug("GET type=hb : heartbeat received");
- return;
- }
- logger.debug(request.getMethod() + ":" + request.getRemoteAddr() + " " + request.getRemoteHost() + " " + request.getRemotePort());
- logger.debug(request.getLocalAddr() + " " + request.getLocalName() + " " + request.getLocalPort());
- Enumeration<String> en = request.getHeaderNames();
- logger.debug("Headers:");
- while (en.hasMoreElements()) {
- String element = en.nextElement();
- Enumeration<String> values = request.getHeaders(element);
- while (values.hasMoreElements()) {
- String value = values.nextElement();
- logger.debug(element + ":" + value);
- }
- }
- logger.debug("Attributes:");
- en = request.getAttributeNames();
- while (en.hasMoreElements()) {
- String element = en.nextElement();
- logger.debug(element + ":" + request.getAttribute(element));
- }
- logger.debug("ContextPath: " + request.getContextPath());
- if ("PUT".equals(request.getMethod()) || "POST".equals(request.getMethod())) {
- // POST and PUT are allowed to have parameters in the content, but in our usage the parameters are always in the Query string.
- // More importantly, there are cases where the POST and PUT content is NOT parameters (e.g. it might contain a Policy file).
- // Unfortunately the request.getParameterMap method reads the content to see if there are any parameters,
- // and once the content is read it cannot be read again.
- // Thus for PUT and POST we must avoid reading the content here so that the main code can read it.
- logger.debug("Query String:" + request.getQueryString());
- try {
- if (request.getInputStream() == null) {
- logger.debug("Content: No content inputStream");
- } else {
- logger.debug("Content available: " + request.getInputStream().available());
- }
- } catch (Exception e) {
- logger.debug("Content: inputStream exception: " + e.getMessage() + "; (May not be relevant)" +e);
- }
- } else {
- logger.debug("Parameters:");
- Map<String, String[]> params = request.getParameterMap();
- Set<String> keys = params.keySet();
- for (String key : keys) {
- String[] values = params.get(key);
- logger.debug(key + "(" + values.length + "): " + (values.length > 0 ? values[0] : ""));
- }
- }
- logger.debug("Request URL:" + request.getRequestURL());
- }
- }
}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java b/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java
index a9daf1732..e815fe2b9 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/PolicyRestAdapter.java
@@ -127,6 +127,9 @@ public class PolicyRestAdapter {
private String actionDictUrl = null;
private String actionDictMethod = null;
private YAMLParams yamlparams;
+ private List<String> blackListEntries;
+ private List<String> appendBlackListEntries;
+ private String blackListEntryType;
//Rainy Day Decision
private RainyDayParams rainyday;
@@ -907,4 +910,22 @@ public class PolicyRestAdapter {
public void setFaultDatas(ClosedLoopFaultTrapDatas faultDatas) {
this.faultDatas = faultDatas;
}
+ public List<String> getAppendBlackListEntries() {
+ return appendBlackListEntries;
+ }
+ public void setAppendBlackListEntries(List<String> appendBlackListEntries) {
+ this.appendBlackListEntries = appendBlackListEntries;
+ }
+ public List<String> getBlackListEntries() {
+ return blackListEntries;
+ }
+ public void setBlackListEntries(List<String> blackListEntries) {
+ this.blackListEntries = blackListEntries;
+ }
+ public String getBlackListEntryType() {
+ return blackListEntryType;
+ }
+ public void setBlackListEntryType(String blackListEntryType) {
+ this.blackListEntryType = blackListEntryType;
+ }
}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/ReturnBlackList.java b/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/ReturnBlackList.java
new file mode 100644
index 000000000..6ecf1b5e4
--- /dev/null
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/adapter/ReturnBlackList.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP Policy Engine
+ * ================================================================================
+ * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.rest.adapter;
+
+public class ReturnBlackList {
+ private boolean entryCheck;
+ private int actionValue;
+ private String entryValue;
+
+ public boolean isEntryCheck() {
+ return entryCheck;
+ }
+
+ public void setEntryCheck(boolean entryCheck) {
+ this.entryCheck = entryCheck;
+ }
+
+ public int getActionValue() {
+ return actionValue;
+ }
+
+ public void setActionValue(int actionValue) {
+ this.actionValue = actionValue;
+ }
+
+ public String getEntryValue() {
+ return entryValue;
+ }
+
+ public void setEntryValue(String entryValue) {
+ this.entryValue = entryValue;
+ }
+}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Category.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Category.java
index 275b03e5a..f3874a480 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Category.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/Category.java
@@ -3,6 +3,7 @@
* ONAP-REST
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -48,171 +49,171 @@ import com.fasterxml.jackson.annotation.JsonBackReference;
@Table(name="Category")
@NamedQuery(name="Category.findAll", query="SELECT c FROM Category c")
public class Category implements Serializable {
- private static final long serialVersionUID = 1L;
-
- public static final char STANDARD = 'S';
- public static final char CUSTOM = 'C';
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- @Column(name="id")
- private int id;
-
- @Column(name="grouping", nullable=false, length=64)
- private String grouping;
-
- @Column(name="is_standard", nullable=false)
- private char isStandard;
-
- @Column(name="xacml_id", nullable=false, unique=true, length=255)
- private String xacmlId;
-
- @Column(name="short_name", nullable=false, length=64)
- private String shortName;
-
- //bi-directional many-to-one association to Attribute
- @OneToMany(mappedBy="categoryBean")
- @JsonBackReference
- private Set<Attribute> attributes = new HashSet<>();
-
- public Category() {
- this.xacmlId = XACML3.ID_SUBJECT_CATEGORY_ACCESS_SUBJECT.stringValue();
- this.grouping = "subject";
- this.isStandard = Category.STANDARD;
- this.shortName = "subject";
- }
-
- public Category(Identifier cat, String grouping, char isStandard) {
- if (cat != null) {
- this.xacmlId = cat.stringValue();
- }
- this.isStandard = isStandard;
- if (grouping != null) {
- this.grouping = grouping;
- } else {
- this.grouping = Category.extractGrouping(this.xacmlId);
- }
- }
-
- public Category(Identifier cat, String grouping) {
- this(cat, grouping, Category.STANDARD);
- }
-
- public Category(Identifier cat, char standard) {
- this(cat, null, standard);
- }
-
- public Category(Identifier cat) {
- this(cat, Category.STANDARD);
- }
-
- public int getId() {
- return this.id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public String getGrouping() {
- return this.grouping;
- }
-
- public void setGrouping(String grouping) {
- this.grouping = grouping;
- }
-
- public char getIsStandard() {
- return this.isStandard;
- }
-
- public void setIsStandard(char isStandard) {
- this.isStandard = isStandard;
- }
-
- public String getXacmlId() {
- return this.xacmlId;
- }
-
- public void setXacmlId(String xacmlId) {
- this.xacmlId = xacmlId;
- }
-
- public String getShortName() {
- return this.shortName;
- }
-
- public void setShortName(String shortName) {
- this.shortName = shortName;
- }
-
- public Set<Attribute> getAttributes() {
- return this.attributes;
- }
-
- public void setAttributes(Set<Attribute> attributes) {
- this.attributes = attributes;
- }
-
- public Attribute addAttribute(Attribute attribute) {
- getAttributes().add(attribute);
- attribute.setCategoryBean(this);
-
- return attribute;
- }
-
- public Attribute removeAttribute(Attribute attribute) {
- getAttributes().remove(attribute);
- attribute.setCategoryBean(null);
-
- return attribute;
- }
-
- @Transient
- public boolean isStandard() {
- return this.isStandard == Category.STANDARD;
- }
-
- @Transient
- public boolean isCustom() {
- return this.isStandard == Category.CUSTOM;
- }
-
- @Transient
- public static String extractGrouping(String xacmlId) {
- if (xacmlId == null) {
- return null;
- }
- if (xacmlId.matches(".*:attribute\\-category:.*")) {
- String[] parts = xacmlId.split("[:]");
- if (parts != null && parts.length > 0) {
- return parts[parts.length - 1];
- }
- } else if (xacmlId.matches(".*:[a-zA-Z]+[\\-]category:.*")) {
- String[] parts = xacmlId.split("[:]");
- if (parts != null && parts.length > 0) {
- for (String part : parts) {
- int index = part.indexOf("-category");
- if (index > 0) {
- return part.substring(0, index);
- }
- }
- }
- }
- return null;
- }
-
- @Transient
- public Identifier getIdentifer() {
- return new IdentifierImpl(this.xacmlId);
- }
-
- @Transient
- @Override
- public String toString() {
- return "Category [id=" + id + ", grouping=" + grouping
- + ", isStandard=" + isStandard + ", xacmlId=" + xacmlId
- + ", attributes=" + attributes + "]";
- }
+ private static final long serialVersionUID = 1L;
+
+ public static final char STANDARD = 'S';
+ public static final char CUSTOM = 'C';
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name="id")
+ private int id;
+
+ @Column(name="grouping", nullable=false, length=64)
+ private String grouping;
+
+ @Column(name="is_standard", nullable=false)
+ private char isStandard;
+
+ @Column(name="xacml_id", nullable=false, unique=true, length=255)
+ private String xacmlId;
+
+ @Column(name="short_name", nullable=false, length=64)
+ private String shortName;
+
+ //bi-directional many-to-one association to Attribute
+ @OneToMany(mappedBy="categoryBean")
+ @JsonBackReference
+ private Set<Attribute> attributes = new HashSet<>();
+
+ public Category() {
+ this.xacmlId = XACML3.ID_SUBJECT_CATEGORY_ACCESS_SUBJECT.stringValue();
+ this.grouping = "subject";
+ this.isStandard = Category.STANDARD;
+ this.shortName = "subject";
+ }
+
+ public Category(Identifier cat, String grouping, char isStandard) {
+ if (cat != null) {
+ this.xacmlId = cat.stringValue();
+ }
+ this.isStandard = isStandard;
+ if (grouping != null) {
+ this.grouping = grouping;
+ } else {
+ this.grouping = Category.extractGrouping(this.xacmlId);
+ }
+ }
+
+ public Category(Identifier cat, String grouping) {
+ this(cat, grouping, Category.STANDARD);
+ }
+
+ public Category(Identifier cat, char standard) {
+ this(cat, null, standard);
+ }
+
+ public Category(Identifier cat) {
+ this(cat, Category.STANDARD);
+ }
+
+ public int getId() {
+ return this.id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getGrouping() {
+ return this.grouping;
+ }
+
+ public void setGrouping(String grouping) {
+ this.grouping = grouping;
+ }
+
+ public char getIsStandard() {
+ return this.isStandard;
+ }
+
+ public void setIsStandard(char isStandard) {
+ this.isStandard = isStandard;
+ }
+
+ public String getXacmlId() {
+ return this.xacmlId;
+ }
+
+ public void setXacmlId(String xacmlId) {
+ this.xacmlId = xacmlId;
+ }
+
+ public String getShortName() {
+ return this.shortName;
+ }
+
+ public void setShortName(String shortName) {
+ this.shortName = shortName;
+ }
+
+ public Set<Attribute> getAttributes() {
+ return this.attributes;
+ }
+
+ public void setAttributes(Set<Attribute> attributes) {
+ this.attributes = attributes;
+ }
+
+ public Attribute addAttribute(Attribute attribute) {
+ getAttributes().add(attribute);
+ attribute.setCategoryBean(this);
+
+ return attribute;
+ }
+
+ public Attribute removeAttribute(Attribute attribute) {
+ getAttributes().remove(attribute);
+ attribute.setCategoryBean(null);
+
+ return attribute;
+ }
+
+ @Transient
+ public boolean isStandard() {
+ return this.isStandard == Category.STANDARD;
+ }
+
+ @Transient
+ public boolean isCustom() {
+ return this.isStandard == Category.CUSTOM;
+ }
+
+ @Transient
+ public static String extractGrouping(String xacmlId) {
+ if (xacmlId == null) {
+ return null;
+ }
+ String[] parts = xacmlId.split("[:]");
+ if (xacmlId.matches(".*:attribute\\-category:.*")) {
+ if (parts.length > 0) {
+ return parts[parts.length - 1];
+ }
+ } else if (xacmlId.matches(".*:[a-zA-Z]+[\\-]category:.*")) {
+ if (parts.length <= 0) {
+ return null;
+ }
+ for (String part : parts) {
+ int index = part.indexOf("-category");
+ if (index > 0) {
+ return part.substring(0, index);
+ }
+ }
+ }
+ return null;
+ }
+
+ @Transient
+ public Identifier getIdentifer() {
+ return new IdentifierImpl(this.xacmlId);
+ }
+
+ @Transient
+ @Override
+ public String toString() {
+ return "Category [id=" + id + ", grouping=" + grouping
+ + ", isStandard=" + isStandard + ", xacmlId=" + xacmlId
+ + ", attributes=" + attributes + "]";
+ }
}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java
index 1f40be60a..50628d7d5 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/MSModelUtils.java
@@ -3,6 +3,7 @@
* ONAP-REST
* ================================================================================
* Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,41 +21,13 @@
package org.onap.policy.rest.util;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import java.util.Map.Entry;
-
+import com.att.research.xacml.util.XACMLProperties;
+import com.google.gson.Gson;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.common.util.EMap;
-import org.eclipse.emf.common.util.Enumerator;
-import org.eclipse.emf.common.util.TreeIterator;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EAnnotation;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EClassifier;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EEnumLiteral;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.common.util.*;
+import org.eclipse.emf.ecore.*;
import org.eclipse.emf.ecore.impl.EAttributeImpl;
import org.eclipse.emf.ecore.impl.EEnumImpl;
import org.eclipse.emf.ecore.resource.Resource;
@@ -65,1320 +38,1349 @@ import org.json.JSONObject;
import org.onap.policy.rest.XACMLRestProperties;
import org.yaml.snakeyaml.Yaml;
-import com.att.research.xacml.util.XACMLProperties;
-import com.google.gson.Gson;
+import java.io.*;
+import java.util.*;
+import java.util.Map.Entry;
public class MSModelUtils {
- private static final Log logger = LogFactory.getLog(MSModelUtils.class);
-
- private HashMap<String,MSAttributeObject > classMap = new HashMap<>();
- private HashMap<String, String> enumMap = new HashMap<>();
- private HashMap<String, String> matchingClass = new HashMap<>();
- private String configuration = "configuration";
- private String dictionary = "dictionary";
- private String onap = "";
- private String policy = "";
- private String eProxyURI = "eProxyURI:";
- private List<String> orderedElements = new ArrayList<>();
- private String dataOrderInfo = null;
- private Set<String> uniqueDataKeys= new HashSet<>();
- private Set<String> uniqueKeys= new HashSet<>();
- private String listConstraints = null;
- private String referenceAttributes;
- private LinkedHashMap<String, Object> retmap = new LinkedHashMap<>();
- private Map<String, String> matchableValues;
- public static final String PROPERTIES=".properties.";
- public static final String DATATYPE = "data_types.policy.data.";
- public static final String TYPE=".type";
- public static final String REQUIRED=".required";
- public static final String MATCHABLE=".matchable";
- public static final String STRING="string";
- public static final String INTEGER="integer";
- public static final String LIST="list";
- public static final String MAP="map";
- public static final String DEFAULT=".default";
- public static final String MANYFALSE=":MANY-false";
- public static final String MANYTRUE=":MANY-true";
- public static final String DEFAULTVALUE=":defaultValue-";
- public static final String REQUIREDVALUE=":required-";
- public static final String MATCHABLEKEY="matchable";
- public static final String REQUIREDFALSE=":required-false";
- public static final String REQUIREDTRUE=":required-true";
- public static final String MATCHINGTRUE="matching-true";
-
- private StringBuilder dataListBuffer=new StringBuilder();
- private List<String> dataConstraints= new ArrayList <>();
- private String attributeString = null;
-
- public MSModelUtils(){
- }
-
- public MSModelUtils(String onap, String policy){
- this.onap = onap;
- this.policy = policy;
- }
-
- private enum ANNOTATION_TYPE{
- MATCHING, VALIDATION, DICTIONARY
- };
-
- public enum MODEL_TYPE {
- XMI
- };
-
-
- public Map<String, MSAttributeObject> processEpackage(String file, MODEL_TYPE model){
- if (model == MODEL_TYPE.XMI ){
- processXMIEpackage(file);
- }
- return classMap;
-
- }
-
- private void processXMIEpackage(String xmiFile){
- EPackage root = getEpackage(xmiFile);
- TreeIterator<EObject> treeItr = root.eAllContents();
- String className;
- String returnValue;
-
- // Pulling out dependency from file
- while (treeItr.hasNext()) {
- EObject obj = treeItr.next();
- if (obj instanceof EClassifier) {
- EClassifier eClassifier = (EClassifier) obj;
- className = eClassifier.getName();
-
- if (obj instanceof EEnum) {
- enumMap.putAll(getEEnum(obj));
- }else if (obj instanceof EClass) {
- String temp = getDependencyList(eClassifier).toString();
- returnValue = StringUtils.replaceEach(temp, new String[]{"[", "]"}, new String[]{"", ""});
- getAttributes(className, returnValue, root);
- }
- }
- }
-
- if (!enumMap.isEmpty()){
- addEnumClassMap();
- }
- if (!matchingClass.isEmpty()){
- CheckForMatchingClass();
- }
- }
-
- private void CheckForMatchingClass() {
- HashMap<String, String> tempAttribute = new HashMap<>();
-
- for (Entry<String, String> set : matchingClass.entrySet()){
- String key = set.getKey();
- if (classMap.containsKey(key)){
- Map<String, String> listAttributes = classMap.get(key).getAttribute();
- Map<String, String> listRef = classMap.get(key).getRefAttribute();
- for ( Entry<String, String> eSet : listAttributes.entrySet()){
- String key2 = eSet.getKey();
- tempAttribute.put(key2, MATCHINGTRUE);
- }
- for ( Entry<String, String> eSet : listRef.entrySet()){
- String key3 = eSet.getKey();
- tempAttribute.put(key3, MATCHINGTRUE);
- }
-
- }
- UpdateMatching(tempAttribute, key);
- }
-
- }
-
-
-
- private void UpdateMatching(HashMap<String, String> tempAttribute, String key) {
- Map<String, MSAttributeObject> newClass = classMap;
-
- for (Entry<String, MSAttributeObject> updateClass : newClass.entrySet()){
- Map<String, String> valueMap = updateClass.getValue().getMatchingSet();
- String keymap = updateClass.getKey();
- if (valueMap.containsKey(key)){
- Map<String, String> modifyMap = classMap.get(keymap).getMatchingSet();
- modifyMap.remove(key);
- modifyMap.putAll(tempAttribute);
- classMap.get(keymap).setMatchingSet(modifyMap);
- }
-
- }
- }
-
- private void addEnumClassMap() {
- for (Entry<String, MSAttributeObject> value :classMap.entrySet()){
- value.getValue().setEnumType(enumMap);
- }
- }
-
- private EPackage getEpackage(String xmiFile) {
- ResourceSet resSet = new ResourceSetImpl();
- Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
- Map<String, Object> m = reg.getExtensionToFactoryMap();
- m.put("xmi", new XMIResourceFactoryImpl());
- Resource resource = resSet.getResource(URI.createFileURI(xmiFile), true);
- try {
- resource.load(Collections.emptyMap());
- } catch (IOException e) {
- logger.error("Error loading Encore Resource for new Model" + e);
- }
-
- return (EPackage) resource.getContents().get(0);
- }
-
- private HashMap<String, String> getEEnum(EObject obj) {
- List<String> valueList = new ArrayList<>();
- HashMap<String, String> returnMap = new HashMap<>();
- EEnum eenum = (EEnum)obj;
-
- String name = eenum.getName();
- for (EEnumLiteral eEnumLiteral : eenum.getELiterals())
- {
- Enumerator instance = eEnumLiteral.getInstance();
- String value = instance.getLiteral();
- valueList.add(value);
- }
- returnMap.put(name, valueList.toString());
- return returnMap;
- }
-
- public void getAttributes(String className, String dependency, EPackage root) {
- List<String> dpendList = new ArrayList<>();
- if (dependency!=null){
- dpendList = new ArrayList<>(Arrays.asList(dependency.split(",")));
- }
- MSAttributeObject msAttributeObject = new MSAttributeObject();
- msAttributeObject.setClassName(className);
- String extendClass = getSubTypes(root, className);
- Map<String, String> returnRefList = getRefAttributeList(root, className, extendClass);
- Map<String, String> returnAttributeList = getAttributeList(root, className, extendClass);
- Map<String, Object> returnSubList = getSubAttributeList(root, className, extendClass);
- HashMap<String, String> returnAnnotation = getAnnotation(root, className, extendClass);
- msAttributeObject.setAttribute(returnAttributeList);
- msAttributeObject.setRefAttribute(returnRefList);
- msAttributeObject.setSubClass(returnSubList);
- msAttributeObject.setDependency(dpendList.toString());
- msAttributeObject.addMatchingSet(returnAnnotation);
- msAttributeObject.setPolicyTempalate(isPolicyTemplate(root, className));
-
- this.classMap.put(className, msAttributeObject);
- }
-
- private HashMap<String, String> getAnnotation(EPackage root, String className, String extendClass) {
- TreeIterator<EObject> treeItr = root.eAllContents();
- boolean requiredAttribute = false;
- boolean requiredMatchAttribute = false;
- HashMap<String, String> annotationSet = new HashMap<>();
- String matching;
- String range;
- String annotationDict;
-
- // Pulling out dependency from file
- while (treeItr.hasNext()) {
- EObject obj = treeItr.next();
- if (obj instanceof EClassifier) {
- requiredAttribute = isRequiredAttribute(obj, className );
- requiredMatchAttribute = isRequiredAttribute(obj, extendClass );
- }
-
- if (requiredAttribute){
- if (obj instanceof EStructuralFeature) {
- EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
- if (!eStrucClassifier.getEAnnotations().isEmpty()) {
- matching = annotationValue(eStrucClassifier, ANNOTATION_TYPE.MATCHING, policy);
- if (matching!=null){
- annotationSet.put(eStrucClassifier.getName(), matching);
- }
- range = annotationValue(eStrucClassifier, ANNOTATION_TYPE.VALIDATION, policy);
- if (range!=null){
- annotationSet.put(eStrucClassifier.getName(), range);
- }
- annotationDict = annotationValue(eStrucClassifier, ANNOTATION_TYPE.DICTIONARY, policy);
- if (annotationDict!=null){
- annotationSet.put(eStrucClassifier.getName(), annotationDict);
- }
- }
- }
- } else if (requiredMatchAttribute && (obj instanceof EStructuralFeature)) {
- EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
- if (!eStrucClassifier.getEAnnotations().isEmpty()) {
- matching = annotationValue(eStrucClassifier, ANNOTATION_TYPE.MATCHING, policy);
- if (matching!=null){
- if (obj instanceof EReference){
- EClass refType = ((EReference) obj).getEReferenceType();
- annotationSet.put(refType.getName(), matching);
- matchingClass.put(refType.getName(), matching);
- }else{
- annotationSet.put(eStrucClassifier.getName(), matching);
- }
- }
- }
- }
- }
- return annotationSet;
- }
-
- private Map<String, Object> getSubAttributeList(EPackage root, String className , String superClass) {
- TreeIterator<EObject> treeItr = root.eAllContents();
- boolean requiredAttribute = false;
- Map<String, Object> subAttribute = new HashMap<>();
- int rollingCount = 0;
- int processClass = 0;
- boolean annotation;
-
- // Pulling out dependency from file
- while (treeItr.hasNext() && rollingCount < 2) {
-
- EObject obj = treeItr.next();
- if (obj instanceof EClassifier) {
- if (isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass )){
- requiredAttribute = true;
- }else {
- requiredAttribute = false;
- }
- if (requiredAttribute){
- processClass++;
- }
- rollingCount = rollingCount+processClass;
- }
-
- if (requiredAttribute && (obj instanceof EStructuralFeature)) {
- EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
- if (!eStrucClassifier.getEAnnotations().isEmpty()) {
- annotation = annotationTest(eStrucClassifier, configuration, onap);
- if (annotation && obj instanceof EReference) {
- EClass refType = ((EReference) obj).getEReferenceType();
- if(!refType.toString().contains(eProxyURI)){
- String required = REQUIREDFALSE;
- if(eStrucClassifier.getLowerBound() == 1){
- required = REQUIREDTRUE;
- }
- subAttribute.put(eStrucClassifier.getName(), refType.getName() + required);
- }
- }
- }
- }
- }
- return subAttribute;
- }
-
- public String checkDefultValue(String defultValue) {
- if (defultValue!=null){
- return DEFAULTVALUE+ defultValue;
- }
- return ":defaultValue-NA";
-
- }
-
- public String checkRequiredPattern(int upper, int lower) {
-
- String pattern = XACMLProperties.getProperty(XACMLRestProperties.PROP_XCORE_REQUIRED_PATTERN);
-
- if (pattern!=null){
- if (upper == Integer.parseInt(pattern.split(",")[1]) && lower==Integer.parseInt(pattern.split(",")[0])){
- return REQUIREDTRUE;
- }
- }
-
- return REQUIREDFALSE;
- }
-
- public JSONObject buildJavaObject(Map<String, String> map){
-
- return new JSONObject(map);
- }
-
- public Map<String, String> getRefAttributeList(EPackage root, String className, String superClass){
-
- TreeIterator<EObject> treeItr = root.eAllContents();
- boolean requiredAttribute = false;
- HashMap<String, String> refAttribute = new HashMap<>();
- int rollingCount = 0;
- int processClass = 0;
- boolean annotation;
- // Pulling out dependency from file
- while (treeItr.hasNext()) {
- EObject obj = treeItr.next();
- if (obj instanceof EClassifier) {
- if (isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass )){
- requiredAttribute = true;
- }else {
- requiredAttribute = false;
- }
- if (requiredAttribute){
- processClass++;
- }
- rollingCount = rollingCount+processClass;
- }
-
- if (requiredAttribute && (obj instanceof EStructuralFeature)) {
- EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
- if (!eStrucClassifier.getEAnnotations().isEmpty()) {
- annotation = annotationTest(eStrucClassifier, configuration, onap);
- if ( annotation && obj instanceof EReference) {
- EClass refType = ((EReference) obj).getEReferenceType();
- if(refType.toString().contains(eProxyURI)){
- String one = refType.toString().split(eProxyURI)[1];
- String refValue = StringUtils.replaceEach(one.split("#")[1], new String[]{"//", ")"}, new String[]{"", ""});
- refAttribute.put(eStrucClassifier.getName(), refValue);
- } else {
- String array = arrayCheck(((EStructuralFeature) obj).getUpperBound());
- String required = REQUIREDFALSE;
- if(((EStructuralFeature) obj).getLowerBound() == 1){
- required = REQUIREDTRUE;
- }
- refAttribute.put(eStrucClassifier.getName(), refType.getName() + array + required);
- }
- } else if (annotation && obj instanceof EAttributeImpl){
- EClassifier refType = ((EAttributeImpl) obj).getEType();
- if (refType instanceof EEnumImpl){
- String array = arrayCheck(((EStructuralFeature) obj).getUpperBound());
- String required = REQUIREDFALSE;
- if(((EStructuralFeature) obj).getLowerBound() == 1){
- required = REQUIREDTRUE;
- }
- refAttribute.put(eStrucClassifier.getName(), refType.getName() + array + required);
- }
- }
- }
- }
- }
-
- return refAttribute;
- }
-
- private boolean annotationTest(EStructuralFeature eStrucClassifier, String annotation, String type) {
- String annotationType;
- EAnnotation eAnnotation;
- String onapType;
- String onapValue;
-
- EList<EAnnotation> value = eStrucClassifier.getEAnnotations();
-
- for (int i = 0; i < value.size(); i++){
- annotationType = value.get(i).getSource();
- eAnnotation = eStrucClassifier.getEAnnotations().get(i);
- onapType = eAnnotation.getDetails().get(0).getValue();
- onapValue = eAnnotation.getDetails().get(0).getKey();
-
- if (annotationType.contains(type) && onapType.contains(annotation)){
- return true;
- }
-
- if (annotationType.contains(type) && onapValue.contains(annotation)){
- return true;
- }
- }
-
- return false;
- }
-
-
- private String annotationValue(EStructuralFeature eStrucClassifier, ANNOTATION_TYPE annotation, String type) {
- String annotationType;
- EAnnotation eAnnotation;
- String onapType;
- String onapValue = null;
-
- EList<EAnnotation> value = eStrucClassifier.getEAnnotations();
-
- for (int i = 0; i < value.size(); i++){
- annotationType = value.get(i).getSource();
- eAnnotation = eStrucClassifier.getEAnnotations().get(i);
- onapType = eAnnotation.getDetails().get(0).getKey();
- if (annotationType.contains(type) && onapType.compareToIgnoreCase(annotation.toString())==0){
- onapValue = eAnnotation.getDetails().get(0).getValue();
- if (annotation == ANNOTATION_TYPE.VALIDATION){
- return onapValue;
- } else {
- return onapType + "-" + onapValue;
- }
- }
- }
-
- return onapValue;
- }
- public boolean isRequiredAttribute(EObject obj, String className){
- EClassifier eClassifier = (EClassifier) obj;
- String workingClass = eClassifier.getName().trim();
- if (workingClass.equalsIgnoreCase(className)){
- return true;
- }
-
- return false;
- }
-
- private boolean isPolicyTemplate(EPackage root, String className){
-
- for (EClassifier classifier : root.getEClassifiers()){
- if (classifier instanceof EClass) {
- EClass eClass = (EClass)classifier;
- if (eClass.getName().contentEquals(className)){
- EList<EAnnotation> value = eClass.getEAnnotations();
- for (EAnnotation workingValue : value){
- EMap<String, String> keyMap = workingValue.getDetails();
- if (keyMap.containsKey("policyTemplate")){
- return true;
- }
- }
- }
- }
- }
- return false;
- }
- private String getSubTypes(EPackage root, String className) {
- String returnSubTypes = null;
- for (EClassifier classifier : root.getEClassifiers()){
- if (classifier instanceof EClass) {
- EClass eClass = (EClass)classifier;
-
- for (EClass eSuperType : eClass.getEAllSuperTypes())
- {
- if (eClass.getName().contentEquals(className)){
- returnSubTypes = eSuperType.getName();
- }
- }
- }
- }
- return returnSubTypes;
- }
-
- public Map<String, String> getAttributeList(EPackage root, String className, String superClass){
-
- TreeIterator<EObject> treeItr = root.eAllContents();
- boolean requiredAttribute = false;
- HashMap<String, String> refAttribute = new HashMap<>();
- boolean annotation;
- boolean dictionaryTest;
- String defaultValue;
- String eType;
-
- // Pulling out dependency from file
- while (treeItr.hasNext()) {
- EObject obj = treeItr.next();
- if (obj instanceof EClassifier) {
- if (isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass )){
- requiredAttribute = true;
- }else {
- requiredAttribute = false;
- }
-
- }
-
- if (requiredAttribute && (obj instanceof EStructuralFeature)) {
- EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
- if (!eStrucClassifier.getEAnnotations().isEmpty()) {
- annotation = annotationTest(eStrucClassifier, configuration, onap);
- dictionaryTest = annotationTest(eStrucClassifier, dictionary, policy);
- EClassifier refType = ((EStructuralFeature) obj).getEType();
- if (annotation && !(obj instanceof EReference) && !(refType instanceof EEnumImpl)) {
- String name = eStrucClassifier.getName();
- if (dictionaryTest){
- eType = annotationValue(eStrucClassifier, ANNOTATION_TYPE.DICTIONARY, policy);
- }else {
- eType = eStrucClassifier.getEType().getInstanceClassName();
- }
- defaultValue = checkDefultValue(((EStructuralFeature) obj).getDefaultValueLiteral());
-
- String array = arrayCheck(((EStructuralFeature) obj).getUpperBound());
- String required = checkRequiredPattern(((EStructuralFeature) obj).getUpperBound(), ((EStructuralFeature) obj).getLowerBound());
- String attributeValue = eType + defaultValue + required + array;
- refAttribute.put(name, attributeValue);
- }
- }
- }
- }
- return refAttribute;
-
- }
-
- public String arrayCheck(int upperBound) {
-
- if (upperBound == -1){
- return MANYTRUE;
- }
-
- return MANYFALSE;
- }
-
- public List<String> getDependencyList(EClassifier eClassifier){
- List<String> returnValue = new ArrayList<>();;
- EList<EClass> somelist = ((EClass) eClassifier).getEAllSuperTypes();
- if (somelist.isEmpty()){
- return returnValue;
- }
- for(EClass depend: somelist){
- if (depend.toString().contains(eProxyURI)){
- String one = depend.toString().split(eProxyURI)[1];
- String value = StringUtils.replaceEach(one.split("#")[1], new String[]{"//", ")"}, new String[]{"", ""});
- returnValue.add(value);
- }
- }
-
- return returnValue;
- }
-
- public Map<String, String> buildSubList(Map<String, String> subClassAttributes, Map<String, MSAttributeObject> classMap, String className){
- Map<String, String> missingValues = new HashMap<>();
- Map<String, String> workingMap;
- boolean enumType;
-
- for ( Entry<String, String> map : classMap.get(className).getRefAttribute().entrySet()){
- String value = map.getValue().split(":")[0];
- if (value!=null){
- classMap.get(className).getEnumType();
- enumType = classMap.get(className).getEnumType().containsKey(value);
- if (!enumType){
- workingMap = classMap.get(value).getRefAttribute();
- for ( Entry<String, String> subMab : workingMap.entrySet()){
- String value2 = subMab.getValue().split(":")[0];
- if (!subClassAttributes.containsValue(value2)){
- missingValues.put(subMab.getKey(), subMab.getValue());
- }
- }
-
- }
- }
- }
-
- return missingValues;
- }
-
- public Map<String, Map<String, String>> recursiveReference(Map<String, MSAttributeObject> classMap, String className){
-
- Map<String, Map<String, String>> returnObject = new HashMap<>();
- Map<String, String> returnClass = getRefclass(classMap, className);
- returnObject.put(className, returnClass);
- for (Entry<String, String> reAttribute :returnClass.entrySet()){
- if (reAttribute.getValue().split(":")[1].contains("MANY") &&
- classMap.get(reAttribute.getValue().split(":")[0]) != null){
- returnObject.putAll(recursiveReference(classMap, reAttribute.getValue().split(":")[0]));
- }
-
- }
-
- return returnObject;
-
- }
-
- public String createJson(Map<String, MSAttributeObject> classMap, String className) {
- boolean enumType;
- Map<String, Map<String, String>> myObject = new HashMap<>();
- for ( Entry<String, String> map : classMap.get(className).getRefAttribute().entrySet()){
- String value = map.getValue().split(":")[0];
- if (value!=null){
- enumType = classMap.get(className).getEnumType().containsKey(value);
- if (!enumType && map.getValue().split(":")[1].contains("MANY")){
- Map<String, Map<String, String>> testRecursive = recursiveReference(classMap, map.getValue().split(":")[0] );
- myObject.putAll(testRecursive);
- }
- }
- }
-
- Gson gson = new Gson();
- return gson.toJson(myObject);
- }
-
- public Map<String, String> getRefclass(Map<String, MSAttributeObject> classMap, String className){
- HashMap<String, String> missingValues = new HashMap<>();
-
- if (classMap.get(className).getAttribute()!=null || !classMap.get(className).getAttribute().isEmpty()){
- missingValues.putAll(classMap.get(className).getAttribute());
- }
-
- if (classMap.get(className).getRefAttribute()!=null || !classMap.get(className).getRefAttribute().isEmpty()){
- missingValues.putAll(classMap.get(className).getRefAttribute());
- }
-
- return missingValues;
- }
-
- public String createSubAttributes(List<String> dependency, Map<String, MSAttributeObject> classMap, String modelName) {
-
- HashMap <String, Object> workingMap = new HashMap<>();
- MSAttributeObject tempObject;
- if (dependency!=null){
- if (dependency.isEmpty()){
- return "{}";
- }
- dependency.add(modelName);
- for (String element: dependency){
- tempObject = classMap.get(element);
- if (tempObject!=null){
- workingMap.putAll(classMap.get(element).getSubClass());
- }
- }
- }
-
- return createJson(classMap, modelName);
- }
-
- public List<String> getFullDependencyList(List<String> dependency, Map<String,MSAttributeObject > classMap) {
- ArrayList<String> returnList = new ArrayList<>();
- ArrayList<String> workingList;
- returnList.addAll(dependency);
- for (String element : dependency ){
- if (classMap.containsKey(element)){
- MSAttributeObject value = classMap.get(element);
- String rawValue = StringUtils.replaceEach(value.getDependency(), new String[]{"[", "]"}, new String[]{"", ""});
- workingList = new ArrayList<>(Arrays.asList(rawValue.split(",")));
- for(String depend : workingList){
- if (!returnList.contains(depend) && !depend.isEmpty()){
- returnList.add(depend.trim());
- }
- }
- }
- }
-
- return returnList;
- }
-
+ private static final Log logger = LogFactory.getLog(MSModelUtils.class);
+
+ private HashMap<String,MSAttributeObject > classMap = new HashMap<>();
+ private HashMap<String, String> enumMap = new HashMap<>();
+ private HashMap<String, String> matchingClass = new HashMap<>();
+ private String configuration = "configuration";
+ private String dictionary = "dictionary";
+ private String onap = "";
+ private String policy = "";
+ private String eProxyURI = "eProxyURI:";
+ private List<String> orderedElements = new ArrayList<>();
+ private String dataOrderInfo = null;
+ private Set<String> uniqueDataKeys= new HashSet<>();
+ private Set<String> uniqueKeys= new HashSet<>();
+ private String listConstraints = null;
+ private String referenceAttributes;
+ private LinkedHashMap<String, Object> retmap = new LinkedHashMap<>();
+ private Map<String, String> matchableValues;
+ private static final String PROPERTIES=".properties.";
+ public static final String DATATYPE = "data_types.policy.data.";
+ public static final String TYPE=".type";
+ public static final String REQUIRED=".required";
+ private static final String MATCHABLE=".matchable";
+ private static final String STRING="string";
+ private static final String INTEGER="integer";
+ private static final String LIST="list";
+ public static final String MAP="map";
+ private static final String DEFAULT=".default";
+ private static final String MANYFALSE=":MANY-false";
+ private static final String MANYTRUE=":MANY-true";
+ private static final String DEFAULTVALUE=":defaultValue-";
+ private static final String REQUIREDVALUE=":required-";
+ private static final String MATCHABLEKEY="matchable";
+ private static final String REQUIREDFALSE=":required-false";
+ private static final String REQUIREDTRUE=":required-true";
+ private static final String MATCHINGTRUE="matching-true";
+
+ private StringBuilder dataListBuffer=new StringBuilder();
+ private List<String> dataConstraints= new ArrayList <>();
+ private String attributeString = null;
+
+ public MSModelUtils(){
+ }
+
+ public MSModelUtils(String onap, String policy){
+ this.onap = onap;
+ this.policy = policy;
+ }
+
+ private enum ANNOTATION_TYPE{
+ MATCHING, VALIDATION, DICTIONARY
+ };
+
+ public enum MODEL_TYPE {
+ XMI
+ };
+
+
+ public Map<String, MSAttributeObject> processEpackage(String file, MODEL_TYPE model){
+ if (model == MODEL_TYPE.XMI ){
+ processXMIEpackage(file);
+ }
+ return classMap;
+
+ }
+
+ private void processXMIEpackage(String xmiFile){
+ EPackage root = getEpackage(xmiFile);
+ TreeIterator<EObject> treeItr = root.eAllContents();
+ String className;
+ String returnValue;
+
+ // Pulling out dependency from file
+ while (treeItr.hasNext()) {
+ EObject obj = treeItr.next();
+ if (obj instanceof EClassifier) {
+ EClassifier eClassifier = (EClassifier) obj;
+ className = eClassifier.getName();
+
+ if (obj instanceof EEnum) {
+ enumMap.putAll(getEEnum(obj));
+ }else if (obj instanceof EClass) {
+ String temp = getDependencyList(eClassifier).toString();
+ returnValue = StringUtils.replaceEach(temp, new String[]{"[", "]"}, new String[]{"", ""});
+ getAttributes(className, returnValue, root);
+ }
+ }
+ }
+
+ if (!enumMap.isEmpty()){
+ addEnumClassMap();
+ }
+ if (!matchingClass.isEmpty()){
+ CheckForMatchingClass();
+ }
+ }
+
+ private void CheckForMatchingClass() {
+ HashMap<String, String> tempAttribute = new HashMap<>();
+
+ for (Entry<String, String> set : matchingClass.entrySet()){
+ String key = set.getKey();
+ if (classMap.containsKey(key)){
+ Map<String, String> listAttributes = classMap.get(key).getAttribute();
+ Map<String, String> listRef = classMap.get(key).getRefAttribute();
+ for ( Entry<String, String> eSet : listAttributes.entrySet()){
+ String key2 = eSet.getKey();
+ tempAttribute.put(key2, MATCHINGTRUE);
+ }
+ for ( Entry<String, String> eSet : listRef.entrySet()){
+ String key3 = eSet.getKey();
+ tempAttribute.put(key3, MATCHINGTRUE);
+ }
+
+ }
+ UpdateMatching(tempAttribute, key);
+ }
+
+ }
+
+
+
+ private void UpdateMatching(HashMap<String, String> tempAttribute, String key) {
+ Map<String, MSAttributeObject> newClass = classMap;
+
+ for (Entry<String, MSAttributeObject> updateClass : newClass.entrySet()){
+ Map<String, String> valueMap = updateClass.getValue().getMatchingSet();
+ String keymap = updateClass.getKey();
+ if (valueMap.containsKey(key)){
+ Map<String, String> modifyMap = classMap.get(keymap).getMatchingSet();
+ modifyMap.remove(key);
+ modifyMap.putAll(tempAttribute);
+ classMap.get(keymap).setMatchingSet(modifyMap);
+ }
+
+ }
+ }
+
+ private void addEnumClassMap() {
+ for (Entry<String, MSAttributeObject> value :classMap.entrySet()){
+ value.getValue().setEnumType(enumMap);
+ }
+ }
+
+ private EPackage getEpackage(String xmiFile) {
+ ResourceSet resSet = new ResourceSetImpl();
+ Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
+ Map<String, Object> m = reg.getExtensionToFactoryMap();
+ m.put("xmi", new XMIResourceFactoryImpl());
+ Resource resource = resSet.getResource(URI.createFileURI(xmiFile), true);
+ try {
+ resource.load(Collections.emptyMap());
+ } catch (IOException e) {
+ logger.error("Error loading Encore Resource for new Model" + e);
+ }
+
+ return (EPackage) resource.getContents().get(0);
+ }
+
+ private HashMap<String, String> getEEnum(EObject obj) {
+ List<String> valueList = new ArrayList<>();
+ HashMap<String, String> returnMap = new HashMap<>();
+ EEnum eenum = (EEnum)obj;
+
+ String name = eenum.getName();
+ for (EEnumLiteral eEnumLiteral : eenum.getELiterals())
+ {
+ Enumerator instance = eEnumLiteral.getInstance();
+ String value = instance.getLiteral();
+ valueList.add(value);
+ }
+ returnMap.put(name, valueList.toString());
+ return returnMap;
+ }
+
+ public void getAttributes(String className, String dependency, EPackage root) {
+ List<String> dpendList = new ArrayList<>();
+ if (dependency!=null){
+ dpendList = new ArrayList<>(Arrays.asList(dependency.split(",")));
+ }
+ MSAttributeObject msAttributeObject = new MSAttributeObject();
+ msAttributeObject.setClassName(className);
+ String extendClass = getSubTypes(root, className);
+ Map<String, String> returnRefList = getRefAttributeList(root, className, extendClass);
+ Map<String, String> returnAttributeList = getAttributeList(root, className, extendClass);
+ Map<String, Object> returnSubList = getSubAttributeList(root, className, extendClass);
+ HashMap<String, String> returnAnnotation = getAnnotation(root, className, extendClass);
+ msAttributeObject.setAttribute(returnAttributeList);
+ msAttributeObject.setRefAttribute(returnRefList);
+ msAttributeObject.setSubClass(returnSubList);
+ msAttributeObject.setDependency(dpendList.toString());
+ msAttributeObject.addMatchingSet(returnAnnotation);
+ msAttributeObject.setPolicyTempalate(isPolicyTemplate(root, className));
+
+ this.classMap.put(className, msAttributeObject);
+ }
+
+ private HashMap<String, String> getAnnotation(EPackage root, String className, String extendClass) {
+ TreeIterator<EObject> treeItr = root.eAllContents();
+ boolean requiredAttribute = false;
+ boolean requiredMatchAttribute = false;
+ HashMap<String, String> annotationSet = new HashMap<>();
+
+ // Pulling out dependency from file
+ while (treeItr.hasNext()) {
+ EObject obj = treeItr.next();
+ if (obj instanceof EClassifier) {
+ requiredAttribute = isRequiredAttribute(obj, className );
+ requiredMatchAttribute = isRequiredAttribute(obj, extendClass );
+ }
+
+ if (requiredAttribute){
+ if (obj instanceof EStructuralFeature) {
+ checkAnnotation(annotationSet, (EStructuralFeature) obj);
+ }
+ } else if (requiredMatchAttribute && (obj instanceof EStructuralFeature)) {
+ findMatchingAnnotation(annotationSet, obj);
+ }
+ }
+ return annotationSet;
+ }
+
+ private void findMatchingAnnotation(HashMap<String, String> annotationSet, EObject obj) {
+ EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
+ if (eStrucClassifier.getEAnnotations().isEmpty()) {
+ return;
+ }
+ String matching = annotationValue(eStrucClassifier, ANNOTATION_TYPE.MATCHING, policy);
+ if (matching!=null){
+ if (obj instanceof EReference){
+ EClass refType = ((EReference) obj).getEReferenceType();
+ annotationSet.put(refType.getName(), matching);
+ matchingClass.put(refType.getName(), matching);
+ }else{
+ annotationSet.put(eStrucClassifier.getName(), matching);
+ }
+ }
+
+ }
+
+ private void checkAnnotation(HashMap<String, String> annotationSet, EStructuralFeature obj) {
+ EStructuralFeature eStrucClassifier = obj;
+ if (eStrucClassifier.getEAnnotations().isEmpty()) {
+ return;
+ }
+ String matching = annotationValue(eStrucClassifier, ANNOTATION_TYPE.MATCHING, policy);
+ if (matching!=null){
+ annotationSet.put(eStrucClassifier.getName(), matching);
+ }
+ String range = annotationValue(eStrucClassifier, ANNOTATION_TYPE.VALIDATION, policy);
+ if (range!=null){
+ annotationSet.put(eStrucClassifier.getName(), range);
+ }
+ String annotationDict = annotationValue(eStrucClassifier, ANNOTATION_TYPE.DICTIONARY, policy);
+ if (annotationDict!=null){
+ annotationSet.put(eStrucClassifier.getName(), annotationDict);
+ }
+ }
+
+ private Map<String, Object> getSubAttributeList(EPackage root, String className , String superClass) {
+ TreeIterator<EObject> treeItr = root.eAllContents();
+ boolean requiredAttribute = false;
+ Map<String, Object> subAttribute = new HashMap<>();
+ int rollingCount = 0;
+ int processClass = 0;
+
+ // Pulling out dependency from file
+ while (treeItr.hasNext() && rollingCount < 2) {
+
+ EObject obj = treeItr.next();
+ if (obj instanceof EClassifier) {
+ requiredAttribute = isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass );
+ if (requiredAttribute){
+ processClass++;
+ }
+ rollingCount = rollingCount+processClass;
+ }
+
+ if (requiredAttribute && (obj instanceof EStructuralFeature)) {
+ EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
+ if (!eStrucClassifier.getEAnnotations().isEmpty()) {
+ updateSubAttributes(subAttribute, obj, eStrucClassifier);
+ }
+ }
+ }
+ return subAttribute;
+ }
+
+ private void updateSubAttributes(Map<String, Object> subAttribute, EObject obj, EStructuralFeature eStrucClassifier) {
+ if (!(obj instanceof EReference)) {
+ return;
+ }
+ if (annotationTest(eStrucClassifier, configuration, onap)) {
+ EClass refType = ((EReference) obj).getEReferenceType();
+ if(!refType.toString().contains(eProxyURI)){
+ String required = REQUIREDFALSE;
+ if(eStrucClassifier.getLowerBound() == 1){
+ required = REQUIREDTRUE;
+ }
+ subAttribute.put(eStrucClassifier.getName(), refType.getName() + required);
+ }
+ }
+ }
+
+ public String checkDefultValue(String defultValue) {
+ if (defultValue!=null){
+ return DEFAULTVALUE+ defultValue;
+ }
+ return ":defaultValue-NA";
+
+ }
+
+ public String checkRequiredPattern(int upper, int lower) {
+
+ String pattern = XACMLProperties.getProperty(XACMLRestProperties.PROP_XCORE_REQUIRED_PATTERN);
+
+ if (pattern!=null){
+ if (upper == Integer.parseInt(pattern.split(",")[1]) && lower==Integer.parseInt(pattern.split(",")[0])){
+ return REQUIREDTRUE;
+ }
+ }
+
+ return REQUIREDFALSE;
+ }
+
+ public JSONObject buildJavaObject(Map<String, String> map){
+
+ return new JSONObject(map);
+ }
+
+ public Map<String, String> getRefAttributeList(EPackage root, String className, String superClass){
+
+ TreeIterator<EObject> treeItr = root.eAllContents();
+ boolean requiredAttribute = false;
+ HashMap<String, String> refAttribute = new HashMap<>();
+ int rollingCount = 0;
+ int processClass = 0;
+ boolean annotation;
+ // Pulling out dependency from file
+ while (treeItr.hasNext()) {
+ EObject obj = treeItr.next();
+ if (obj instanceof EClassifier) {
+ requiredAttribute = isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass );
+ if (requiredAttribute){
+ processClass++;
+ }
+ rollingCount = rollingCount+processClass;
+ }
+
+ if (requiredAttribute && (obj instanceof EStructuralFeature)) {
+ EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
+ if (!eStrucClassifier.getEAnnotations().isEmpty()) {
+ annotation = annotationTest(eStrucClassifier, configuration, onap);
+ if ( annotation && obj instanceof EReference) {
+ updRefAttributes(refAttribute, (EStructuralFeature) obj, eStrucClassifier);
+ } else if (annotation && obj instanceof EAttributeImpl) {
+ updEnumTypeRefAttrib(refAttribute, (EStructuralFeature) obj, eStrucClassifier);
+ }
+ }
+ }
+ }
+
+ return refAttribute;
+ }
+
+ private void updEnumTypeRefAttrib(HashMap<String, String> refAttribute, EStructuralFeature obj, EStructuralFeature eStrucClassifier) {
+ EClassifier refType = ((EAttributeImpl) obj).getEType();
+ if (!(refType instanceof EEnumImpl)){
+ return;
+ }
+
+ String array = arrayCheck(obj.getUpperBound());
+ String required = REQUIREDFALSE;
+ if(obj.getLowerBound() == 1){
+ required = REQUIREDTRUE;
+ }
+ refAttribute.put(eStrucClassifier.getName(), refType.getName() + array + required);
+ }
+
+ private void updRefAttributes(HashMap<String, String> refAttribute, EStructuralFeature obj, EStructuralFeature eStrucClassifier) {
+ EClass refType = ((EReference) obj).getEReferenceType();
+ if(refType.toString().contains(eProxyURI)){
+ String one = refType.toString().split(eProxyURI)[1];
+ String refValue = StringUtils.replaceEach(one.split("#")[1], new String[]{"//", ")"}, new String[]{"", ""});
+ refAttribute.put(eStrucClassifier.getName(), refValue);
+ } else {
+ String required = REQUIREDFALSE;
+ if(obj.getLowerBound() == 1){
+ required = REQUIREDTRUE;
+ }
+ refAttribute.put(eStrucClassifier.getName(), refType.getName() + arrayCheck(obj.getUpperBound()) + required);
+ }
+ }
+
+ private boolean annotationTest(EStructuralFeature eStrucClassifier, String annotation, String type) {
+ String annotationType;
+ EAnnotation eAnnotation;
+ String onapType;
+ String onapValue;
+
+ EList<EAnnotation> value = eStrucClassifier.getEAnnotations();
+
+ for (int i = 0; i < value.size(); i++){
+ annotationType = value.get(i).getSource();
+ eAnnotation = eStrucClassifier.getEAnnotations().get(i);
+ onapType = eAnnotation.getDetails().get(0).getValue();
+ onapValue = eAnnotation.getDetails().get(0).getKey();
+
+ if (annotationType.contains(type) && onapType.contains(annotation)){
+ return true;
+ }
+
+ if (annotationType.contains(type) && onapValue.contains(annotation)){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
+ private String annotationValue(EStructuralFeature eStrucClassifier, ANNOTATION_TYPE annotation, String type) {
+ String annotationType;
+ EAnnotation eAnnotation;
+ String onapType;
+ String onapValue = null;
+
+ EList<EAnnotation> value = eStrucClassifier.getEAnnotations();
+
+ for (int i = 0; i < value.size(); i++){
+ annotationType = value.get(i).getSource();
+ eAnnotation = eStrucClassifier.getEAnnotations().get(i);
+ onapType = eAnnotation.getDetails().get(0).getKey();
+ if (annotationType.contains(type) && onapType.compareToIgnoreCase(annotation.toString())==0){
+ onapValue = eAnnotation.getDetails().get(0).getValue();
+ if (annotation == ANNOTATION_TYPE.VALIDATION){
+ return onapValue;
+ } else {
+ return onapType + "-" + onapValue;
+ }
+ }
+ }
+
+ return onapValue;
+ }
+ public boolean isRequiredAttribute(EObject obj, String className){
+ EClassifier eClassifier = (EClassifier) obj;
+ String workingClass = eClassifier.getName().trim();
+ if (workingClass.equalsIgnoreCase(className)){
+ return true;
+ }
+
+ return false;
+ }
+
+ private boolean isPolicyTemplate(EPackage root, String className){
+ boolean result = false;
+ for (EClassifier classifier : root.getEClassifiers()){
+ if (classifier instanceof EClass) {
+ EClass eClass = (EClass)classifier;
+ if (eClass.getName().contentEquals(className)) {
+ result = checkPolicyTemplate(eClass);
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ private boolean checkPolicyTemplate(EClass eClass) {
+ EList<EAnnotation> value = eClass.getEAnnotations();
+ for (EAnnotation workingValue : value){
+ EMap<String, String> keyMap = workingValue.getDetails();
+ if (keyMap.containsKey("policyTemplate")){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private String getSubTypes(EPackage root, String className) {
+ String returnSubTypes = null;
+ for (EClassifier classifier : root.getEClassifiers()){
+ if (classifier instanceof EClass) {
+ returnSubTypes = findSubTypes(className, returnSubTypes, (EClass) classifier);
+ }
+ }
+ return returnSubTypes;
+ }
+
+ private String findSubTypes(String className, String returnSubTypes, EClass classifier) {
+ EClass eClass = classifier;
+
+ for (EClass eSuperType : eClass.getEAllSuperTypes())
+ {
+ if (eClass.getName().contentEquals(className)){
+ returnSubTypes = eSuperType.getName();
+ }
+ }
+ return returnSubTypes;
+ }
+
+ public Map<String, String> getAttributeList(EPackage root, String className, String superClass){
+
+ TreeIterator<EObject> treeItr = root.eAllContents();
+ boolean requiredAttribute = false;
+ HashMap<String, String> refAttribute = new HashMap<>();
+
+ // Pulling out dependency from file
+ while (treeItr.hasNext()) {
+ EObject obj = treeItr.next();
+ if (obj instanceof EClassifier) {
+ requiredAttribute = isRequiredAttribute(obj, className ) || isRequiredAttribute(obj, superClass );
+ }
+
+ if (requiredAttribute && (obj instanceof EStructuralFeature)) {
+ EStructuralFeature eStrucClassifier = (EStructuralFeature) obj;
+ if (!eStrucClassifier.getEAnnotations().isEmpty()) {
+ checkStrucClassifier(refAttribute, obj, eStrucClassifier);
+ }
+ }
+ }
+ return refAttribute;
+
+ }
+
+ private void checkStrucClassifier(HashMap<String, String> refAttribute, EObject obj, EStructuralFeature eStrucClassifier) {
+ EClassifier refType = ((EStructuralFeature) obj).getEType();
+ boolean annotation = annotationTest(eStrucClassifier, configuration, onap);
+ boolean dictionaryTest = annotationTest(eStrucClassifier, dictionary, policy);
+ if (annotation && !(obj instanceof EReference) && !(refType instanceof EEnumImpl)) {
+ updEReferenceAttrib(refAttribute, dictionaryTest, (EStructuralFeature) obj, eStrucClassifier);
+ }
+ }
+
+ private void updEReferenceAttrib(HashMap<String, String> refAttribute, boolean dictionaryTest, EStructuralFeature obj, EStructuralFeature eStrucClassifier) {
+ String eType;
+ String name = eStrucClassifier.getName();
+ if (dictionaryTest){
+ eType = annotationValue(eStrucClassifier, ANNOTATION_TYPE.DICTIONARY, policy);
+ }else {
+ eType = eStrucClassifier.getEType().getInstanceClassName();
+ }
+ String defaultValue = checkDefultValue(obj.getDefaultValueLiteral());
+ String array = arrayCheck(obj.getUpperBound());
+ String required = checkRequiredPattern(obj.getUpperBound(), obj.getLowerBound());
+ refAttribute.put(name, eType + defaultValue + required + array);
+ }
+
+ public String arrayCheck(int upperBound) {
+
+ if (upperBound == -1){
+ return MANYTRUE;
+ }
+
+ return MANYFALSE;
+ }
+
+ public List<String> getDependencyList(EClassifier eClassifier){
+ List<String> returnValue = new ArrayList<>();;
+ EList<EClass> somelist = ((EClass) eClassifier).getEAllSuperTypes();
+ if (somelist.isEmpty()){
+ return returnValue;
+ }
+ for(EClass depend: somelist){
+ if (depend.toString().contains(eProxyURI)){
+ String one = depend.toString().split(eProxyURI)[1];
+ String value = StringUtils.replaceEach(one.split("#")[1], new String[]{"//", ")"}, new String[]{"", ""});
+ returnValue.add(value);
+ }
+ }
+
+ return returnValue;
+ }
+
+ public Map<String, String> buildSubList(Map<String, String> subClassAttributes, Map<String, MSAttributeObject> classMap, String className){
+ Map<String, String> missingValues = new HashMap<>();
+ Map<String, String> workingMap;
+ boolean enumType;
+
+ for ( Entry<String, String> map : classMap.get(className).getRefAttribute().entrySet()){
+ String value = map.getValue().split(":")[0];
+ if (value!=null){
+ classMap.get(className).getEnumType();
+ enumType = classMap.get(className).getEnumType().containsKey(value);
+ if (!enumType){
+ workingMap = classMap.get(value).getRefAttribute();
+ for ( Entry<String, String> subMab : workingMap.entrySet()){
+ String value2 = subMab.getValue().split(":")[0];
+ if (!subClassAttributes.containsValue(value2)){
+ missingValues.put(subMab.getKey(), subMab.getValue());
+ }
+ }
+
+ }
+ }
+ }
+
+ return missingValues;
+ }
+
+ public Map<String, Map<String, String>> recursiveReference(Map<String, MSAttributeObject> classMap, String className){
+
+ Map<String, Map<String, String>> returnObject = new HashMap<>();
+ Map<String, String> returnClass = getRefclass(classMap, className);
+ returnObject.put(className, returnClass);
+ for (Entry<String, String> reAttribute :returnClass.entrySet()){
+ if (reAttribute.getValue().split(":")[1].contains("MANY") &&
+ classMap.get(reAttribute.getValue().split(":")[0]) != null){
+ returnObject.putAll(recursiveReference(classMap, reAttribute.getValue().split(":")[0]));
+ }
+
+ }
+
+ return returnObject;
+
+ }
+
+ public String createJson(Map<String, MSAttributeObject> classMap, String className) {
+ boolean enumType;
+ Map<String, Map<String, String>> myObject = new HashMap<>();
+ for ( Entry<String, String> map : classMap.get(className).getRefAttribute().entrySet()){
+ String value = map.getValue().split(":")[0];
+ if (value!=null){
+ enumType = classMap.get(className).getEnumType().containsKey(value);
+ if (!enumType && map.getValue().split(":")[1].contains("MANY")){
+ Map<String, Map<String, String>> testRecursive = recursiveReference(classMap, map.getValue().split(":")[0] );
+ myObject.putAll(testRecursive);
+ }
+ }
+ }
+
+ Gson gson = new Gson();
+ return gson.toJson(myObject);
+ }
+
+ public Map<String, String> getRefclass(Map<String, MSAttributeObject> classMap, String className){
+ HashMap<String, String> missingValues = new HashMap<>();
+
+ if (classMap.get(className).getAttribute()!=null || !classMap.get(className).getAttribute().isEmpty()){
+ missingValues.putAll(classMap.get(className).getAttribute());
+ }
+
+ if (classMap.get(className).getRefAttribute()!=null || !classMap.get(className).getRefAttribute().isEmpty()){
+ missingValues.putAll(classMap.get(className).getRefAttribute());
+ }
+
+ return missingValues;
+ }
+
+ public String createSubAttributes(List<String> dependency, Map<String, MSAttributeObject> classMap, String modelName) {
+
+ HashMap <String, Object> workingMap = new HashMap<>();
+ MSAttributeObject tempObject;
+ if (dependency!=null){
+ if (dependency.isEmpty()){
+ return "{}";
+ }
+ dependency.add(modelName);
+ for (String element: dependency){
+ tempObject = classMap.get(element);
+ if (tempObject!=null){
+ workingMap.putAll(classMap.get(element).getSubClass());
+ }
+ }
+ }
+
+ return createJson(classMap, modelName);
+ }
+
+ public List<String> getFullDependencyList(List<String> dependency, Map<String,MSAttributeObject > classMap) {
+ ArrayList<String> returnList = new ArrayList<>();
+ ArrayList<String> workingList;
+ returnList.addAll(dependency);
+ for (String element : dependency ){
+ if (classMap.containsKey(element)){
+ MSAttributeObject value = classMap.get(element);
+ String rawValue = StringUtils.replaceEach(value.getDependency(), new String[]{"[", "]"}, new String[]{"", ""});
+ workingList = new ArrayList<>(Arrays.asList(rawValue.split(",")));
+ for(String depend : workingList) {
+ updDependencyList(returnList, depend);
+ }
+ }
+ }
+
+ return returnList;
+ }
+
+ private void updDependencyList(ArrayList<String> returnList, String depend) {
+ if (!returnList.contains(depend) && !depend.isEmpty()){
+ returnList.add(depend.trim());
+ }
+ }
+
/*
* For TOSCA Model
*/
- public String parseTosca (String fileName){
- LinkedHashMap<String,String> map= new LinkedHashMap<>();
+ public String parseTosca (String fileName){
+ LinkedHashMap<String,String> map= new LinkedHashMap<>();
- try {
- map=load(fileName);
-
- if(map != null){
- if(map.get("error") != null){
- return map.get("error");
- }
- }
-
- parseDataAndPolicyNodes(map);
-
- LinkedHashMap<String,String> dataMapForJson=parseDataNodes(map);
-
- constructJsonForDataFields(dataMapForJson);
-
- LinkedHashMap<String,LinkedHashMap<String,String>> mapKey= parsePolicyNodes(map);
-
- createAttributes(mapKey);
-
- } catch (IOException e) {
- logger.error(e);
- }catch(ParserException e){
- logger.error(e);
- return e.getMessage();
- }
-
- return null;
- }
-
- @SuppressWarnings("unchecked")
- public LinkedHashMap<String, String> load(String fileName) throws IOException,ParserException {
- File newConfiguration = new File(fileName);
- StringBuilder orderInfo = new StringBuilder("[");
- Yaml yaml = new Yaml();
- LinkedHashMap<Object, Object> yamlMap = null;
- try(InputStream is = new FileInputStream(newConfiguration)){
- yamlMap = (LinkedHashMap<Object, Object>) yaml.load(is);
- } catch (FileNotFoundException e) {
- logger.error(e);
- }catch(Exception e){
- throw new ParserException("Invalid TOSCA Model format. Please make sure it is a valid YAML file");
- }
-
- StringBuilder sb = new StringBuilder();
- LinkedHashMap<String, String> settings = new LinkedHashMap<>();
- if (yamlMap == null) {
- return settings;
- }
-
- String message = validations(yamlMap);
-
- if(message != null){
- settings.put("error", message);
- return settings;
- }
-
- findNode(yamlMap);
-
- orderedElements.stream().forEach((string) -> {
- orderInfo.append(string);
- orderInfo.append(",");
- logger.info("Content: " + string);
- });
-
- orderInfo.append("]");
-
- dataOrderInfo = orderInfo.toString();
- dataOrderInfo = dataOrderInfo.replace(",]", "]");
-
- logger.info("dataOrderInfo :" + dataOrderInfo);
-
- List<String> path = new ArrayList <>();
- serializeMap(settings, sb, path, yamlMap);
- return settings;
- }
-
- @SuppressWarnings("unchecked")
- private String validations(@SuppressWarnings("rawtypes") LinkedHashMap yamlMap){
-
- boolean isNoteTypeFound = false;
- boolean isDataTypeFound = false;
- boolean isToscaVersionKeyFound = false;
- boolean isToscaVersionValueFound = false;
- @SuppressWarnings("rawtypes")
- Map m1 = new HashMap();
- short order =0;
- if(yamlMap != null){
- // Get a set of the entries
- @SuppressWarnings("rawtypes")
- Set set = yamlMap.entrySet();
- // Get an iterator
- @SuppressWarnings("rawtypes")
- Iterator i = set.iterator();
- // Display elements
- while(i.hasNext()) {
- @SuppressWarnings("rawtypes")
- Map.Entry me = (Map.Entry)i.next();
-
- if("tosca_definitions_version".equals(me.getKey())){
- isToscaVersionKeyFound = true;
- order++;
- m1.put("tosca_definitions_version", order);
- }
-
- if("tosca_simple_yaml_1_0_0".equals(me.getValue())){
- isToscaVersionValueFound = true;
- }
-
- if("node_types".equals(me.getKey())){
- isNoteTypeFound = true;
- order++;
- m1.put("node_types", order);
- }
-
- if("data_types".equals(me.getKey())){
- isDataTypeFound = true;
- order++;
- m1.put("data_types", order);
- }
-
- }
-
-
- if(!isDataTypeFound){
- return "data_types are missing or invalid.";
- }
-
- if(!isToscaVersionKeyFound || !isToscaVersionValueFound){
- return "tosca_definitions_version is missing or invalid.";
- }
-
- if(!isNoteTypeFound){
- return "node_types are missing or invalid.";
- }
-
- short version = (short) m1.get("tosca_definitions_version");
-
- if(version > 1 ){
- return "tosca_definitions_version should be defined first.";
- }
-
- short data = (short) m1.get("data_types");
- short node = (short) m1.get("node_types");
- if(node > data){
- return "node_types should be defined before data_types.";
- }
-
- }
-
- return null;
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private void serializeMap(LinkedHashMap<String, String> settings, StringBuilder sb, List<String> path, Map<Object, Object> yamlMap) {
- for (Map.Entry<Object, Object> entry : yamlMap.entrySet()) {
-
- if (entry.getValue() instanceof Map) {
- path.add((String) entry.getKey());
- serializeMap(settings, sb, path, (Map<Object, Object>) entry.getValue());
- path.remove(path.size() - 1);
- } else if (entry.getValue() instanceof List) {
- path.add((String) entry.getKey());
- serializeList(settings, sb, path, (List) entry.getValue());
- path.remove(path.size() - 1);
- } else {
- serializeValue(settings, sb, path, (String) entry.getKey(), entry.getValue());
- }
- }
- }
-
- @SuppressWarnings("unchecked")
- private void serializeList(LinkedHashMap<String, String> settings, StringBuilder sb, List<String> path, List<String> yamlList) {
- int counter = 0;
- for (Object listEle : yamlList) {
- if (listEle instanceof Map) {
- path.add(Integer.toString(counter));
- serializeMap(settings, sb, path, (Map<Object, Object>) listEle);
- path.remove(path.size() - 1);
- } else if (listEle instanceof List) {
- path.add(Integer.toString(counter));
- serializeList(settings, sb, path, (List<String>) listEle);
- path.remove(path.size() - 1);
- } else {
- serializeValue(settings, sb, path, Integer.toString(counter), listEle);
- }
- counter++;
- }
- }
-
- private void serializeValue(LinkedHashMap<String, String> settings, StringBuilder sb, List<String> path, String name, Object value) {
- if (value == null) {
- return;
- }
- sb.setLength(0);
- for (String pathEle : path) {
- sb.append(pathEle).append('.');
- }
- sb.append(name);
- settings.put(sb.toString(), value.toString());
- }
-
-
- void parseDataAndPolicyNodes(LinkedHashMap<String,String> map){
- for(String key:map.keySet()){
- if(key.contains("policy.nodes.Root"))
- {
- continue;
- }
- else if(key.contains("policy.nodes")){
- String wordToFind = "policy.nodes.";
- int indexForPolicyNode=key.indexOf(wordToFind);
- String subNodeString= key.substring(indexForPolicyNode+13, key.length());
-
- stringBetweenDots(subNodeString);
- }
- else if(key.contains("policy.data")){
- String wordToFind="policy.data.";
- int indexForPolicyNode=key.indexOf(wordToFind);
- String subNodeString= key.substring(indexForPolicyNode+12, key.length());
-
- stringBetweenDotsForDataFields(subNodeString);
- }
- }
- }
-
- // Second index of dot should be returned.
- public int stringBetweenDots(String str){
- String stringToSearch=str;
- String[]ss=stringToSearch.split("\\.");
- if(ss!=null){
- int len= ss.length;
- if(len>2){
- uniqueKeys.add(ss[2]);
- }
- }
-
- return uniqueKeys.size();
- }
-
-
- public void stringBetweenDotsForDataFields(String str){
- String stringToSearch=str;
- String[]ss=stringToSearch.split("\\.");
- if(ss!=null){
- int len= ss.length;
-
- if(len>2){
- uniqueDataKeys.add(ss[0]+"%"+ss[2]);
- }
- }
- }
-
- void constructJsonForDataFields(LinkedHashMap<String,String> dataMapForJson){
- LinkedHashMap<String,LinkedHashMap<String,String>> dataMapKey= new LinkedHashMap <>();
- LinkedHashMap<String, String> hmSub;
- for(Map.Entry<String, String> entry: dataMapForJson.entrySet()){
- String uniqueDataKey= entry.getKey();
- String[] uniqueDataKeySplit=uniqueDataKey.split("%");
- String value= dataMapForJson.get(uniqueDataKey);
- if(dataMapKey.containsKey(uniqueDataKeySplit[0])){
- hmSub = dataMapKey.get(uniqueDataKeySplit[0]);
- hmSub.put(uniqueDataKeySplit[1], value);
- }
- else{
- hmSub=new LinkedHashMap <>();
- hmSub.put(uniqueDataKeySplit[1], value);
- }
-
- dataMapKey.put(uniqueDataKeySplit[0], hmSub);
- }
-
- JSONObject mainObject= new JSONObject();
- JSONObject json;
- for(Map.Entry<String,LinkedHashMap<String,String>> entry: dataMapKey.entrySet()){
- String s=entry.getKey();
- json= new JSONObject();
- HashMap<String,String> jsonHm=dataMapKey.get(s);
- for(Map.Entry<String,String> entryMap:jsonHm.entrySet()){
- String key=entryMap.getKey();
- json.put(key, jsonHm.get(key));
- }
- mainObject.put(s,json);
- }
- Iterator<String> keysItr = mainObject.keys();
- while(keysItr.hasNext()) {
- String key = keysItr.next();
- String value = mainObject.get(key).toString();
- retmap.put(key, value);
- }
-
- logger.info("#############################################################################");
- logger.info(mainObject);
- logger.info("###############################################################################");
- }
- LinkedHashMap<String,String> parseDataNodes(LinkedHashMap<String,String> map){
- LinkedHashMap<String,String> dataMapForJson=new LinkedHashMap <>();
- matchableValues = new HashMap <>();
- for(String uniqueDataKey: uniqueDataKeys){
- if(uniqueDataKey.contains("%")){
- String[] uniqueDataKeySplit= uniqueDataKey.split("%");
- String findType=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+TYPE;
- String typeValue=map.get(findType);
- logger.info(typeValue);
-
- String findRequired=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+REQUIRED;
- String requiredValue= map.get(findRequired);
-
- String matchable =DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+MATCHABLE;
-
- String matchableValue= map.get(matchable);
-
- if(matchableValue != null && matchableValue.equalsIgnoreCase("true")){
- if(uniqueDataKey.contains("%")){
- String[] keys= uniqueDataKey.split("%");
- String key=keys[keys.length -1];
- matchableValues.put(key, MATCHINGTRUE);
- }else{
- matchableValues.put(uniqueDataKey, MATCHINGTRUE);
- }
- }
-
- if(requiredValue == null || requiredValue.isEmpty()){
- requiredValue = "false";
- }
- if(typeValue != null && (typeValue.equalsIgnoreCase(STRING)||
- typeValue.equalsIgnoreCase(INTEGER))){
-
- String findDefault=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+DEFAULT;
- String defaultValue= map.get(findDefault);
- logger.info("defaultValue is:"+ defaultValue);
- logger.info("requiredValue is:"+ requiredValue);
-
- StringBuilder attributeIndividualStringBuilder= new StringBuilder();
- attributeIndividualStringBuilder.append(typeValue+DEFAULTVALUE);
- attributeIndividualStringBuilder.append(defaultValue+REQUIREDVALUE);
- attributeIndividualStringBuilder.append(requiredValue+MANYFALSE);
- dataMapForJson.put(uniqueDataKey, attributeIndividualStringBuilder.toString());
- }
- else if(LIST.equalsIgnoreCase(typeValue) || MAP.equalsIgnoreCase(typeValue)){
- logger.info("requiredValue is:"+ requiredValue);
- String findList= DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+".entry_schema.type";
- String listValue=map.get(findList);
- if(listValue!=null){
- logger.info("Type of list is:"+ listValue);
- //Its userdefined
- if(listValue.contains(".")){
- String trimValue=listValue.substring(listValue.lastIndexOf('.')+1);
- StringBuilder referenceIndividualStringBuilder= new StringBuilder();
- referenceIndividualStringBuilder.append(trimValue+REQUIREDVALUE);
- referenceIndividualStringBuilder.append(requiredValue+MANYTRUE);
- dataMapForJson.put(uniqueDataKey, referenceIndividualStringBuilder.toString());
- }//Its string
- else{
- StringBuilder stringListItems= new StringBuilder();
- if(LIST.equalsIgnoreCase(typeValue)){
- stringListItems.append(uniqueDataKeySplit[1].toUpperCase()+REQUIREDVALUE+requiredValue +MANYFALSE);
- }else if( MAP.equalsIgnoreCase(typeValue)){
- stringListItems.append(uniqueDataKeySplit[1].toUpperCase()+REQUIREDVALUE+requiredValue +MANYTRUE);
- }
- dataMapForJson.put(uniqueDataKey, stringListItems.toString());
- boolean isConstraintsFound = false;
- for(int i=0;i<10;i++){
- String findConstraints= DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+".entry_schema.constraints.0.valid_values."+i;
- logger.info("findConstraints => " + findConstraints);
- String constraintsValue=map.get(findConstraints);
- logger.info("constraintsValue => " + constraintsValue);
-
- if((constraintsValue==null || constraintsValue.isEmpty()) && i==0){ //if no constraints at all ( index i as 0 can tell this )
- isConstraintsFound = false;
- //if type is list but no constraints
- String newValue = dataMapForJson.get(uniqueDataKey).replace("MANY-false", "MANY-true");
- newValue = newValue.replace(uniqueDataKeySplit[1].toUpperCase()+":", "");
- dataMapForJson.put(uniqueDataKey, newValue);
- break;
- } else{
- isConstraintsFound = true;
- if(i == 0){ // only need to add one time for the same attribute
- dataListBuffer.append(uniqueDataKeySplit[1].toUpperCase()+"=[");
- }
-
- if(constraintsValue==null){
- constraintsValue = "";
- }else if (constraintsValue.contains("=")) {
- constraintsValue = constraintsValue.replace("=", "equal-sign");
- }
-
- dataConstraints.add(constraintsValue);
- dataListBuffer.append(constraintsValue+",");
- }
- }
- if(isConstraintsFound){
- dataListBuffer.append("]#");
- }
- }
- }else{
- logger.info("entry_schema.type is not defined correctly");
- }
- }
- else{
- String findUserDefined=DATATYPE+uniqueDataKeySplit[0]+"."+"properties"+"."+uniqueDataKeySplit[1]+TYPE;
- String userDefinedValue=map.get(findUserDefined);
- String trimValue=userDefinedValue.substring(userDefinedValue.lastIndexOf('.')+1);
- StringBuilder referenceIndividualStringBuilder= new StringBuilder();
- referenceIndividualStringBuilder.append(trimValue+REQUIREDVALUE);
- referenceIndividualStringBuilder.append(requiredValue+MANYFALSE);
- dataMapForJson.put(uniqueDataKey, referenceIndividualStringBuilder.toString());
-
- }
- }
- }
-
- return dataMapForJson;
- }
-
-
- LinkedHashMap<String, LinkedHashMap<String, String>> parsePolicyNodes(Map<String,String> map) throws ParserException{
- LinkedHashMap<String,LinkedHashMap<String,String>> mapKey= new LinkedHashMap <>();
- for(String uniqueKey: uniqueKeys){
- LinkedHashMap<String,String> hm;
-
- for(Map.Entry<String,String> entry:map.entrySet()){
- String key=entry.getKey();
- if(key.contains(uniqueKey) && key.contains("policy.nodes")){
- if(mapKey.containsKey(uniqueKey)){
- hm = mapKey.get(uniqueKey);
- String keyStr= key.substring(key.lastIndexOf('.')+1);
- String valueStr= map.get(key);
- if("type".equalsIgnoreCase(keyStr) && ((key.contains("entry_schema.0.type") || key.contains("entry_schema.type") && valueStr.contains("policy.data.")))){
- throw new ParserException("For using user defined object type, Please make sure no space between 'type:' and object " + valueStr );
-
- }
- if("type".equals(keyStr)){
- if(!key.contains("entry_schema"))
- {
- hm.put(keyStr,valueStr);
- }
- }else{
- hm.put(keyStr,valueStr);
- }
-
- } else {
- hm = new LinkedHashMap <>();
- String keyStr= key.substring(key.lastIndexOf('.')+1);
- String valueStr= map.get(key);
- if(key.contains(".objective.")){
- throw new ParserException("Attribute objective is a key word. Please use a different name");
- }
- if(("type").equals(keyStr)){
- if(!key.contains("entry_schema"))
- {
- hm.put(keyStr,valueStr);
- }
- }else{
- hm.put(keyStr,valueStr);
- }
- mapKey.put(uniqueKey, hm);
- }
- }
- }
- }
- return mapKey;
- }
-
- void createAttributes(LinkedHashMap<String,LinkedHashMap<String,String>> mapKey){
- StringBuilder attributeStringBuilder= new StringBuilder();
- StringBuilder referenceStringBuilder= new StringBuilder();
- StringBuilder listBuffer= new StringBuilder();
- List<String> constraints= new ArrayList<>();
- for(Map.Entry<String,LinkedHashMap<String,String>> entry: mapKey.entrySet()){
- String keySetString= entry.getKey();
- LinkedHashMap<String,String> keyValues=mapKey.get(keySetString);
- if(STRING.equalsIgnoreCase(keyValues.get("type"))||
- INTEGER.equalsIgnoreCase(keyValues.get("type"))){
- StringBuilder attributeIndividualStringBuilder= new StringBuilder();
- attributeIndividualStringBuilder.append(keySetString+"=");
- attributeIndividualStringBuilder.append(keyValues.get("type")+DEFAULTVALUE);
- attributeIndividualStringBuilder.append(keyValues.get("default")+REQUIREDVALUE);
- attributeIndividualStringBuilder.append(keyValues.get("required")+MANYFALSE);
- attributeStringBuilder.append(attributeIndividualStringBuilder+",");
+ try {
+ map=load(fileName);
+
+ if(map != null){
+ if(map.get("error") != null){
+ return map.get("error");
+ }
+ }
+
+ parseDataAndPolicyNodes(map);
+
+ LinkedHashMap<String,String> dataMapForJson=parseDataNodes(map);
+
+ constructJsonForDataFields(dataMapForJson);
+
+ LinkedHashMap<String,LinkedHashMap<String,String>> mapKey= parsePolicyNodes(map);
+
+ createAttributes(mapKey);
+
+ } catch (IOException e) {
+ logger.error(e);
+ }catch(ParserException e){
+ logger.error(e);
+ return e.getMessage();
+ }
+
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ public LinkedHashMap<String, String> load(String fileName) throws IOException,ParserException {
+ File newConfiguration = new File(fileName);
+ StringBuilder orderInfo = new StringBuilder("[");
+ Yaml yaml = new Yaml();
+ LinkedHashMap<Object, Object> yamlMap = null;
+ try(InputStream is = new FileInputStream(newConfiguration)){
+ yamlMap = (LinkedHashMap<Object, Object>) yaml.load(is);
+ } catch (FileNotFoundException e) {
+ logger.error(e);
+ }catch(Exception e){
+ throw new ParserException("Invalid TOSCA Model format. Please make sure it is a valid YAML file");
+ }
+
+ StringBuilder sb = new StringBuilder();
+ LinkedHashMap<String, String> settings = new LinkedHashMap<>();
+ if (yamlMap == null) {
+ return settings;
+ }
+
+ String message = validations(yamlMap);
+
+ if(message != null){
+ settings.put("error", message);
+ return settings;
+ }
+
+ findNode(yamlMap);
+
+ orderedElements.stream().forEach((string) -> {
+ orderInfo.append(string);
+ orderInfo.append(",");
+ logger.info("Content: " + string);
+ });
+
+ orderInfo.append("]");
+
+ dataOrderInfo = orderInfo.toString();
+ dataOrderInfo = dataOrderInfo.replace(",]", "]");
+
+ logger.info("dataOrderInfo :" + dataOrderInfo);
+
+ List<String> path = new ArrayList <>();
+ serializeMap(settings, sb, path, yamlMap);
+ return settings;
+ }
+
+ @SuppressWarnings("unchecked")
+ private String validations(@SuppressWarnings("rawtypes") LinkedHashMap yamlMap){
+
+ boolean isNoteTypeFound = false;
+ boolean isDataTypeFound = false;
+ boolean isToscaVersionKeyFound = false;
+ boolean isToscaVersionValueFound = false;
+ @SuppressWarnings("rawtypes")
+ Map m1 = new HashMap();
+ short order =0;
+ if(yamlMap != null){
+ // Get a set of the entries
+ @SuppressWarnings("rawtypes")
+ Set set = yamlMap.entrySet();
+ // Get an iterator
+ @SuppressWarnings("rawtypes")
+ Iterator i = set.iterator();
+ // Display elements
+ while(i.hasNext()) {
+ @SuppressWarnings("rawtypes")
+ Entry me = (Entry)i.next();
+
+ if("tosca_definitions_version".equals(me.getKey())){
+ isToscaVersionKeyFound = true;
+ order++;
+ m1.put("tosca_definitions_version", order);
+ }
+
+ if("tosca_simple_yaml_1_0_0".equals(me.getValue())){
+ isToscaVersionValueFound = true;
+ }
+
+ if("node_types".equals(me.getKey())){
+ isNoteTypeFound = true;
+ order++;
+ m1.put("node_types", order);
+ }
+
+ if("data_types".equals(me.getKey())){
+ isDataTypeFound = true;
+ order++;
+ m1.put("data_types", order);
+ }
+
+ }
+
+
+ if(!isDataTypeFound){
+ return "data_types are missing or invalid.";
+ }
+
+ if(!isToscaVersionKeyFound || !isToscaVersionValueFound){
+ return "tosca_definitions_version is missing or invalid.";
+ }
+
+ if(!isNoteTypeFound){
+ return "node_types are missing or invalid.";
+ }
+
+ short version = (short) m1.get("tosca_definitions_version");
+
+ if(version > 1 ){
+ return "tosca_definitions_version should be defined first.";
+ }
+
+ short data = (short) m1.get("data_types");
+ short node = (short) m1.get("node_types");
+ if(node > data){
+ return "node_types should be defined before data_types.";
+ }
+
+ }
+
+ return null;
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ private void serializeMap(LinkedHashMap<String, String> settings, StringBuilder sb, List<String> path, Map<Object, Object> yamlMap) {
+ for (Entry<Object, Object> entry : yamlMap.entrySet()) {
+
+ if (entry.getValue() instanceof Map) {
+ path.add((String) entry.getKey());
+ serializeMap(settings, sb, path, (Map<Object, Object>) entry.getValue());
+ path.remove(path.size() - 1);
+ } else if (entry.getValue() instanceof List) {
+ path.add((String) entry.getKey());
+ serializeList(settings, sb, path, (List) entry.getValue());
+ path.remove(path.size() - 1);
+ } else {
+ serializeValue(settings, sb, path, (String) entry.getKey(), entry.getValue());
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void serializeList(LinkedHashMap<String, String> settings, StringBuilder sb, List<String> path, List<String> yamlList) {
+ int counter = 0;
+ for (Object listEle : yamlList) {
+ if (listEle instanceof Map) {
+ path.add(Integer.toString(counter));
+ serializeMap(settings, sb, path, (Map<Object, Object>) listEle);
+ path.remove(path.size() - 1);
+ } else if (listEle instanceof List) {
+ path.add(Integer.toString(counter));
+ serializeList(settings, sb, path, (List<String>) listEle);
+ path.remove(path.size() - 1);
+ } else {
+ serializeValue(settings, sb, path, Integer.toString(counter), listEle);
+ }
+ counter++;
+ }
+ }
+
+ private void serializeValue(LinkedHashMap<String, String> settings, StringBuilder sb, List<String> path, String name, Object value) {
+ if (value == null) {
+ return;
+ }
+ sb.setLength(0);
+ for (String pathEle : path) {
+ sb.append(pathEle).append('.');
+ }
+ sb.append(name);
+ settings.put(sb.toString(), value.toString());
+ }
+
+
+ void parseDataAndPolicyNodes(LinkedHashMap<String,String> map){
+ for(String key:map.keySet()){
+ if(key.contains("policy.nodes.Root"))
+ {
+ continue;
+ }
+ else if(key.contains("policy.nodes")){
+ String wordToFind = "policy.nodes.";
+ int indexForPolicyNode=key.indexOf(wordToFind);
+ String subNodeString= key.substring(indexForPolicyNode+13, key.length());
+
+ stringBetweenDots(subNodeString);
+ }
+ else if(key.contains("policy.data")){
+ String wordToFind="policy.data.";
+ int indexForPolicyNode=key.indexOf(wordToFind);
+ String subNodeString= key.substring(indexForPolicyNode+12, key.length());
+
+ stringBetweenDotsForDataFields(subNodeString);
+ }
+ }
+ }
+
+ // Second index of dot should be returned.
+ public int stringBetweenDots(String str){
+ String stringToSearch=str;
+ String[]ss=stringToSearch.split("\\.");
+ if(ss!=null){
+ int len= ss.length;
+ if(len>2){
+ uniqueKeys.add(ss[2]);
+ }
+ }
+
+ return uniqueKeys.size();
+ }
+
+
+ public void stringBetweenDotsForDataFields(String str){
+ String stringToSearch=str;
+ String[]ss=stringToSearch.split("\\.");
+ if(ss!=null){
+ int len= ss.length;
+
+ if(len>2){
+ uniqueDataKeys.add(ss[0]+"%"+ss[2]);
+ }
+ }
+ }
+
+ void constructJsonForDataFields(LinkedHashMap<String,String> dataMapForJson){
+ LinkedHashMap<String,LinkedHashMap<String,String>> dataMapKey= new LinkedHashMap <>();
+ LinkedHashMap<String, String> hmSub;
+ for(Entry<String, String> entry: dataMapForJson.entrySet()){
+ String uniqueDataKey= entry.getKey();
+ String[] uniqueDataKeySplit=uniqueDataKey.split("%");
+ String value= dataMapForJson.get(uniqueDataKey);
+ if(dataMapKey.containsKey(uniqueDataKeySplit[0])){
+ hmSub = dataMapKey.get(uniqueDataKeySplit[0]);
+ hmSub.put(uniqueDataKeySplit[1], value);
+ }
+ else{
+ hmSub=new LinkedHashMap <>();
+ hmSub.put(uniqueDataKeySplit[1], value);
+ }
+
+ dataMapKey.put(uniqueDataKeySplit[0], hmSub);
+ }
+
+ JSONObject mainObject= new JSONObject();
+ JSONObject json;
+ for(Entry<String,LinkedHashMap<String,String>> entry: dataMapKey.entrySet()){
+ String s=entry.getKey();
+ json= new JSONObject();
+ HashMap<String,String> jsonHm=dataMapKey.get(s);
+ for(Entry<String,String> entryMap:jsonHm.entrySet()){
+ String key=entryMap.getKey();
+ json.put(key, jsonHm.get(key));
+ }
+ mainObject.put(s,json);
+ }
+ Iterator<String> keysItr = mainObject.keys();
+ while(keysItr.hasNext()) {
+ String key = keysItr.next();
+ String value = mainObject.get(key).toString();
+ retmap.put(key, value);
+ }
+
+ logger.info("#############################################################################");
+ logger.info(mainObject);
+ logger.info("###############################################################################");
+ }
+ LinkedHashMap<String,String> parseDataNodes(LinkedHashMap<String,String> map){
+ LinkedHashMap<String,String> dataMapForJson=new LinkedHashMap <>();
+ matchableValues = new HashMap <>();
+ for(String uniqueDataKey: uniqueDataKeys){
+ if(uniqueDataKey.contains("%")){
+ String[] uniqueDataKeySplit= uniqueDataKey.split("%");
+ String findType=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+TYPE;
+ String typeValue=map.get(findType);
+ logger.info(typeValue);
+
+ String findRequired=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+REQUIRED;
+ String requiredValue= map.get(findRequired);
+
+ String matchable =DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+MATCHABLE;
+
+ String matchableValue= map.get(matchable);
+
+ if(matchableValue != null && matchableValue.equalsIgnoreCase("true")){
+ if(uniqueDataKey.contains("%")){
+ String[] keys= uniqueDataKey.split("%");
+ String key=keys[keys.length -1];
+ matchableValues.put(key, MATCHINGTRUE);
+ }else{
+ matchableValues.put(uniqueDataKey, MATCHINGTRUE);
+ }
+ }
+
+ if(requiredValue == null || requiredValue.isEmpty()){
+ requiredValue = "false";
+ }
+ if(typeValue != null && (typeValue.equalsIgnoreCase(STRING)||
+ typeValue.equalsIgnoreCase(INTEGER))){
+
+ String findDefault=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+DEFAULT;
+ String defaultValue= map.get(findDefault);
+ logger.info("defaultValue is:"+ defaultValue);
+ logger.info("requiredValue is:"+ requiredValue);
+
+ StringBuilder attributeIndividualStringBuilder= new StringBuilder();
+ attributeIndividualStringBuilder.append(typeValue+DEFAULTVALUE);
+ attributeIndividualStringBuilder.append(defaultValue+REQUIREDVALUE);
+ attributeIndividualStringBuilder.append(requiredValue+MANYFALSE);
+ dataMapForJson.put(uniqueDataKey, attributeIndividualStringBuilder.toString());
+ }
+ else if(LIST.equalsIgnoreCase(typeValue) || MAP.equalsIgnoreCase(typeValue)){
+ logger.info("requiredValue is:"+ requiredValue);
+ String findList= DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+".entry_schema.type";
+ String listValue=map.get(findList);
+ if(listValue!=null){
+ logger.info("Type of list is:"+ listValue);
+ //Its userdefined
+ if(listValue.contains(".")){
+ String trimValue=listValue.substring(listValue.lastIndexOf('.')+1);
+ StringBuilder referenceIndividualStringBuilder= new StringBuilder();
+ referenceIndividualStringBuilder.append(trimValue+REQUIREDVALUE);
+ referenceIndividualStringBuilder.append(requiredValue+MANYTRUE);
+ dataMapForJson.put(uniqueDataKey, referenceIndividualStringBuilder.toString());
+ }//Its string
+ else{
+ StringBuilder stringListItems= new StringBuilder();
+ if(LIST.equalsIgnoreCase(typeValue)){
+ stringListItems.append(uniqueDataKeySplit[1].toUpperCase()+REQUIREDVALUE+requiredValue +MANYFALSE);
+ }else if( MAP.equalsIgnoreCase(typeValue)){
+ stringListItems.append(uniqueDataKeySplit[1].toUpperCase()+REQUIREDVALUE+requiredValue +MANYTRUE);
+ }
+ dataMapForJson.put(uniqueDataKey, stringListItems.toString());
+ boolean isConstraintsFound = false;
+ for(int i=0;i<10;i++){
+ String findConstraints= DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+".entry_schema.constraints.0.valid_values."+i;
+ logger.info("findConstraints => " + findConstraints);
+ String constraintsValue=map.get(findConstraints);
+ logger.info("constraintsValue => " + constraintsValue);
+
+ if((constraintsValue==null || constraintsValue.isEmpty()) && i==0){ //if no constraints at all ( index i as 0 can tell this )
+ isConstraintsFound = false;
+ //if type is list but no constraints
+ String newValue = dataMapForJson.get(uniqueDataKey).replace("MANY-false", "MANY-true");
+ newValue = newValue.replace(uniqueDataKeySplit[1].toUpperCase()+":", "");
+ dataMapForJson.put(uniqueDataKey, newValue);
+ break;
+ } else{
+ isConstraintsFound = true;
+ if(i == 0){ // only need to add one time for the same attribute
+ dataListBuffer.append(uniqueDataKeySplit[1].toUpperCase()+"=[");
+ }
+
+ if(constraintsValue==null){
+ constraintsValue = "";
+ }else if (constraintsValue.contains("=")) {
+ constraintsValue = constraintsValue.replace("=", "equal-sign");
+ }
+
+ dataConstraints.add(constraintsValue);
+ dataListBuffer.append(constraintsValue+",");
+ }
+ }
+ if(isConstraintsFound){
+ dataListBuffer.append("]#");
+ }
+ }
+ }else{
+ logger.info("entry_schema.type is not defined correctly");
+ }
+ }
+ else{
+ String findUserDefined=DATATYPE+uniqueDataKeySplit[0]+"."+"properties"+"."+uniqueDataKeySplit[1]+TYPE;
+ String userDefinedValue=map.get(findUserDefined);
+ String trimValue=userDefinedValue.substring(userDefinedValue.lastIndexOf('.')+1);
+ StringBuilder referenceIndividualStringBuilder= new StringBuilder();
+ referenceIndividualStringBuilder.append(trimValue+REQUIREDVALUE);
+ referenceIndividualStringBuilder.append(requiredValue+MANYFALSE);
+ dataMapForJson.put(uniqueDataKey, referenceIndividualStringBuilder.toString());
+
+ }
+ }
+ }
+
+ return dataMapForJson;
+ }
+
+
+ LinkedHashMap<String, LinkedHashMap<String, String>> parsePolicyNodes(Map<String,String> map) throws ParserException{
+ LinkedHashMap<String,LinkedHashMap<String,String>> mapKey= new LinkedHashMap <>();
+ for(String uniqueKey: uniqueKeys){
+ LinkedHashMap<String,String> hm;
+
+ for(Entry<String,String> entry:map.entrySet()){
+ String key=entry.getKey();
+ if(key.contains(uniqueKey) && key.contains("policy.nodes")){
+ if(mapKey.containsKey(uniqueKey)){
+ hm = mapKey.get(uniqueKey);
+ String keyStr= key.substring(key.lastIndexOf('.')+1);
+ String valueStr= map.get(key);
+ if("type".equalsIgnoreCase(keyStr) && ((key.contains("entry_schema.0.type") || key.contains("entry_schema.type") && valueStr.contains("policy.data.")))){
+ throw new ParserException("For using user defined object type, Please make sure no space between 'type:' and object " + valueStr );
+
+ }
+ if("type".equals(keyStr)){
+ if(!key.contains("entry_schema"))
+ {
+ hm.put(keyStr,valueStr);
+ }
+ }else{
+ hm.put(keyStr,valueStr);
+ }
+
+ } else {
+ hm = new LinkedHashMap <>();
+ String keyStr= key.substring(key.lastIndexOf('.')+1);
+ String valueStr= map.get(key);
+ if(key.contains(".objective.")){
+ throw new ParserException("Attribute objective is a key word. Please use a different name");
+ }
+ if(("type").equals(keyStr)){
+ if(!key.contains("entry_schema"))
+ {
+ hm.put(keyStr,valueStr);
+ }
+ }else{
+ hm.put(keyStr,valueStr);
+ }
+ mapKey.put(uniqueKey, hm);
+ }
+ }
+ }
+ }
+ return mapKey;
+ }
+
+ void createAttributes(LinkedHashMap<String,LinkedHashMap<String,String>> mapKey){
+ StringBuilder attributeStringBuilder= new StringBuilder();
+ StringBuilder referenceStringBuilder= new StringBuilder();
+ StringBuilder listBuffer= new StringBuilder();
+ List<String> constraints= new ArrayList<>();
+ for(Entry<String,LinkedHashMap<String,String>> entry: mapKey.entrySet()){
+ String keySetString= entry.getKey();
+ LinkedHashMap<String,String> keyValues=mapKey.get(keySetString);
+ if(STRING.equalsIgnoreCase(keyValues.get("type"))||
+ INTEGER.equalsIgnoreCase(keyValues.get("type"))){
+ StringBuilder attributeIndividualStringBuilder= new StringBuilder();
+ attributeIndividualStringBuilder.append(keySetString+"=");
+ attributeIndividualStringBuilder.append(keyValues.get("type")+DEFAULTVALUE);
+ attributeIndividualStringBuilder.append(keyValues.get("default")+REQUIREDVALUE);
+ attributeIndividualStringBuilder.append(keyValues.get("required")+MANYFALSE);
+ attributeStringBuilder.append(attributeIndividualStringBuilder+",");
if("true".equalsIgnoreCase(keyValues.get(MATCHABLEKEY))){
- matchableValues.put(keySetString, MATCHINGTRUE);
+ matchableValues.put(keySetString, MATCHINGTRUE);
}
- }
- else if(LIST.equalsIgnoreCase(keyValues.get("type"))){
-
+ }
+ else if(LIST.equalsIgnoreCase(keyValues.get("type"))){
+
if(("true").equalsIgnoreCase(keyValues.get(MATCHABLEKEY))){
- matchableValues.put(keySetString, MATCHINGTRUE);
+ matchableValues.put(keySetString, MATCHINGTRUE);
+ }
+ //List Datatype
+ Set<String> keys= keyValues.keySet();
+ Iterator<String> itr=keys.iterator();
+ boolean isDefinedType = false;
+ while(itr.hasNext()){
+ String key= itr.next();
+ if((!("type").equals(key) ||("required").equals(key)))
+ {
+ String value= keyValues.get(key);
+ //The "." in the value determines if its a string or a user defined type.
+ if (!value.contains(".")){
+ //This is string
+ if(StringUtils.isNumeric(key) ){ //only integer key for the value of Constrains
+ constraints.add(keyValues.get(key));
+ }
+ }else{
+ //This is user defined type
+ String trimValue=value.substring(value.lastIndexOf('.')+1);
+ StringBuilder referenceIndividualStringBuilder= new StringBuilder();
+ referenceIndividualStringBuilder.append(keySetString+"="+trimValue+MANYTRUE);
+ referenceStringBuilder.append(referenceIndividualStringBuilder+",");
+ isDefinedType = true;
+ }
+ }
+
}
- //List Datatype
- Set<String> keys= keyValues.keySet();
- Iterator<String> itr=keys.iterator();
- boolean isDefinedType = false;
- while(itr.hasNext()){
- String key= itr.next();
- if((!("type").equals(key) ||("required").equals(key)))
- {
- String value= keyValues.get(key);
- //The "." in the value determines if its a string or a user defined type.
- if (!value.contains(".")){
- //This is string
- if(StringUtils.isNumeric(key) ){ //only integer key for the value of Constrains
- constraints.add(keyValues.get(key));
- }
- }else{
- //This is user defined type
- String trimValue=value.substring(value.lastIndexOf('.')+1);
- StringBuilder referenceIndividualStringBuilder= new StringBuilder();
- referenceIndividualStringBuilder.append(keySetString+"="+trimValue+MANYTRUE);
- referenceStringBuilder.append(referenceIndividualStringBuilder+",");
- isDefinedType = true;
- }
- }
-
- }
-
- if(!isDefinedType && LIST.equalsIgnoreCase(keyValues.get("type"))){ //type is not user defined and is a list but no constraints defined.
- if(constraints == null || constraints.isEmpty()){
- referenceStringBuilder.append(keySetString+"=MANY-true"+",");
- }
- }
- }else{
- //User defined Datatype.
+
+ if(!isDefinedType && LIST.equalsIgnoreCase(keyValues.get("type"))){ //type is not user defined and is a list but no constraints defined.
+ if(constraints == null || constraints.isEmpty()){
+ referenceStringBuilder.append(keySetString+"=MANY-true"+",");
+ }
+ }
+ }else{
+ //User defined Datatype.
if("true".equalsIgnoreCase(keyValues.get(MATCHABLEKEY))){
- matchableValues.put(keySetString, MATCHINGTRUE);
+ matchableValues.put(keySetString, MATCHINGTRUE);
+ }
+ String value=keyValues.get("type");
+ if(value != null && !value.isEmpty()){
+ String trimValue=value.substring(value.lastIndexOf('.')+1);
+ StringBuilder referenceIndividualStringBuilder= new StringBuilder();
+ referenceIndividualStringBuilder.append(keySetString+"="+trimValue+MANYFALSE);
+ referenceStringBuilder.append(referenceIndividualStringBuilder+",");
+ }else{
+ logger.info("keyValues.get(type) is null/empty");
+ }
+
+ }
+ if(constraints!=null && !constraints.isEmpty()){
+ //List handling.
+ listBuffer.append(keySetString.toUpperCase()+"=[");
+ for(String str:constraints){
+ listBuffer.append(str+",");
}
- String value=keyValues.get("type");
- if(value != null && !value.isEmpty()){
- String trimValue=value.substring(value.lastIndexOf('.')+1);
- StringBuilder referenceIndividualStringBuilder= new StringBuilder();
- referenceIndividualStringBuilder.append(keySetString+"="+trimValue+MANYFALSE);
- referenceStringBuilder.append(referenceIndividualStringBuilder+",");
- }else{
- logger.info("keyValues.get(type) is null/empty");
- }
-
- }
- if(constraints!=null && !constraints.isEmpty()){
- //List handling.
- listBuffer.append(keySetString.toUpperCase()+"=[");
- for(String str:constraints){
- listBuffer.append(str+",");
- }
- listBuffer.append("]#");
- logger.info(listBuffer);
-
-
- StringBuilder referenceIndividualStringBuilder= new StringBuilder();
- referenceIndividualStringBuilder.append(keySetString+"="+keySetString.toUpperCase()+MANYFALSE);
- referenceStringBuilder.append(referenceIndividualStringBuilder+",");
- constraints.clear();
- }
- }
-
- dataListBuffer.append(listBuffer);
-
-
- logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
- logger.info("Whole attribute String is:"+attributeStringBuilder);
- logger.info("Whole reference String is:"+referenceStringBuilder);
- logger.info("List String is:"+listBuffer);
- logger.info("Data list buffer is:"+dataListBuffer);
- logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
-
- this.listConstraints=dataListBuffer.toString();
- this.referenceAttributes=referenceStringBuilder.toString();
- this.attributeString=attributeStringBuilder.toString();
- }
-
- @SuppressWarnings("unchecked")
- public void findNode(LinkedHashMap<Object, Object> map) {
-
- map.forEach((key,value) -> {
- // if the value is properties and its type is map object, then save all the keys
- if(key.equals("properties") && value instanceof Map){
- saveNodes((LinkedHashMap<?, ?>)value);
- }
-
- if(!key.equals("policy.nodes.Root") && value instanceof Map){
- //value is a Map object, then make a recursive call
- findNode((LinkedHashMap<Object, Object>) value);
- }
- });
-
- }
-
- public void saveNodes(LinkedHashMap<?, ?> map) {
-
- map.forEach((key,value) -> {
-
- orderedElements.add((String)key);
-
- });
-
- }
-
- public String getAttributeString() {
- return attributeString;
- }
- public void setAttributeString(String attributeString) {
- this.attributeString = attributeString;
- }
-
- public LinkedHashMap<String, Object> getRetmap() {
- return retmap;
- }
-
- public void setRetmap(LinkedHashMap<String, Object> retmap) {
- this.retmap = retmap;
- }
- public Map<String, String> getMatchableValues() {
- return matchableValues;
- }
-
- public void setMatchableValues(Map<String, String> matchableValues) {
- this.matchableValues = matchableValues;
- }
- public String getReferenceAttributes() {
- return referenceAttributes;
- }
-
- public void setReferenceAttributes(String referenceAttributes) {
- this.referenceAttributes = referenceAttributes;
- }
- public String getListConstraints() {
- return listConstraints;
- }
-
- public void setListConstraints(String listConstraints) {
- this.listConstraints = listConstraints;
- }
- public String getDataOrderInfo() {
- return dataOrderInfo;
- }
-
- public void setDataOrderInfo(String dataOrderInfo) {
- this.dataOrderInfo = dataOrderInfo;
- }
+ listBuffer.append("]#");
+ logger.info(listBuffer);
+
+
+ StringBuilder referenceIndividualStringBuilder= new StringBuilder();
+ referenceIndividualStringBuilder.append(keySetString+"="+keySetString.toUpperCase()+MANYFALSE);
+ referenceStringBuilder.append(referenceIndividualStringBuilder+",");
+ constraints.clear();
+ }
+ }
+
+ dataListBuffer.append(listBuffer);
+
+
+ logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
+ logger.info("Whole attribute String is:"+attributeStringBuilder);
+ logger.info("Whole reference String is:"+referenceStringBuilder);
+ logger.info("List String is:"+listBuffer);
+ logger.info("Data list buffer is:"+dataListBuffer);
+ logger.info("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
+
+ this.listConstraints=dataListBuffer.toString();
+ this.referenceAttributes=referenceStringBuilder.toString();
+ this.attributeString=attributeStringBuilder.toString();
+ }
+
+ @SuppressWarnings("unchecked")
+ public void findNode(LinkedHashMap<Object, Object> map) {
+
+ map.forEach((key,value) -> {
+ // if the value is properties and its type is map object, then save all the keys
+ if(key.equals("properties") && value instanceof Map){
+ saveNodes((LinkedHashMap<?, ?>)value);
+ }
+
+ if(!key.equals("policy.nodes.Root") && value instanceof Map){
+ //value is a Map object, then make a recursive call
+ findNode((LinkedHashMap<Object, Object>) value);
+ }
+ });
+
+ }
+
+ public void saveNodes(LinkedHashMap<?, ?> map) {
+
+ map.forEach((key,value) -> {
+
+ orderedElements.add((String)key);
+
+ });
+
+ }
+
+ public String getAttributeString() {
+ return attributeString;
+ }
+ public void setAttributeString(String attributeString) {
+ this.attributeString = attributeString;
+ }
+
+ public LinkedHashMap<String, Object> getRetmap() {
+ return retmap;
+ }
+
+ public void setRetmap(LinkedHashMap<String, Object> retmap) {
+ this.retmap = retmap;
+ }
+ public Map<String, String> getMatchableValues() {
+ return matchableValues;
+ }
+
+ public void setMatchableValues(Map<String, String> matchableValues) {
+ this.matchableValues = matchableValues;
+ }
+ public String getReferenceAttributes() {
+ return referenceAttributes;
+ }
+
+ public void setReferenceAttributes(String referenceAttributes) {
+ this.referenceAttributes = referenceAttributes;
+ }
+ public String getListConstraints() {
+ return listConstraints;
+ }
+
+ public void setListConstraints(String listConstraints) {
+ this.listConstraints = listConstraints;
+ }
+ public String getDataOrderInfo() {
+ return dataOrderInfo;
+ }
+
+ public void setDataOrderInfo(String dataOrderInfo) {
+ this.dataOrderInfo = dataOrderInfo;
+ }
} \ No newline at end of file
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
index 50985b12d..0478f5f95 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/PolicyValidation.java
@@ -940,20 +940,25 @@ public class PolicyValidation {
responseString.append("Guard Params <b>Time Units</b> is Required" + HTML_ITALICS_LNBREAK);
valid = false;
}
- }else if("GUARD_BL_YAML".equals(policyData.getRuleProvider())){
- if(policyData.getYamlparams().getBlackList()==null || policyData.getYamlparams().getBlackList().isEmpty()){
- responseString.append(" Guard Params <b>BlackList</b> is Required " + HTML_ITALICS_LNBREAK);
- valid = false;
- }else{
- for(String blackList: policyData.getYamlparams().getBlackList()){
- if(blackList==null || !(SUCCESS.equals(PolicyUtils.policySpecialCharValidator(blackList)))){
- responseString.append(" Guard Params <b>BlackList</b> Should be valid String" + HTML_ITALICS_LNBREAK);
- valid = false;
- break;
- }
- }
- }
- }
+ } else if ("GUARD_BL_YAML".equals(policyData.getRuleProvider())
+ && "Use Manual Entry".equals(policyData.getBlackListEntryType())) {
+ if (policyData.getYamlparams().getBlackList() == null
+ || policyData.getYamlparams().getBlackList().isEmpty()) {
+ responseString
+ .append(" Guard Params <b>BlackList</b> is Required " + HTML_ITALICS_LNBREAK);
+ valid = false;
+ } else {
+ for (String blackList : policyData.getYamlparams().getBlackList()) {
+ if (blackList == null
+ || !(SUCCESS.equals(PolicyUtils.policySpecialCharValidator(blackList)))) {
+ responseString.append(" Guard Params <b>BlackList</b> Should be valid String"
+ + HTML_ITALICS_LNBREAK);
+ valid = false;
+ break;
+ }
+ }
+ }
+ }
}
}
}