]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.debug.ui/src/org/simantics/debug/ui/GraphDebuggerView.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.debug.ui / src / org / simantics / debug / ui / GraphDebuggerView.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *     Semantum Oy - index based searching and graph manipulation (#4255)\r
12  *******************************************************************************/\r
13 package org.simantics.debug.ui;\r
14 \r
15 import org.eclipse.core.runtime.IStatus;\r
16 import org.eclipse.core.runtime.Status;\r
17 import org.eclipse.jface.action.Action;\r
18 import org.eclipse.jface.action.IAction;\r
19 import org.eclipse.jface.action.IToolBarManager;\r
20 import org.eclipse.jface.action.Separator;\r
21 import org.eclipse.swt.SWT;\r
22 import org.eclipse.swt.widgets.Composite;\r
23 import org.eclipse.ui.IActionBars;\r
24 import org.eclipse.ui.ISharedImages;\r
25 import org.eclipse.ui.PlatformUI;\r
26 import org.eclipse.ui.part.ViewPart;\r
27 import org.simantics.Simantics;\r
28 import org.simantics.db.Resource;\r
29 import org.simantics.db.Session;\r
30 import org.simantics.db.exception.DatabaseException;\r
31 import org.simantics.debug.ui.internal.Activator;\r
32 import org.simantics.debug.ui.internal.DebugUtils;\r
33 import org.simantics.ui.SimanticsUI;\r
34 import org.simantics.ui.workbench.ResourceInput;\r
35 import org.simantics.utils.ui.BundleUtils;\r
36 import org.simantics.utils.ui.ErrorLogger;\r
37 import org.simantics.utils.ui.LayoutUtils;\r
38 \r
39 public class GraphDebuggerView extends ViewPart {\r
40 \r
41     public static final String VIEW_ID              = "org.simantics.debug.graphDebugger";\r
42 \r
43 //    private final boolean      DEFAULT_RECYCLE_VIEW = true;\r
44 \r
45     private ResourceInput      input;\r
46 \r
47     private Session            session;\r
48 \r
49     private GraphDebugger      debugger;\r
50 \r
51 //    private IAction            recycleToggle;\r
52     private IAction            backAction;\r
53     private IAction            forwardAction;\r
54     private IAction            refreshAction;\r
55     private IAction            findAction;\r
56     private IAction            addStatementAction;\r
57     private IAction            addResourceAction;\r
58     private IAction            homeAction;\r
59 \r
60     @Override\r
61     public void createPartControl(Composite parent) {\r
62 //      System.out.println("koss: " + getViewSite().getSecondaryId());\r
63         session = SimanticsUI.getSession();\r
64 \r
65         // Initialize input\r
66         String sid = getViewSite().getSecondaryId();\r
67         Resource r = null;\r
68         if (sid != null) {\r
69             input = ResourceInput.unmarshall(sid);\r
70             try {\r
71                 r = input.toResource(session);\r
72             } catch (DatabaseException e) {\r
73                 ErrorLogger.defaultLogError(e);\r
74             }\r
75         }\r
76 \r
77         // Create UI\r
78         parent.setLayout(LayoutUtils.createNoBorderGridLayout(1));\r
79         debugger = new GraphDebugger(parent, SWT.NONE, session, r, getSite());\r
80         debugger.defaultInitializeUI();\r
81 \r
82         // Contribute actions\r
83         makeActions();\r
84         contributeActions(getViewSite().getActionBars());\r
85         updateActionStates();\r
86     }\r
87 \r
88     @Override\r
89     public void dispose() {\r
90         super.dispose();\r
91     }\r
92 \r
93     private void makeActions() {\r
94 //        recycleToggle = new RecycleToggle();\r
95 //        recycleToggle.setChecked(DEFAULT_RECYCLE_VIEW);\r
96 \r
97         backAction = new BackAction();\r
98         forwardAction = new ForwardAction();\r
99         refreshAction = new RefreshAction();\r
100         findAction = new FindAction();\r
101         addStatementAction = new AddStatementAction();\r
102         addResourceAction = new AddResourceAction();\r
103         homeAction = new HomeAction();\r
104     }\r
105 \r
106     private void contributeActions(IActionBars actionBars) {\r
107         IToolBarManager toolBar = actionBars.getToolBarManager();\r
108         toolBar.add(backAction);\r
109         toolBar.add(forwardAction);\r
110         toolBar.add(new Separator());\r
111         toolBar.add(refreshAction);\r
112         toolBar.add(new Separator());\r
113         toolBar.add(findAction);\r
114         toolBar.add(addStatementAction);\r
115         toolBar.add(addResourceAction);\r
116         toolBar.add(new Separator());\r
117         toolBar.add(homeAction);\r
118 \r
119 //        toolBar.add(recycleToggle);\r
120     }\r
121 \r
122     @Override\r
123     public void setFocus() {\r
124         if (debugger != null)\r
125             debugger.setFocus();\r
126     }\r
127 \r
128     private void refreshBrowser() {\r
129         debugger.refreshBrowser();\r
130     }\r
131 \r
132 //    class RecycleToggle extends Action {\r
133 //        public RecycleToggle() {\r
134 //            super("Open New Views", Action.AS_CHECK_BOX);\r
135 //            setImageDescriptor(Activator.getImageDescriptor("icons/reload.gif"));\r
136 //            setToolTipText("Toggles whether or not to open new views when resource links are clicked.");\r
137 //        }\r
138 //    }\r
139 //\r
140     class RefreshAction extends Action {\r
141         public RefreshAction() {\r
142             super("Refresh", BundleUtils.getImageDescriptorFromPlugin(SimanticsUI.PLUGIN_ID, "icons/refresh.gif"));\r
143             setToolTipText("Refresh");\r
144         }\r
145         @Override\r
146         public void run() {\r
147             refreshBrowser();\r
148         }\r
149     }\r
150 \r
151     class BackAction extends Action {\r
152         public BackAction() {\r
153             super("Back", Action.AS_PUSH_BUTTON);\r
154             setToolTipText("Back");\r
155             setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_BACK));\r
156             setDisabledImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_BACK_DISABLED));\r
157         }\r
158         @Override\r
159         public void run() {\r
160             back();\r
161         }\r
162     }\r
163 \r
164     class ForwardAction extends Action {\r
165         public ForwardAction() {\r
166             super("Forward", Action.AS_PUSH_BUTTON);\r
167             setToolTipText("Forward");\r
168             setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD));\r
169             setDisabledImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_FORWARD_DISABLED));\r
170         }\r
171         @Override\r
172         public void run() {\r
173             forward();\r
174         }\r
175     }\r
176 \r
177     class HomeAction extends Action {\r
178         public HomeAction() {\r
179             super("Home", Action.AS_PUSH_BUTTON);\r
180             setToolTipText("Navigate to root library");\r
181             setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ETOOL_HOME_NAV));\r
182             setDisabledImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_ETOOL_HOME_NAV_DISABLED));\r
183         }\r
184         @Override\r
185         public void run() {\r
186             navigateHome();\r
187         }\r
188     }\r
189 \r
190     class FindAction extends Action {\r
191         public FindAction() {\r
192             super("Find", BundleUtils.getImageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/cog_blue.png"));\r
193             setToolTipText("Find Resource");\r
194         }\r
195         @Override\r
196         public void run() {\r
197             DebugUtils.find(Simantics.getSession(), debugger);\r
198         }\r
199     }\r
200 \r
201     class AddStatementAction extends Action {\r
202         public AddStatementAction() {\r
203             super("AddStatement", BundleUtils.getImageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/cog_add.png"));\r
204             setToolTipText("Add Statement Between Existing Resources");\r
205         }\r
206         @Override\r
207         public void run() {\r
208             try {\r
209                 DebugUtils.addStatement(Simantics.getSession(), debugger);\r
210             } catch (DatabaseException e) {\r
211                 Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e));\r
212             }\r
213         }\r
214     }\r
215 \r
216     class AddResourceAction extends Action {\r
217         public AddResourceAction() {\r
218             super("AddResource", BundleUtils.getImageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/cog_add.png"));\r
219             setToolTipText("Add New Related Resource");\r
220         }\r
221         @Override\r
222         public void run() {\r
223             try {\r
224                 DebugUtils.addResource(Simantics.getSession(), debugger);\r
225             } catch (DatabaseException e) {\r
226                 Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e));\r
227             }\r
228         }\r
229     }\r
230 \r
231     private void back() {\r
232         debugger.back();\r
233     }\r
234 \r
235     private void forward() {\r
236         debugger.forward();\r
237     }\r
238 \r
239     private void navigateHome() {\r
240         Resource rootLibrary = session.getRootLibrary();\r
241         debugger.changeLocation(rootLibrary);\r
242     }\r
243 \r
244     private void updateActionStates() {\r
245         backAction.setEnabled(debugger.hasBackHistory());\r
246         forwardAction.setEnabled(debugger.hasForwardHistory());\r
247     }\r
248 \r
249 }\r