package asemedashboardview.views.actions;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import AIP.AIPFactory;
import AIP.AIPPackage;
import AIP.AIPmodel;
import AIP.Participant;
import AIP.Protocol;
import SAG.Actor;
import SAG.Goal;
import SAG.SAGPackage;
import SAG.SAGmodel;
import SUC.Role;
import SUC.SUCFactory;
import SUC.SUCPackage;
import SUC.SUCmodel;
import SUC.UseCase;
import asemedashboardview.views.ASEMEAction;
import asemedashboardview.views.ASEMEFacade;
import asemedashboardview.views.ASEMEState;
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;
public class TransformSUC2AIPModelAction implements ASEMEAction {
private ASEMEFacade context;
@Override
public void init(ASEMEFacade context) {
this.context = context;
}
@Override
public boolean isEnabled() {
ASEMEState state = context.getState();
if(state.getSUC()==null) {
return false;
}
return true;
}
@Override
public void run() {
ASEMEState state = context.getState();
URI suc = state.getSUC();
URI aip = state.getAIP();
if (aip == null) {
aip = suc.trimFileExtension().appendFileExtension("aip"); //$NON-NLS-1$
state.setAIP(aip);
}
aip = state.getAIP();
ResourceSet resourceSet = new ResourceSetImpl();
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 resource = resourceSet.getResource(state.getSUC(), true);
SUCmodel sucModel = (SUCmodel) resource.getContents().get(0);
// Create a new AIP model instance
Resource newResource = resourceSet.createResource(state.getAIP());
AIPmodel aipModel = AIPFactory.eINSTANCE.createAIPmodel();
newResource.getContents().add(aipModel);
// transformation code:
for (Iterator<UseCase> iterator = sucModel.getUsecases().iterator(); iterator.hasNext();) {
UseCase usecase = iterator.next();
List<Role> systemRoleUseCaseParticipants = new LinkedList<Role>();
for (Iterator<Role> iterator2 = usecase.getParticipant().iterator(); iterator2.hasNext();) {
Role role = iterator2.next();
if (role.getType().getLiteral() == "System")
systemRoleUseCaseParticipants.add(((Role) role));
}
if (systemRoleUseCaseParticipants.size() > 1) {
Protocol tmpProtocol = AIPFactory.eINSTANCE.createProtocol();
tmpProtocol.setName(usecase.getName());
HashMap<String, Participant> participants = new HashMap<String, Participant>();
for (Iterator<Role> iterator2 = systemRoleUseCaseParticipants
.iterator(); iterator2.hasNext();) {
Role systemRole = iterator2.next();
Participant tmpParticipant = AIPFactory.eINSTANCE.createParticipant();
tmpParticipant.setName(new String(tmpProtocol.getName()
+ "_" + systemRole.getName()));
tmpProtocol.getParticipants().add(tmpParticipant);
aipModel.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() + "?");
}
}
aipModel.getProtocols().add(tmpProtocol);
// add the activities!!!
}
}
// save the AIP model
newResource.getContents().add(aipModel);
try {
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(options);
} catch (Exception e) {
e.printStackTrace();
}
}
}