]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.export.core/src/org/simantics/export/core/ExportContext.java
Merge commit 'b3da313'
[simantics/platform.git] / bundles / org.simantics.export.core / src / org / simantics / export / core / ExportContext.java
1 package org.simantics.export.core;\r
2 \r
3 import java.io.File;\r
4 import java.util.ArrayList;\r
5 import java.util.List;\r
6 \r
7 import org.eclipse.core.runtime.Platform;\r
8 import org.eclipse.core.runtime.preferences.ConfigurationScope;\r
9 import org.eclipse.jface.viewers.IStructuredSelection;\r
10 import org.osgi.service.prefs.Preferences;\r
11 import org.simantics.databoard.Bindings;\r
12 import org.simantics.databoard.Databoard;\r
13 import org.simantics.db.ReadGraph;\r
14 import org.simantics.db.Resource;\r
15 import org.simantics.db.Session;\r
16 import org.simantics.db.common.request.ReadRequest;\r
17 import org.simantics.db.exception.AssumptionException;\r
18 import org.simantics.db.exception.DatabaseException;\r
19 import org.simantics.db.exception.ServiceException;\r
20 import org.simantics.db.exception.ValidationException;\r
21 import org.simantics.db.layer0.request.ActiveModels;\r
22 import org.simantics.db.management.ISessionContext;\r
23 import org.simantics.export.core.manager.Content;\r
24 import org.simantics.project.IProject;\r
25 import org.simantics.project.ProjectKeys;\r
26 import org.simantics.utils.ui.AdaptionUtils;\r
27 \r
28 public class ExportContext {\r
29 \r
30         // Context data\r
31         public ISessionContext sessionCtx;\r
32         public Session session;\r
33         public String project;\r
34         public List<String> activeModels;\r
35         \r
36         // Other data\r
37         /** Selected content */\r
38         public List<String> selection;\r
39         \r
40         public ExportExtensionPoint eep;\r
41         public File workarea;\r
42         public Preferences store;\r
43         public Databoard databoard;\r
44         \r
45         public static ExportContext create(ISessionContext ctx, final IStructuredSelection selection) throws DatabaseException {\r
46                 final ExportContext result = new ExportContext();\r
47                 result.sessionCtx = ctx;\r
48                 result.session = ctx.getSession();\r
49                 result.selection = new ArrayList<String>();\r
50                 result.activeModels = new ArrayList<String>();\r
51         result.workarea = Platform.getLocation().toFile();\r
52         result.store = ConfigurationScope.INSTANCE.getNode("org.simantics.export.core");\r
53         result.databoard = new Databoard();\r
54                 \r
55         result.session.syncRequest(new ReadRequest() {\r
56             public void run(ReadGraph graph) throws DatabaseException {\r
57 \r
58                         IProject iproject = result.sessionCtx.getHint( ProjectKeys.KEY_PROJECT );\r
59                 Resource project = iproject==null?null:iproject.get();\r
60                 if ( project != null ) {\r
61                         result.project = graph.getURI(project);\r
62                 }\r
63                 \r
64                 for (Resource activeModel : graph.sync( new ActiveModels( project ) )) {\r
65                         try { \r
66                                         result.activeModels.add( graph.getURI( activeModel ) );\r
67                         } catch (AssumptionException e) {\r
68                         } catch (ValidationException e) {\r
69                         } catch (ServiceException e) {\r
70                         }\r
71                 }\r
72 \r
73                 if ( selection != null ) {\r
74                         for (Resource r : AdaptionUtils.adaptToCollection(selection, Resource.class)) {\r
75                                 try {                                   \r
76                                         result.selection.add( graph.getURI(r) );\r
77                                 } catch (AssumptionException e) {\r
78                                 } catch (ValidationException e) {\r
79                                 } catch (ServiceException e) {\r
80                                 }\r
81                         }\r
82                 }\r
83                 \r
84             }\r
85         });\r
86                 \r
87                 //IExperiment experiment = ExperimentManager.getActiveExperiment();             \r
88 //        ISelection selection = HandlerUtil.getCurrentSelection(event);\r
89 //        ImagesNode images = AdaptionUtils.adaptToSingle(selection, ImagesNode.class);\r
90                 return result;\r
91         }\r
92 \r
93         /**\r
94          * Get preference store for a combination of selections\r
95          * @param contents\r
96          * @return selections\r
97          */\r
98         public Preferences store(List<Content> contents)\r
99         {\r
100                 int hash = _hash(contents);             \r
101                 return store.node( "Selection-"+hash );         \r
102         }\r
103 \r
104         public static int _hash(List<Content> contents) {\r
105                 int hash = 0x234234;\r
106                 for ( Content c : contents ) {\r
107                         hash = 13*hash + c.url.hashCode();\r
108                         hash = 13*hash + c.formatId.hashCode();\r
109                 }\r
110                 return hash;\r
111         }\r
112         \r
113 }\r