PRViewer.java
001 /*
002  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
003  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
004  *
005  *  This file is part of GATE (see http://gate.ac.uk/), and is free
006  *  software, licenced under the GNU Library General Public License,
007  *  Version 2, June 1991 (in the distribution as file licence.html,
008  *  and also available at http://gate.ac.uk/gate/licence.html).
009  *
010  *  Valentin Tablan 27/02/2002
011  *
012  *  $Id: PRViewer.java 17606 2014-03-09 12:12:49Z markagreenwood $
013  *
014  */
015 package gate.gui;
016 
017 import java.awt.BorderLayout;
018 import java.awt.Component;
019 import java.awt.Toolkit;
020 import java.awt.datatransfer.Clipboard;
021 import java.awt.datatransfer.StringSelection;
022 import java.awt.event.ActionEvent;
023 import java.awt.event.MouseAdapter;
024 import java.awt.event.MouseEvent;
025 
026 import javax.swing.AbstractAction;
027 import javax.swing.JPopupMenu;
028 import javax.swing.JScrollPane;
029 
030 import gate.Gate;
031 import gate.Resource;
032 import gate.creole.AbstractVisualResource;
033 import gate.creole.ResourceData;
034 import gate.creole.ResourceInstantiationException;
035 import gate.creole.metadata.CreoleResource;
036 import gate.creole.metadata.GuiType;
037 import gate.swing.XJTable;
038 import gate.util.GateRuntimeException;
039 
040 @SuppressWarnings("serial")
041 @CreoleResource(name = "Initialisation Parameters", guiType = GuiType.LARGE,
042     resourceDisplayed = "gate.Resource", mainViewer = true)
043 public class PRViewer extends AbstractVisualResource {
044 
045   public PRViewer() {
046   }
047 
048   
049   @Override
050   public Resource init() throws ResourceInstantiationException {
051     initLocalData();
052     initGuiComponents();
053     initListeners();
054     return this;
055   }
056 
057 
058   protected void initLocalData(){
059   }
060 
061   protected void initGuiComponents(){
062     setLayout(new BorderLayout());
063     editor = new ResourceParametersEditor();
064     editor.setEditable(false);
065     editor.setAutoResizeMode(XJTable.AUTO_RESIZE_LAST_COLUMN);
066     JScrollPane scroller = new JScrollPane(editor);
067     scroller.setAlignmentX(Component.LEFT_ALIGNMENT);
068     scroller.setAlignmentY(Component.TOP_ALIGNMENT);
069     add(scroller, BorderLayout.CENTER);
070   }
071 
072   protected void initListeners(){
073     editor.addMouseListener(new MouseAdapter() {
074       private void handleMouseEvent(MouseEvent e){
075         if(e.isPopupTrigger()){
076           int row = editor.rowAtPoint(e.getPoint());
077           int col = editor.columnAtPoint(e.getPoint());
078           JPopupMenu popup =new JPopupMenu();
079           popup.add(new CopyValueAction(row, col));
080           popup.show(editor,e.getX(), e.getY());
081         }
082       }
083       
084       @Override
085       public void mousePressed(MouseEvent e) {
086         handleMouseEvent(e);
087       }
088 
089       @Override
090       public void mouseReleased(MouseEvent e) {
091         handleMouseEvent(e);
092       }
093 
094       @Override
095       public void mouseClicked(MouseEvent e) {
096         handleMouseEvent(e);
097       }
098     });
099   }
100 
101   @Override
102   public void cleanup(){
103     super.cleanup();
104     editor.cleanup();
105   }
106 
107   @Override
108   public void setTarget(Object target){
109     if(target == nullreturn;
110     if(!(target instanceof Resource)){
111       throw new GateRuntimeException(this.getClass().getName() +
112                                      " can only be used to display " +
113                                      Resource.class.getName() +
114                                      "\n" + target.getClass().getName() +
115                                      " is not a " +
116                                      Resource.class.getName() "!");
117     }
118 
119     Resource pr = (Resource)target;
120     ResourceData rData =
121         Gate.getCreoleRegister().get(pr.getClass().getName());
122     if(rData != null) {
123       editor.init(pr, rData.getParameterList().getInitimeParameters());
124     else {
125       editor.init(pr, null);
126     }
127 
128     editor.removeCreoleListenerLink();
129   }
130 
131   protected ResourceParametersEditor editor;
132   
133   protected class CopyValueAction extends AbstractAction{
134     private int row, column;
135     
136     public CopyValueAction (int row, int column){
137       super("Copy value");
138       putValue(SHORT_DESCRIPTION, 
139               "Copies the value of the cell to the clipboard.");
140       this.row = row;
141       this.column = column;
142     }
143     
144     @Override
145     public void actionPerformed(ActionEvent e) {
146       Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
147       Object value = editor.getValueAt(row, column);
148       String valStr;
149       if(value instanceof ParameterDisjunction){
150         valStr = ((ParameterDisjunction)value).getName();
151       }else if(value instanceof Boolean){
152         valStr = ((Boolean)value"Required parameter" "Optional parameter";
153       }else{
154         valStr = value.toString();
155       }
156       StringSelection data = new StringSelection(valStr);
157       clipboard.setContents(data, data);
158     }
159   }
160 }