Skip to content
Snippets Groups Projects
Commit 154707c8 authored by Jens Bendisposto's avatar Jens Bendisposto
Browse files

removed emf dependency

parent f17ce9cf
No related branches found
No related tags found
No related merge requests found
......@@ -10,9 +10,7 @@ Require-Bundle: org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
de.prob.core;bundle-version="[9.2.0,9.3.0)",
org.eventb.core;bundle-version="[2.1.0,2.6.0)",
org.eclipse.core.expressions;bundle-version="[3.4.101,4.0.0)",
org.eclipse.gef;bundle-version="[3.5.0,4.0.0)",
org.eventb.emf.core;bundle-version="2.2.4",
org.eventb.emf.persistence;bundle-version="2.4.0"
org.eclipse.gef;bundle-version="[3.5.0,4.0.0)"
Bundle-ActivationPolicy: lazy
Bundle-Vendor: HHU Düsseldorf STUPS Group
Bundle-Activator: de.prob.ui.ProbUiPlugin
......
package de.prob.ui.eventb;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.codec.binary.Base64;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
......@@ -24,18 +21,12 @@ import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eventb.core.IEventBRoot;
import org.eventb.core.IMachineRoot;
import org.eventb.emf.core.Project;
import org.eventb.emf.persistence.ProjectResource;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
import org.rodinp.core.IRodinProject;
import com.thoughtworks.xstream.XStream;
import de.prob.core.translator.TranslationFailedException;
import de.prob.eventb.translator.TranslatorFactory;
import de.prob.logging.Logger;
import de.prob.model.eventb.Model;
public class ExportNewCoreHandler extends AbstractHandler implements IHandler {
......@@ -100,15 +91,6 @@ public class ExportNewCoreHandler extends AbstractHandler implements IHandler {
final IEventBRoot root) {
final boolean isSafeToWrite = isSafeToWrite(filename);
IRodinProject rodinProject = root.getRodinProject();
ProjectResource resource = new ProjectResource(rodinProject);
try {
resource.load(null);
} catch (IOException e) {
e.printStackTrace();
}
Project project = (Project) resource.getContents().get(0);
if (isSafeToWrite) {
Writer fw = null;
try {
......@@ -116,9 +98,6 @@ public class ExportNewCoreHandler extends AbstractHandler implements IHandler {
TranslatorFactory.translate(root, new PrintWriter(fw));
fw.append('\n');
fw.append("eclipse_model('" + root.getComponentName() + "',\""
+ serialize(project, root.getComponentName()) + "\").");
} catch (TranslationFailedException e) {
e.notifyUserOnce();
} catch (IOException e) {
......@@ -134,25 +113,25 @@ public class ExportNewCoreHandler extends AbstractHandler implements IHandler {
}
}
private static String serialize(Project project, String maincomponent) {
NewCoreModelTranslation translation = new NewCoreModelTranslation();
Model model = translation.translate(project, maincomponent);
// XStream xstream = new XStream(new JettisonMappedXmlDriver());
XStream xstream = new XStream();
String xml = xstream.toXML(model);
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip;
byte[] bytes;
try {
gzip = new GZIPOutputStream(out);
gzip.write(xml.getBytes());
gzip.close();
bytes = out.toByteArray();
} catch (IOException e) {
bytes = xml.getBytes();
}
return Base64.encodeBase64String(bytes);
}
// private static String serialize(Project project, String maincomponent) {
// NewCoreModelTranslation translation = new NewCoreModelTranslation();
// Model model = translation.translate(project, maincomponent);
// // XStream xstream = new XStream(new JettisonMappedXmlDriver());
// XStream xstream = new XStream();
// String xml = xstream.toXML(model);
// ByteArrayOutputStream out = new ByteArrayOutputStream();
// GZIPOutputStream gzip;
// byte[] bytes;
// try {
// gzip = new GZIPOutputStream(out);
// gzip.write(xml.getBytes());
// gzip.close();
// bytes = out.toByteArray();
// } catch (IOException e) {
// bytes = xml.getBytes();
// }
// return Base64.encodeBase64String(bytes);
// }
private static boolean isSafeToWrite(final String filename) {
if (new File(filename).exists()) {
......
package de.prob.ui.eventb;
import static de.prob.model.representation.RefType.ERefType.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.emf.common.util.EList;
import org.eventb.emf.core.EventBNamedCommentedComponentElement;
import org.eventb.emf.core.Project;
import org.eventb.emf.core.context.Axiom;
import org.eventb.emf.core.context.CarrierSet;
import org.eventb.emf.core.context.Constant;
import org.eventb.emf.core.context.Context;
import org.eventb.emf.core.machine.Action;
import org.eventb.emf.core.machine.Event;
import org.eventb.emf.core.machine.Guard;
import org.eventb.emf.core.machine.Invariant;
import org.eventb.emf.core.machine.Machine;
import org.eventb.emf.core.machine.Parameter;
import org.eventb.emf.core.machine.Variable;
import org.eventb.emf.core.machine.Variant;
import org.eventb.emf.core.machine.Witness;
import de.prob.model.eventb.EBContext;
import de.prob.model.eventb.EBEvent;
import de.prob.model.eventb.EBMachine;
import de.prob.model.eventb.Model;
import de.prob.model.representation.Label;
public class NewCoreModelTranslation {
private HashMap<String, Label> components;
public Model translate(final Project p, final String mainComponent) {
this.components = new HashMap<String, Label>();
Model model = new Model(mainComponent);
final Map<String, EventBNamedCommentedComponentElement> allComponents = new HashMap<String, EventBNamedCommentedComponentElement>();
for (final EventBNamedCommentedComponentElement cmpt : p
.getComponents()) {
final String name = cmpt.doGetName();
allComponents.put(name, cmpt);
if (cmpt instanceof Context) {
components.put(name, createContext((Context) cmpt));
} else if (cmpt instanceof Machine) {
components.put(name, createMachine((Machine) cmpt));
}
}
for (Entry<String, EventBNamedCommentedComponentElement> entry : allComponents
.entrySet()) {
EventBNamedCommentedComponentElement element = entry.getValue();
final String name = element.doGetName();
final Label from = components.get(name);
Label to = null;
if (element instanceof Context) {
for (final Context context : ((Context) element).getExtends()) {
final String ctxName = context.doGetName();
to = components.get(ctxName);
model.addRelationship(from, to, EXTENDS);
}
}
if (element instanceof Machine) {
for (final Context context : ((Machine) element).getSees()) {
final String ctxName = context.doGetName();
to = components.get(ctxName);
model.addRelationship(from, to, SEES);
}
for (final Machine machine : ((Machine) element).getRefines()) {
final String mName = machine.doGetName();
to = components.get(mName);
model.addRelationship(from, to, REFINES);
}
}
}
return model;
}
private Label createMachine(Machine machine) {
EBMachine m = new EBMachine(machine.getName());
for (Event event : machine.getEvents()) {
m.addEvent(createEvent(event));
}
for (Variable variable : machine.getVariables()) {
m.addVariable(variable.getName());
}
Variant variant = machine.getVariant();
if (variant != null)
m.addVariant(variant.getExpression());
for (Invariant invariant : machine.getInvariants()) {
m.addInvariant(invariant.getPredicate(), invariant.getName());
}
return m;
}
private EBEvent createEvent(Event event) {
EBEvent e = new EBEvent(event.getName());
for (Witness witness : event.getWitnesses()) {
e.addWitness(witness.getPredicate(), witness.getName());
}
for (Guard guard : event.getGuards()) {
e.addGuard(guard.getPredicate(), guard.getName());
}
for (Parameter parameter : event.getParameters()) {
e.addParameter(parameter.getName());
}
for (String string : event.getRefinesNames()) {
e.addParameter(string);
}
EList<Action> actions = event.getActions();
for (Action action : actions) {
e.addAction(action.getAction(), action.getName());
}
return e;
}
private Label createContext(Context c) {
String name = c.getName();
EBContext context = new EBContext(name);
EList<Axiom> axioms = c.getAxioms();
for (Axiom axiom : axioms) {
context.addAxiom(axiom.getPredicate(), axiom.doGetName());
}
for (Constant constant : c.getConstants()) {
context.addConstant(constant.doGetName());
}
for (CarrierSet carrierSet : c.getSets()) {
context.addSet(carrierSet.doGetName());
}
return context;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment