Commit 5de8eded authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ added standalone integration for test documentation generation

parent a4228cc1
Loading
Loading
Loading
Loading
+62 −6
Original line number Diff line number Diff line
@@ -12,7 +12,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -22,8 +24,10 @@ import org.eclipse.ocl.pivot.utilities.OCL;
import org.eclipse.ocl.pivot.utilities.ParserException;
import org.eclipse.ocl.pivot.utilities.Query;
import org.eclipse.xtext.EcoreUtil2;
import org.etsi.mts.tdl.Extension;
import org.etsi.mts.tdl.GateType;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.StructuredDataType;
import org.etsi.mts.tdl.tdlPackage;
import org.etsi.mts.tdl.asn2tdl.ASN2TDLTranslator;
import org.etsi.mts.tdl.constraints.evl.Validator;
@@ -31,6 +35,7 @@ import org.etsi.mts.tdl.helper.TDLHelper;
import org.etsi.mts.tdl.json2tdl.JSON2TDLTranslator;
import org.etsi.mts.tdl.json2tdl.TDL2JSONTranslator;
import org.etsi.mts.tdl.openapi2tdl.next.OpenAPI2TDLTranslatorNext;
import org.etsi.mts.tdl.openapi2tdl.next.doc.Doc;
import org.etsi.mts.tdl.tools.to.docx.poi.Generator;
import org.etsi.mts.tdl.transform.AbstractTranslator;

@@ -46,9 +51,11 @@ public class Standalone {

	enum MODE {
		all, 
		list, debug, validateOCL, 
		validate, translate, exportDoc, exportJSON,
		importOpenAPI, importASN1, importJSON
		list, debug, evaluateOCL, 
		validateOCL, validate, 
		translate, exportDoc, exportJSON,
		importOpenAPI, importASN1, importJSON,
		openAPIDoc
	}
	
	public static void main(String[] args) throws Exception {
@@ -59,11 +66,21 @@ public class Standalone {
//		app.modes.add(MODE.exportJSON);
		
		app.path = "examples/openapi/reqres.yaml";
		app.modes.add(MODE.importOpenAPI);
//		app.modes.add(MODE.importOpenAPI);
//		app.modes.add(MODE.list);
//		app.path = "examples/json/model.json";
		app.path = "examples/validation/Naming.tdltx";
		app.recursive = false;
		app.modes.add(MODE.validate);
//		targetExtension = "tdl";
//		app.modes.add(MODE.translate);
		
//		app.path = "examples/validation/Naming.tdltx.tdl";
		app.modes.add(MODE.validateOCL);
		
		if (app.selected(MODE.list)) {
			String path = pathOrDefault(app.path, "examples/basics");
//			app.processElements(path, app::listElements);
			app.processElements(path, app::listElements);
		}
		
@@ -97,18 +114,29 @@ public class Standalone {
			app.processElements(path, app::exportDoc);
		}

		//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);
		}
		
		//TODO: can only be used in isolation as it interferes with OCL delegates afterwards..
		if (app.selected(MODE.evaluateOCL)) {
			String path = pathOrDefault(app.path, "examples/validation/Example.tdltx");
			app.processElements(path, app::evaluateOCLInline);
		}

		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)
		}

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

		if (app.selected(MODE.importASN1)) {
			String path = pathOrDefault(app.path, "examples/asn1");
			app.processElements(path, asnExtension, app::importASN1);
@@ -202,6 +230,15 @@ public class Standalone {
		p.getPackagedElement().forEach(e -> {
			System.out.println("  " + e.getName());
			System.out.println("    " + e.eClass().getName() + " : " + e.getQualifiedName());
			if (e instanceof StructuredDataType) {
				EList<Extension> extension = ((StructuredDataType) e).getExtension();
				if (!extension.isEmpty()) {
					System.out.println("    Extends: " + extension.stream()
						.map(x-> x.getExtending().getName())
						.collect(Collectors.joining(", "))
					);
				}
			}
		});
	}
	
@@ -219,6 +256,12 @@ public class Standalone {
	}

	private void validateOCL(String path) {
		Resource resource = TDLHelper.load(path);
		Validator validator = new Validator();
		validator.validateOCL2(resource);
	}
	
	private void evaluateOCLInline(String path) {
		Resource resource = TDLHelper.load(path);
		OCL ocl = OCL.newInstance(TDLHelper.getResourceSet());
		EClass contextEClass = tdlPackage.Literals.GATE_TYPE;
@@ -267,6 +310,19 @@ public class Standalone {
		importData(path, new OpenAPI2TDLTranslatorNext());
	}

	private void documentOpenAPI(String path) {
		Doc doc = new Doc();
		try {
			//TODO: make configurable
			doc.processModel(path, true);
			Files.writeString(Path.of(path+"-RQ-ICS-TSS.md"), doc.getContent());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	
	private void importASN1(String path) {
		importData(path, new ASN2TDLTranslator());
	}