Commit 901710bf authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ refinements to openapi importer, added mappings

parent 08f71bad
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -15,17 +15,34 @@ import org.etsi.mts.tdl.Package;
public class ConverterNext {

	public static void main(String[] args) throws Exception {
		String filename = "/Users/philip-iii/Dev/git/etsi-labs/eg-203647-restful-api-guide/OpenAPI/ExampleAPI.yaml";
		// TODO Auto-generated method stub
		
		String filename = args[0];
		process(filename, filename+"-generated-new.tdltx");
	}

	public static String processToString(String inputPath, String outputPath) {
		return processToString(inputPath, outputPath, "SOURCE_MAPPING", "TARGET_MAPPING");
	}
	
	public static String processToString(String inputPath, String outputPath, String sourceMapping, String targetMapping) {
		OpenAPI spec = parseSpec(inputPath);
		System.out.println("Exporting: "+outputPath+ " : "+ new File(outputPath).getAbsolutePath());
		OpenAPI2TDLTranslatorNext translator = new OpenAPI2TDLTranslatorNext();
		String content = "Package imported {}";
		try {
			Resource tr = TDLHelper.create(outputPath);
			translator.setTargetResource(tr);
			translator.initTargetResource(translator.cleanName(new File(inputPath).getName()));
			translator.translate(inputPath, sourceMapping, targetMapping);
			content = TDLHelper.getText(tr);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return content;
	}


	public static String process(String inputPath, String outputPath) {
		OpenAPI spec = parseSpec(inputPath);
		//System.out.println(spec.getComponents());
		OpenAPI2TDLTranslatorNext translator = new OpenAPI2TDLTranslatorNext();
		String name = "imported";
		try {
+34 −13
Original line number Diff line number Diff line
@@ -6,7 +6,10 @@ import org.etsi.mts.tdl.CollectionDataType;
import org.etsi.mts.tdl.DataElementMapping;
import org.etsi.mts.tdl.DataType;
import org.etsi.mts.tdl.Member;
import org.etsi.mts.tdl.Parameter;
import org.etsi.mts.tdl.ParameterMapping;
import org.etsi.mts.tdl.StructuredDataType;
import org.etsi.mts.tdl.tdlFactory;
import org.etsi.mts.tdl.tdlPackage;
import org.etsi.mts.tdl.transform.AbstractTranslator;
import org.openapitools.codegen.utils.ModelUtils;
@@ -24,6 +27,12 @@ public class OpenAPI2TDLTranslatorNext extends AbstractTranslator {
	private OpenAPI model;
	
	public void translate(String filename) throws Exception {
		String sourceMappingTag = "SOURCE_MAPPING";
		String targetMappingTag = "TARGET_MAPPING";
		translate(filename, sourceMappingTag, targetMappingTag);
	}
	
	public void translate(String filename, String sourceMappingTag, String targetMappingTag) throws Exception {
//		Converter.setTdlTokens(Arrays.asList(new String[] {"'name'", "'type'", "'size'", "'instance'"}));
//		Converter converter = new Converter(filename);
//		converter.runConversion();
@@ -32,33 +41,45 @@ public class OpenAPI2TDLTranslatorNext extends AbstractTranslator {
		//TODO: separate validation into another component
		
		model = parseSpec(filename);
		drm = getTypeFor("SOURCE_MAPPING", tdlPackage.Literals.DATA_RESOURCE_MAPPING);
		drm.setResourceURI("\""+new File(filename).getName()+"\"");
		drmTarget = getTypeFor("TARGET_MAPPING", tdlPackage.Literals.DATA_RESOURCE_MAPPING);
		drm = getTypeFor(sourceMappingTag, tdlPackage.Literals.DATA_RESOURCE_MAPPING);
		drm.setResourceURI(new File(filename).getName());
		drmTarget = getTypeFor(targetMappingTag, tdlPackage.Literals.DATA_RESOURCE_MAPPING);
		//TODO: make configurable
		drmTarget.setResourceURI("\"generated/java\"");
		drmTarget.setResourceURI("generated/java");
		for (String schemaName: model.getComponents().getSchemas().keySet()) {
			Schema<?> schema = model.getComponents().getSchemas().get(schemaName);
			schema.setName(schemaName);
			DataType dataType = translate(schema, "");
			addMapping(schema, dataType);
			addMapping(schema, dataType, sourceMappingTag, targetMappingTag);
		}
		
	}

	private void addMapping(Schema<?> schema, DataType dataType) {
		DataElementMapping sourceMapping = getTypeFor(schema.getName()+"_SOURCE_MAPPING", tdlPackage.Literals.DATA_ELEMENT_MAPPING);
	private void addMapping(Schema<?> schema, DataType dataType, String sourceMappingTag, String targetMappingTag) {
		DataElementMapping sourceMapping = getTypeFor(schema.getName()+"_"+sourceMappingTag, tdlPackage.Literals.DATA_ELEMENT_MAPPING);
		sourceMapping.setMappableDataElement(dataType);
		sourceMapping.setElementURI("\"#/components/schemas/"+schema.getName()+"\"");
		sourceMapping.setElementURI("#/components/schemas/"+schema.getName()+"");
		sourceMapping.setDataResourceMapping(drm);
		
		//TODO: make configurable 
		DataElementMapping targetMapping = getTypeFor(schema.getName()+"_TARGET_MAPPING", tdlPackage.Literals.DATA_ELEMENT_MAPPING);
		//TODO: make configurable?
		DataElementMapping targetMapping = getTypeFor(schema.getName()+"_"+targetMappingTag, tdlPackage.Literals.DATA_ELEMENT_MAPPING);
		targetMapping.setMappableDataElement(dataType);
		//TODO: transform / adapt mapping based on configuration?
		targetMapping.setElementURI("\""+schema.getName()+"\"");
		targetMapping.setElementURI(""+schema.getName()+"");
		targetMapping.setDataResourceMapping(drmTarget);

		if (dataType instanceof StructuredDataType) {
			for (Member m : ((StructuredDataType) dataType).getMember()) {
				addParameterMapping(sourceMapping, m, m.getName());
				addParameterMapping(targetMapping, m, m.getName());
			}
		}
	}

	private void addParameterMapping(DataElementMapping mapping, Parameter p, String uri) {
		ParameterMapping pm = (ParameterMapping) tdlFactory.eINSTANCE.create(tdlPackage.Literals.PARAMETER_MAPPING);
		pm.setParameter(p);
		pm.setParameterURI(uri.replaceAll("\\^", ""));
		mapping.getParameterMapping().add(pm);
	}

	private DataType translate(Schema<?> schema, String prefix) {