eclipse - How to create and apply a UML2 stereo-type using EMF in a standalone app? -
i have written sample application below create ejb stereotype apply timeentry class:
import java.io.file; import org.eclipse.emf.common.util.uri; import org.eclipse.emf.ecore.resource.resource; import org.eclipse.emf.ecore.resource.resource.factory; import org.eclipse.emf.ecore.resource.resourceset; import org.eclipse.emf.ecore.resource.impl.resourcesetimpl; import org.eclipse.emf.ecore.util.ecoreutil; import org.eclipse.uml2.uml.*; import org.eclipse.uml2.uml.class; import org.eclipse.uml2.uml.package; import org.eclipse.uml2.uml.umlpackage.literals; import org.eclipse.uml2.uml.resource.umlresource; public class sampleprofile { private static final resourceset resource_set = new resourcesetimpl(); public static void main( string[] args ) throws exception { factory.registry.instance.getextensiontofactorymap().put( umlresource.file_extension, umlresource.factory.instance ); final model umlmetamodel = (model) loadpackage( umlresource.uml_metamodel_uri ); final model samplemodel = umlfactory.einstance.createmodel(); samplemodel.setname( "sample model" ); final profile sampleprofile = umlfactory.einstance.createprofile(); sampleprofile.setname( "sample profile" ); final stereotype ejbstereo = sampleprofile.createownedstereotype( "ejb" ); extendmetaclass( umlmetamodel, sampleprofile, "class", ejbstereo ); sampleprofile.define(); final package samplepackage = samplemodel.createnestedpackage( "sample" ); samplepackage.applyprofile( sampleprofile ); final class sampleclass = samplepackage.createownedclass( "timeentry", false ); sampleclass.applystereotype( ejbstereo ); final file outputfile = new file( "sample_model.uml" ); final uri outputuri = uri.createfileuri( outputfile.getabsolutepath() ); final resource resource = resource_set.createresource( outputuri ); resource.getcontents().add( samplemodel ); resource.getcontents().add( sampleprofile ); resource.save( null ); } private static package loadpackage( final string uri ) { system.out.println( "uri = " + uri ); final resource resource = resource_set.getresource( uri.createuri( uri ), true ); ecoreutil.resolveall( resource ); return (org.eclipse.uml2.uml.package) ecoreutil.getobjectbytype( resource.getcontents(), literals.package ); } private static void extendmetaclass( final model umlmetamodel, final profile profile, final string name, final stereotype stereotype ) { stereotype.createextension( referencemetaclass( umlmetamodel, profile, name ), true ); } private static org.eclipse.uml2.uml.class referencemetaclass( final model umlmetamodel, final profile profile, final string name ) { final class metaclass = (class) umlmetamodel.getownedtype( name ); profile.createmetaclassreference( metaclass ); return metaclass; } } however running application, error message in console:
uri = pathmap://uml_metamodels/uml.metamodel.uml exception in thread "main" org.eclipse.emf.ecore.resource.impl.resourcesetimpl$1diagnosticwrappedexception: java.net.malformedurlexception: unknown protocol: pathmap @ org.eclipse.emf.ecore.resource.impl.resourcesetimpl.handledemandloadexception(resourcesetimpl.java:315) @ org.eclipse.emf.ecore.resource.impl.resourcesetimpl.demandloadhelper(resourcesetimpl.java:274) @ org.eclipse.emf.ecore.resource.impl.resourcesetimpl.getresource(resourcesetimpl.java:397) any ideas what's wrong code , how problem can solved? application command-line app runs outside eclipse.
stereotypes not live synchronized emf. mean need load profile inside project in order able apply stereotype. not done code using other plugins !!
i notice stereotypes lost emf after first transformation, therefore don't spend time because piece of emf code not stable :-)
Comments
Post a Comment