Source code: com/vinculum/processeditor/actions/PasteTemplateAction.java
1 /* * ** ** BEGIN LICENSE BLOCK * ** **
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3 *
4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/
8 *
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
12 * License.
13 *
14 * The Original Code is Vinculum Open Source.
15 *
16 * The Initial Developer of the Original Code is
17 * Gerard Toonstra.
18 * Portions created by the Initial Developer are Copyright (C) 2003
19 * the Initial Developer. All Rights Reserved.
20 *
21 * Contributor(s):
22 *
23 * Alternatively, the contents of this file may be used under the terms of
24 * either the GNU General Public License Version 2 or later (the "GPL"), or
25 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26 * in which case the provisions of the GPL or the LGPL are applicable instead
27 * of those above. If you wish to allow use of your version of this file only
28 * under the terms of either the GPL or the LGPL, and not to allow others to
29 * use your version of this file under the terms of the MPL, indicate your
30 * decision by deleting the provisions above and replace them with the notice
31 * and other provisions required by the GPL or the LGPL. If you do not delete
32 * the provisions above, a recipient may use your version of this file under
33 * the terms of any one of the MPL, the GPL or the LGPL.
34 *
35 * ** ** * END LICENSE BLOCK * ** **
36 */
37
38 /***************************************************************************
39 $RCSfile: PasteTemplateAction.java,v $ - description
40 -------------------
41 begin : $Date: 2003/07/08 08:02:34 $
42 copyright : Vinculum (C) 2002
43 author : $Author: chiraz $
44 ***************************************************************************/
45
46 /* $Log: PasteTemplateAction.java,v $
47 /* Revision 1.1.1.1 2003/07/08 08:02:34 chiraz
48 /* egg
49 /* */
50
51 package com.vinculum.processeditor.actions;
52
53 import org.eclipse.draw2d.geometry.Point;
54
55 import org.eclipse.gef.EditPart;
56 import org.eclipse.gef.commands.Command;
57 import org.eclipse.gef.requests.CreateRequest;
58 import org.eclipse.gef.requests.CreationFactory;
59 import org.eclipse.gef.ui.actions.Clipboard;
60 import org.eclipse.gef.ui.actions.GEFActionConstants;
61 import org.eclipse.gef.ui.actions.SelectionAction;
62 import org.eclipse.ui.IEditorPart;
63
64 import com.vinculum.processeditor.ProcessMessages;
65
66 /**
67 * @author chilan
68 *
69 */
70 public abstract class PasteTemplateAction extends SelectionAction
71 {
72 private CreateRequest request;
73
74 /**
75 * Constructor for PasteTemplateAction.
76 * @param editor
77 */
78 public PasteTemplateAction(IEditorPart editor)
79 {
80 super(editor);
81 }
82
83 /**
84 * Returns <code>true</code> if the {@link Clipboard clipboard's} contents are not
85 * <code>null</code> and the command returned by {@link #createPasteCommand()} can
86 * execute.
87 */
88 protected boolean calculateEnabled()
89 {
90 Command command = createPasteCommand();
91 return getClipboardContents() != null && command != null && command.canExecute();
92 }
93
94 /**
95 * Creates and returns a command (which may be <code>null</code>) to create a new EditPart
96 * based on the template on the clipboard.
97 * @return the paste command
98 */
99 protected Command createPasteCommand()
100 {
101 if (getSelectedObjects() == null || getSelectedObjects().isEmpty())
102 return null;
103 CreateRequest request = new CreateRequest();
104 request.setFactory(getFactory(getClipboardContents()));
105 request.setLocation(getPasteLocation());
106 Object obj = getSelectedObjects().get(0);
107 if (obj instanceof EditPart)
108 return ((EditPart)obj).getCommand(request);
109 return null;
110 }
111
112 /**
113 * Returns the contents of the default GEF {@link Clipboard}.
114 * @return the clipboard's contents
115 */
116 protected Object getClipboardContents()
117 {
118 return Clipboard.getDefault().getContents();
119 }
120
121 /**
122 * Returns the appropriate Factory object to be used for the specified template. This
123 * Factory is used on the CreateRequest that is sent to the target EditPart.
124 * @param template the template Object
125 * @return a Factory
126 */
127 protected abstract CreationFactory getFactory(Object template);
128
129 protected abstract Point getPasteLocation();
130
131 /**
132 * @see org.eclipse.gef.ui.actions.EditorPartAction#init()
133 */
134 protected void init()
135 {
136 setId(GEFActionConstants.PASTE);
137 setText(ProcessMessages.PasteAction_ActionLabelText);
138 }
139
140 /**
141 * Executes the command returned by {@link #createPasteCommand()}.
142 */
143 public void run()
144 {
145 execute(createPasteCommand());
146 }
147 }