]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.graph/src/org/simantics/spreadsheet/graph/SaveSpreadsheetStateDialog.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.graph / src / org / simantics / spreadsheet / graph / SaveSpreadsheetStateDialog.java
1 package org.simantics.spreadsheet.graph;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 import java.util.Set;\r
7 \r
8 import org.eclipse.jface.layout.GridDataFactory;\r
9 import org.eclipse.swt.SWT;\r
10 import org.eclipse.swt.events.ModifyEvent;\r
11 import org.eclipse.swt.events.ModifyListener;\r
12 import org.eclipse.swt.events.SelectionAdapter;\r
13 import org.eclipse.swt.events.SelectionEvent;\r
14 import org.eclipse.swt.layout.GridData;\r
15 import org.eclipse.swt.layout.GridLayout;\r
16 import org.eclipse.swt.widgets.Combo;\r
17 import org.eclipse.swt.widgets.Composite;\r
18 import org.eclipse.swt.widgets.Label;\r
19 import org.eclipse.swt.widgets.Text;\r
20 import org.eclipse.ui.IWorkbenchSite;\r
21 import org.simantics.Simantics;\r
22 import org.simantics.browsing.ui.BuiltinKeys;\r
23 import org.simantics.browsing.ui.NodeContext;\r
24 import org.simantics.browsing.ui.graph.impl.SessionContextInputSource;\r
25 import org.simantics.browsing.ui.swt.GraphExplorerDialog2;\r
26 import org.simantics.browsing.ui.swt.widgets.GraphExplorerComposite;\r
27 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
28 import org.simantics.db.ReadGraph;\r
29 import org.simantics.db.Resource;\r
30 import org.simantics.db.common.request.PossibleIndexRoot;\r
31 import org.simantics.db.common.request.UniqueRead;\r
32 import org.simantics.db.exception.DatabaseException;\r
33 import org.simantics.db.layer0.request.IsLinkedTo;\r
34 import org.simantics.db.layer0.util.Layer0Utils;\r
35 import org.simantics.db.management.ISessionContext;\r
36 import org.simantics.utils.datastructures.Pair;\r
37 \r
38 public class SaveSpreadsheetStateDialog extends GraphExplorerDialog2 {\r
39 \r
40     private static final String SELECT_CUSTOM = "Select custom..";\r
41     \r
42     private Combo parentSelector;\r
43     private Pair<String, Resource>[] pairs;\r
44     private String[] parents;\r
45 \r
46     private Text stateName;\r
47 \r
48     private String currentItem;\r
49     private String currentStateName;\r
50     \r
51     private List<Resource> result;\r
52     \r
53     public SaveSpreadsheetStateDialog(IWorkbenchSite site, String title, Pair<String, Resource>[] pairs) {\r
54         super(site, title);\r
55         this.pairs = pairs;\r
56         \r
57         Resource book = pairs[0].second;\r
58         Resource context = pairs[1].second;\r
59         \r
60         try {\r
61             result = Simantics.getSession().syncRequest(new UniqueRead<List<Resource>>() {\r
62 \r
63                 @Override\r
64                 public List<Resource> perform(ReadGraph graph) throws DatabaseException {\r
65                     Resource bookINdex = graph.syncRequest(new PossibleIndexRoot(book));\r
66                     Resource contextIndex = graph.syncRequest(new PossibleIndexRoot(context)); \r
67                     \r
68                     List<Resource> result = new ArrayList<>();\r
69                     Set<Resource> indexRoots = Layer0Utils.listIndexRoots(graph);\r
70                     for (Resource indexRoot : indexRoots) {\r
71                         if (graph.syncRequest(new IsLinkedTo(indexRoot, bookINdex)) && graph.syncRequest(new IsLinkedTo(indexRoot, contextIndex))) {\r
72                             result.add(indexRoot);\r
73                         }\r
74                     }\r
75                     return result;\r
76                 }\r
77             });\r
78         } catch (DatabaseException e) {\r
79             e.printStackTrace();\r
80         }\r
81         \r
82         String[] newParents = new String[pairs.length + 1];\r
83         for (int i = 0; i < pairs.length; i++) {\r
84             newParents[i] = pairs[i].first;\r
85         }\r
86         newParents[pairs.length] = SELECT_CUSTOM;\r
87         this.parents = newParents;\r
88     }\r
89 \r
90     @Override\r
91     public Set<String> getBrowseContexts() {\r
92         return Collections.singleton("http://www.simantics.org/Project-1.2/ProjectBrowseContext");\r
93     }\r
94     \r
95     @Override\r
96     protected SessionContextInputSource getInputSource() {\r
97         return super.getInputSource();\r
98     }\r
99 \r
100     @Override\r
101     protected void createControls(Composite body, ISessionContext context, WidgetSupport support) {\r
102         \r
103         Composite upperComposite = new Composite(body, SWT.NONE);\r
104         GridLayout layout = new GridLayout(2, false);\r
105         upperComposite.setLayout(layout);\r
106         GridDataFactory.fillDefaults().grab(true, true).applyTo(upperComposite);\r
107         \r
108         Composite explorerComposite = new Composite(body, SWT.NONE);\r
109         explorerComposite.setLayout(new GridLayout());\r
110         GridDataFactory.fillDefaults().grab(true, true).applyTo(explorerComposite);\r
111         \r
112         Label parentLabel = new Label(upperComposite, SWT.NONE);\r
113         parentLabel.setText("Select parent: ");\r
114         \r
115         parentSelector = new Combo(upperComposite, SWT.READ_ONLY);\r
116         parentSelector.setItems(parents);\r
117         parentSelector.select(0);\r
118         \r
119         GridDataFactory.fillDefaults().grab(true, false).applyTo(parentSelector);\r
120         \r
121         parentSelector.addSelectionListener(new SelectionAdapter() {\r
122             \r
123             @Override\r
124             public void widgetSelected(SelectionEvent e) {\r
125                 hideOrShowGE();\r
126             }\r
127             \r
128             @Override\r
129             public void widgetDefaultSelected(SelectionEvent e) {\r
130                 widgetSelected(e);\r
131             }\r
132         });\r
133         \r
134         Label stateNameLabel = new Label(upperComposite, SWT.NONE);\r
135         stateNameLabel.setText("Name of the state: ");\r
136         GridDataFactory.fillDefaults().grab(false, false).applyTo(stateNameLabel);\r
137         \r
138         stateName = new Text(upperComposite, SWT.NONE);\r
139         \r
140         stateName.addModifyListener(new ModifyListener() {\r
141             \r
142             @Override\r
143             public void modifyText(ModifyEvent e) {\r
144                 currentStateName = stateName.getText();\r
145             }\r
146         });\r
147         \r
148         GridDataFactory.fillDefaults().grab(true, false).applyTo(stateName);\r
149         \r
150         super.createControls(explorerComposite, context, support);\r
151         \r
152         hideOrShowGE();\r
153     }\r
154 \r
155     private void hideOrShowGE() {\r
156         int selection = parentSelector.getSelectionIndex();\r
157         currentItem = parentSelector.getItem(selection);\r
158         \r
159         GraphExplorerComposite composite = getGraphExplorerComposite();\r
160         GridData data = (GridData) composite.getLayoutData();\r
161         \r
162         if (currentItem.equals(SELECT_CUSTOM))\r
163             data.exclude = false;\r
164         else\r
165             data.exclude = true;\r
166         \r
167          \r
168         composite.setLayoutData(data);\r
169         composite.setVisible(!data.exclude);\r
170         composite.getParent().pack();\r
171         composite.getParent().layout();\r
172         composite.getParent().getParent().pack();\r
173         composite.getParent().getParent().layout();\r
174         composite.getParent().getParent().getParent().getParent().getParent();\r
175         composite.getShell().pack();\r
176         composite.getShell().layout();\r
177 //        explorerComposite.pack();\r
178 //        explorerComposite.getShell().layout(false);\r
179     }\r
180     \r
181     \r
182     \r
183     @Override\r
184     public Object[] getSelection() {\r
185         if (currentItem.equals(SELECT_CUSTOM)) {\r
186             Object[] selection = super.getSelection();\r
187             NodeContext context = (NodeContext)selection[0];\r
188             Object obj = context.getConstant(BuiltinKeys.INPUT);\r
189             return new Object[] { Pair.make(obj, currentStateName) };\r
190         } else {\r
191             for (int i = 0; i < pairs.length; i++) {\r
192                 Pair<String, Resource> p = pairs[i];\r
193                 if (p.first.equals(currentItem)) {\r
194                     return new Object[] {Pair.make(p.second, currentStateName) };\r
195                 }\r
196             }\r
197         }\r
198         return null;\r
199     }\r
200     \r
201 }\r