Loading plugins/org.etsi.mts.tdl.rt.ui/src/org/etsi/mts/tdl/tools/rt/ui/handlers/TranslationHandler.java +77 −2 Original line number Diff line number Diff line package org.etsi.mts.tdl.tools.rt.ui.handlers; import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Optional; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; Loading @@ -9,6 +12,7 @@ import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.Platform; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; Loading @@ -23,6 +27,7 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.resource.XtextResourceSet; import org.eclipse.xtext.ui.resource.IResourceSetProvider; Loading @@ -31,6 +36,19 @@ import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Provider; import org.etsi.mts.tdl.Annotation; import org.etsi.mts.tdl.AnnotationType; import org.etsi.mts.tdl.Element; import org.etsi.mts.tdl.NamedElement; import org.etsi.mts.tdl.Package; import org.etsi.mts.tdl.PackageableElement; import org.etsi.mts.tdl.tdlFactory; import org.etsi.mts.tdl.tdlPackage; import org.etsi.mts.tdl.structuredobjectives.ExpectedBehaviour; import org.etsi.mts.tdl.structuredobjectives.FinalConditions; import org.etsi.mts.tdl.structuredobjectives.InitialConditions; import org.etsi.mts.tdl.structuredobjectives.StructuredObjectivesPackage; /** * Our sample handler extends AbstractHandler, an IHandler base class. * @see org.eclipse.core.commands.IHandler Loading Loading @@ -121,17 +139,74 @@ public class TranslationHandler extends AbstractHandler { Resource tr = resourceSet.createResource(targetURI); tr.getContents().addAll(EcoreUtil.copyAll(r.getContents())); //post-process StructuredTestObjectives if (file.getName().endsWith("tplan2") && extension.startsWith("tdltx")) { //TODO: clean-up "string" identifiers -> need general way to handle.. // individual keywords do-able, more sophisticated shall be concatenated with _ List<NamedElement> elements = EcoreUtil2.eAllOfType(tr.getContents().get(0), NamedElement.class); for (NamedElement e : elements) { e.setName(e.getName() .replaceAll("\"", "") .replaceAll("\s", "_") .replaceAll("[,\\.-]", "_") .replaceAll("^(\\d)", "_$1") ); } //TODO: extract //TODO: annotation types be imported ideally //TODO: reverse for backward compatibility? processElements("Initial conditions", tr, InitialConditions.class); processElements("Expected behaviour", tr, ExpectedBehaviour.class); processElements("Final conditions", tr, FinalConditions.class); } try { tr.save(null); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); System.err.println(" Translation: "+e1.getMessage()); //TODO: provide an error dialog, fall back to XF, indicate approximate location based on error message / details } } } return null; } private <T extends Element> void processElements(String annotationType, Resource tr, Class<T> type) { AnnotationType at = getAnnotationType(tr, annotationType); List<T> elements = EcoreUtil2.eAllOfType(tr.getContents().get(0), type); for (T e : elements) { Annotation a = tdlFactory.eINSTANCE.createAnnotation(); a.setKey(at); e.getAnnotation().add(a); e.setName(null); } } private AnnotationType getAnnotationType(Resource tr, String annotationType) { AnnotationType aType; Optional<AnnotationType> optional = EcoreUtil2 .eAllOfType(tr.getContents().get(0), AnnotationType.class) .stream() .filter(at -> at.getName().equals(annotationType)).findFirst(); if (optional.isEmpty()) { aType = createAnnotationType(tr, annotationType); } else { aType = optional.get(); } return aType; } private AnnotationType createAnnotationType(Resource tr, String annotationType) { AnnotationType at = tdlFactory.eINSTANCE.createAnnotationType(); at.setName(annotationType); ((Package) tr.getContents().get(0)).getPackagedElement().add(0, at); return at; } public void init(IWorkbenchWindow window) { this.window = window; } Loading Loading
plugins/org.etsi.mts.tdl.rt.ui/src/org/etsi/mts/tdl/tools/rt/ui/handlers/TranslationHandler.java +77 −2 Original line number Diff line number Diff line package org.etsi.mts.tdl.tools.rt.ui.handlers; import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Optional; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; Loading @@ -9,6 +12,7 @@ import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.Platform; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; Loading @@ -23,6 +27,7 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.resource.XtextResourceSet; import org.eclipse.xtext.ui.resource.IResourceSetProvider; Loading @@ -31,6 +36,19 @@ import com.google.inject.Inject; import com.google.inject.Injector; import com.google.inject.Provider; import org.etsi.mts.tdl.Annotation; import org.etsi.mts.tdl.AnnotationType; import org.etsi.mts.tdl.Element; import org.etsi.mts.tdl.NamedElement; import org.etsi.mts.tdl.Package; import org.etsi.mts.tdl.PackageableElement; import org.etsi.mts.tdl.tdlFactory; import org.etsi.mts.tdl.tdlPackage; import org.etsi.mts.tdl.structuredobjectives.ExpectedBehaviour; import org.etsi.mts.tdl.structuredobjectives.FinalConditions; import org.etsi.mts.tdl.structuredobjectives.InitialConditions; import org.etsi.mts.tdl.structuredobjectives.StructuredObjectivesPackage; /** * Our sample handler extends AbstractHandler, an IHandler base class. * @see org.eclipse.core.commands.IHandler Loading Loading @@ -121,17 +139,74 @@ public class TranslationHandler extends AbstractHandler { Resource tr = resourceSet.createResource(targetURI); tr.getContents().addAll(EcoreUtil.copyAll(r.getContents())); //post-process StructuredTestObjectives if (file.getName().endsWith("tplan2") && extension.startsWith("tdltx")) { //TODO: clean-up "string" identifiers -> need general way to handle.. // individual keywords do-able, more sophisticated shall be concatenated with _ List<NamedElement> elements = EcoreUtil2.eAllOfType(tr.getContents().get(0), NamedElement.class); for (NamedElement e : elements) { e.setName(e.getName() .replaceAll("\"", "") .replaceAll("\s", "_") .replaceAll("[,\\.-]", "_") .replaceAll("^(\\d)", "_$1") ); } //TODO: extract //TODO: annotation types be imported ideally //TODO: reverse for backward compatibility? processElements("Initial conditions", tr, InitialConditions.class); processElements("Expected behaviour", tr, ExpectedBehaviour.class); processElements("Final conditions", tr, FinalConditions.class); } try { tr.save(null); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); System.err.println(" Translation: "+e1.getMessage()); //TODO: provide an error dialog, fall back to XF, indicate approximate location based on error message / details } } } return null; } private <T extends Element> void processElements(String annotationType, Resource tr, Class<T> type) { AnnotationType at = getAnnotationType(tr, annotationType); List<T> elements = EcoreUtil2.eAllOfType(tr.getContents().get(0), type); for (T e : elements) { Annotation a = tdlFactory.eINSTANCE.createAnnotation(); a.setKey(at); e.getAnnotation().add(a); e.setName(null); } } private AnnotationType getAnnotationType(Resource tr, String annotationType) { AnnotationType aType; Optional<AnnotationType> optional = EcoreUtil2 .eAllOfType(tr.getContents().get(0), AnnotationType.class) .stream() .filter(at -> at.getName().equals(annotationType)).findFirst(); if (optional.isEmpty()) { aType = createAnnotationType(tr, annotationType); } else { aType = optional.get(); } return aType; } private AnnotationType createAnnotationType(Resource tr, String annotationType) { AnnotationType at = tdlFactory.eINSTANCE.createAnnotationType(); at.setName(annotationType); ((Package) tr.getContents().get(0)).getPackagedElement().add(0, at); return at; } public void init(IWorkbenchWindow window) { this.window = window; } Loading