]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.spreadsheet.ui/src/org/simantics/spreadsheet/ui/editor/SpreadsheetEditor2.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.spreadsheet.ui / src / org / simantics / spreadsheet / ui / editor / SpreadsheetEditor2.java
1 package org.simantics.spreadsheet.ui.editor;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Collections;\r
5 import java.util.TreeMap;\r
6 \r
7 import org.eclipse.swt.SWT;\r
8 import org.eclipse.swt.layout.GridData;\r
9 import org.eclipse.swt.widgets.Composite;\r
10 import org.eclipse.ui.contexts.IContextService;\r
11 import org.simantics.databoard.Bindings;\r
12 import org.simantics.db.ReadGraph;\r
13 import org.simantics.db.Resource;\r
14 import org.simantics.db.common.request.UnaryRead;\r
15 import org.simantics.db.exception.DatabaseException;\r
16 import org.simantics.db.layer0.request.VariableName;\r
17 import org.simantics.db.layer0.request.VariableRead;\r
18 import org.simantics.db.layer0.request.VariableRepresents;\r
19 import org.simantics.db.layer0.request.VariableURI;\r
20 import org.simantics.db.layer0.variable.Variable;\r
21 import org.simantics.db.request.Read;\r
22 import org.simantics.layer0.Layer0;\r
23 import org.simantics.selectionview.StandardPropertyPage;\r
24 import org.simantics.spreadsheet.graph.GraphUI;\r
25 import org.simantics.spreadsheet.graph.SpreadsheetGraphUtils;\r
26 import org.simantics.spreadsheet.resource.SpreadsheetResource;\r
27 import org.simantics.spreadsheet.ui.Spreadsheet;\r
28 import org.simantics.spreadsheet.util.SpreadsheetUtils;\r
29 import org.simantics.ui.workbench.IPropertyPage;\r
30 import org.simantics.ui.workbench.ResourceEditorPart2;\r
31 import org.simantics.utils.ui.LayoutUtils;\r
32 import org.simantics.utils.ui.jface.ActiveSelectionProvider;\r
33 \r
34 public class SpreadsheetEditor2 extends ResourceEditorPart2 {\r
35 \r
36     public static final boolean EXCEL = false;\r
37     public static final String EDITOR_ID = "org.simantics.spreadsheet.ui.editor2";\r
38 \r
39     private Spreadsheet spreadsheet;\r
40     private final ActiveSelectionProvider selectionProvider = new ActiveSelectionProvider();\r
41     private ExcelLink excelLink;\r
42     private GraphUI ui;\r
43 \r
44     public Spreadsheet getSpreadsheet() {\r
45         return spreadsheet;\r
46     }\r
47 \r
48     @Override\r
49     public void createPartControl(Composite parent) {\r
50 \r
51         // Create UI\r
52         parent.setLayout(LayoutUtils.createNoBorderGridLayout(1));\r
53         parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));\r
54 \r
55         ui = new GraphUI(getSession());\r
56 \r
57         try {\r
58                 \r
59             Variable bookVariable = getSession().syncRequest(new Read<Variable>() {\r
60 \r
61                 @Override\r
62                 public Variable perform(ReadGraph graph) throws DatabaseException {\r
63                         \r
64                         Resource book = getResourceInput2().getResource();\r
65                         Variable withContext = SpreadsheetUtils.getBookVariable(graph, book); \r
66                         return withContext; \r
67 \r
68                 }\r
69 \r
70             });\r
71             \r
72 //            getSession().syncRequest(new VariableRead<Variable>(bookVariable) {\r
73 //\r
74 //                @Override\r
75 //                public Variable perform(ReadGraph graph) throws DatabaseException {\r
76 //                    SpreadsheetGraphUtils.fullSynchronization(graph, variable);\r
77 //                    return variable;\r
78 //                }\r
79 //\r
80 //            });\r
81             \r
82             Variable sheetVariable = getSession().syncRequest(new VariableRead<Variable>(bookVariable) {\r
83 \r
84                 @Override\r
85                 public Variable perform(ReadGraph graph) throws DatabaseException {\r
86                         \r
87                         SpreadsheetResource SR = SpreadsheetResource.getInstance(graph);\r
88                         Collection<Variable> children = variable.getChildren(graph);\r
89                         if(children.isEmpty()) return null;\r
90                         \r
91                         TreeMap<String,Variable> names = new TreeMap<String,Variable>();\r
92                         for(Variable child : children) {\r
93                                 Resource type = child.getPossibleType(graph, SR.Spreadsheet);\r
94                                 if(type != null)\r
95                                         names.put(child.getName(graph), child);\r
96                         }\r
97                         \r
98                         return names.firstEntry().getValue();\r
99 \r
100                 }\r
101 \r
102             });\r
103             \r
104             String uri = getSession().syncRequest(new VariableURI(sheetVariable));\r
105             \r
106             Resource book = getSession().syncRequest(new VariableRepresents(bookVariable));\r
107             Resource sheet = getSession().syncRequest(new VariableRepresents(sheetVariable));\r
108             String sheetName = getSession().syncRequest(new VariableName(sheetVariable));\r
109             String bookName = getSession().syncRequest(new VariableName(bookVariable));\r
110 \r
111             spreadsheet = new Spreadsheet(parent, SWT.NONE, ui, selectionProvider);\r
112                 spreadsheet.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));\r
113         \r
114                 excelLink = new ExcelLink(getSession(), sheet, spreadsheet.getClientModel(), book, bookName, sheetName, uri);\r
115 \r
116                 if (GraphUI.DEBUG)\r
117                     System.out.println("Opening SpreadsheetEditor2 with uri: " + uri);\r
118             ui.load(sheetVariable, spreadsheet.getClientInterface());\r
119             \r
120         } catch (DatabaseException e) {\r
121                 \r
122             e.printStackTrace();\r
123                 return;\r
124                 \r
125         }\r
126 \r
127         spreadsheet.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));\r
128         spreadsheet.defaultInitializeUI();\r
129 \r
130         getSite().setSelectionProvider(selectionProvider);\r
131 \r
132         // Start tracking editor input validity. \r
133         activateValidation();\r
134         \r
135         IContextService contexts = (IContextService)getSite().getService(IContextService.class);\r
136         contexts.activateContext("org.simantics.spreadsheet.ui.context");\r
137 \r
138     }\r
139 \r
140     @Override\r
141     public void setFocus() {\r
142         if (spreadsheet != null)\r
143             spreadsheet.setFocus();\r
144     }\r
145 \r
146     @Override\r
147     public Object getAdapter(Class adapter) {\r
148         if (adapter == IPropertyPage.class)\r
149             return new StandardPropertyPage(getSite(), Collections.singleton(SpreadsheetResource.URIs.BrowseContext));\r
150         if (adapter == GraphUI.class)\r
151             return ui;\r
152         if (adapter == Spreadsheet.class)\r
153             return getSpreadsheet();\r
154         return null;\r
155     }\r
156 \r
157     @Override\r
158     public void dispose() {\r
159 \r
160         if(EXCEL)\r
161             excelLink.dispose();\r
162         \r
163 //        backend.dispose();\r
164 \r
165 //        tableModel.dispose();\r
166         ui.dispose();\r
167         super.dispose();\r
168 \r
169     }\r
170 \r
171 }