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 AIP.AIPFactory;
import AIP.AIPPackage;
import AIP.AIPmodel;
import AIP.Participant;
import AIP.Protocol;
import SUC.Role;
import SUC.SUCPackage;
import SUC.SUCmodel;
import SUC.SystemRole;
import SUC.UseCase;
public class SUC2AIP {
/**
* @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(AIPPackage.eNS_URI,
AIPPackage.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 a new AIP model instance
Resource newResource = resourceSet.createResource(URI
.createURI("http:///My.aip"));
AIPmodel aip = AIPFactory.eINSTANCE.createAIPmodel();
for (Iterator<UseCase> iterator = suc_model.getUsecases().iterator(); iterator
.hasNext();) {
UseCase usecase = iterator.next();
List<SystemRole> systemRoleUseCaseParticipants = new LinkedList<SystemRole>();
for (Iterator<Role> iterator2 = usecase.getParticipant().iterator(); iterator2
.hasNext();) {
Role role = iterator2.next();
if (role instanceof SystemRole)
systemRoleUseCaseParticipants.add(((SystemRole) role));
}
if (systemRoleUseCaseParticipants.size() > 1) {
Protocol tmpProtocol = AIPFactory.eINSTANCE.createProtocol();
tmpProtocol.setName(usecase.getName());
HashMap<String, Participant> participants = new HashMap<String, Participant>();
for (Iterator<SystemRole> iterator2 = systemRoleUseCaseParticipants
.iterator(); iterator2.hasNext();) {
SystemRole systemRole = iterator2.next();
Participant tmpParticipant = AIPFactory.eINSTANCE
.createParticipant();
tmpParticipant.setName(new String(tmpProtocol.getName()
+ "_" + systemRole.getName()));
tmpProtocol.getParticipants().add(tmpParticipant);
aip.getParticipants().add(tmpParticipant);
participants.put(tmpParticipant.getName(), tmpParticipant);
tmpParticipant.setLiveness(new String(tmpParticipant
.getName() + "="));
}
for (Iterator<UseCase> iterator2 = usecase.getInclude()
.iterator(); iterator2.hasNext();) {
UseCase tmpUsecase = (UseCase) iterator2.next();
if (participants.get(tmpProtocol.getName() + "_"
+ tmpUsecase.getParticipant().get(0).getName()) != null) {
participants.get(
tmpProtocol.getName()
+ "_"
+ tmpUsecase.getParticipant().get(0)
.getName()).setLiveness(
participants.get(
tmpProtocol.getName()
+ "_"
+ tmpUsecase.getParticipant()
.get(0).getName())
.getLiveness()
+ tmpUsecase.getName() + "?");
}
}
aip.getProtocols().add(tmpProtocol);
// add the activities!!!
}
}
// save the AIP model
newResource.getContents().add(aip);
try {
FileOutputStream out = null;
if (args != null && args.length > 1) {
out = new FileOutputStream(new File(args[1]));
}else{
out = new FileOutputStream(new File("mms.aip"));
}
Map<String, Object> options = new HashMap<String, Object>();
options.put( XMLResource.OPTION_ENCODING, "UTF8" );
newResource.save(out, options);
} catch (Exception e) {
e.printStackTrace();
}
}
}