X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Fadapter%2Fimpl%2FDefaultCopyHandler.java;h=dfbaf2678e438f671b0508f37886d103195ce8e2;hp=312d4a10c2890cd14f2425a9a4a7657beacd3f98;hb=60509f4629d5ca644dd9533dd2abc64349aad328;hpb=e88be95edf1f80781646cfdf717ec1b663264179 diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/DefaultCopyHandler.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/DefaultCopyHandler.java index 312d4a10c..dfbaf2678 100644 --- a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/DefaultCopyHandler.java +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/adapter/impl/DefaultCopyHandler.java @@ -17,6 +17,8 @@ import java.util.Collections; import java.util.HashSet; import java.util.Map; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.SubMonitor; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.common.request.ResourceRead; @@ -36,9 +38,12 @@ import org.simantics.graph.db.TransferableGraphSource; import org.simantics.graph.db.TransferableGraphs; import org.simantics.graph.representation.TransferableGraph1; import org.simantics.operation.Layer0X; +import org.slf4j.LoggerFactory; public class DefaultCopyHandler implements CopyHandler, CopyHandler2 { + private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DefaultCopyHandler.class); + protected Collection resources; public DefaultCopyHandler(Resource resource) { @@ -111,29 +116,39 @@ public class DefaultCopyHandler implements CopyHandler, CopyHandler2 { }; } - protected void fillTG(ReadGraph graph, HashSet items, boolean cut) { - + protected void fillTG(ReadGraph graph, HashSet items, boolean cut, IProgressMonitor monitor) { + SubMonitor subMonitor = SubMonitor.convert(monitor, 10); + subMonitor.subTask("Fill tg"); try { Representation tgRepresentation = createTransferableGraph(graph, resources, cut); - if(tgRepresentation != null) items.add(tgRepresentation); + if (tgRepresentation != null) + items.add(tgRepresentation); + subMonitor.worked(2); Representation tgSourceRepresentation = createTransferableGraphSource(graph, resources, cut); - if(tgSourceRepresentation != null) items.add(tgSourceRepresentation); - - if(resources.size() == 1) { - Collection representations = graph.syncRequest(new ResourceRead>(resources.iterator().next()) { - @Override - public Collection perform(ReadGraph graph) throws DatabaseException { - ArrayList result = new ArrayList(); - Layer0X L0X = Layer0X.getInstance(graph); - for(Resource adapter : graph.getObjects(resource, L0X.HasRepresentation)) { - result.add(graph.adapt(adapter, Representation.class)); - } - return result; - } - }); + if (tgSourceRepresentation != null) + items.add(tgSourceRepresentation); + subMonitor.worked(2); + + if (resources.size() == 1) { + SubMonitor splittedChild = subMonitor.split(6); + Collection representations = graph + .syncRequest(new ResourceRead>(resources.iterator().next()) { + @Override + public Collection perform(ReadGraph graph) throws DatabaseException { + ArrayList result = new ArrayList(); + Layer0X L0X = Layer0X.getInstance(graph); + for (Resource adapter : graph.getObjects(resource, L0X.HasRepresentation)) { + result.add(graph.adapt(adapter, Representation.class)); + splittedChild.worked(1); + } + return result; + } + }); for (Representation r : representations) items.add(r); + } else { + LOGGER.warn("Invalid amount of resources {} for filling tg", resources); } } catch (DatabaseException e) { @@ -142,28 +157,36 @@ public class DefaultCopyHandler implements CopyHandler, CopyHandler2 { } - protected void fillCopyResource(ReadGraph graph, HashSet items) { + protected void fillCopyResource(ReadGraph graph, HashSet items, IProgressMonitor monitor) { + SubMonitor subMonitor = SubMonitor.convert(monitor, 1); + subMonitor.subTask("Fill copy resources"); items.add(ClipboardUtils.createCopyResources(resources)); + subMonitor.worked(1); } - protected void fillCutResource(ReadGraph graph, HashSet items) { + protected void fillCutResource(ReadGraph graph, HashSet items, IProgressMonitor monitor) { + SubMonitor subMonitor = SubMonitor.convert(monitor, 1); + subMonitor.subTask("Fill cut resources"); items.add(ClipboardUtils.createCutResources(resources)); + subMonitor.worked(1); } @Override - public void copyToClipboard(ReadGraph graph, SimanticsClipboardBuilder clipboard) throws DatabaseException { + public void copyToClipboard(ReadGraph graph, SimanticsClipboardBuilder clipboard, IProgressMonitor monitor) throws DatabaseException { + SubMonitor subMonitor = SubMonitor.convert(monitor, 100); HashSet items = new HashSet(); - fillTG(graph, items, false); - fillCopyResource(graph, items); - clipboard.addContent(items); + fillTG(graph, items, false, subMonitor.split(80)); + fillCopyResource(graph, items, subMonitor.split(10)); + clipboard.addContent(items, subMonitor.split(10)); } @Override - public void cutToClipboard(ReadGraph graph, SimanticsClipboardBuilder clipboard) throws DatabaseException { + public void cutToClipboard(ReadGraph graph, SimanticsClipboardBuilder clipboard, IProgressMonitor monitor) throws DatabaseException { + SubMonitor subMonitor = SubMonitor.convert(monitor, 100); HashSet items = new HashSet(); - fillTG(graph, items, true); - fillCutResource(graph, items); - clipboard.addContent(items); + fillTG(graph, items, true, subMonitor.split(80)); + fillCutResource(graph, items, subMonitor.split(10)); + clipboard.addContent(items, subMonitor.split(10)); } }