]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.template2d.ui/src/org/simantics/modeling/template2d/ui/export/DrawingTemplateExporter.java
Add progress monitoring for copying resources on desktop
[simantics/platform.git] / bundles / org.simantics.modeling.template2d.ui / src / org / simantics / modeling / template2d / ui / export / DrawingTemplateExporter.java
1 package org.simantics.modeling.template2d.ui.export;
2
3 import java.util.Collection;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.Set;
7
8 import org.eclipse.core.runtime.IProgressMonitor;
9 import org.eclipse.core.runtime.SubMonitor;
10 import org.osgi.service.prefs.Preferences;
11 import org.simantics.databoard.binding.mutable.Variant;
12 import org.simantics.databoard.type.RecordType;
13 import org.simantics.db.ReadGraph;
14 import org.simantics.db.Resource;
15 import org.simantics.db.exception.DatabaseException;
16 import org.simantics.db.layer0.adapter.CopyHandler;
17 import org.simantics.db.layer0.util.ClipboardUtils;
18 import org.simantics.db.layer0.util.SimanticsClipboard;
19 import org.simantics.db.layer0.util.SimanticsClipboard.Representation;
20 import org.simantics.db.layer0.util.SimanticsClipboardImpl;
21 import org.simantics.db.layer0.util.SimanticsKeys;
22 import org.simantics.db.request.Read;
23 import org.simantics.export.core.ExportContext;
24 import org.simantics.export.core.error.ExportException;
25 import org.simantics.export.core.intf.ExportClass;
26 import org.simantics.export.core.manager.Content;
27 import org.simantics.export.core.manager.TransferableGraphWriter;
28 import org.simantics.export.core.util.ExportQueries;
29 import org.simantics.graph.representation.TransferableGraph1;
30 import org.simantics.utils.datastructures.MapList;
31
32 public class DrawingTemplateExporter implements ExportClass {
33
34         @Override
35         public RecordType options(ExportContext context, Collection<String> content) throws ExportException {
36                 // TODO Auto-generated method stub
37                 return null;
38         }
39
40         @Override
41         public void fillDefaultPrefs(ExportContext ctx, Variant options) throws ExportException {
42                 // TODO Auto-generated method stub
43         }
44
45         @Override
46         public void savePref(Variant options, Preferences contentScopeNode, Preferences workbenchScopeNode) throws ExportException {
47                 // TODO Auto-generated method stub
48         }
49
50         @Override
51         public void loadPref(Variant options, Preferences contentScopeNode, Preferences workbenchScopeNode) throws ExportException {
52                 // TODO Auto-generated method stub
53         }
54
55         @Override
56         public void export(List<Content> contents, 
57                         Object writer_,
58                         ExportContext context, 
59                         Variant options,
60                         IProgressMonitor monitor, 
61                         MapList<Content, Content> attachmentMap
62                         ) throws ExportException {
63                                 
64                 final TransferableGraphWriter writer = (TransferableGraphWriter) writer_;
65                 SubMonitor ss = SubMonitor.convert(monitor, 2);
66         try {
67                 List<Resource> resources = context.session.syncRequest( ExportQueries.toResources2(contents) );
68                 SubMonitor subMonitor = ss.split(resources.size());
69                 for ( final Resource model : resources ) {
70                     // TODO: figure out a way to make the TG go directly into a file
71                     // instead of having it all in memory at once.
72                     SimanticsClipboard clipboard = context.session.syncRequest(new Read<SimanticsClipboard>() {
73                         @Override
74                         public SimanticsClipboard perform(ReadGraph graph) throws DatabaseException {
75                             CopyHandler ch = graph.adapt( model, CopyHandler.class );
76                             SimanticsClipboardImpl clipboard = new SimanticsClipboardImpl();
77                             ch.copyToClipboard(graph, clipboard, subMonitor.split(1));
78                             return clipboard;
79                         }
80                     });
81                     SubMonitor subMonitor2 = ss.split(resources.size());
82                     for (Set<Representation> object : clipboard.getContents()) {
83                         TransferableGraph1 tg = ClipboardUtils.accept(object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH);                    
84                         writer.writeFile(TransferableGraph1.BINDING, tg);
85                         subMonitor2.worked(1);
86                     }
87                 }
88
89         } catch (DatabaseException e) {
90                 throw new ExportException(e);
91                 }
92
93         }
94
95         @Override
96         public List<String> validate(String contentUri, ExportContext context, Variant options) {
97                 return Collections.emptyList();
98         }
99
100 }