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.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import SRM.*; import SUC.*; public class SUC2SRM { /** * @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(SRMPackage.eNS_URI, SRMPackage.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-refined.suc"), true); } SUCmodel suc_model = (SUCmodel) r.getContents().get(0); // Create an SRM file for each SystemRole in the SUC model for (Iterator<SUC.Role> iterator = suc_model.getRoles().iterator(); iterator .hasNext();) { SUC.Role suc_role = iterator.next(); if (suc_role instanceof SystemRole) { Resource newResource = resourceSet.createResource(URI .createURI("http:///My.srm")); SRMmodel srm = SRMFactory.eINSTANCE.createSRMmodel(); newResource.getContents().add(srm); SRM.Role srm_role = SRMFactory.eINSTANCE.createRole(); newResource.getContents().add(srm_role); srm.getRoles().add(srm_role); srm_role.setName(suc_role.getName()); srm_role.setLiveness(new String(srm_role.getName() + "=?\n")); // transformation code: for (Iterator<UseCase> iterator2 = suc_role .getParticipates_in().iterator(); iterator2.hasNext();) { UseCase usecase = iterator2.next(); // if the use case includes others it is inserted as a // capability // if the use case has another participant the capability's // name is the usecase name followed by .<Role name> // add a line in the liveness formula with the usecase // equals to the included ones connected by question marks // else it is inserted as an activity if (usecase.getInclude().size() > 0) { Capability cp = SRMFactory.eINSTANCE.createCapability(); newResource.getContents().add(cp); srm.getCapabilities().add(cp); srm_role.getCapabilities().add(cp); if (usecase.getParticipant().size() > 0) { cp.setName(new String(usecase.getName() + "_" + srm_role.getName())); } else { cp.setName(new String(usecase.getName())); } srm_role.setLiveness(new String(srm_role.getLiveness() + cp.getName() + "=")); boolean firstLivenessRightSideElement = true; for (Iterator<UseCase> iterator3 = usecase.getInclude() .iterator(); iterator3.hasNext();) { UseCase tmpUsecase = iterator3.next(); if (tmpUsecase.getParticipant().get(0).getName() .equalsIgnoreCase(srm_role.getName())) { srm_role.setLiveness(new String(srm_role .getLiveness() + (firstLivenessRightSideElement ? "" : "?") + tmpUsecase.getName())); if (firstLivenessRightSideElement) firstLivenessRightSideElement = false; } } srm_role.setLiveness(srm_role.getLiveness()+"\n"); } else { Activity activity = SRMFactory.eINSTANCE .createActivity(); newResource.getContents().add(activity); srm.getActivities().add(activity); srm_role.getActivities().add(activity); activity.setName(usecase.getName()); activity.setFunctionality(usecase.getSpecified_by()); } } for (Iterator<UseCase> iterator2 = suc_role .getParticipates_in().iterator(); iterator2.hasNext();) { UseCase usecase = iterator2.next(); if (usecase.getInclude().size() > 0) { for (Iterator<Capability> iterator3 = srm_role .getCapabilities().iterator(); iterator3 .hasNext();) { Capability tmpCapability = iterator3.next(); if (tmpCapability.getName().indexOf( usecase.getName()) >= 0) { for (Iterator<UseCase> iterator4 = usecase .getInclude().iterator(); iterator4 .hasNext();) { UseCase tmpUseCase = iterator4.next(); for (Iterator<Activity> iterator5 = srm_role .getActivities().iterator(); iterator5 .hasNext();) { Activity tmpActivity = iterator5.next(); if (tmpActivity.getName() .equalsIgnoreCase( tmpUseCase.getName())) { tmpCapability.getActivities().add( tmpActivity); break; } } } break; } } } } // save the SRM model newResource.getContents().add(srm); try { FileOutputStream out = null; if (args != null && args.length > 1) { out = new FileOutputStream(new File(new String( args[1].substring( 0, (args[1].indexOf(".srm") > 0 ? args[1] .length() - 4 : args[1] .length())) + srm_role.getName() + ".srm"))); } else { out = new FileOutputStream(new File(new String( "mms-initial-" + srm_role.getName() + ".srm"))); } Map<String, Object> options = new HashMap<String, Object>(); options.put(XMLResource.OPTION_ENCODING, "UTF8"); newResource.save(out, options); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } } } }