- private static final Logger logger = FlexLogger.getLogger(CreateNewMicroServiceModel.class);
- private MicroServiceModels newModel = null;
- private HashMap<String,MSAttributeObject > classMap = new HashMap<>();
-
-
- MSModelUtils utils = new MSModelUtils(XACMLPapServlet.getMsOnapName(), XACMLPapServlet.getMsPolicyName());
-
- public CreateNewMicroServiceModel(String fileName, String serviceName, String string, String version) {
- super();
- }
-
- public CreateNewMicroServiceModel(String importFile, String modelName, String description, String version, String randomID) {
-
- this.newModel = new MicroServiceModels();
- this.newModel.setVersion(version);
- this.newModel.setModelName(modelName);
- UserInfo userInfo = new UserInfo();
- userInfo.setUserLoginId("API");
- this.newModel.setUserCreatedBy(userInfo);
- String cleanUpFile = null;
-
- HashMap<String, MSAttributeObject> tempMap = new HashMap<>();
- //Need to delete the file
- if (importFile.contains(".zip")){
- extractFolder(randomID + ".zip");
- File directory = new File("ExtractDir" + File.separator + randomID);
- List<File> fileList = listModelFiles(directory.toString());
- //get all the files from a director
- for (File file : fileList){
- if (file.isFile()){
- tempMap = utils.processEpackage(file.getAbsolutePath(), MODEL_TYPE.XMI);
- classMap.putAll(tempMap);
- }
- }
- cleanUpFile = "ExtractDir" + File.separator + randomID + ".zip";
- try {
- FileUtils.deleteDirectory(new File("ExtractDir" + File.separator + randomID));
- FileUtils.deleteDirectory(new File(randomID));
- File deleteFile = new File(cleanUpFile);
- FileUtils.forceDelete(deleteFile);
- } catch (IOException e) {
- logger.error("Failed to unzip model file " + randomID);
- }
- }else {
- tempMap = utils.processEpackage("ExtractDir" + File.separator + randomID+".xmi", MODEL_TYPE.XMI);
- classMap.putAll(tempMap);
- cleanUpFile = "ExtractDir" + File.separator + randomID+".xmi";
- File deleteFile = new File(cleanUpFile);
- deleteFile.delete();
- }
- }
-
- private List<File> listModelFiles(String directoryName) {
- File directory = new File(directoryName);
- List<File> resultList = new ArrayList<>();
- File[] fList = directory.listFiles();
- for (File file : fList) {
- if (file.isFile()) {
- resultList.add(file);
- } else if (file.isDirectory()) {
- resultList.addAll(listModelFiles(file.getAbsolutePath()));
- }
- }
- return resultList;
- }
-
- @SuppressWarnings("rawtypes")
- private void extractFolder(String zipFile) {
- int BUFFER = 2048;
- File file = new File(zipFile);
-
- ZipFile zip = null;
- try {
- zip = new ZipFile("ExtractDir" + File.separator +file);
- String newPath = zipFile.substring(0, zipFile.length() - 4);
- new File(newPath).mkdir();
- Enumeration zipFileEntries = zip.entries();
-
- // Process each entry
- while (zipFileEntries.hasMoreElements()){
- // grab a zip file entry
- ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();
- String currentEntry = entry.getName();
- File destFile = new File("ExtractDir" + File.separator + newPath + File.separator + currentEntry);
- File destinationParent = destFile.getParentFile();
-
- destinationParent.mkdirs();
-
- if (!entry.isDirectory()){
- BufferedInputStream is = new BufferedInputStream(zip
- .getInputStream(entry));
- int currentByte;
-
- byte data[] = new byte[BUFFER];
-
- FileOutputStream fos = new FileOutputStream(destFile);
- BufferedOutputStream dest = new BufferedOutputStream(fos,
- BUFFER);
-
- while ((currentByte = is.read(data, 0, BUFFER)) != -1) {
- dest.write(data, 0, currentByte);
- }
- dest.flush();
- dest.close();
- is.close();
- }
-
- if (currentEntry.endsWith(".zip")){
- extractFolder(destFile.getAbsolutePath());
- }
- }
- } catch (IOException e) {
- logger.error("Failed to unzip model file " + zipFile + e);
- }finally{
- if(zip != null){
- try {
- zip.close();
- } catch (Exception e) {
- logger.error("Exception Occured while closing the zip file"+e);
- }
- }
- }
- }
-
- public Map<String, String> addValuesToNewModel() {
-
- Map<String, String> successMap = new HashMap<>();
- MSAttributeObject mainClass = null;
- ArrayList<String> dependency = null;
- String subAttribute = null;
-
- if (!classMap.containsKey(this.newModel.getModelName())){
- logger.error("Model Provided does not contain the service name provided in request. Unable to import new model");
- PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, "AddValuesToNewModel", "Unable to pull out required values, file missing service name provided in request");
- successMap.put("error", "MISSING");
- return successMap;
- }
- mainClass = classMap.get(this.newModel.getModelName());
- String dependTemp = StringUtils.replaceEach(mainClass.getDependency(), new String[]{"[", "]", " "}, new String[]{"", "", ""});
- this.newModel.setDependency(dependTemp);
- if (!this.newModel.getDependency().equals("")){
- dependency = new ArrayList<String>(Arrays.asList(dependTemp.split(",")));
- dependency = utils.getFullDependencyList(dependency, classMap);
- if (!dependency.isEmpty()){
- for (String element : dependency){
- MSAttributeObject temp = new MSAttributeObject();
- if (classMap.containsKey(element)){
- temp = classMap.get(element);
- mainClass.addAllRefAttribute(temp.getRefAttribute());
- mainClass.addAllAttribute(temp.getAttribute());
- }
- }
- }
- }
- subAttribute = utils.createSubAttributes(dependency, classMap, this.newModel.getModelName());
-
- this.newModel.setSub_attributes(subAttribute);
- this.newModel.setAttributes(mainClass.getAttribute().toString().replace("{", "").replace("}", ""));
- this.newModel.setRef_attributes(mainClass.getRefAttribute().toString().replace("{", "").replace("}", ""));
- this.newModel.setEnumValues(mainClass.getEnumType().toString().replace("{", "").replace("}", ""));
- this.newModel.setAnnotation(mainClass.getMatchingSet().toString().replace("{", "").replace("}", ""));
- successMap.put("success", "success");
- return successMap;
-
- }
-
- public Map<String, String> saveImportService(){
- String modelName = this.newModel.getModelName();
- String imported_by = "API";
- String version = this.newModel.getVersion();
- Map<String, String> successMap = new HashMap<>();
- CommonClassDaoImpl dbConnection = new CommonClassDaoImpl();
- List<Object> result = dbConnection.getDataById(MicroServiceModels.class, "modelName:version", modelName+":"+version);
- if(result.isEmpty()){
- MicroServiceModels model = new MicroServiceModels();
- model.setModelName(modelName);
- model.setVersion(version);
- model.setAttributes(this.newModel.getAttributes());
- model.setAnnotation(this.newModel.getAnnotation());
- model.setDependency(this.newModel.getDependency());
- model.setDescription(this.newModel.getDescription());
- model.setEnumValues(this.newModel.getEnumValues());
- model.setRef_attributes(this.newModel.getRef_attributes());
- model.setSub_attributes(this.newModel.getSub_attributes());
- UserInfo userInfo = new UserInfo();
- userInfo.setUserLoginId(imported_by);
- userInfo.setUserName(imported_by);
- model.setUserCreatedBy(userInfo);
- dbConnection.save(model);
- successMap.put("success", "success");
- }else{
- successMap.put("DBError", "EXISTS");
- logger.error("Import new service failed. Service already exists");
- }
- return successMap;
- }
+ private static final Logger logger = FlexLogger.getLogger(CreateNewMicroServiceModel.class);
+ private MicroServiceModels newModel = null;
+ private HashMap<String, MSAttributeObject> classMap = new HashMap<>();
+
+
+ private MSModelUtils utils = new MSModelUtils(XACMLPapServlet.getMsOnapName(), XACMLPapServlet.getMsPolicyName());
+
+ public CreateNewMicroServiceModel(String fileName, String serviceName, String string, String version) {
+ super();
+ }
+
+ /**
+ * Instantiates a new creates the new micro service model.
+ *
+ * @param importFile the import file
+ * @param modelName the model name
+ * @param description the description
+ * @param version the version
+ * @param randomID the random ID
+ */
+ public CreateNewMicroServiceModel(String importFile, String modelName, String description, String version,
+ String randomID) {
+
+ this.newModel = new MicroServiceModels();
+ this.newModel.setVersion(version);
+ this.newModel.setModelName(modelName);
+ UserInfo userInfo = new UserInfo();
+ userInfo.setUserLoginId("API");
+ this.newModel.setUserCreatedBy(userInfo);
+ String cleanUpFile = null;
+
+ Map<String, MSAttributeObject> tempMap = new HashMap<>();
+ // Need to delete the file
+ if (importFile.contains(".zip")) {
+ extractFolder(randomID + ".zip");
+ File directory = new File("ExtractDir" + File.separator + randomID);
+ List<File> fileList = listModelFiles(directory.toString());
+ // get all the files from a director
+ processFiles(modelName, fileList);
+ doCleanUpFiles(randomID);
+ } else {
+ if (importFile.contains(".yml")) {
+
+ processYmlModel("ExtractDir" + File.separator + randomID + ".yml", modelName);
+ cleanUpFile = "ExtractDir" + File.separator + randomID + ".yml";
+
+ } else {
+ tempMap = utils.processEpackage("ExtractDir" + File.separator + randomID + ".xmi", MODEL_TYPE.XMI);
+ classMap.putAll(tempMap);
+ cleanUpFile = "ExtractDir" + File.separator + randomID + ".xmi";
+ }
+
+ File deleteFile = new File(cleanUpFile);
+ deleteFile.delete();
+ }
+ }
+
+ private void processFiles(String modelName, List<File> fileList) {
+ Map<String, MSAttributeObject> tempMap;
+ for (File file : fileList) {
+ if (file.isFile()) {
+ int indx = file.getName().lastIndexOf('.');
+ String type = file.getName().substring(indx + 1);
+
+ if ("yml".equalsIgnoreCase(type)) {
+
+ processYmlModel(file.toString(), modelName);
+
+ } else {
+
+ tempMap = utils.processEpackage(file.getAbsolutePath(), MODEL_TYPE.XMI);
+ classMap.putAll(tempMap);
+ }
+ }
+ }
+ }
+
+ private void doCleanUpFiles(String randomID) {
+ String cleanUpFile;
+ cleanUpFile = "ExtractDir" + File.separator + randomID + ".zip";
+ try {
+ FileUtils.deleteDirectory(new File("ExtractDir" + File.separator + randomID));
+ FileUtils.deleteDirectory(new File(randomID));
+ File deleteFile = new File(cleanUpFile);
+ FileUtils.forceDelete(deleteFile);
+ } catch (IOException e) {
+ logger.error("Failed to unzip model file " + randomID, e);
+ }
+ }
+
+ private void processYmlModel(String fileName, String modelName) {
+
+ try {
+
+
+ utils.parseTosca(fileName);
+
+ MSAttributeObject msAttributes = new MSAttributeObject();
+ msAttributes.setClassName(modelName);
+
+ LinkedHashMap<String, String> returnAttributeList = new LinkedHashMap<>();
+ returnAttributeList.put(modelName, utils.getAttributeString());
+ msAttributes.setAttribute(returnAttributeList);
+
+ msAttributes.setSubClass(utils.getRetmap());
+
+ msAttributes.setMatchingSet(utils.getMatchableValues());
+
+ LinkedHashMap<String, String> returnReferenceList = new LinkedHashMap<>();
+
+ returnReferenceList.put(modelName, utils.getReferenceAttributes());
+ msAttributes.setRefAttribute(returnReferenceList);
+
+ if (!PolicyDBDao.isNullOrEmpty(utils.getListConstraints())) {
+ LinkedHashMap<String, String> enumList = new LinkedHashMap<>();
+ String[] listArray = utils.getListConstraints().split("#");
+ for (String str : listArray) {
+ String[] strArr = str.split("=");
+ if (strArr.length > 1) {
+ enumList.put(strArr[0], strArr[1]);
+ }
+ }
+ msAttributes.setEnumType(enumList);
+ }
+ if (utils.getJsonRuleFormation() != null) {
+ msAttributes.setRuleFormation(utils.getJsonRuleFormation());
+ }
+
+ if (utils.getDataOrderInfo() != null) {
+ msAttributes.setDataOrderInfo(utils.getDataOrderInfo());
+ }
+
+ classMap = new LinkedHashMap<>();
+ classMap.put(modelName, msAttributes);
+
+ } catch (Exception e) {
+ logger.error("Failed to process yml model" + e);
+ }
+
+ }
+
+ private List<File> listModelFiles(String directoryName) {
+ File directory = new File(directoryName);
+ List<File> resultList = new ArrayList<>();
+ File[] fList = directory.listFiles();
+ for (File file : fList) {
+ if (file.isFile()) {
+ resultList.add(file);
+ } else if (file.isDirectory()) {
+ resultList.addAll(listModelFiles(file.getAbsolutePath()));
+ }
+ }
+ return resultList;
+ }
+
+ @SuppressWarnings("rawtypes")
+ private void extractFolder(String zipFile) {
+ int BUFFER = 2048;
+ File file = new File(zipFile);
+
+ try (ZipFile zip = new ZipFile("ExtractDir" + File.separator + file)) {
+
+ String newPath = zipFile.substring(0, zipFile.length() - 4);
+ new File(newPath).mkdir();
+ Enumeration zipFileEntries = zip.entries();
+
+ // Process each entry
+ while (zipFileEntries.hasMoreElements()) {
+ // grab a zip file entry
+ ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();
+ String currentEntry = entry.getName();
+ File destFile = new File("ExtractDir" + File.separator + newPath + File.separator + currentEntry);
+ File destinationParent = destFile.getParentFile();
+
+ destinationParent.mkdirs();
+
+ if (!entry.isDirectory()) {
+ BufferedInputStream is = new BufferedInputStream(zip.getInputStream(entry));
+ int currentByte;
+
+ byte data[] = new byte[BUFFER];
+ try (FileOutputStream fos = new FileOutputStream(destFile);
+ BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER)) {
+
+ while ((currentByte = is.read(data, 0, BUFFER)) != -1) {
+ dest.write(data, 0, currentByte);
+ }
+ dest.flush();
+ }
+ is.close();
+ }
+
+ if (currentEntry.endsWith(".zip")) {
+ extractFolder(destFile.getAbsolutePath());
+ }
+ }
+ } catch (IOException e) {
+ logger.error("Failed to unzip model file " + zipFile + e);
+ }
+ }
+
+ public Map<String, String> addValuesToNewModel(String type) {
+
+ Map<String, String> successMap = new HashMap<>();
+ MSAttributeObject mainClass = null;
+ List<String> dependency = null;
+ String subAttribute = null;
+
+ if (!classMap.containsKey(this.newModel.getModelName())) {
+ logger.error(
+ "Model Provided does not contain the service name provided in request. Unable to import new model");
+ PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE, "AddValuesToNewModel",
+ "Unable to pull out required values, file missing service name provided in request");
+ successMap.put("error", "MISSING");
+ return successMap;
+ }
+ mainClass = classMap.get(this.newModel.getModelName());
+
+
+ if (".yml".equalsIgnoreCase(type)) {
+
+ newModel.setDependency("[]");
+ if (mainClass.getSubClass() != null) {
+ String value = new Gson().toJson(mainClass.getSubClass());
+ newModel.setSub_attributes(value);
+ }
+
+ if (mainClass.getAttribute() != null) {
+ String attributes = mainClass.getAttribute().toString().replace("{", "").replace("}", "");
+ int equalsIndexForAttributes = attributes.indexOf("=");
+ String atttributesAfterFirstEquals = attributes.substring(equalsIndexForAttributes + 1);
+ this.newModel.setAttributes(atttributesAfterFirstEquals);
+ }
+
+ if (mainClass.getRefAttribute() != null) {
+ String refAttributes = mainClass.getRefAttribute().toString().replace("{", "").replace("}", "");
+ int equalsIndex = refAttributes.indexOf("=");
+ String refAttributesAfterFirstEquals = refAttributes.substring(equalsIndex + 1);
+ this.newModel.setRef_attributes(refAttributesAfterFirstEquals);
+ }
+
+ if (mainClass.getEnumType() != null) {
+ this.newModel.setEnumValues(mainClass.getEnumType().toString().replace("{", "").replace("}", ""));
+ }
+
+ if (mainClass.getMatchingSet() != null) {
+ this.newModel.setAnnotation(mainClass.getMatchingSet().toString().replace("{", "").replace("}", ""));
+ }
+ if (mainClass.getRuleFormation() != null) {
+ this.newModel.setRuleFormation(mainClass.getRuleFormation());
+ }
+
+ if (mainClass.getDataOrderInfo() != null) {
+ this.newModel.setDataOrderInfo(mainClass.getDataOrderInfo());
+ }
+
+ } else {
+
+ String dependTemp = StringUtils.replaceEach(mainClass.getDependency(), new String[] {"[", "]", " "},
+ new String[] {"", "", ""});
+ this.newModel.setDependency(dependTemp);
+ if (this.newModel.getDependency() != null && !this.newModel.getDependency().isEmpty()) {
+ dependency = new ArrayList<String>(Arrays.asList(dependTemp.split(",")));
+ dependency = utils.getFullDependencyList(dependency, classMap);
+ if (!dependency.isEmpty()) {
+ for (String element : dependency) {
+ MSAttributeObject temp = new MSAttributeObject();
+ if (classMap.containsKey(element)) {
+ temp = classMap.get(element);
+ mainClass.addAllRefAttribute(temp.getRefAttribute());
+ mainClass.addAllAttribute(temp.getAttribute());
+ }
+ }
+ }
+ }
+ subAttribute = utils.createSubAttributes(dependency, classMap, this.newModel.getModelName());
+
+ this.newModel.setSub_attributes(subAttribute);
+ if (mainClass.getAttribute() != null && !mainClass.getAttribute().isEmpty()) {
+ this.newModel.setAttributes(mainClass.getAttribute().toString().replace("{", "").replace("}", ""));
+ }
+
+ if (mainClass.getRefAttribute() != null && !mainClass.getRefAttribute().isEmpty()) {
+ this.newModel
+ .setRef_attributes(mainClass.getRefAttribute().toString().replace("{", "").replace("}", ""));
+ }
+
+ if (mainClass.getEnumType() != null && !mainClass.getEnumType().isEmpty()) {
+ this.newModel.setEnumValues(mainClass.getEnumType().toString().replace("{", "").replace("}", ""));
+ }
+
+ if (mainClass.getMatchingSet() != null && !mainClass.getMatchingSet().isEmpty()) {
+ this.newModel.setAnnotation(mainClass.getMatchingSet().toString().replace("{", "").replace("}", ""));
+ }
+ }
+ successMap.put("success", "success");
+ return successMap;
+
+ }
+
+ public Map<String, String> saveImportService() {
+ String modelName = this.newModel.getModelName();
+ String imported_by = "API";
+ String version = this.newModel.getVersion();
+ Map<String, String> successMap = new HashMap<>();
+ CommonClassDaoImpl dbConnection = new CommonClassDaoImpl();
+ List<Object> result =
+ dbConnection.getDataById(MicroServiceModels.class, "modelName:version", modelName + ":" + version);
+ if (result == null || result.isEmpty()) {
+ MicroServiceModels model = new MicroServiceModels();
+ model.setModelName(modelName);
+ model.setVersion(version);
+ model.setAttributes(this.newModel.getAttributes());
+ model.setAnnotation(this.newModel.getAnnotation());
+ model.setDependency(this.newModel.getDependency());
+ model.setDescription(this.newModel.getDescription());
+ model.setEnumValues(this.newModel.getEnumValues());
+ model.setRef_attributes(this.newModel.getRef_attributes());
+ model.setSub_attributes(this.newModel.getSub_attributes());
+ model.setDataOrderInfo(this.newModel.getDataOrderInfo());
+ model.setDecisionModel(this.newModel.isDecisionModel());
+ model.setRuleFormation(this.newModel.getRuleFormation());
+ UserInfo userInfo = new UserInfo();
+ userInfo.setUserLoginId(imported_by);
+ userInfo.setUserName(imported_by);
+ model.setUserCreatedBy(userInfo);
+ dbConnection.save(model);
+ successMap.put("success", "success");
+ } else {
+ successMap.put("DBError", "EXISTS");
+ logger.error("Import new service failed. Service already exists");
+ }
+ return successMap;
+ }