package org.js.model.workflow.actions; import org.eclipse.emf.common.ui.dialogs.ResourceDialog; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; import org.feature.model.utilities.FeatureModelLoader; import org.js.graph.transform.stagemodel.StageModel; import org.js.graph.transformation.GraphTransformation; import org.js.model.rbac.AccessControlModel; import org.js.model.workflow.ACMConnector; import org.js.model.workflow.GraphTransConnector; import org.js.model.workflow.StagingConnector; import org.js.model.workflow.util.WorkflowConfUtil; public class ImportModelAction extends MyAction { private final int CANCEL = 1; private Shell shell; private ResourceSet resourceSet; public ImportModelAction() {} @Override public ImageDescriptor getImage() { return null; } @Override public void run() { initialRes(); loadModel(); // setSHTypes(); save(); refresh(); } /** * select the model file and import it if it is a rbac model file. */ public void loadModel() { shell = workflowEditor.getSite().getShell(); resourceSet = new ResourceSetImpl(); ResourceDialog resourceDiaglog = new ResourceDialog(shell, "Load Model", SWT.OPEN); int state = resourceDiaglog.open(); // acm model and contained elements if (state != CANCEL) { if (resourceDiaglog.getURIText() != "") { URI uri = resourceDiaglog.getURIs().get(0); if (isAccessControlModelUri(uri)) { loadACModel(uri); } else if (isGraphTransformationUri(uri)) { loadGTmodel(uri); } else if (isStageModelUri(uri)) { loadStageModel(uri); } else { String info = "Please select an access control model file with the file extension " + WorkflowConfUtil.ACM_FILE_EXTENSION_1 + ", " + WorkflowConfUtil.ACM_FILE_EXTENSION_2 + " or a stage model file with extension" + WorkflowConfUtil.STAGEMODEL_FILE_EXTENSION + "."; MessageDialog.openInformation(getActiveShell(), "Warning", info); } } } } private boolean isAccessControlModelUri(URI uri) { String extension = uri.fileExtension(); boolean result = WorkflowConfUtil.ACM_FILE_EXTENSION_1.equals(extension) || WorkflowConfUtil.ACM_FILE_EXTENSION_2.equals(extension); return result; } private boolean isGraphTransformationUri(URI uri) { String extension = uri.fileExtension(); boolean result = WorkflowConfUtil.GT_FILE_EXTENSION_1.equals(extension); return result; } private boolean isStageModelUri(URI uri) { String extension = uri.fileExtension(); boolean result = WorkflowConfUtil.STAGEMODEL_FILE_EXTENSION.equals(extension); return result; } /** * connect access control model to jwt model. */ public void loadACModel(URI uri) { AccessControlModel accessControlModel = (AccessControlModel) FeatureModelLoader.load(uri, resourceSet); ACMConnector acmconnector = null; String aspect = WorkflowConfUtil.ACM_ASPECT; if (!WorkflowConfUtil.hasAspectInstance(workflowModel, aspect)) { acmconnector = (ACMConnector) WorkflowConfUtil.addAspectInstance(workflowModel, aspect); } else { acmconnector = (ACMConnector) WorkflowConfUtil.getAspectInstance(workflowModel, aspect); } WorkflowConfUtil.setACMRef(acmconnector, accessControlModel); } private void loadStageModel(URI uri) { StageModel stageModel = (StageModel) FeatureModelLoader.load(uri, resourceSet); StagingConnector smconnector = null; String aspect = WorkflowConfUtil.STAGEMODEL_ASPECT; if (!WorkflowConfUtil.hasAspectInstance(workflowModel, aspect)) { smconnector = (StagingConnector) WorkflowConfUtil.addAspectInstance(workflowModel, aspect); } else { smconnector = (StagingConnector) WorkflowConfUtil.getAspectInstance(workflowModel, aspect); } WorkflowConfUtil.setStageModelRef(smconnector, stageModel); } /** * connect graph transformation model to jwt model. */ public void loadGTmodel(URI uri) { GraphTransformation graphTransformationModel = (GraphTransformation) FeatureModelLoader.load(uri, resourceSet); if (!WorkflowConfUtil.hasAspectInstance(workflowModel, WorkflowConfUtil.GT_ASPECT)) { GraphTransConnector gtConnector = (GraphTransConnector) WorkflowConfUtil.addAspectInstance(workflowModel, WorkflowConfUtil.GT_ASPECT); WorkflowConfUtil.setGraphTrans(gtConnector, graphTransformationModel); } else { GraphTransConnector gtConnector = (GraphTransConnector) WorkflowConfUtil.getAspectInstance(workflowModel, WorkflowConfUtil.GT_ASPECT); WorkflowConfUtil.setGraphTrans(gtConnector, graphTransformationModel); } } // // public void setSHTypes(){ // SetStakeholerTypes sSHTypes = new SetStakeholerTypes(); // sSHTypes.run(); // } // // public void importGT(){ // // } }