package org.eclipse.iee.pad.graph.ui;
import java.io.IOException;
import java.io.Serializable;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.draw2d.IFigure;
import org.eclipse.iee.core.utils.ArrayUtils;
import org.eclipse.iee.editor.core.bindings.ObservableProperty;
import org.eclipse.iee.editor.core.container.Container;
import org.eclipse.iee.editor.core.pad.FigurePad;
import org.eclipse.iee.editor.core.utils.runtime.file.FileMessageEvent;
import org.eclipse.iee.editor.core.utils.runtime.file.FileMessager;
import org.eclipse.iee.editor.core.utils.runtime.file.IFileMessageListener;
import org.eclipse.iee.pad.formula.ui.utils.UIFormulaRenderer;
import org.eclipse.iee.pad.graph.GraphPart;
import org.eclipse.iee.pad.graph.model.GraphModel;
import org.eclipse.jface.window.IShellProvider;
import org.eclipse.swt.widgets.Shell;
import org.jfree.chart.JFreeChart;
import com.google.common.base.Throwables;
public class GraphPad extends FigurePad<GraphPart, IFigure> implements Serializable {
private static final long serialVersionUID = 1L;
private GraphModelEditor fGraphModelEditor;
public GraphPad(UIFormulaRenderer formulaRenderer) {
fGraphModelEditor = new GraphModelEditor(formulaRenderer, new IShellProvider() {
@Override
public Shell getShell() {
return getContainer().getTextWidget().getShell();
}
});
addEditor(fGraphModelEditor);
}
private IFileMessageListener fFileMessageListener = new IFileMessageListener() {
@Override
public void messageReceived(FileMessageEvent e) {
updateResult(e.getMessage());
}
@Override
public String getRequesterID() {
return getDocumentPart().getId();
}
};
private ObservableProperty<GraphModel> fModelValue;
@Override
public IFigure createFigure() {
return fGraphModelEditor.getFigure();
}
public void initModelView(final IGraphView root, GraphModel model) {
}
public void save() {
processInput(getDocumentPart().getModel());
}
public void processInput(GraphModel model) {
getContainer().updateDocument();
}
public void updateResult(String result) {
Map<Integer, double[][]> resultMap = new HashMap<>();
double[][][] parseTrippleArray;
try {
parseTrippleArray = ArrayUtils.parseTrippleArray(new StringReader(result));
for (int i = 0; i < parseTrippleArray.length; i++) {
resultMap.put(i, parseTrippleArray[i]);
}
} catch (IOException e) {
throw Throwables.propagate(e);
}
fGraphModelEditor.setResult(resultMap);
}
@Override
public void activate() {
}
@Override
public void updateData(Map<String, String> params, String value) {
}
@Override
public String getType() {
return "Graph";
}
@Override
public String getTex() {
return "";
}
@Override
public void attachContainer(Container container) {
super.attachContainer(container);
FileMessager.getInstance().addFileMessageListener(fFileMessageListener,
container.getContainerManager().getStoragePath());
}
@Override
protected void doBindValue(GraphPart value) {
fModelValue = new ObservableProperty<GraphModel>(value, "model", GraphModel.class);
fGraphModelEditor.bindGraphElementModel(fModelValue);
}
@Override
protected void doUnbindValue(GraphPart oldValue) {
fModelValue.dispose();
}
public JFreeChart getChart() {
return fGraphModelEditor.getChart();
}
}