-package org.simantics.ui.workbench.e4;\r
-\r
-import java.util.Map;\r
-\r
-import javax.annotation.PostConstruct;\r
-import javax.annotation.PreDestroy;\r
-import javax.inject.Inject;\r
-\r
-import org.eclipse.e4.core.contexts.IEclipseContext;\r
-import org.eclipse.e4.ui.di.Focus;\r
-import org.eclipse.e4.ui.di.Persist;\r
-import org.eclipse.e4.ui.di.PersistState;\r
-import org.eclipse.e4.ui.model.application.ui.basic.MPart;\r
-import org.eclipse.e4.ui.workbench.modeling.EPartService;\r
-import org.eclipse.e4.ui.workbench.modeling.ESelectionService;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.simantics.Simantics;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.common.request.ParametrizedRead;\r
-import org.simantics.db.common.request.ReadRequest;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.request.PossibleModel;\r
-import org.simantics.db.layer0.variable.RVI;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.db.layer0.variable.Variables;\r
-import org.simantics.db.service.SerialisationSupport;\r
-import org.simantics.ui.workbench.IResourceEditorInput;\r
-\r
-public abstract class E4ResourceEditorBase {\r
-\r
- @Inject\r
- private ESelectionService selectionService;\r
-\r
- @Inject\r
- private IEclipseContext eclipseContext;\r
-\r
- private MPart part;\r
- private boolean disposed;\r
-\r
- private Resource resource;\r
- private Variable variable;\r
- private String rvi;\r
- private Resource model;\r
- \r
- private IResourceEditorInput input;\r
- private E4ResourceEditorSupport support;\r
-\r
- @Inject\r
- public final void init(MPart mPart) throws NumberFormatException, DatabaseException {\r
- this.part = mPart;\r
- readTransientState();\r
- if (resource == null && model == null && rvi == null && variable == null)\r
- readPersistentState();\r
-\r
- deriveState();\r
- initImpl(part);\r
-\r
- if (!part.getTags().contains(EPartService.REMOVE_ON_HIDE_TAG)) {\r
- part.getTags().add(EPartService.REMOVE_ON_HIDE_TAG);\r
- }\r
- }\r
-\r
- public void initImpl(MPart part) { }\r
-\r
- private void deriveState() throws DatabaseException {\r
- boolean deriveVariable = variable == null && model != null;\r
- boolean deriveModelAndRVI = variable != null;\r
- boolean deriveModel = resource != null && model == null;\r
-\r
- if (deriveModel || deriveModelAndRVI || deriveVariable) {\r
- Simantics.getSession().syncRequest(new ReadRequest() {\r
- \r
- @Override\r
- public void run(ReadGraph graph) throws DatabaseException {\r
- if (deriveVariable) {\r
- if (rvi != null) {\r
- Variable configuration = Variables.getConfigurationContext(graph, model);\r
- RVI rrvi = RVI.fromResourceFormat(graph, rvi);\r
- variable = rrvi.resolve(graph, configuration);\r
- }\r
- // Absolute URI\r
- else {\r
- variable = Variables.getVariable(graph, model);\r
- }\r
- }\r
-\r
- if (deriveModelAndRVI) {\r
- model = Variables.getPossibleModel(graph, variable);\r
- rvi = variable.getRVI(graph).toString();\r
- }\r
-\r
- if (deriveModel) {\r
- model = graph.syncRequest(new PossibleModel(resource));\r
- }\r
- }\r
- });\r
- }\r
-\r
- Map<String, Object> transientData = part.getTransientData(); \r
- transientData.put(E4ResourceEditorConstants.KEY_RESOURCE, resource);\r
- transientData.put(E4ResourceEditorConstants.KEY_MODEL, model);\r
- transientData.put(E4ResourceEditorConstants.KEY_VARIABLE, variable);\r
- transientData.put(E4ResourceEditorConstants.KEY_RVI, rvi);\r
-\r
- if (resource != null) {\r
- if (model != null) {\r
- input = new E4ResourceEditorInput2(resource, model, rvi);\r
- } else {\r
- input = new E4ResourceEditorInput(resource);\r
- }\r
- }\r
- }\r
-\r
- protected void activateValidation() {\r
- this.support = new E4ResourceEditorSupport(this, getInputValidator());\r
- this.support.activateValidation();\r
- }\r
-\r
- protected void deactivateValidation() {\r
- if (support != null) {\r
- support.dispose();\r
- support = null;\r
- }\r
- }\r
-\r
- /**\r
- * Override to define your own input resource editor input validator that\r
- * the view uses by default in {@link #initializeSupport()}.\r
- */\r
- protected ParametrizedRead<IResourceEditorInput, Boolean> getInputValidator() {\r
- return null;\r
- }\r
-\r
- private void readTransientState() throws DatabaseException {\r
- Map<String, Object> transientData = part.getTransientData();\r
- // Read input resource\r
- Object inputResource = transientData.get(E4ResourceEditorConstants.KEY_RESOURCE);\r
- if (inputResource != null && inputResource instanceof Resource)\r
- resource = (Resource) inputResource;\r
-\r
- // Read input RVI\r
- Object inputRVI = transientData.get(E4ResourceEditorConstants.KEY_RVI);\r
- if (inputRVI != null && inputRVI instanceof String)\r
- rvi = (String) inputRVI;\r
-\r
- Object inputModel = transientData.get(E4ResourceEditorConstants.KEY_MODEL);\r
- if (inputModel != null && inputModel instanceof Resource)\r
- model = (Resource) inputModel;\r
-\r
- // Read input variable\r
- Object inputVariable = transientData.get(E4ResourceEditorConstants.KEY_VARIABLE);\r
- if (inputVariable != null && inputVariable instanceof Variable)\r
- variable = (Variable) inputVariable;\r
- }\r
-\r
- private void readPersistentState() throws NumberFormatException, DatabaseException {\r
- Map<String, String> persistState = part.getPersistedState();\r
- SerialisationSupport support = Simantics.getSession().getService(SerialisationSupport.class);\r
- String inputResource = persistState.get(E4ResourceEditorConstants.KEY_RESOURCE);\r
- if (inputResource != null)\r
- resource = support.getResource(Long.parseLong(inputResource));\r
-\r
- // Read input RVI\r
- String inputRVI = persistState.get(E4ResourceEditorConstants.KEY_RVI);\r
- if (inputRVI != null)\r
- rvi = inputRVI;\r
-\r
- String inputModel = persistState.get(E4ResourceEditorConstants.KEY_MODEL);\r
- if (inputModel != null)\r
- model = support.getResource(Long.parseLong(inputModel));\r
- }\r
-\r
- @PostConstruct\r
- public void createEditor(Composite parent) {\r
- createPartControl(parent);\r
- }\r
-\r
- public abstract void createPartControl(Composite parent);\r
-\r
- @PersistState\r
- public void persistState() {\r
- System.out.println("persistState");\r
- Map<String, String> persistedState = part.getPersistedState();\r
- if (resource != null)\r
- persistedState.put(E4ResourceEditorConstants.KEY_RESOURCE, Long.toString(resource.getResourceId()));\r
- if (model != null)\r
- persistedState.put(E4ResourceEditorConstants.KEY_MODEL, Long.toString(model.getResourceId()));\r
- if (rvi != null)\r
- persistedState.put(E4ResourceEditorConstants.KEY_RVI, rvi);\r
- }\r
-\r
- @Persist\r
- public void persist() {\r
- System.out.println("persist");\r
- }\r
-\r
- @PreDestroy\r
- public void preDestroy() {\r
- System.out.println("dispose");\r
- disposed = true;\r
- dispose();\r
- deactivateValidation();\r
- }\r
-\r
- public abstract void dispose();\r
-\r
- public boolean isDisposed() {\r
- return disposed;\r
- }\r
-\r
- public abstract void setFocus();\r
-\r
- @Focus\r
- public void focus() {\r
- setFocus();\r
- }\r
-\r
- public MPart getPart() {\r
- return part;\r
- }\r
-\r
- public Resource getInputResource() {\r
- return resource;\r
- }\r
-\r
- public Variable getInputVariable() {\r
- return variable;\r
- }\r
-\r
- public String getInputRVI() {\r
- return rvi;\r
- }\r
-\r
- public Resource getInputModelResource() {\r
- return model;\r
- }\r
-\r
- public Resource assertInputModelResource() {\r
- if (model == null)\r
- throw new NullPointerException("Input model resource not defined, input resource is " + resource);\r
- return model;\r
- }\r
-\r
- public IResourceEditorInput getResourceInput() {\r
- return input;\r
- }\r
-\r
- public ESelectionService getSelectionService() {\r
- return selectionService;\r
- }\r
-\r
- public IEclipseContext getContext() {\r
- return eclipseContext;\r
- }\r
-\r
-}\r
+package org.simantics.ui.workbench.e4;
+
+import java.util.Map;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.ui.di.Focus;
+import org.eclipse.e4.ui.di.Persist;
+import org.eclipse.e4.ui.di.PersistState;
+import org.eclipse.e4.ui.model.application.ui.basic.MPart;
+import org.eclipse.e4.ui.workbench.modeling.EPartService;
+import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
+import org.eclipse.swt.widgets.Composite;
+import org.simantics.Simantics;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.common.request.ParametrizedRead;
+import org.simantics.db.common.request.ReadRequest;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.request.PossibleModel;
+import org.simantics.db.layer0.variable.RVI;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.db.layer0.variable.Variables;
+import org.simantics.db.service.SerialisationSupport;
+import org.simantics.ui.workbench.IResourceEditorInput;
+
+public abstract class E4ResourceEditorBase {
+
+ @Inject
+ private ESelectionService selectionService;
+
+ @Inject
+ private IEclipseContext eclipseContext;
+
+ private MPart part;
+ private boolean disposed;
+
+ private Resource resource;
+ private Variable variable;
+ private String rvi;
+ private Resource model;
+
+ private IResourceEditorInput input;
+ private E4ResourceEditorSupport support;
+
+ @Inject
+ public final void init(MPart mPart) throws NumberFormatException, DatabaseException {
+ this.part = mPart;
+ readTransientState();
+ if (resource == null && model == null && rvi == null && variable == null)
+ readPersistentState();
+
+ deriveState();
+ initImpl(part);
+
+ if (!part.getTags().contains(EPartService.REMOVE_ON_HIDE_TAG)) {
+ part.getTags().add(EPartService.REMOVE_ON_HIDE_TAG);
+ }
+ }
+
+ public void initImpl(MPart part) { }
+
+ private void deriveState() throws DatabaseException {
+ boolean deriveVariable = variable == null && model != null;
+ boolean deriveModelAndRVI = variable != null;
+ boolean deriveModel = resource != null && model == null;
+
+ if (deriveModel || deriveModelAndRVI || deriveVariable) {
+ Simantics.getSession().syncRequest(new ReadRequest() {
+
+ @Override
+ public void run(ReadGraph graph) throws DatabaseException {
+ if (deriveVariable) {
+ if (rvi != null) {
+ Variable configuration = Variables.getConfigurationContext(graph, model);
+ RVI rrvi = RVI.fromResourceFormat(graph, rvi);
+ variable = rrvi.resolve(graph, configuration);
+ }
+ // Absolute URI
+ else {
+ variable = Variables.getVariable(graph, model);
+ }
+ }
+
+ if (deriveModelAndRVI) {
+ model = Variables.getPossibleModel(graph, variable);
+ rvi = variable.getRVI(graph).toString();
+ }
+
+ if (deriveModel) {
+ model = graph.syncRequest(new PossibleModel(resource));
+ }
+ }
+ });
+ }
+
+ Map<String, Object> transientData = part.getTransientData();
+ transientData.put(E4ResourceEditorConstants.KEY_RESOURCE, resource);
+ transientData.put(E4ResourceEditorConstants.KEY_MODEL, model);
+ transientData.put(E4ResourceEditorConstants.KEY_VARIABLE, variable);
+ transientData.put(E4ResourceEditorConstants.KEY_RVI, rvi);
+
+ if (resource != null) {
+ if (model != null) {
+ input = new E4ResourceEditorInput2(resource, model, rvi);
+ } else {
+ input = new E4ResourceEditorInput(resource);
+ }
+ }
+ }
+
+ protected void activateValidation() {
+ this.support = new E4ResourceEditorSupport(this, getInputValidator());
+ this.support.activateValidation();
+ }
+
+ protected void deactivateValidation() {
+ if (support != null) {
+ support.dispose();
+ support = null;
+ }
+ }
+
+ /**
+ * Override to define your own input resource editor input validator that
+ * the view uses by default in {@link #initializeSupport()}.
+ */
+ protected ParametrizedRead<IResourceEditorInput, Boolean> getInputValidator() {
+ return null;
+ }
+
+ private void readTransientState() throws DatabaseException {
+ Map<String, Object> transientData = part.getTransientData();
+ // Read input resource
+ Object inputResource = transientData.get(E4ResourceEditorConstants.KEY_RESOURCE);
+ if (inputResource != null && inputResource instanceof Resource)
+ resource = (Resource) inputResource;
+
+ // Read input RVI
+ Object inputRVI = transientData.get(E4ResourceEditorConstants.KEY_RVI);
+ if (inputRVI != null && inputRVI instanceof String)
+ rvi = (String) inputRVI;
+
+ Object inputModel = transientData.get(E4ResourceEditorConstants.KEY_MODEL);
+ if (inputModel != null && inputModel instanceof Resource)
+ model = (Resource) inputModel;
+
+ // Read input variable
+ Object inputVariable = transientData.get(E4ResourceEditorConstants.KEY_VARIABLE);
+ if (inputVariable != null && inputVariable instanceof Variable)
+ variable = (Variable) inputVariable;
+ }
+
+ private void readPersistentState() throws NumberFormatException, DatabaseException {
+ Map<String, String> persistState = part.getPersistedState();
+ SerialisationSupport support = Simantics.getSession().getService(SerialisationSupport.class);
+ String inputResource = persistState.get(E4ResourceEditorConstants.KEY_RESOURCE);
+ if (inputResource != null)
+ resource = support.getResource(Long.parseLong(inputResource));
+
+ // Read input RVI
+ String inputRVI = persistState.get(E4ResourceEditorConstants.KEY_RVI);
+ if (inputRVI != null)
+ rvi = inputRVI;
+
+ String inputModel = persistState.get(E4ResourceEditorConstants.KEY_MODEL);
+ if (inputModel != null)
+ model = support.getResource(Long.parseLong(inputModel));
+ }
+
+ @PostConstruct
+ public void createEditor(Composite parent) {
+ createPartControl(parent);
+ }
+
+ public abstract void createPartControl(Composite parent);
+
+ @PersistState
+ public void persistState() {
+ System.out.println("persistState");
+ Map<String, String> persistedState = part.getPersistedState();
+ if (resource != null)
+ persistedState.put(E4ResourceEditorConstants.KEY_RESOURCE, Long.toString(resource.getResourceId()));
+ if (model != null)
+ persistedState.put(E4ResourceEditorConstants.KEY_MODEL, Long.toString(model.getResourceId()));
+ if (rvi != null)
+ persistedState.put(E4ResourceEditorConstants.KEY_RVI, rvi);
+ }
+
+ @Persist
+ public void persist() {
+ System.out.println("persist");
+ }
+
+ @PreDestroy
+ public void preDestroy() {
+ System.out.println("dispose");
+ disposed = true;
+ dispose();
+ deactivateValidation();
+ }
+
+ public abstract void dispose();
+
+ public boolean isDisposed() {
+ return disposed;
+ }
+
+ public abstract void setFocus();
+
+ @Focus
+ public void focus() {
+ setFocus();
+ }
+
+ public MPart getPart() {
+ return part;
+ }
+
+ public Resource getInputResource() {
+ return resource;
+ }
+
+ public Variable getInputVariable() {
+ return variable;
+ }
+
+ public String getInputRVI() {
+ return rvi;
+ }
+
+ public Resource getInputModelResource() {
+ return model;
+ }
+
+ public Resource assertInputModelResource() {
+ if (model == null)
+ throw new NullPointerException("Input model resource not defined, input resource is " + resource);
+ return model;
+ }
+
+ public IResourceEditorInput getResourceInput() {
+ return input;
+ }
+
+ public ESelectionService getSelectionService() {
+ return selectionService;
+ }
+
+ public IEclipseContext getContext() {
+ return eclipseContext;
+ }
+
+}