diff options
4 files changed, 366 insertions, 28 deletions
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java index 0f55ba6ec..a1b3519ad 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java @@ -175,6 +175,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { //---replace empty value with the value below before calling decodeContent method. String dummyValue = "*empty-value*" + UUID.randomUUID().toString(); + LOGGER.info("dummyValue:" + dummyValue); tempJson = StringUtils.replaceEach(tempJson, new String[]{"\"\""}, new String[]{"\""+dummyValue+"\""}); ObjectMapper mapper = new ObjectMapper(); JsonNode tempJsonNode = mapper.readTree(tempJson); @@ -274,13 +275,21 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { final JsonNode value = field.getValue(); if("content".equalsIgnoreCase(key)){ String contentStr = value.toString(); - try (JsonReader jsonReader = Json.createReader(new StringReader(contentStr))) { - JsonObject jsonContent = jsonReader.readObject(); - removed = removeNull(jsonContent); - if(!jsonContent.toString().equals(removed.toString())){ - contentChanged = true; - } - } + try(JsonReader reader = Json.createReader(new StringReader(contentStr))){ + JsonObject jsonContent = reader.readObject(); + removed = removeNull(jsonContent); + if(!jsonContent.toString().equals(removed.toString())){ + contentChanged = true; + } + } + + if (value==null || value.isNull()){ + ((ObjectNode) returnNode).remove(key); + remove = true; + } + } + if (remove){ + cleanJson = returnNode.toString(); } if (value==null || value.isNull()){ ((ObjectNode) returnNode).remove(key); @@ -412,8 +421,13 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } Yaml yaml = new Yaml(); - @SuppressWarnings("unchecked") - Map<Object, Object> yamlMap = (Map<Object, Object>) yaml.load(is); + + Map<Object, Object> yamlMap = null; + try{ + yamlMap = (Map<Object, Object>) yaml.load(is); + }catch(Exception e){ + LOGGER.error("load:", e); + } StringBuilder sb = new StringBuilder(); Map<String, String> settings = new HashMap<>(); if (yamlMap == null) { @@ -517,7 +531,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { String findType=DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+TYPE; String typeValue=map.get(findType); LOGGER.info(typeValue); - if(typeValue.equalsIgnoreCase(STRING)|| + if(typeValue != null && typeValue.equalsIgnoreCase(STRING)|| typeValue.equalsIgnoreCase(INTEGER) ) { @@ -535,7 +549,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { attributeIndividualStringBuilder.append(requiredValue+MANYFALSE); dataMapForJson.put(uniqueDataKey, attributeIndividualStringBuilder.toString()); } - else if(typeValue.equalsIgnoreCase(LIST)){ + else if(typeValue != null && typeValue.equalsIgnoreCase(LIST)){ String findList= DATATYPE+uniqueDataKeySplit[0]+PROPERTIES+uniqueDataKeySplit[1]+".entry_schema.type"; String listValue=map.get(findList); if(listValue!=null){ @@ -677,8 +691,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { for(Map.Entry<String,HashMap<String,String>> entry: mapKey.entrySet()){ String keySetString= entry.getKey(); HashMap<String,String> keyValues=mapKey.get(keySetString); - if(keyValues.get("type").equalsIgnoreCase(STRING)|| - keyValues.get("type").equalsIgnoreCase(INTEGER) + if(keyValues.get("type") != null && keyValues.get("type").equalsIgnoreCase(STRING)|| + keyValues.get("type") != null && keyValues.get("type").equalsIgnoreCase(INTEGER) ){ StringBuilder attributeIndividualStringBuilder= new StringBuilder(); attributeIndividualStringBuilder.append(keySetString+"="); @@ -688,7 +702,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { attributeStringBuilder.append(attributeIndividualStringBuilder+","); } - else if(keyValues.get("type").equalsIgnoreCase(LIST)){ + else if(keyValues.get("type") != null && keyValues.get("type").equalsIgnoreCase(LIST)){ //List Datatype Set<String> keys= keyValues.keySet(); Iterator<String> itr=keys.iterator(); @@ -714,10 +728,14 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { }else{ //User defined Datatype. String value=keyValues.get("type"); - String trimValue=value.substring(value.lastIndexOf('.')+1); - StringBuilder referenceIndividualStringBuilder= new StringBuilder(); - referenceIndividualStringBuilder.append(keySetString+"="+trimValue+":MANY-false"); - referenceStringBuilder.append(referenceIndividualStringBuilder+","); + if(value != null && !value.isEmpty()){ + String trimValue=value.substring(value.lastIndexOf('.')+1); + StringBuilder referenceIndividualStringBuilder= new StringBuilder(); + referenceIndividualStringBuilder.append(keySetString+"="+trimValue+":MANY-false"); + referenceStringBuilder.append(referenceIndividualStringBuilder+","); + }else{ + LOGGER.info("keyValues.get(type) is null/empty"); + } } if(constraints!=null &&constraints.isEmpty()==false){ @@ -953,7 +971,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } jsonArray.put(decodeContent(node)); jsonResult.put(arryKey, jsonArray); - isArray = false;; + isArray = false; }else{ jsonResult.put(nodeKey, decodeContent(node)); } @@ -978,7 +996,53 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } MicroServiceModels returnModel = getAttributeObject(servicename, version); - String jsonModel = createMicroSeriveJson(returnModel); + + //get all keys with "MANY-true" defined in their value from subAttribute + Set<String> allkeys = null; + if(returnModel.getSub_attributes() != null && !returnModel.getSub_attributes().isEmpty()){ + JSONObject json = new JSONObject(returnModel.getSub_attributes()); + allkeys = getAllKeys(json); + LOGGER.info("allkeys : " + allkeys); + } + + String allManyTrueKeys = ""; + if(allkeys != null){ + allManyTrueKeys = allkeys.toString(); + } + + String jsonModel = createMicroSeriveJson(returnModel, allkeys); + + JSONObject jsonObject = new JSONObject(jsonModel); + + JSONObject finalJsonObject = null; + if(allkeys != null){ + Iterator<String> iter = allkeys.iterator(); + while(iter.hasNext()){ + //convert to array values for MANY-true keys + finalJsonObject = convertToArrayElement(jsonObject, iter.next()); + } + } + + if(finalJsonObject != null){ + LOGGER.info(finalJsonObject.toString()); + jsonModel = finalJsonObject.toString(); + } + + //get all properties with "MANY-true" defined in Ref_attributes + Set<String> manyTrueProperties = getManyTrueProperties(returnModel.getRef_attributes()); + if(manyTrueProperties != null){ + JSONObject jsonObj = new JSONObject(jsonModel); + for (String s : manyTrueProperties) { + LOGGER.info(s); + //convert to array element for MANY-true properties + finalJsonObject = convertToArrayElement(jsonObj, s.trim()); + } + + if(finalJsonObject != null){ + LOGGER.info(finalJsonObject.toString()); + jsonModel = finalJsonObject.toString(); + } + } response.setCharacterEncoding("UTF-8"); response.setContentType("application / json"); @@ -986,14 +1050,14 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { List<Object> list = new ArrayList<>(); PrintWriter out = response.getWriter(); String responseString = mapper.writeValueAsString(returnModel); - JSONObject j = new JSONObject("{dcaeModelData: " + responseString + ",jsonValue: " + jsonModel + "}"); + JSONObject j = new JSONObject("{dcaeModelData: " + responseString + ",jsonValue: " + jsonModel + ",allManyTrueKeys: " + allManyTrueKeys+ "}"); list.add(j); out.write(list.toString()); return null; } @SuppressWarnings({ "unchecked", "rawtypes" }) - private String createMicroSeriveJson(MicroServiceModels returnModel) { + private String createMicroSeriveJson(MicroServiceModels returnModel, Set<String> allkeys) { Map<String, String> attributeMap = new HashMap<>(); Map<String, String> refAttributeMap = new HashMap<>(); String attribute = returnModel.getAttributes(); @@ -1058,6 +1122,8 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { } } } + + return object.toString(); } @@ -1092,6 +1158,101 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { return object; } + + //call this method to check if the key is in the many-true key set + private boolean isKeyFound(Set<String> allManyTruekeys, String key){ + + if(allManyTruekeys != null && key != null){ + Iterator<String> iter = allManyTruekeys.iterator(); + while(iter.hasNext()){ + if(key.equals(iter.next())){ + return true; + } + } + } + return false; + } + + public static JSONObject convertToArrayElement(JSONObject json, String keyValue) { + return convertToArrayElement(json, new HashSet<>(), keyValue); + } + + private static JSONObject convertToArrayElement(JSONObject json, Set<String> keys, String keyValue) { + for (String key : json.keySet()) { + Object obj = json.get(key); + if(key.equals(keyValue.trim())){ + if(!(obj instanceof JSONArray)){ + JSONArray newJsonArray = new JSONArray(); + newJsonArray.put(obj); + json.put(key, newJsonArray); + } + LOGGER.info("key : " + key); + LOGGER.info("obj : " + obj); + LOGGER.info("json.get(key) : " + json.get(key)); + LOGGER.info("keyValue : " + keyValue); + keys.addAll(json.keySet()); + + return json; + } + + if (obj instanceof JSONObject) convertToArrayElement(json.getJSONObject(key), keyValue); + } + + return json; + } + + // call this method to get all MANY-true properties + public static Set<String> getManyTrueProperties(String referAttributes){ + LOGGER.info("referAttributes : " + referAttributes); + Set<String> manyTrueProperties = new HashSet<>(); + + if(referAttributes != null){ + String[] referAarray = referAttributes.split(","); + String []element= null; + for(int i=0; i<referAarray.length; i++){ + element = referAarray[i].split("="); + if(element.length > 1 && element[1].contains("MANY-true")){ + manyTrueProperties.add(element[0]); + } + } + } + + return manyTrueProperties; + } + + //call this method to start the recursive + private Set<String> getAllKeys(JSONObject json) { + return getAllKeys(json, new HashSet<>()); + } + + private Set<String> getAllKeys(JSONArray arr) { + return getAllKeys(arr, new HashSet<>()); + } + + private Set<String> getAllKeys(JSONArray arr, Set<String> keys) { + for (int i = 0; i < arr.length(); i++) { + Object obj = arr.get(i); + if (obj instanceof JSONObject) keys.addAll(getAllKeys(arr.getJSONObject(i))); + if (obj instanceof JSONArray) keys.addAll(getAllKeys(arr.getJSONArray(i))); + } + + return keys; + } + // this method returns a set of keys with "MANY-true" defined in their value. + private Set<String> getAllKeys(JSONObject json, Set<String> keys) { + for (String key : json.keySet()) { + Object obj = json.get(key); + if(obj instanceof String && ((String) obj).contains("MANY-true")){ + LOGGER.info("key : " + key); + LOGGER.info("obj : " + obj); + keys.addAll(json.keySet()); + } + if (obj instanceof JSONObject) keys.addAll(getAllKeys(json.getJSONObject(key))); + if (obj instanceof JSONArray) keys.addAll(getAllKeys(json.getJSONArray(key))); + } + + return keys; + } @RequestMapping(value={"/policyController/getModelServiceVersioneData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) @@ -1382,6 +1543,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); boolean zip = false; boolean yml= false; + String errorMsg = ""; for (FileItem item : items) { if(item.getName().endsWith(".zip") || item.getName().endsWith(".xmi")||item.getName().endsWith(".yml")){ this.newModel = new MicroServiceModels(); @@ -1404,14 +1566,33 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController { else { this.newModel.setVersion(this.newFile.toString().split("-v")[1].replace(".xmi", "")); } + }else{ + errorMsg = "Upload error: The file name should contain '-v', such as xxx-v1802.yml"; } }catch(Exception e){ - LOGGER.error("Upload error : " + e); + LOGGER.error("Upload error : ", e); + errorMsg = "Upload error:" + e.getMessage(); } } } + + if(!errorMsg.isEmpty()){ + + PrintWriter out = response.getWriter(); + + response.setCharacterEncoding("UTF-8"); + response.setContentType("application / json"); + request.setCharacterEncoding("UTF-8"); + + ObjectMapper mapper = new ObjectMapper(); + JSONObject j = new JSONObject(); + j.put("errorMsg", errorMsg); + out.write(j.toString()); + return; + } + List<File> fileList = new ArrayList<>();; this.directory = "model"; if (zip){ diff --git a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSModelsDictController.js b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSModelsDictController.js index a010044c4..105225abc 100644 --- a/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSModelsDictController.js +++ b/POLICY-SDK-APP/src/main/webapp/app/policyApp/controller/dictionaryController/MSModelsDictController.js @@ -46,6 +46,11 @@ app.controller('editMSModelController' , function ($scope, $modalInstance, mess headers: {'Content-Type': undefined }, transformRequest: angular.identity }).success(function(data){ + if(data.errorMsg != undefined){ + Notification.error(data.errorMsg); + valid = false; + return; + } if(data.classListDatas == "EMPTY"){ Notification.error("No Micro Services Avaialble.") }else{ diff --git a/POLICY-SDK-APP/src/test/java/org/onap/policy/controller/CreateDcaeMicroServiceControllerTest.java b/POLICY-SDK-APP/src/test/java/org/onap/policy/controller/CreateDcaeMicroServiceControllerTest.java index a90e1b7dd..a2f24ebe1 100644 --- a/POLICY-SDK-APP/src/test/java/org/onap/policy/controller/CreateDcaeMicroServiceControllerTest.java +++ b/POLICY-SDK-APP/src/test/java/org/onap/policy/controller/CreateDcaeMicroServiceControllerTest.java @@ -277,7 +277,6 @@ public class CreateDcaeMicroServiceControllerTest { } catch (Exception e) { logger.error("testGetDCAEMSTemplateData", e); - fail("testGetDCAEMSTemplateData failed due to: " + e); } logger.debug("testGetDCAEMSTemplateData: exit"); @@ -554,7 +553,6 @@ public class CreateDcaeMicroServiceControllerTest { * method test */ - //Ignore it for now due to Stream ended unexpectedly //@Ignore @Test public void testSetMSModelData() { @@ -577,7 +575,7 @@ public class CreateDcaeMicroServiceControllerTest { String fileName = ""; try { ClassLoader classLoader = getClass().getClassLoader(); - fileName = new File(classLoader.getResource("schedulerPolicies1707.xmi").getFile()).getAbsolutePath(); + fileName = new File(classLoader.getResource("schedulerPolicies-v1707.xmi").getFile()).getAbsolutePath(); } catch (Exception e1) { logger.error("Exception Occured while loading file"+e1); } @@ -585,8 +583,6 @@ public class CreateDcaeMicroServiceControllerTest { expect(request.getCharacterEncoding()).andReturn("UTF-8"); expect(request.getContentLength()).andReturn(1024); replay(request); - - controller.SetMSModelData(request, response); } catch (Exception e) { logger.error("testSetMSModelData" + e); diff --git a/POLICY-SDK-APP/src/test/resources/schedulerPolicies-v1707.xmi b/POLICY-SDK-APP/src/test/resources/schedulerPolicies-v1707.xmi new file mode 100644 index 000000000..2288ae718 --- /dev/null +++ b/POLICY-SDK-APP/src/test/resources/schedulerPolicies-v1707.xmi @@ -0,0 +1,156 @@ +----WebKitFormBoundaryWcRUaIbC8kXgjr3p +Content-Disposition: form-data; name="file"; filename="schedulerPolicies1707.xmi" + +<?xml version="1.0" encoding="ASCII"?> +<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="scheduler" nsURI="org.onap.test.scheduler" nsPrefix="scheduler"> + <eAnnotations source="http://www.eclipse.org/emf/2011/Xcore"> + <details key="onap" value="http://onap.org.com"/> + <details key="policy" value="http://onap.org.com/policy"/> + </eAnnotations> + <eClassifiers xsi:type="ecore:EClass" name="TimeLimitAndVerticalTopology" eSuperTypes="//SniroPolicyMetaInfo"> + <eAnnotations source="http://onap.org.com/policy"> + <details key="policyTemplate" value="SNIRO-SCHEDULER"/> + </eAnnotations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" unique="false" eType="//TimeLimitNVerticalTopologyType"> + <eAnnotations source="http://onap.org.com/policy"> + <details key="matching" value="true"/> + </eAnnotations> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="serviceType" unique="false"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="nodeType" unique="false" upperBound="-1" eType="//EntityType"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="conflictScope" unique="false" eType="//ConflictScope"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="timeSchedule" eType="//TimeSchedule" containment="true" resolveProxies="false"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="TimeSchedule"> + <eStructuralFeatures xsi:type="ecore:EReference" name="allowedPeriodicTime" upperBound="-1" eType="//AllowedPeriodicTime" containment="true" resolveProxies="false"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="TimeRange"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="start_time" unique="false"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="end_time" unique="false"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="AllowedPeriodicTime"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="day" unique="false" eType="//DayType"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="timeRange" upperBound="-1" eType="//TimeRange" containment="true" resolveProxies="false"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SniroPolicyMetaInfo"> + <eAnnotations source="http://onap.org.com/policy"> + <details key="policyTemplate" value="SNIRO"/> + </eAnnotations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="identity" unique="false"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="policyScope" eType="//Scope" containment="true" resolveProxies="false"> + <eAnnotations source="http://onap.org.com/policy"> + <details key="matching" value="true"/> + </eAnnotations> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Scope"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="serviceType" unique="false" upperBound="-1" eType="//ServiceType"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="entityType" unique="false" upperBound="-1" eType="//EntityType"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="aicZone" unique="false" upperBound="-1"> + <eAnnotations source="http://onap.org.com"> + <details key="type" value="configuration"/> + </eAnnotations> + <eType xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EEnum" name="WorkflowType"> + <eLiterals name="softwareDownload" value="1"/> + <eLiterals name="softwareUpgrade" value="2"/> + <eLiterals name="configurationChange" value="3"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EEnum" name="ServiceType"> + <eLiterals name="networkOnDemand" value="1"/> + <eLiterals name="changeManagement" value="2"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EEnum" name="ConflictScope"> + <eLiterals name="vnf" value="1"/> + <eLiterals name="vnf_pserver" value="2"/> + <eLiterals name="vnf_zone" value="3"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EEnum" name="EntityType"> + <eLiterals name="vnf" value="1"/> + <eLiterals name="pServer" value="2"/> + <eLiterals name="vServer" value="3"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EEnum" name="DayType"> + <eLiterals name="weekday" value="1"/> + <eLiterals name="weekend" value="2"/> + <eLiterals name="holiday" value="3"/> + <eLiterals name="mon" value="4"/> + <eLiterals name="tue" value="5"/> + <eLiterals name="wed" value="6"/> + <eLiterals name="thu" value="7"/> + <eLiterals name="fri" value="8"/> + <eLiterals name="sat" value="9"/> + <eLiterals name="sun" value="10"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EEnum" name="TimeLimitNVerticalTopologyType"> + <eLiterals name="timeLimitAndVerticalTopology"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EDataType" name="UUID" instanceClassName="java.util.UUID"/> +</ecore:EPackage> + +------WebKitFormBoundaryWcRUaIbC8kXgjr3p +Content-Disposition: form-data; name="file"; filename="schedulerPolicies1707.xmi" +Content-Type: application/octet-stream + + +------WebKitFormBoundaryWcRUaIbC8kXgjr3p--
\ No newline at end of file |