package aseme.transformations; import java.io.File; import java.io.FileOutputStream; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; 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.XMIResource; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.emf.ecore.xmi.impl.ResourceEntityHandlerImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import SAG.*; import SUC.*; public class SAG2SUC { /** * @param args */ public static void main(String[] args) { ResourceSet resourceSet = new ResourceSetImpl(); // Register the appropriate resource factory to handle all file // extensions. // resourceSet .getResourceFactoryRegistry() .getExtensionToFactoryMap() .put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl()); // Register the package to ensure it is available during loading. // resourceSet.getPackageRegistry().put(SUCPackage.eNS_URI, SUCPackage.eINSTANCE); resourceSet.getPackageRegistry().put(SAGPackage.eNS_URI, SAGPackage.eINSTANCE); // load SUC model Resource r = null; if (args != null && args.length > 1) { r = resourceSet.getResource(URI.createFileURI(args[0]), true); } else { r = resourceSet.getResource(URI.createFileURI("mms.sag"), true); } SAGmodel sag = (SAGmodel) r.getContents().get(0); // Create a new SUC model instance Resource newResource = resourceSet.createResource(URI .createURI("http:///My.suc")); SUCmodel suc = SUCFactory.eINSTANCE.createSUCmodel(); newResource.getContents().add(suc); // transformation code: HashMap<String, Role> roles = new HashMap<String, Role>(); int xmiID=1; for (Iterator<Actor> iterator = sag.getActors().iterator(); iterator.hasNext();) { Actor tmpActor = iterator.next(); Role tmpRole = SUCFactory.eINSTANCE.createRole(); tmpRole.setName(tmpActor.getName()); newResource.getContents().add(tmpRole); XMIHelper.setXmlId(tmpRole, new String("role"+xmiID)); xmiID++; suc.getRoles().add(tmpRole); roles.put(tmpRole.getName(), tmpRole); //newResource.getContents().add(tmpRole); } xmiID=1; for (Iterator<Goal> iterator = sag.getGoals().iterator(); iterator.hasNext();) { Goal tmpGoal = iterator.next(); UseCase tmpUsecase = SUCFactory.eINSTANCE.createUseCase(); tmpUsecase.setName(tmpGoal.getName()); newResource.getContents().add(tmpUsecase); XMIHelper.setXmlId(tmpUsecase, new String("usecase"+xmiID)); xmiID++; suc.getUsecases().add(tmpUsecase); tmpUsecase.getParticipant().add(roles.get(tmpGoal.getDepender().getName())); for (Iterator<Actor> iterator2 = tmpGoal.getDependee().iterator(); iterator2 .hasNext();) { tmpUsecase.getParticipant().add(roles.get(iterator2.next().getName())); } tmpUsecase.setSpecified_by(tmpGoal.getRequirements()); } // save the SUC model try { FileOutputStream out = null; if (args != null && args.length > 1) { out = new FileOutputStream(new File(args[1])); }else{ out = new FileOutputStream(new File("mms-initial.suc")); } Map<String, Object> options = new HashMap<String, Object>(); options.put( XMLResource.OPTION_ENCODING, "UTF8" ); options.put( XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE); options.put( XMLResource.OPTION_SCHEMA_LOCATION_IMPLEMENTATION , Boolean.TRUE); newResource.save(out, options); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } }