1 /*******************************************************************************
\r
2 * Copyright (c) 2013 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.graphfile.adapters;
\r
14 import java.util.ArrayList;
\r
15 import java.util.Collection;
\r
16 import java.util.HashSet;
\r
17 import java.util.Set;
\r
19 import org.simantics.Simantics;
\r
20 import org.simantics.db.Resource;
\r
21 import org.simantics.db.WriteGraph;
\r
22 import org.simantics.db.exception.DatabaseException;
\r
23 import org.simantics.db.layer0.adapter.PasteHandlerAdapter;
\r
24 import org.simantics.db.layer0.util.ClipboardUtils;
\r
25 import org.simantics.db.layer0.util.PasteEventHandler;
\r
26 import org.simantics.db.layer0.util.RemoverUtil;
\r
27 import org.simantics.db.layer0.util.SimanticsClipboard;
\r
28 import org.simantics.db.layer0.util.SimanticsClipboard.Representation;
\r
29 import org.simantics.db.layer0.util.SimanticsKeys;
\r
30 import org.simantics.graph.db.IImportAdvisor;
\r
31 import org.simantics.graph.db.TransferableGraphException;
\r
32 import org.simantics.graph.db.TransferableGraphs;
\r
33 import org.simantics.graph.representation.TransferableGraph1;
\r
35 public class SystemResourcePasteHandler extends PasteHandlerAdapter
\r
38 private Resource resource;
\r
40 public SystemResourcePasteHandler(Resource resource) {
\r
41 this.resource = resource;
\r
44 public static void defaultExecute(TransferableGraph1 tg, Resource resource, IImportAdvisor advisor) throws DatabaseException, TransferableGraphException {
\r
45 TransferableGraphs.importGraph1(Simantics.getSession(), tg, advisor);
\r
48 public static void defaultExecute(WriteGraph graph, TransferableGraph1 tg, Resource resource, IImportAdvisor advisor) throws DatabaseException {
\r
49 TransferableGraphs.importGraph1(graph, tg, advisor);
\r
52 public void execute(WriteGraph graph, TransferableGraph1 tg, Resource resource, IImportAdvisor advisor) throws DatabaseException {
\r
53 defaultExecute(graph, tg, resource, advisor);
\r
57 * Override this in your inherited class if post processing is done.
\r
59 public void onPasteBegin(WriteGraph graph) throws DatabaseException {
\r
63 * Override this in your inherited class if post processing is done
\r
64 * advisor.getTarget() returns an object under which data is copied
\r
65 * advisor.getRoot() returns the object which have been pasted.
\r
66 * @param representations TODO
\r
68 public void onPaste(WriteGraph graph, SystemResourcePasteImportAdvisor advisor, Set<Representation> representations) throws DatabaseException {
\r
69 advisor.attachRoot(graph);
\r
73 * Override this in your inherited class if post processing is done.
\r
75 public void onPasteEnd(WriteGraph graph) throws DatabaseException{
\r
78 public Collection<Resource> pasteObject(WriteGraph graph, Set<Representation> object) throws DatabaseException {
\r
79 Collection<Resource> result = new ArrayList<Resource>();
\r
80 TransferableGraph1 tg = ClipboardUtils.accept(graph, object, SimanticsKeys.KEY_TRANSFERABLE_GRAPH);
\r
82 SystemResourcePasteImportAdvisor advisor = new SystemResourcePasteImportAdvisor(graph, resource);
\r
83 execute(graph, tg, resource, advisor);
\r
84 result.add(advisor.getRoot());
\r
86 onPaste(graph, advisor, object);
\r
87 } catch (Throwable e) {
\r
94 public Collection<Resource> pasteFromClipboard(WriteGraph graph, SimanticsClipboard clipboard, PasteEventHandler handler) throws DatabaseException {
\r
96 Collection<Resource> result = new ArrayList<Resource>();
\r
99 onPasteBegin(graph);
\r
100 } catch (Throwable e) {
\r
103 final Set<Resource> cuts = new HashSet<Resource>();
\r
104 for(Set<Representation> object : clipboard.getContents()) {
\r
105 result.addAll(pasteObject(graph, object));
\r
106 Collection<Resource> cut = ClipboardUtils.accept(object, SimanticsKeys.KEY_CUT_RESOURCES);
\r
113 } catch (Throwable e) {
\r
116 if(!cuts.isEmpty()) {
\r
117 for (Resource cut : cuts)
\r
118 RemoverUtil.remove(graph, cut);
\r
125 @SuppressWarnings("rawtypes")
\r
127 public Object getAdapter(Class adapter) {
\r
128 if(Resource.class == adapter) return resource;
\r