X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Futil%2FClipboardUtils.java;fp=bundles%2Forg.simantics.db.layer0%2Fsrc%2Forg%2Fsimantics%2Fdb%2Flayer0%2Futil%2FClipboardUtils.java;h=ca78dd81dc67cfbef54ee1745d8a6d3701f63eda;hb=969bd23cab98a79ca9101af33334000879fb60c5;hp=0000000000000000000000000000000000000000;hpb=866dba5cd5a3929bbeae85991796acb212338a08;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ClipboardUtils.java b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ClipboardUtils.java new file mode 100644 index 000000000..ca78dd81d --- /dev/null +++ b/bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/util/ClipboardUtils.java @@ -0,0 +1,166 @@ +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.db.layer0.util; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Set; + +import org.simantics.databoard.adapter.AdaptException; +import org.simantics.databoard.container.DataContainer; +import org.simantics.databoard.container.DataContainers; +import org.simantics.db.ReadGraph; +import org.simantics.db.RequestProcessor; +import org.simantics.db.Resource; +import org.simantics.db.common.request.ResourceRead; +import org.simantics.db.common.utils.Logger; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.PasteHandler; +import org.simantics.db.layer0.internal.SimanticsInternal; +import org.simantics.db.layer0.util.SimanticsClipboard.Representation; +import org.simantics.db.layer0.variable.Variable; +import org.simantics.db.request.Read; +import org.simantics.graph.representation.TransferableGraph1; +import org.simantics.utils.datastructures.hints.IHintContext.Key; + +public class ClipboardUtils { + + public static String HINT_TARGET_RESOURCE = "HINT_TARGET_RESOURCE"; + + public static T accept(Set set, Key key) throws DatabaseException { + return accept(set, key, Collections.emptyMap()); + } + + public static T accept(Set set, Key key, Map hints) throws DatabaseException { + for(Representation r : set) if(r.getKey().equals(key)) return r.getValue(SimanticsInternal.getSession(), hints); + return null; + } + + public static T accept(RequestProcessor processor, Set set, Key key) throws DatabaseException { + return accept(processor, set, key, Collections.emptyMap()); + } + + public static T accept(RequestProcessor processor, Set set, Key key, Map hints) throws DatabaseException { + for(Representation r : set) if(r.getKey().equals(key)) return r.getValue(processor, hints); + return null; + } + + public static T accept(ReadGraph graph, Set set, Key key) throws DatabaseException { + return accept(graph, set, key, Collections.emptyMap()); + } + + public static T accept(ReadGraph graph, Set set, Key key, Map hints) throws DatabaseException { + for(Representation r : set) if(r.getKey().equals(key)) return r.getValue(graph, hints); + return null; + } + + public static T acceptPossible(ReadGraph graph, Key key) throws DatabaseException { + return acceptPossible(graph, key, Collections.emptyMap()); + } + + public static T acceptPossible(ReadGraph graph, Key key, Map hints) throws DatabaseException { + Collection results = accept(graph, key, hints); + if(results.size() == 1) return results.iterator().next(); + else return null; + } + + @SuppressWarnings("unchecked") + public static Collection accept(ReadGraph graph, Key key, Map hints) throws DatabaseException { + ArrayList result = new ArrayList(); + for(Set rs : SimanticsInternal.getClipboard().getContents()) { + for(Representation r : rs) { + if(r.getKey().equals(key)) { + result.add((T)r.getValue(graph, hints)); + continue; + } + } + } + return result; + } + + public static SimanticsClipboard fileClipboard(String fileName) throws IOException { + + DataContainer container = DataContainers.readFile(new File(fileName)); + + try { + Representation tgRep = new TGRepresentation((TransferableGraph1)container.content.getValue(TransferableGraph1.BINDING)); + Representation dcRep = new DataContainerRepresentation(container); + return SimanticsClipboardImpl.make(dcRep, tgRep); + } catch (AdaptException e) { + Logger.defaultLogError(e); + return SimanticsClipboardImpl.EMPTY; + } + + + } + + public static Representation createTransferableGraph(Resource ... resources) { + return new TGRepresentation(resources); + } + + public static Representation createTransferableGraph(TransferableGraphConfiguration2 configuration) { + return new TGRepresentation(configuration); + } + + public static Representation createTransferableGraph(boolean ignoreVirtualResources, Resource ... resources) { + return new TGRepresentation(ignoreVirtualResources, resources); + } + + public static Representation createVariable(String uri) { + return new VariableRepresentation(uri); + } + + public static Representation createVariable(RequestProcessor processor, final Variable var) { + + try { + + return new VariableRepresentation(processor.syncRequest(new Read() { + + @Override + public String perform(ReadGraph graph) throws DatabaseException { + return var.getURI(graph); + } + + })); + + } catch (DatabaseException e) { + Logger.defaultLogError(e); + } + + return null; + + } + + public static Representation createCopyResources(final Collection resources) { + return new ResourceCopyRepresentation(resources); + } + + public static Representation createCutResources(final Collection resources) { + return new ResourceCutRepresentation(resources); + } + + public static PasteHandler pasteHandler(Resource resource) throws DatabaseException { + return SimanticsInternal.sync(new ResourceRead(resource) { + + @Override + public PasteHandler perform(ReadGraph graph) throws DatabaseException { + return graph.adapt(resource, PasteHandler.class); + } + + }); + } + +}