]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/view/ActiveRuntimeDiagramInputSource.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.diagram.profile / src / org / simantics / diagram / profile / view / ActiveRuntimeDiagramInputSource.java
index 3d143e6b1a64058835564c14f293547c8f89e9b0..fb07993ac7894940a6fa522243595470a16837bb 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2011 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.diagram.profile.view;\r
-\r
-import org.eclipse.swt.widgets.Display;\r
-import org.eclipse.ui.IEditorPart;\r
-import org.eclipse.ui.IEditorReference;\r
-import org.eclipse.ui.IPartListener2;\r
-import org.eclipse.ui.IPartService;\r
-import org.eclipse.ui.IWorkbenchPage;\r
-import org.eclipse.ui.IWorkbenchPart;\r
-import org.eclipse.ui.IWorkbenchPartReference;\r
-import org.eclipse.ui.IWorkbenchSite;\r
-import org.eclipse.ui.IWorkbenchWindow;\r
-import org.eclipse.ui.PlatformUI;\r
-import org.eclipse.ui.part.EditorPart;\r
-import org.simantics.Simantics;\r
-import org.simantics.browsing.ui.GraphExplorer;\r
-import org.simantics.browsing.ui.common.ErrorLogger;\r
-import org.simantics.browsing.ui.graph.impl.InputSourceListener;\r
-import org.simantics.browsing.ui.graph.impl.ObservableInputSource;\r
-import org.simantics.browsing.ui.graph.impl.WorkbenchSessionContextInputSource;\r
-import org.simantics.db.Disposable;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.common.request.UniqueRead;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.management.ISessionContext;\r
-import org.simantics.db.procedure.Procedure;\r
-import org.simantics.diagram.stubs.DiagramResource;\r
-import org.simantics.utils.ObjectUtils;\r
-import org.simantics.utils.ui.SWTUtils;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class ActiveRuntimeDiagramInputSource implements WorkbenchSessionContextInputSource, ObservableInputSource, IPartListener2, Disposable {\r
-\r
-    protected Display             display;\r
-    protected IWorkbenchPart      ownerPart;\r
-    protected IPartService        service;\r
-    protected IEditorPart         activeEditor;\r
-    protected Resource            activeRuntimeDiagram;\r
-    protected InputSourceListener listener;\r
-    protected boolean             ownerIsVisible = true;\r
-    protected Resource            lastInputResource;\r
-\r
-    @Override\r
-    public void init(IWorkbenchSite site, IWorkbenchPart part) {\r
-        this.display = site.getShell().getDisplay();\r
-        this.ownerPart = part;\r
-        attachToWorkbench();\r
-    }\r
-\r
-    /**\r
-     * @thread SWT\r
-     */\r
-    protected void attachToWorkbench() {\r
-        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();\r
-        if (window == null)\r
-            return;\r
-        service = window.getPartService();\r
-        service.addPartListener(this);\r
-\r
-        IWorkbenchPage activePage = window.getActivePage();\r
-        if (activePage == null)\r
-            return;\r
-        \r
-        IEditorPart activeEditor = activePage.getActiveEditor();\r
-        if (activeEditor != null)\r
-            editorActivated(activeEditor);\r
-    }\r
-\r
-    /**\r
-     * @thread SWT\r
-     */\r
-    @Override\r
-    public void dispose() {\r
-        if (service != null)\r
-            service.removePartListener(this);\r
-        service = null;\r
-        activeEditor = null;\r
-        activeRuntimeDiagram = null;\r
-        listener = null;\r
-        ownerPart = null;\r
-        display = null;\r
-    }\r
-\r
-    protected void fireIfInputChanged(Object oldSelection, Object newSelection) {\r
-        InputSourceListener l = listener;\r
-        if (l != null)\r
-            if (!ObjectUtils.objectEquals(oldSelection, newSelection))\r
-                l.inputChanged(this);\r
-    }\r
-\r
-    @Override\r
-    public Object get(ISessionContext ctx) {\r
-        return activeRuntimeDiagram != null ? activeRuntimeDiagram : GraphExplorer.EMPTY_INPUT;\r
-    }\r
-    \r
-    @Override\r
-    public IWorkbenchPart getProvider() {\r
-       return activeEditor;\r
-    }\r
-\r
-    @Override\r
-    public void setListener(InputSourceListener listener) {\r
-        this.listener = listener;\r
-    }\r
-\r
-    private static class InputTransformation extends UniqueRead<Resource> {\r
-\r
-        private Resource resource;\r
-        private Resource defaultResult;\r
-\r
-        public InputTransformation(Resource input, Resource defaultResult) {\r
-            this.resource = input;\r
-            this.defaultResult = defaultResult;\r
-        }\r
-\r
-        @Override\r
-        public Resource perform(ReadGraph graph) throws DatabaseException {\r
-            if (graph.isInstanceOf(resource, DiagramResource.getInstance(graph).RuntimeDiagram))\r
-                return resource;\r
-            if (!graph.hasStatement(resource))\r
-                return null;\r
-\r
-//            if (defaultResult != null && !graph.hasStatement(defaultResult))\r
-//                return null;\r
-\r
-            return defaultResult;\r
-        }\r
-\r
-    }\r
-\r
-    class InputProcedure implements Procedure<Resource> {\r
-        @Override\r
-        public void execute(Resource result) {\r
-            Display d = display;\r
-            if (d != null)\r
-                SWTUtils.asyncExec(d, () -> changeInput(result));\r
-        }\r
-        @Override\r
-        public void exception(Throwable t) {\r
-            ErrorLogger.defaultLogError(t);\r
-        }\r
-    }\r
-\r
-    private InputProcedure inputProcedure = new InputProcedure();\r
-\r
-    protected void testAndChangeInput(Resource resource) {\r
-        Session session = Simantics.peekSession();\r
-        if (session != null && resource != null) {\r
-            session.asyncRequest(\r
-                    new InputTransformation(resource, activeRuntimeDiagram),\r
-                    inputProcedure);\r
-        } else {\r
-            changeInput(null);\r
-        }\r
-    }\r
-\r
-    protected void editorActivated(IEditorPart part) {\r
-        Resource resource = part.getAdapter(Resource.class); \r
-        lastInputResource = resource;\r
-        if (ownerIsVisible) {\r
-            testAndChangeInput(resource);\r
-        }\r
-    }\r
-\r
-    private boolean allEditorsClosed(IEditorPart forWindowOfPart) {\r
-        for (IWorkbenchPage page : forWindowOfPart.getEditorSite().getWorkbenchWindow().getPages()) {\r
-            IEditorReference[] editors = page.getEditorReferences();\r
-            if (editors.length > 0)\r
-                return false;\r
-        }\r
-        return true;\r
-    }\r
-\r
-    protected void activeEditorClosed() {\r
-        if (allEditorsClosed(activeEditor))\r
-            changeInput(null);\r
-    }\r
-\r
-    private void changeInput(Resource newInput) {\r
-        Resource oldInput = activeRuntimeDiagram;\r
-        this.activeRuntimeDiagram = newInput;\r
-        fireIfInputChanged(oldInput, newInput != null ? newInput : GraphExplorer.EMPTY_INPUT);\r
-    }\r
-\r
-    @Override\r
-    public void partActivated(IWorkbenchPartReference partRef) {\r
-        //System.out.println("partActivated1: " + partRef);\r
-        if (partRef instanceof IEditorReference) {\r
-            IEditorPart part = ((IEditorReference) partRef).getEditor(false);\r
-            //System.out.println("partActivated2: " + part);\r
-            if (part instanceof EditorPart) {\r
-                editorActivated((IEditorPart) part);\r
-            }\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void partBroughtToTop(IWorkbenchPartReference partRef) {\r
-        //System.out.println("partBroughtToTop: " + partRef);\r
-    }\r
-\r
-    @Override\r
-    public void partClosed(IWorkbenchPartReference partRef) {\r
-        //System.out.println("partClosed1: " + partRef);\r
-        if (partRef instanceof IEditorReference) {\r
-            IEditorPart part = ((IEditorReference) partRef).getEditor(false);\r
-            //System.out.println("partClosed2: " + part);\r
-            if (part == activeEditor) {\r
-                activeEditorClosed();\r
-            }\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void partDeactivated(IWorkbenchPartReference partRef) {\r
-        //System.out.println("partDeactivated: " + partRef);\r
-    }\r
-\r
-    @Override\r
-    public void partOpened(IWorkbenchPartReference partRef) {\r
-        //System.out.println("partOpened: " + partRef);\r
-    }\r
-\r
-    @Override\r
-    public void partInputChanged(IWorkbenchPartReference partRef) {\r
-        //System.out.println("partInputChanged: " + partRef);\r
-    }\r
-\r
-    @Override\r
-    public void partHidden(IWorkbenchPartReference partRef) {\r
-        //System.out.println("partHidden: " + partRef);\r
-        IWorkbenchPart part = partRef.getPart(false);\r
-        if (ownerPart != null && ownerPart.equals(part)) {\r
-            ownerIsVisible = false;\r
-        }\r
-    }\r
-\r
-    @Override\r
-    public void partVisible(IWorkbenchPartReference partRef) {\r
-        //System.out.println("partVisible: " + partRef);\r
-        IWorkbenchPart part = partRef.getPart(false);\r
-        if (ownerPart != null && ownerPart.equals(part)) {\r
-            ownerIsVisible = true;\r
-            testAndChangeInput(lastInputResource);\r
-        }\r
-    }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2011 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.diagram.profile.view;
+
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IPartService;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.IWorkbenchSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.EditorPart;
+import org.simantics.Simantics;
+import org.simantics.browsing.ui.GraphExplorer;
+import org.simantics.browsing.ui.common.ErrorLogger;
+import org.simantics.browsing.ui.graph.impl.InputSourceListener;
+import org.simantics.browsing.ui.graph.impl.ObservableInputSource;
+import org.simantics.browsing.ui.graph.impl.WorkbenchSessionContextInputSource;
+import org.simantics.db.Disposable;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.Session;
+import org.simantics.db.common.request.UniqueRead;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.management.ISessionContext;
+import org.simantics.db.procedure.Procedure;
+import org.simantics.diagram.stubs.DiagramResource;
+import org.simantics.utils.ObjectUtils;
+import org.simantics.utils.ui.SWTUtils;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class ActiveRuntimeDiagramInputSource implements WorkbenchSessionContextInputSource, ObservableInputSource, IPartListener2, Disposable {
+
+    protected Display             display;
+    protected IWorkbenchPart      ownerPart;
+    protected IPartService        service;
+    protected IEditorPart         activeEditor;
+    protected Resource            activeRuntimeDiagram;
+    protected InputSourceListener listener;
+    protected boolean             ownerIsVisible = true;
+    protected Resource            lastInputResource;
+
+    @Override
+    public void init(IWorkbenchSite site, IWorkbenchPart part) {
+        this.display = site.getShell().getDisplay();
+        this.ownerPart = part;
+        attachToWorkbench();
+    }
+
+    /**
+     * @thread SWT
+     */
+    protected void attachToWorkbench() {
+        IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+        if (window == null)
+            return;
+        service = window.getPartService();
+        service.addPartListener(this);
+
+        IWorkbenchPage activePage = window.getActivePage();
+        if (activePage == null)
+            return;
+        
+        IEditorPart activeEditor = activePage.getActiveEditor();
+        if (activeEditor != null)
+            editorActivated(activeEditor);
+    }
+
+    /**
+     * @thread SWT
+     */
+    @Override
+    public void dispose() {
+        if (service != null)
+            service.removePartListener(this);
+        service = null;
+        activeEditor = null;
+        activeRuntimeDiagram = null;
+        listener = null;
+        ownerPart = null;
+        display = null;
+    }
+
+    protected void fireIfInputChanged(Object oldSelection, Object newSelection) {
+        InputSourceListener l = listener;
+        if (l != null)
+            if (!ObjectUtils.objectEquals(oldSelection, newSelection))
+                l.inputChanged(this);
+    }
+
+    @Override
+    public Object get(ISessionContext ctx) {
+        return activeRuntimeDiagram != null ? activeRuntimeDiagram : GraphExplorer.EMPTY_INPUT;
+    }
+    
+    @Override
+    public IWorkbenchPart getProvider() {
+       return activeEditor;
+    }
+
+    @Override
+    public void setListener(InputSourceListener listener) {
+        this.listener = listener;
+    }
+
+    private static class InputTransformation extends UniqueRead<Resource> {
+
+        private Resource resource;
+        private Resource defaultResult;
+
+        public InputTransformation(Resource input, Resource defaultResult) {
+            this.resource = input;
+            this.defaultResult = defaultResult;
+        }
+
+        @Override
+        public Resource perform(ReadGraph graph) throws DatabaseException {
+            if (graph.isInstanceOf(resource, DiagramResource.getInstance(graph).RuntimeDiagram))
+                return resource;
+            if (!graph.hasStatement(resource))
+                return null;
+
+//            if (defaultResult != null && !graph.hasStatement(defaultResult))
+//                return null;
+
+            return defaultResult;
+        }
+
+    }
+
+    class InputProcedure implements Procedure<Resource> {
+        @Override
+        public void execute(Resource result) {
+            Display d = display;
+            if (d != null)
+                SWTUtils.asyncExec(d, () -> changeInput(result));
+        }
+        @Override
+        public void exception(Throwable t) {
+            ErrorLogger.defaultLogError(t);
+        }
+    }
+
+    private InputProcedure inputProcedure = new InputProcedure();
+
+    protected void testAndChangeInput(Resource resource) {
+        Session session = Simantics.peekSession();
+        if (session != null && resource != null) {
+            session.asyncRequest(
+                    new InputTransformation(resource, activeRuntimeDiagram),
+                    inputProcedure);
+        } else {
+            changeInput(null);
+        }
+    }
+
+    protected void editorActivated(IEditorPart part) {
+        Resource resource = part.getAdapter(Resource.class); 
+        lastInputResource = resource;
+        if (ownerIsVisible) {
+            testAndChangeInput(resource);
+        }
+    }
+
+    private boolean allEditorsClosed(IEditorPart forWindowOfPart) {
+        for (IWorkbenchPage page : forWindowOfPart.getEditorSite().getWorkbenchWindow().getPages()) {
+            IEditorReference[] editors = page.getEditorReferences();
+            if (editors.length > 0)
+                return false;
+        }
+        return true;
+    }
+
+    protected void activeEditorClosed() {
+        if (allEditorsClosed(activeEditor))
+            changeInput(null);
+    }
+
+    private void changeInput(Resource newInput) {
+        Resource oldInput = activeRuntimeDiagram;
+        this.activeRuntimeDiagram = newInput;
+        fireIfInputChanged(oldInput, newInput != null ? newInput : GraphExplorer.EMPTY_INPUT);
+    }
+
+    @Override
+    public void partActivated(IWorkbenchPartReference partRef) {
+        //System.out.println("partActivated1: " + partRef);
+        if (partRef instanceof IEditorReference) {
+            IEditorPart part = ((IEditorReference) partRef).getEditor(false);
+            //System.out.println("partActivated2: " + part);
+            if (part instanceof EditorPart) {
+                editorActivated((IEditorPart) part);
+            }
+        }
+    }
+
+    @Override
+    public void partBroughtToTop(IWorkbenchPartReference partRef) {
+        //System.out.println("partBroughtToTop: " + partRef);
+    }
+
+    @Override
+    public void partClosed(IWorkbenchPartReference partRef) {
+        //System.out.println("partClosed1: " + partRef);
+        if (partRef instanceof IEditorReference) {
+            IEditorPart part = ((IEditorReference) partRef).getEditor(false);
+            //System.out.println("partClosed2: " + part);
+            if (part == activeEditor) {
+                activeEditorClosed();
+            }
+        }
+    }
+
+    @Override
+    public void partDeactivated(IWorkbenchPartReference partRef) {
+        //System.out.println("partDeactivated: " + partRef);
+    }
+
+    @Override
+    public void partOpened(IWorkbenchPartReference partRef) {
+        //System.out.println("partOpened: " + partRef);
+    }
+
+    @Override
+    public void partInputChanged(IWorkbenchPartReference partRef) {
+        //System.out.println("partInputChanged: " + partRef);
+    }
+
+    @Override
+    public void partHidden(IWorkbenchPartReference partRef) {
+        //System.out.println("partHidden: " + partRef);
+        IWorkbenchPart part = partRef.getPart(false);
+        if (ownerPart != null && ownerPart.equals(part)) {
+            ownerIsVisible = false;
+        }
+    }
+
+    @Override
+    public void partVisible(IWorkbenchPartReference partRef) {
+        //System.out.println("partVisible: " + partRef);
+        IWorkbenchPart part = partRef.getPart(false);
+        if (ownerPart != null && ownerPart.equals(part)) {
+            ownerIsVisible = true;
+            testAndChangeInput(lastInputResource);
+        }
+    }
+
+}