]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/handler/PasteOperation.java
Logger fixes after merge commit:fdbe8762
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / handler / PasteOperation.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 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
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.diagram.handler;\r
13 \r
14 import java.awt.geom.Point2D;\r
15 import java.util.Collections;\r
16 import java.util.Map;\r
17 \r
18 import org.simantics.db.Resource;\r
19 import org.simantics.g2d.canvas.ICanvasContext;\r
20 import org.simantics.g2d.diagram.IDiagram;\r
21 import org.simantics.scenegraph.g2d.events.command.Command;\r
22 \r
23 /**\r
24  * \r
25  * @author Tuukka Lehtonen\r
26  */\r
27 public final class PasteOperation {\r
28 \r
29     /**\r
30      * Optional specifications for the paste operation that can be given through.\r
31      */\r
32     public static interface PasteOption {}\r
33 \r
34     /**\r
35      * For forcing pasting of diagram reference elements even when the parent\r
36      * element of the reference element is not included in the copied material.\r
37      */\r
38     public static enum ForceCopyReferences implements PasteOption { INSTANCE }\r
39 \r
40     // Input\r
41     public final Command                 command;\r
42     public final ICanvasContext          ctx;\r
43     public final Resource                sourceDiagram;\r
44     public final Resource                targetDiagram;\r
45     public final IDiagram                target;\r
46     public final ElementObjectAssortment ea;\r
47     public final boolean                 cut;\r
48     public final Point2D                 offset;\r
49 \r
50     public Map<Resource, Resource>       initialNodeMap;\r
51 \r
52     public PasteOption[]                 options;\r
53 \r
54     // Output\r
55     public final Map<Object, Object>     copyMap;\r
56 \r
57     public PasteOperation(\r
58             Command command,\r
59             ICanvasContext ctx,\r
60             Resource sourceDiagram,\r
61             Resource targetDiagram,\r
62             IDiagram target,\r
63             ElementObjectAssortment ea,\r
64             boolean cut,\r
65             Point2D offset,\r
66             Map<Resource, Resource> initialNodeMap,\r
67             Map<Object, Object> copyMap\r
68     ) {\r
69         if (sourceDiagram == null)\r
70             throw new IllegalArgumentException("null source diagram");\r
71         if (targetDiagram == null)\r
72             throw new IllegalArgumentException("null target diagram");\r
73 \r
74         this.command = command;\r
75         this.ctx = ctx;\r
76         this.sourceDiagram = sourceDiagram;\r
77         this.targetDiagram = targetDiagram;\r
78         this.target = target;\r
79         this.ea = ea;\r
80         this.cut = cut;\r
81         this.offset = offset;\r
82         this.copyMap = copyMap;\r
83         this.initialNodeMap = initialNodeMap;\r
84     }\r
85 \r
86     public PasteOperation(\r
87             Command command,\r
88             ICanvasContext ctx,\r
89             Resource sourceDiagram,\r
90             Resource targetDiagram,\r
91             IDiagram target,\r
92             ElementObjectAssortment ea,\r
93             boolean cut,\r
94             Point2D offset,\r
95             Map<Resource, Resource> initialNodeMap\r
96     ) {\r
97         this(command, ctx, sourceDiagram, targetDiagram, target, ea, cut, offset, initialNodeMap, null);\r
98     }\r
99 \r
100     public PasteOperation(\r
101             Command command,\r
102             ICanvasContext ctx,\r
103             Resource sourceDiagram,\r
104             Resource targetDiagram,\r
105             IDiagram target,\r
106             ElementObjectAssortment ea,\r
107             boolean cut,\r
108             Point2D offset\r
109     ) {\r
110         this(command, ctx, sourceDiagram, targetDiagram, target, ea, cut, offset, Collections.<Resource, Resource>emptyMap());\r
111     }\r
112 \r
113     public PasteOperation options(PasteOption... options) {\r
114         this.options = options;\r
115         return this;\r
116     }\r
117 \r
118     public boolean sameDiagram() {\r
119         return sourceDiagram.equals(targetDiagram);\r
120     }\r
121 \r
122     @SuppressWarnings("unchecked")\r
123     public <T extends PasteOption> T getOption(Class<T> clazz) {\r
124         if (options == null)\r
125             return null;\r
126         for (PasteOption option : options) {\r
127             if (clazz.isInstance(option))\r
128                 return (T) option;\r
129         }\r
130         return null;\r
131     }\r
132 \r
133     public <T extends PasteOption> boolean hasOption(Class<T> clazz) {\r
134         return getOption(clazz) != null;\r
135     }\r
136 \r
137 }\r