Consolidate PolicyRestAdapter setup
[policy/engine.git] / ONAP-PAP-REST / src / main / java / org / onap / policy / pap / xacml / rest / controller / OptimizationDictionaryController.java
index acb5a2a..52394ba 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP-PAP-REST
  * ================================================================================
- * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018-2019 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.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
+
 package org.onap.policy.pap.xacml.rest.controller;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.gson.Gson;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -46,273 +52,289 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.servlet.ModelAndView;
 
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.gson.Gson;
-
 @Controller
 public class OptimizationDictionaryController {
-       private static CommonClassDao commonClassDao;
-       
+    private static CommonClassDao commonClassDao;
+
     private static String operation = "operation";
-    private LinkedHashMap<String,MSAttributeObject > classMap;
-       private static String dictionaryFields ="dictionaryFields";
-       private static String duplicateResponseString = "Duplicate";
-       private static String optimizationModelsDictionaryDatas = "optimizationModelsDictionaryDatas";
-       private static String modelName = "modelName";
-       private static String optimizationModelsDictionaryData = "optimizationModelsDictionaryData";
-       private static String description = "description";
-       private static String version = "version";
-       private static String classMapData = "classMap";
-       private static final String UPDATE = "update";
-
-
-    public OptimizationDictionaryController(){
-       super();
-    }  
-       
-    private DictionaryUtils getDictionaryUtilsInstance(){
-               return DictionaryUtils.getDictionaryUtils();
-       }
-    
-       @Autowired
-       public OptimizationDictionaryController(CommonClassDao commonClassDao){
-               setCommonClassDao(commonClassDao);
-       }
-       public static void setCommonClassDao(CommonClassDao commonClassDao) {
-               OptimizationDictionaryController.commonClassDao = commonClassDao;
-       }
-
-       MSModelUtils utils = new MSModelUtils(XACMLPapServlet.getMsOnapName(), XACMLPapServlet.getMsPolicyName());
-       
-       private OptimizationModels newModel;
-       
-       @RequestMapping(value={"/get_OptimizationModelsData"}, method={RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
-       public void getOptimizationModelsDictionaryEntityData(HttpServletResponse response){
-               DictionaryUtils dUtils = getDictionaryUtilsInstance();
-               dUtils.getData(response, optimizationModelsDictionaryDatas, OptimizationModels.class);
-       }
-       
-       @RequestMapping(value={"/get_OptimizationModelsDataByName"}, method={RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
-       public void getOptimizationModelsDictionaryByNameEntityData(HttpServletResponse response){
-               DictionaryUtils dUtils = getDictionaryUtilsInstance();
-               dUtils.getDataByEntity(response, optimizationModelsDictionaryDatas, modelName, OptimizationModels.class);
-       }
-       
-       @RequestMapping(value={"/oof_dictionary/save_model"}, method={RequestMethod.POST})
-       public ModelAndView saveOptimizationModelsDictionary(HttpServletRequest request, HttpServletResponse response) throws IOException{
-               DictionaryUtils dUtils = getDictionaryUtilsInstance();
-               try {
-                       this.newModel = new OptimizationModels();
-                       boolean fromAPI = dUtils.isRequestFromAPI(request);
-                       ObjectMapper mapper = new ObjectMapper();
-                       mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-                       JsonNode root = mapper.readTree(request.getReader());
-                       OptimizationModels optimizationModels = new OptimizationModels();
-                       String userId = null;
-                       
-                       String dataOrderInfo = null;
-                       if(root.has("dataOrderInfo")){
-                               dataOrderInfo = root.get("dataOrderInfo").toString();
-                       }
-
-                       if(root.has("modelType")){
-                               JsonNode dataType = root.get("modelType");
-                               String modelType= dataType.toString();
-                               if(modelType.contains("yml")){
-                                       if (root.has(optimizationModelsDictionaryData)){
-                                               if (root.get(optimizationModelsDictionaryData).has(description)){
-                                                       optimizationModels.setDescription(root.get(optimizationModelsDictionaryData).get(description).asText().replace("\"", ""));
-                                               }
-                                               if (root.get(optimizationModelsDictionaryData).has(modelName)){
-                                                       optimizationModels.setModelName(root.get(optimizationModelsDictionaryData).get(modelName).asText().replace("\"", ""));
-                                                       this.newModel.setModelName(optimizationModels.getModelName());
-                                               }
-                                               if (root.get(optimizationModelsDictionaryData).has(version)){
-                                                       optimizationModels.setVersion(root.get(optimizationModelsDictionaryData).get(version).asText().replace("\"", ""));
-                                                       this.newModel.setVersion(optimizationModels.getVersion());
-                                               }
-                                       }
-
-                                       classMap = new LinkedHashMap<>();
-                                       JsonNode data = root.get(classMapData);
-                                       ObjectMapper mapper1 = new ObjectMapper();
-                                       String data1 = data.toString().substring(1, data.toString().length()-1);
-                                       data1 = data1.replace("\\", "");
-                                       data1=data1.replace("\"{","{");
-                                       data1=data1.replace("}\"","}");
-                                       JSONObject jsonObject = new JSONObject(data1);
-                                       Set<String> keys = jsonObject.keySet();
-                                       for(String key : keys){
-                                               String value = jsonObject.get(key).toString();
-                                               MSAttributeObject msAttributeObject = mapper1.readValue(value, MSAttributeObject.class);
-                                               classMap.put(key, msAttributeObject);
-                                       }
-
-                                       userId = root.get("userid").textValue();
-                                       MSAttributeObject mainClass = classMap.get(this.newModel.getModelName());
-                                       this.newModel.setDependency("[]");
-                                       String value = new Gson().toJson(mainClass.getSubClass());
-                                       this.newModel.setSubattributes(value);
-                                       String attributes= mainClass.getAttribute().toString().replace("{", "").replace("}", "");
-                                       int equalsIndexForAttributes= attributes.indexOf('=');
-                                       String atttributesAfterFirstEquals= attributes.substring(equalsIndexForAttributes+1, attributes.length()-1);
-                                       this.newModel.setAttributes(atttributesAfterFirstEquals);
-                                       String refAttributes= mainClass.getRefAttribute().toString().replace("{", "").replace("}", "");
-                                       int equalsIndex= refAttributes.indexOf('=');
-                                       String refAttributesAfterFirstEquals= refAttributes.substring(equalsIndex+1, refAttributes.length()-1);
-                                       this.newModel.setRefattributes(refAttributesAfterFirstEquals);
-                                       this.newModel.setEnumValues(mainClass.getEnumType().toString().replace("{", "").replace("}", ""));
-                                       this.newModel.setAnnotation(mainClass.getMatchingSet().toString().replace("{", "").replace("}", ""));
-
-                               }else{
-                                       if (fromAPI) {
-                                               optimizationModels = mapper.readValue(root.get(dictionaryFields).toString(), OptimizationModels.class);
-                                               userId = "API";
-                                       } else {
-                                               if (root.has(optimizationModelsDictionaryData)){
-                                                       if (root.get(optimizationModelsDictionaryData).has(description)){
-                                                               optimizationModels.setDescription(root.get(optimizationModelsDictionaryData).get(description).asText().replace("\"", ""));
-                                                       }
-                                                       if (root.get(optimizationModelsDictionaryData).has(modelName)){
-                                                               optimizationModels.setModelName(root.get(optimizationModelsDictionaryData).get(modelName).asText().replace("\"", ""));
-                                                               this.newModel.setModelName(optimizationModels.getModelName());
-                                                       }
-                                                       if (root.get(optimizationModelsDictionaryData).has(version)){
-                                                               optimizationModels.setVersion(root.get(optimizationModelsDictionaryData).get(version).asText().replace("\"", ""));
-                                                               this.newModel.setVersion(optimizationModels.getVersion());
-                                                       }
-                                               }
-                                               if(root.has(classMapData)){
-                                                       classMap = new LinkedHashMap<>();
-                                                       JsonNode data = root.get(classMapData);
-                                                       ObjectMapper mapper1 = new ObjectMapper();
-                                                       String data1 = data.toString().substring(1, data.toString().length()-1);
-                                                       data1 = data1.replace("\\", "");
-                                                       JSONObject jsonObject = new JSONObject(data1);
-                                                       Set<String> keys = jsonObject.keySet();
-                                                       for(String key : keys){
-                                                               String value = jsonObject.get(key).toString();
-                                                               MSAttributeObject msAttributeObject = mapper1.readValue(value, MSAttributeObject.class);
-                                                               classMap.put(key, msAttributeObject);
-                                                       }
-                                               }
-                                               userId = root.get("userid").textValue();
-                                               addValuesToNewModel(classMap);
-                                       }
-                               }               
-                       }
-                       optimizationModels.setAttributes(this.newModel.getAttributes());
-                       optimizationModels.setRefattributes(this.newModel.getRefattributes());
-                       optimizationModels.setDependency(this.newModel.getDependency());
-                       optimizationModels.setModelName(this.newModel.getModelName());
-                       optimizationModels.setSubattributes(this.newModel.getSubattributes());
-                       optimizationModels.setVersion(this.newModel.getVersion());
-                       optimizationModels.setEnumValues(this.newModel.getEnumValues());
-                       optimizationModels.setAnnotation(this.newModel.getAnnotation());
-                       
-                       if(dataOrderInfo != null){
-                               optimizationModels.setDataOrderInfo(dataOrderInfo);
-                       }
-                       
-                       String checkName = optimizationModels.getModelName() + ":" + optimizationModels.getVersion();
-                       List<Object> duplicateData =  commonClassDao.checkDuplicateEntry(checkName, "modelName:version", OptimizationModels.class);
-                       boolean duplicateflag = false;
-                       if(duplicateData!=null && !duplicateData.isEmpty()){
-                               OptimizationModels data = (OptimizationModels) duplicateData.get(0);
-                               if(request.getParameter(operation) != null && UPDATE.equals(request.getParameter(operation))){
-                                       optimizationModels.setId(data.getId());
-                               }else if((request.getParameter(operation) != null && !UPDATE.equals(request.getParameter(operation))) || 
-                                               (request.getParameter(operation) == null && (data.getId() != optimizationModels.getId()))){
-                                       duplicateflag = true;
-                               }
-                       }
-                       UserInfo userInfo = dUtils.getUserInfo(userId);
-                       
-                       String responseString = null;
-                       if(!duplicateflag){
-                               optimizationModels.setUserCreatedBy(userInfo);
-                               if(optimizationModels.getId() == 0){
-                                       commonClassDao.save(optimizationModels);
-                               }else{
-                                       commonClassDao.update(optimizationModels); 
-                               } 
-                               responseString = mapper.writeValueAsString(commonClassDao.getData(OptimizationModels.class));
-                       }else{
-                               responseString = duplicateResponseString;
-                       }
-                       if(fromAPI){
-                               return dUtils.getResultForApi(responseString);
-                       }else{
-                               dUtils.setResponseData(response, optimizationModelsDictionaryDatas, responseString);
-                       }
-               }catch (Exception e){
-                       dUtils.setErrorResponseData(response, e);
-               }
-               return null;
-       }
-
-       @RequestMapping(value={"/oof_dictionary/remove_model"}, method={RequestMethod.POST})
-       public void removeOptimizationModelsDictionary(HttpServletRequest request, HttpServletResponse response) throws IOException {
-               DictionaryUtils dUtils = getDictionaryUtilsInstance();
-               dUtils.removeData(request, response, optimizationModelsDictionaryDatas, OptimizationModels.class);
-       }
-               
-       private void addValuesToNewModel(HashMap<String,MSAttributeObject > classMap) {
-               //Loop  through the classmap and pull out the required info for the new file.
-               String subAttribute = null;
-               
-               MSAttributeObject mainClass = classMap.get(this.newModel.getModelName());
-               
-               if (mainClass !=null){
-                       String dependTemp = StringUtils.replaceEach(mainClass.getDependency(), new String[]{"[", "]", " "}, new String[]{"", "", ""});
-                       ArrayList<String> dependency = new ArrayList<>(Arrays.asList(dependTemp.split(",")));   
-                       dependency = getFullDependencyList(dependency);
-                       for (String element : dependency){
-                               MSAttributeObject temp = classMap.get(element);
-                               if (temp!=null){
-                                       mainClass.addAllRefAttribute(temp.getRefAttribute());
-                                       mainClass.addAllAttribute(temp.getAttribute());
-                               }
-                       }
-                       subAttribute = utils.createSubAttributes(dependency, classMap, this.newModel.getModelName());
-               }else{
-                       subAttribute = "{}";
-                       this.newModel.setDependency("");
-               }
-
-               if (mainClass != null && mainClass.getDependency()==null){
-                       mainClass.setDependency("");
-               }
-               if(mainClass != null){
-                       this.newModel.setDependency(mainClass.getDependency());
-                       this.newModel.setSubattributes(subAttribute);
-                       this.newModel.setAttributes(mainClass.getAttribute().toString().replace("{", "").replace("}", ""));
-                       this.newModel.setRefattributes(mainClass.getRefAttribute().toString().replace("{", "").replace("}", ""));
-                       this.newModel.setEnumValues(mainClass.getEnumType().toString().replace("{", "").replace("}", ""));
-                       this.newModel.setAnnotation(mainClass.getMatchingSet().toString().replace("{", "").replace("}", ""));
-               }
-       } 
-       
-       private ArrayList<String> getFullDependencyList(ArrayList<String> dependency) {
-               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 LinkedHashMap<String, MSAttributeObject> classMap;
+    private static String dictionaryFields = "dictionaryFields";
+    private static String duplicateResponseString = "Duplicate";
+    private static String optimizationModelsDictionaryDatas = "optimizationModelsDictionaryDatas";
+    private static String modelName = "modelName";
+    private static String optimizationModelsDictionaryData = "optimizationModelsDictionaryData";
+    private static String description = "description";
+    private static String version = "version";
+    private static String classMapData = "classMap";
+    private static final String UPDATE = "update";
+
+    public OptimizationDictionaryController() {
+        super();
+    }
+
+    private DictionaryUtils getDictionaryUtilsInstance() {
+        return DictionaryUtils.getDictionaryUtils();
+    }
+
+    @Autowired
+    public OptimizationDictionaryController(CommonClassDao commonClassDao) {
+        setCommonClassDao(commonClassDao);
+    }
+
+    public static void setCommonClassDao(CommonClassDao commonClassDao) {
+        OptimizationDictionaryController.commonClassDao = commonClassDao;
+    }
+
+    MSModelUtils utils = new MSModelUtils(XACMLPapServlet.getMsOnapName(), XACMLPapServlet.getMsPolicyName());
+
+    private OptimizationModels newModel;
+
+    @RequestMapping(
+            value = {"/get_OptimizationModelsData"},
+            method = {RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void getOptimizationModelsDictionaryEntityData(HttpServletResponse response) {
+        DictionaryUtils dUtils = getDictionaryUtilsInstance();
+        dUtils.getData(response, optimizationModelsDictionaryDatas, OptimizationModels.class);
+    }
+
+    @RequestMapping(
+            value = {"/get_OptimizationModelsDataByName"},
+            method = {RequestMethod.GET},
+            produces = MediaType.APPLICATION_JSON_VALUE)
+    public void getOptimizationModelsDictionaryByNameEntityData(HttpServletResponse response) {
+        DictionaryUtils dUtils = getDictionaryUtilsInstance();
+        dUtils.getDataByEntity(response, optimizationModelsDictionaryDatas, modelName, OptimizationModels.class);
+    }
+
+    @RequestMapping(value = {"/oof_dictionary/save_model"}, method = {RequestMethod.POST})
+    public ModelAndView saveOptimizationModelsDictionary(HttpServletRequest request, HttpServletResponse response)
+            throws IOException {
+        DictionaryUtils dUtils = getDictionaryUtilsInstance();
+        try {
+            this.newModel = new OptimizationModels();
+            boolean fromAPI = dUtils.isRequestFromAPI(request);
+            ObjectMapper mapper = new ObjectMapper();
+            mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+            JsonNode root = mapper.readTree(request.getReader());
+            OptimizationModels optimizationModels = new OptimizationModels();
+            String userId = null;
+
+            String dataOrderInfo = null;
+            if (root.has("dataOrderInfo")) {
+                dataOrderInfo = root.get("dataOrderInfo").toString();
+            }
+
+            if (root.has("modelType")) {
+                JsonNode dataType = root.get("modelType");
+                String modelType = dataType.toString();
+                if (modelType.contains("yml")) {
+                    if (root.has(optimizationModelsDictionaryData)) {
+                        if (root.get(optimizationModelsDictionaryData).has(description)) {
+                            optimizationModels.setDescription(root.get(optimizationModelsDictionaryData)
+                                    .get(description).asText().replace("\"", ""));
+                        }
+                        if (root.get(optimizationModelsDictionaryData).has(modelName)) {
+                            optimizationModels.setModelName(root.get(optimizationModelsDictionaryData).get(modelName)
+                                    .asText().replace("\"", ""));
+                            this.newModel.setModelName(optimizationModels.getModelName());
+                        }
+                        if (root.get(optimizationModelsDictionaryData).has(version)) {
+                            optimizationModels.setVersion(
+                                    root.get(optimizationModelsDictionaryData).get(version).asText().replace("\"", ""));
+                            this.newModel.setVersion(optimizationModels.getVersion());
+                        }
+                    }
+
+                    classMap = new LinkedHashMap<>();
+                    JsonNode data = root.get(classMapData);
+                    ObjectMapper mapper1 = new ObjectMapper();
+                    String data1 = data.toString().substring(1, data.toString().length() - 1);
+                    data1 = data1.replace("\\", "");
+                    data1 = data1.replace("\"{", "{");
+                    data1 = data1.replace("}\"", "}");
+                    JSONObject jsonObject = new JSONObject(data1);
+                    Set<String> keys = jsonObject.keySet();
+                    for (String key : keys) {
+                        String value = jsonObject.get(key).toString();
+                        MSAttributeObject msAttributeObject = mapper1.readValue(value, MSAttributeObject.class);
+                        classMap.put(key, msAttributeObject);
+                    }
+
+                    userId = root.get("userid").textValue();
+                    MSAttributeObject mainClass = classMap.get(this.newModel.getModelName());
+                    this.newModel.setDependency("[]");
+                    String value = new Gson().toJson(mainClass.getSubClass());
+                    this.newModel.setSubattributes(value);
+                    String attributes = mainClass.getAttribute().toString().replace("{", "").replace("}", "");
+                    int equalsIndexForAttributes = attributes.indexOf('=');
+                    String atttributesAfterFirstEquals =
+                            attributes.substring(equalsIndexForAttributes + 1, attributes.length() - 1);
+                    this.newModel.setAttributes(atttributesAfterFirstEquals);
+                    String refAttributes = mainClass.getRefAttribute().toString().replace("{", "").replace("}", "");
+                    int equalsIndex = refAttributes.indexOf('=');
+                    String refAttributesAfterFirstEquals =
+                            refAttributes.substring(equalsIndex + 1, refAttributes.length() - 1);
+                    this.newModel.setRefattributes(refAttributesAfterFirstEquals);
+                    this.newModel.setEnumValues(mainClass.getEnumType().toString().replace("{", "").replace("}", ""));
+                    this.newModel
+                            .setAnnotation(mainClass.getMatchingSet().toString().replace("{", "").replace("}", ""));
+
+                } else {
+                    if (fromAPI) {
+                        optimizationModels =
+                                mapper.readValue(root.get(dictionaryFields).toString(), OptimizationModels.class);
+                        userId = "API";
+                    } else {
+                        if (root.has(optimizationModelsDictionaryData)) {
+                            if (root.get(optimizationModelsDictionaryData).has(description)) {
+                                optimizationModels.setDescription(root.get(optimizationModelsDictionaryData)
+                                        .get(description).asText().replace("\"", ""));
+                            }
+                            if (root.get(optimizationModelsDictionaryData).has(modelName)) {
+                                optimizationModels.setModelName(root.get(optimizationModelsDictionaryData)
+                                        .get(modelName).asText().replace("\"", ""));
+                                this.newModel.setModelName(optimizationModels.getModelName());
+                            }
+                            if (root.get(optimizationModelsDictionaryData).has(version)) {
+                                optimizationModels.setVersion(root.get(optimizationModelsDictionaryData).get(version)
+                                        .asText().replace("\"", ""));
+                                this.newModel.setVersion(optimizationModels.getVersion());
+                            }
+                        }
+                        if (root.has(classMapData)) {
+                            classMap = new LinkedHashMap<>();
+                            JsonNode data = root.get(classMapData);
+                            ObjectMapper mapper1 = new ObjectMapper();
+                            String data1 = data.toString().substring(1, data.toString().length() - 1);
+                            data1 = data1.replace("\\", "");
+                            JSONObject jsonObject = new JSONObject(data1);
+                            Set<String> keys = jsonObject.keySet();
+                            for (String key : keys) {
+                                String value = jsonObject.get(key).toString();
+                                MSAttributeObject msAttributeObject = mapper1.readValue(value, MSAttributeObject.class);
+                                classMap.put(key, msAttributeObject);
+                            }
+                        }
+                        userId = root.get("userid").textValue();
+                        addValuesToNewModel(classMap);
+                    }
+                }
+            }
+            optimizationModels.setAttributes(this.newModel.getAttributes());
+            optimizationModels.setRefattributes(this.newModel.getRefattributes());
+            optimizationModels.setDependency(this.newModel.getDependency());
+            optimizationModels.setModelName(this.newModel.getModelName());
+            optimizationModels.setSubattributes(this.newModel.getSubattributes());
+            optimizationModels.setVersion(this.newModel.getVersion());
+            optimizationModels.setEnumValues(this.newModel.getEnumValues());
+            optimizationModels.setAnnotation(this.newModel.getAnnotation());
+
+            if (dataOrderInfo != null) {
+                optimizationModels.setDataOrderInfo(dataOrderInfo);
+            }
+
+            String checkName = optimizationModels.getModelName() + ":" + optimizationModels.getVersion();
+            List<Object> duplicateData =
+                    commonClassDao.checkDuplicateEntry(checkName, "modelName:version", OptimizationModels.class);
+            boolean duplicateflag = false;
+            if (duplicateData != null && !duplicateData.isEmpty()) {
+                OptimizationModels data = (OptimizationModels) duplicateData.get(0);
+                if (request.getParameter(operation) != null && UPDATE.equals(request.getParameter(operation))) {
+                    optimizationModels.setId(data.getId());
+                } else if ((request.getParameter(operation) != null && !UPDATE.equals(request.getParameter(operation)))
+                        || (request.getParameter(operation) == null && (data.getId() != optimizationModels.getId()))) {
+                    duplicateflag = true;
+                }
+            }
+            UserInfo userInfo = dUtils.getUserInfo(userId);
+
+            String responseString = null;
+            if (!duplicateflag) {
+                optimizationModels.setUserCreatedBy(userInfo);
+                if (optimizationModels.getId() == 0) {
+                    commonClassDao.save(optimizationModels);
+                } else {
+                    commonClassDao.update(optimizationModels);
+                }
+                responseString = mapper.writeValueAsString(commonClassDao.getData(OptimizationModels.class));
+            } else {
+                responseString = duplicateResponseString;
+            }
+            if (fromAPI) {
+                return dUtils.getResultForApi(responseString);
+            } else {
+                dUtils.setResponseData(response, optimizationModelsDictionaryDatas, responseString);
+            }
+        } catch (Exception e) {
+            dUtils.setErrorResponseData(response, e);
+        }
+        return null;
+    }
+
+    @RequestMapping(value = {"/oof_dictionary/remove_model"}, method = {RequestMethod.POST})
+    public void removeOptimizationModelsDictionary(HttpServletRequest request, HttpServletResponse response)
+            throws IOException {
+        DictionaryUtils dUtils = getDictionaryUtilsInstance();
+        dUtils.removeData(request, response, optimizationModelsDictionaryDatas, OptimizationModels.class);
+    }
+
+    private void addValuesToNewModel(HashMap<String, MSAttributeObject> classMap) {
+        // Loop through the classmap and pull out the required info for the new file.
+        String subAttribute = null;
+
+        MSAttributeObject mainClass = classMap.get(this.newModel.getModelName());
+
+        if (mainClass != null) {
+            String dependTemp = StringUtils.replaceEach(mainClass.getDependency(), new String[] {"[", "]", " "},
+                    new String[] {"", "", ""});
+            ArrayList<String> dependency = new ArrayList<>(Arrays.asList(dependTemp.split(",")));
+            dependency = getFullDependencyList(dependency);
+            for (String element : dependency) {
+                MSAttributeObject temp = classMap.get(element);
+                if (temp != null) {
+                    mainClass.addAllRefAttribute(temp.getRefAttribute());
+                    mainClass.addAllAttribute(temp.getAttribute());
+                }
+            }
+            subAttribute = utils.createSubAttributes(dependency, classMap, this.newModel.getModelName());
+        } else {
+            subAttribute = "{}";
+            this.newModel.setDependency("");
+        }
+
+        if (mainClass != null && mainClass.getDependency() == null) {
+            mainClass.setDependency("");
+        }
+        if (mainClass != null) {
+            this.newModel.setDependency(mainClass.getDependency());
+            this.newModel.setSubattributes(subAttribute);
+            this.newModel.setAttributes(mainClass.getAttribute().toString().replace("{", "").replace("}", ""));
+            this.newModel.setRefattributes(mainClass.getRefAttribute().toString().replace("{", "").replace("}", ""));
+            this.newModel.setEnumValues(mainClass.getEnumType().toString().replace("{", "").replace("}", ""));
+            this.newModel.setAnnotation(mainClass.getMatchingSet().toString().replace("{", "").replace("}", ""));
+        }
+    }
+
+    private ArrayList<String> getFullDependencyList(ArrayList<String> dependency) {
+        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;
+    }
 
 }