Commit 3234d74f authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ added json support to standalone

* refined to introduce different modes
parent abac6bd5
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -18,5 +18,6 @@ Require-Bundle: org.eclipse.core.runtime,
 org.etsi.mts.tdl.openapi2tdl.next,
 org.etsi.mts.tdl.constraints,
 org.eclipse.epsilon.evl.engine,
 org.etsi.mts.tdl.tools.to.docx.poi
 org.etsi.mts.tdl.tools.to.docx.poi,
 org.etsi.mts.tdl.json2tdl
Bundle-ClassPath: .
+76 −32
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ import java.io.FilenameFilter;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
@@ -24,6 +25,7 @@ import org.etsi.mts.tdl.tdlPackage;
import org.etsi.mts.tdl.asn2tdl.ASN2TDLTranslator;
import org.etsi.mts.tdl.constraints.evl.Validator;
import org.etsi.mts.tdl.helper.TDLHelper;
import org.etsi.mts.tdl.json2tdl.JSON2TDLTranslator;
import org.etsi.mts.tdl.openapi2tdl.next.OpenAPI2TDLTranslatorNext;
import org.etsi.mts.tdl.tools.to.docx.poi.Generator;
import org.etsi.mts.tdl.transform.AbstractTranslator;
@@ -33,55 +35,93 @@ public class Standalone {
	static String targetExtension = "tdltx";
	static String openapiExtension = "yaml";
	static String asnExtension = "asn";
	static String jsonExtension = "json";
	private List<MODE> modes = new ArrayList<>();
	private String path = "";

	enum MODE {
		all, 
		list, debug, validateOCL, 
		validate, translate, exportDoc,
		importOpenAPI, importASN1, importJSON
	}
	
	public static void main(String[] args) throws Exception {
		Standalone app = new Standalone();
		//folder
		String path = "examples/basics";
		//TODO: expose as arguments
		
		app.modes.add(MODE.importJSON);
//		app.path = "examples/json/model.json";
		
		path = "examples/basics";
		if (app.selected(MODE.list)) {
			String path = pathOrDefault(app.path, "examples/basics");
			app.processElements(path, app::listElements);
		}
		
		//TODO: may fail
		//TODO: may fail due to literal value use without data type
		if (app.selected(MODE.validate)) {
			String path = pathOrDefault(app.path, "examples/basics");
			app.processElements(path, app::validate);
		}

		//TODO: may fail
//		app.processElements(path, app::translate);
		if (app.selected(MODE.translate)) {
			String path = pathOrDefault(app.path, "examples/basics");
			app.processElements(path, app::translate);
		}
		
		TDLHelper.resetResourceSet();
		path = "examples/validation/Example.tdltx";
		//TODO: can only be used in isolation as it interferes with OCL delegates afterwards..
//		app.processElements(path, app::validateOCL);
		//TODO: may fail due to literal value use without data type
//		app.processElements(path, app::validate);
		if (app.selected(MODE.importJSON)) {
			String path = pathOrDefault(app.path, "examples/json");
			app.processElements(path, jsonExtension, app::importJSON);
		}

		if (app.selected(MODE.exportDoc)) {
			String path = pathOrDefault(app.path, "examples/validation/Example.tdltx");
			app.processElements(path, app::exportDoc);
		}

		TDLHelper.resetResourceSet();
		path = "examples/openapi";
		//TODO: can only be used in isolation as it interferes with OCL delegates afterwards..
		if (app.selected(MODE.validateOCL)) {
			String path = pathOrDefault(app.path, "examples/validation/Example.tdltx");
			app.processElements(path, app::validateOCL);
		}

		if (app.selected(MODE.importOpenAPI)) {
			String path = pathOrDefault(app.path, "examples/openapi");
			app.processElements(path, openapiExtension, app::importOpenAPI);
			//NOTE: keep in mind weird errors if legacy OpenAPI importer is imported as well in manifest (especially if it is first)
		}

		TDLHelper.resetResourceSet();
		path = "examples/asn1";
		if (app.selected(MODE.importASN1)) {
			String path = pathOrDefault(app.path, "examples/asn1");
			app.processElements(path, asnExtension, app::importASN1);
		}

		if (app.selected(MODE.debug)) {
			//individual file without dependencies
		TDLHelper.resetResourceSet();
		path = "examples/basics/Sample.tdltx";
		app.processElements(path, app::listElements);

			app.processElements("examples/basics/Sample.tdltx", app::listElements);

			//individual file with missing dependencies
		TDLHelper.resetResourceSet();
		path = "examples/basics/ImportSample.tdltx";
		app.processElements(path, app::listElements);
			app.processElements("examples/basics/ImportSample.tdltx", app::listElements);
			//validation will fail due to unresolved items
		}		
		
		//TODO: minimal example for TO translation
		//TODO: minimal example for TTCN-3 generation
		//TODO: clean up keywords automatically
	}

	private static String pathOrDefault(String path, String defaultPath) {
		return path.isEmpty() ? defaultPath : path;
	}

	private boolean selected(MODE m) {
		return modes.contains(MODE.all) || modes.contains(m);
	}
	
	private void processElements(String path, Consumer<String> operation) throws Exception {
		TDLHelper.resetResourceSet();
		processElements(path, sourceExtension, operation);
	}
	
@@ -193,6 +233,10 @@ public class Standalone {
		importData(path, new ASN2TDLTranslator());
	}

	private void importJSON(String path) {
		importData(path, new JSON2TDLTranslator());
	}

	private void exportDoc(String path) {
		Resource resource = TDLHelper.load(path);
		Generator generator = new Generator();