import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import org.eclipse.emf.common.util.EList; 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; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.eclipse.uml2.uml.UMLPackage; import org.eclipse.mofscript.MOFScriptModel.MOFScriptSpecification; import org.eclipse.mofscript.MOFScriptModel.MOFScriptTransformation; import org.eclipse.mofscript.fileresourcemodel.frm.FileResource; import org.eclipse.mofscript.fileresourcemodel.frm.FileResourcesType; import org.eclipse.mofscript.parser.MofScriptParseError; import org.eclipse.mofscript.parser.ParserUtil; import org.eclipse.mofscript.runtime.ExecutionManager; import org.eclipse.mofscript.runtime.ExecutionMessageListener; import org.eclipse.mofscript.runtime.MofScriptExecutionException; import org.w3c.dom.events.UIEvent; import com.sun.corba.se.impl.resolver.FileResolverImpl; public class TestAPI implements ExecutionMessageListener { public TestAPI () { UMLPackage lePackage = UMLPackage.eINSTANCE; } public void test () { ParserUtil parserUtil = new ParserUtil(); ExecutionManager execMgr = ExecutionManager.getExecutionManager(); // // The parserutil parses and sets the input transformation model // for the execution manager. // File f = new File ("UMLTest.m2t"); MOFScriptSpecification spec = parserUtil.parse(f, true); // check for errors: int errorCount = ParserUtil.getModelChecker().getErrorCount(); Iterator errorIt = ParserUtil.getModelChecker().getErrors(); // Iterator of MofScriptParseError objects System.out.println ("Parsing result: " + errorCount + " errors"); if (errorCount > 0) { for (;errorIt.hasNext();) { MofScriptParseError parseError = (MofScriptParseError) errorIt.next(); System.out.println("\t \t: Error: " + parseError.toString()); } return; } // load source model XMIResourceFactoryImpl _xmiFac = new XMIResourceFactoryImpl(); EObject sourceModel = null; //File sourceModelFile = new File ("SM.ecore"); File sourceModelFile = new File ("ServiceModel.uml"); ResourceSet rSet = new ResourceSetImpl (); rSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", _xmiFac); URI uri = URI.createFileURI(sourceModelFile.getAbsolutePath()); Resource resource = rSet.getResource(uri, true); if (resource != null) { if (resource.getContents().size() > 0) { sourceModel = (EObject) resource.getContents().get(0); } } // set the source model for the exeution manager execMgr.addSourceModel(sourceModel); // sets the root output directory, if any is desired (e.g. "c:/temp") execMgr.setRootDirectory(""); // if true, files are not generated to the file systsm, but populated into a filemodel // which can be fetched afterwards. Value false will result in standard file generation execMgr.setUseFileModel(false); // Turns on/off system logging execMgr.setUseLog(false); // Adds an output listener for the transformation execution. execMgr.getExecutionStack().addOutputMessageListener(this); try { execMgr.executeTransformation(); } catch (MofScriptExecutionException mex) { mex.printStackTrace(); } // // Alternatively, we can use the file model, // in which case no files will be stored, only added to // an file model (org.eclipse.mofscript.fileresourcemodel) // // execMgr.setUseFileModel(true); try { execMgr.executeTransformation(); FileResourcesType fileResource = execMgr.getFileModel(); EList fileResources=fileResource.getFileResource(); for (Iterator fileit = fileResources.iterator(); fileit.hasNext();) { FileResource fResource = fileit.next(); byte[] contents = fResource.getContent(); // do something with the contents } } catch (MofScriptExecutionException mfex) { } } /** * Executing a transformation model directly (no parsing) */ public void executeModelDirectly() { ResourceSet rSet = new ResourceSetImpl (); URI fileUri = URI.createFileURI("someTransformationFile.mofscript"); Resource res = rSet.getResource(fileUri, true); // get the transformation specification from some resource... MOFScriptSpecification trSpec = (MOFScriptSpecification) res.getContents().get(0); // extract (one) transformation from the specification (it could in theory be several) MOFScriptTransformation transformation = (MOFScriptTransformation) trSpec.getTransformation().get(0); // set the transformation on the execution manager ExecutionManager execMgr = ExecutionManager.getExecutionManager(); execMgr.setTransformationModel(transformation); // load source model(s) EObject src = null; // add source model(s) execMgr.addSourceModel(src); // execute transformation try { execMgr.executeTransformation(); } catch(MofScriptExecutionException mex) { } // ... } /** * ExecutionMessageListener interface operations */ public void executionMessage (String type, String description) { System.out.println (type + " - " + description); } public static void main (String[] args){ TestAPI api = new TestAPI (); api.test(); } }