package org.js.model.adaptation;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jwt.meta.model.core.Model;
import org.eclipse.jwt.meta.model.processes.Activity;
import org.eclipse.jwt.we.editors.WEEditor;
import org.eclipse.jwt.we.model.view.Diagram;
import org.eclipse.ui.IEditorPart;
import org.feature.model.utilities.WorkbenchUtil;
public abstract class AbstractWorkflowRewriteRule implements IRewriteRule {
protected int coordinate = 10;
protected Model workflow;
protected Activity activity;
protected Diagram diagram;
private WEEditor workflowEditor;
public AbstractWorkflowRewriteRule(Model workflow) {
Assert.isNotNull(workflow);
this.workflow = workflow;
init();
}
@Override
public int execute() {
int returnCode = executeInternal();
save();
refresh();
return returnCode;
}
protected abstract int executeInternal();
private void save() {
final Map<Object, Object> saveOptions = new HashMap<Object, Object>();
saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER);
try {
workflow.eResource().save(saveOptions);
diagram.eResource().save(saveOptions);
} catch (IOException e) {
e.printStackTrace();
}
}
private void refresh() {
workflowEditor.refreshOutline();
workflowEditor.refreshPages();
workflowEditor.refreshProperties();
workflowEditor.refreshZoom();
}
private void init() {
workflowEditor = getActiveWorkflowEditor();
activity = workflowEditor.getDisplayedActivityModel();
diagram = workflowEditor.getDiagramData();
}
private WEEditor getActiveWorkflowEditor() {
WEEditor workflowEditor = null;
IEditorPart editor = WorkbenchUtil.getActiveEditor();
if (editor instanceof WEEditor) {
workflowEditor = (WEEditor) editor;
}
return workflowEditor;
}
public Activity getActivity() {
return activity;
}
public Diagram getDiagram() {
return diagram;
}
}