Commit 35d1a9f8 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ attempted refinements for converter

parent 88701b73
Loading
Loading
Loading
Loading
+61 −26
Original line number Diff line number Diff line
@@ -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);
@@ -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())));
@@ -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
@@ -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);
@@ -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()) {
@@ -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
@@ -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();
@@ -303,6 +326,7 @@ public class Converter {
				}
			}
			setName(newStructure, schema.getName());
			setName(newStructure, prefixedName.replaceAll("___$", ""));
		}
		
		structuredDataTypeBySchema.put(wrapped, newStructure);
@@ -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);
@@ -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;