Loading plugins/org.etsi.mts.tdl.openapi2tdl/src/org/etsi/mts/tdl/openapi2tdl/Converter.java +61 −26 Original line number Diff line number Diff line Loading @@ -83,13 +83,14 @@ public class Converter { this.model = loadOpenApi3(filename); this.filename = filename; } //TODO: Time for a complete rewrite! private void setName(Element elem, String name) { if (tdlTokens.contains("'" + name + "'")) { warningList.add(new KeywordEscapedWarning(String.format("Name '%s' is a TDL keyword", name))); name = "^" + name; } name = name.replaceAll("-", "_") .replaceAll("^_", "N_") .replaceAll(" ", "_") .replaceAll("\\.", "_"); elem.setName(name); Loading @@ -112,6 +113,10 @@ public class Converter { // generate schemas for (Schema schema: model.getSchemas().values()) { if (schema.getType()==null) { //TODO: add warning or handle gracefully continue; } DataType type = createDataTypeFromSchema(schema); if (!addDescription(type, schema)) { warningList.add(new DescriptionMissingWarning(String.format("Missing description for schema %s", schema.getName()))); Loading @@ -131,7 +136,11 @@ public class Converter { // Only consider top-level structured data types for (Schema schema: model.getSchemas().values()) { if (schema.getType().equals("object")) { if (schema.getType()==null) { schema.setType("TODO_UNSPECIFIED_SCHEMA_TYPE"); } if (//schema.getType()==null || schema.getType().equals("object")) { SchemaWrapper wrappedSchema = new SchemaWrapper(schema); StructuredDataType structuredDT = structuredDataTypeBySchema.get(wrappedSchema); // Create Mapping Elements Loading @@ -156,7 +165,13 @@ public class Converter { } public DataType createDataTypeFromSchema(Schema schema) { if (schema.getType().equals("object")) { if (schema.getType() == null) { //TODO: why? schema.setType("TODO_UNSPECIFIED_SCHEMA_TYPE"); //TODO: also add proper hierarchical naming } if (//schema.getType() == null || schema.getType().equals("object")) { return createStructuredDataTypeFromSchema(schema); } else if (schema.getType().equals("array")) { return createCollectionDataTypeFromSchema(schema); Loading Loading @@ -245,6 +260,9 @@ public class Converter { DataType itemType = createDataTypeFromSchema(schema.getItemsSchema()); newCollection.setItemType(itemType); if (isAnonymous) { itemType.setName(newCollection.getName()+itemType.getName().replaceFirst("^.+?___", "___")); } Optional<CollectionDataType> optionalReplacement = collectionDataTypeBySchema.values().stream().filter(coll -> coll.getItemType() == itemType && coll.getName().matches("Collection\\d+")).findFirst(); if (isAnonymous && optionalReplacement.isPresent()) { Loading @@ -266,9 +284,7 @@ public class Converter { StructuredDataType newStructure = tdlFactory.eINSTANCE.createStructuredDataType(); if(schema.getName()==null) { setName(newStructure, "Object" + anonymousObjectCounter++); String name = ""; String prefixedName = ""; Object parentSchema = schema; while (parentSchema instanceof Schema) { //TODO: reflection hack Loading @@ -282,14 +298,21 @@ public class Converter { pathInParent.setAccessible(true); String parentPath = (String) pathInParent.get(jo); name = parentPath+"___"+name; prefixedName = parentPath+"___"+prefixedName; if (parentSchema instanceof MapOverlay) { //skip one level Field nextParent = JsonOverlay.class.getDeclaredField("parent"); nextParent.setAccessible(true); parentSchema = nextParent.get((JsonOverlay<?>) parentSchema); } } catch (Exception e) { // TODO Auto-generated catch block System.err.println("ERROR: "+e.getMessage()); } } setName(newStructure, name.replaceAll("___$", "")); if(schema.getName()==null) { setName(newStructure, "Object" + anonymousObjectCounter++); setName(newStructure, prefixedName.replaceAll("___$", "")); } else { String typeName = schema.getName(); Loading @@ -303,6 +326,7 @@ public class Converter { } } setName(newStructure, schema.getName()); setName(newStructure, prefixedName.replaceAll("___$", "")); } structuredDataTypeBySchema.put(wrapped, newStructure); Loading @@ -312,6 +336,12 @@ public class Converter { for (String propertyName : schema.getProperties().keySet()) { Schema memberSchema = schema.getProperty(propertyName); DataType memberType = createDataTypeFromSchema(memberSchema); if (!(memberType instanceof SimpleDataType)) { System.out.println("structure type:" +prefixedName); memberType.setName(newStructure.getName()+"___"+memberType.getName().replaceAll(".+?___", "")); System.out.println("member type:" +memberType.getName()); } Member member = tdlFactory.eINSTANCE.createMember(); setName(member, propertyName); Loading Loading @@ -402,7 +432,12 @@ public class Converter { // } private String setQuotationMarks(String s) { return "\"" + s.replaceAll("\"", "\\\\\"") + "\""; return //TODO: this is only needed for legacy configuration.. "\"" + s .replaceAll("\"", "\\\\\"") + "\"" ; } public static Collection<String> getTdlTokens() { return tdlTokens; Loading Loading
plugins/org.etsi.mts.tdl.openapi2tdl/src/org/etsi/mts/tdl/openapi2tdl/Converter.java +61 −26 Original line number Diff line number Diff line Loading @@ -83,13 +83,14 @@ public class Converter { this.model = loadOpenApi3(filename); this.filename = filename; } //TODO: Time for a complete rewrite! private void setName(Element elem, String name) { if (tdlTokens.contains("'" + name + "'")) { warningList.add(new KeywordEscapedWarning(String.format("Name '%s' is a TDL keyword", name))); name = "^" + name; } name = name.replaceAll("-", "_") .replaceAll("^_", "N_") .replaceAll(" ", "_") .replaceAll("\\.", "_"); elem.setName(name); Loading @@ -112,6 +113,10 @@ public class Converter { // generate schemas for (Schema schema: model.getSchemas().values()) { if (schema.getType()==null) { //TODO: add warning or handle gracefully continue; } DataType type = createDataTypeFromSchema(schema); if (!addDescription(type, schema)) { warningList.add(new DescriptionMissingWarning(String.format("Missing description for schema %s", schema.getName()))); Loading @@ -131,7 +136,11 @@ public class Converter { // Only consider top-level structured data types for (Schema schema: model.getSchemas().values()) { if (schema.getType().equals("object")) { if (schema.getType()==null) { schema.setType("TODO_UNSPECIFIED_SCHEMA_TYPE"); } if (//schema.getType()==null || schema.getType().equals("object")) { SchemaWrapper wrappedSchema = new SchemaWrapper(schema); StructuredDataType structuredDT = structuredDataTypeBySchema.get(wrappedSchema); // Create Mapping Elements Loading @@ -156,7 +165,13 @@ public class Converter { } public DataType createDataTypeFromSchema(Schema schema) { if (schema.getType().equals("object")) { if (schema.getType() == null) { //TODO: why? schema.setType("TODO_UNSPECIFIED_SCHEMA_TYPE"); //TODO: also add proper hierarchical naming } if (//schema.getType() == null || schema.getType().equals("object")) { return createStructuredDataTypeFromSchema(schema); } else if (schema.getType().equals("array")) { return createCollectionDataTypeFromSchema(schema); Loading Loading @@ -245,6 +260,9 @@ public class Converter { DataType itemType = createDataTypeFromSchema(schema.getItemsSchema()); newCollection.setItemType(itemType); if (isAnonymous) { itemType.setName(newCollection.getName()+itemType.getName().replaceFirst("^.+?___", "___")); } Optional<CollectionDataType> optionalReplacement = collectionDataTypeBySchema.values().stream().filter(coll -> coll.getItemType() == itemType && coll.getName().matches("Collection\\d+")).findFirst(); if (isAnonymous && optionalReplacement.isPresent()) { Loading @@ -266,9 +284,7 @@ public class Converter { StructuredDataType newStructure = tdlFactory.eINSTANCE.createStructuredDataType(); if(schema.getName()==null) { setName(newStructure, "Object" + anonymousObjectCounter++); String name = ""; String prefixedName = ""; Object parentSchema = schema; while (parentSchema instanceof Schema) { //TODO: reflection hack Loading @@ -282,14 +298,21 @@ public class Converter { pathInParent.setAccessible(true); String parentPath = (String) pathInParent.get(jo); name = parentPath+"___"+name; prefixedName = parentPath+"___"+prefixedName; if (parentSchema instanceof MapOverlay) { //skip one level Field nextParent = JsonOverlay.class.getDeclaredField("parent"); nextParent.setAccessible(true); parentSchema = nextParent.get((JsonOverlay<?>) parentSchema); } } catch (Exception e) { // TODO Auto-generated catch block System.err.println("ERROR: "+e.getMessage()); } } setName(newStructure, name.replaceAll("___$", "")); if(schema.getName()==null) { setName(newStructure, "Object" + anonymousObjectCounter++); setName(newStructure, prefixedName.replaceAll("___$", "")); } else { String typeName = schema.getName(); Loading @@ -303,6 +326,7 @@ public class Converter { } } setName(newStructure, schema.getName()); setName(newStructure, prefixedName.replaceAll("___$", "")); } structuredDataTypeBySchema.put(wrapped, newStructure); Loading @@ -312,6 +336,12 @@ public class Converter { for (String propertyName : schema.getProperties().keySet()) { Schema memberSchema = schema.getProperty(propertyName); DataType memberType = createDataTypeFromSchema(memberSchema); if (!(memberType instanceof SimpleDataType)) { System.out.println("structure type:" +prefixedName); memberType.setName(newStructure.getName()+"___"+memberType.getName().replaceAll(".+?___", "")); System.out.println("member type:" +memberType.getName()); } Member member = tdlFactory.eINSTANCE.createMember(); setName(member, propertyName); Loading Loading @@ -402,7 +432,12 @@ public class Converter { // } private String setQuotationMarks(String s) { return "\"" + s.replaceAll("\"", "\\\\\"") + "\""; return //TODO: this is only needed for legacy configuration.. "\"" + s .replaceAll("\"", "\\\\\"") + "\"" ; } public static Collection<String> getTdlTokens() { return tdlTokens; Loading