Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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 }