1 package org.simantics.export.core;
\r
4 import java.util.ArrayList;
\r
5 import java.util.List;
\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
28 public class ExportContext {
\r
31 public ISessionContext sessionCtx;
\r
32 public Session session;
\r
33 public String project;
\r
34 public List<String> activeModels;
\r
37 /** Selected content */
\r
38 public List<String> selection;
\r
40 public ExportExtensionPoint eep;
\r
41 public File workarea;
\r
42 public Preferences store;
\r
43 public Databoard databoard;
\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
55 result.session.syncRequest(new ReadRequest() {
\r
56 public void run(ReadGraph graph) throws DatabaseException {
\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
64 for (Resource activeModel : graph.sync( new ActiveModels( project ) )) {
\r
66 result.activeModels.add( graph.getURI( activeModel ) );
\r
67 } catch (AssumptionException e) {
\r
68 } catch (ValidationException e) {
\r
69 } catch (ServiceException e) {
\r
73 if ( selection != null ) {
\r
74 for (Resource r : AdaptionUtils.adaptToCollection(selection, Resource.class)) {
\r
76 result.selection.add( graph.getURI(r) );
\r
77 } catch (AssumptionException e) {
\r
78 } catch (ValidationException e) {
\r
79 } catch (ServiceException e) {
\r
87 //IExperiment experiment = ExperimentManager.getActiveExperiment();
\r
88 // ISelection selection = HandlerUtil.getCurrentSelection(event);
\r
89 // ImagesNode images = AdaptionUtils.adaptToSingle(selection, ImagesNode.class);
\r
94 * Get preference store for a combination of selections
\r
96 * @return selections
\r
98 public Preferences store(List<Content> contents)
\r
100 int hash = _hash(contents);
\r
101 return store.node( "Selection-"+hash );
\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