AbstractVisualResource.java
001 /*
002  *  AbstractVisualResource.java
003  *
004  *  Copyright (c) 1995-2012, The University of Sheffield. See the file
005  *  COPYRIGHT.txt in the software or at http://gate.ac.uk/gate/COPYRIGHT.txt
006  *
007  *  This file is part of GATE (see http://gate.ac.uk/), and is free
008  *  software, licenced under the GNU Library General Public License,
009  *  Version 2, June 1991 (in the distribution as file licence.html,
010  *  and also available at http://gate.ac.uk/gate/licence.html).
011  *
012  *  Cristian URSU, 24/Jan/2001
013  *
014  *  $Id: AbstractVisualResource.java 17604 2014-03-09 10:08:13Z markagreenwood $
015  */
016 
017 package gate.creole;
018 
019 import java.beans.BeanInfo;
020 import java.beans.Introspector;
021 
022 import javax.swing.JPanel;
023 
024 import gate.*;
025 import gate.gui.Handle;
026 import gate.util.Strings;
027 
028 /** A convenience implementation of VisualResource with some default code. */
029 public abstract class AbstractVisualResource extends JPanel
030                                              implements VisualResource{
031 
032   private static final long serialVersionUID = -3561399635284613196L;
033 
034   /**
035    * Package access constructor to stop normal initialisation.
036    * This kind of resources should only be created by the Factory class
037    */
038   public AbstractVisualResource(){
039   }
040 
041   /** Accessor for features. */
042   @Override
043   public FeatureMap getFeatures(){
044     return features;
045   }//getFeatures()
046 
047   /** Mutator for features*/
048   @Override
049   public void setFeatures(FeatureMap features){
050     this.features = features;
051   }// setFeatures()
052 
053   /** Initialise this resource, and return it. */
054   @Override
055   public Resource init() throws ResourceInstantiationException {
056     return this;
057   }//init()
058 
059   /** Does nothing now, but meant to clear all internal data **/
060   @Override
061   public void cleanup() {
062     this.handle = null;
063     features.clear();
064   }//clear()
065 
066   /**
067    * Called by the GUI when this viewer/editor has to initialise itself for a
068    * specific object.
069    @param target the object (be it a {@link gate.Resource},
070    {@link gate.DataStore} or whatever) this viewer has to display
071    */
072   @Override
073   public void setTarget(Object target){
074     throw new RuntimeException(
075       "Class " + getClass() " hasn't implemented the setTarget() method!");
076   }
077 
078 
079   /**
080    * Used by the main GUI to tell this VR what handle created it. The VRs can
081    * use this information e.g. to add items to the popup for the resource.
082    */
083   @Override
084   public void setHandle(Handle handle){
085     this.handle = handle;
086   }
087 
088   //Parameters utility methods
089   /**
090    * Gets the value of a parameter of this resource.
091    @param paramaterName the name of the parameter
092    @return the current value of the parameter
093    */
094   @Override
095   public Object getParameterValue(String paramaterName)
096                 throws ResourceInstantiationException{
097     return AbstractResource.getParameterValue(this, paramaterName);
098   }
099 
100   /**
101    * Sets the value for a specified parameter.
102    *
103    @param paramaterName the name for the parameteer
104    @param parameterValue the value the parameter will receive
105    */
106   @Override
107   public void setParameterValue(String paramaterName, Object parameterValue)
108               throws ResourceInstantiationException{
109     // get the beaninfo for the resource bean, excluding data about Object
110     BeanInfo resBeanInf = null;
111     try {
112       resBeanInf = Introspector.getBeanInfo(this.getClass(), Object.class);
113     catch(Exception e) {
114       throw new ResourceInstantiationException(
115         "Couldn't get bean info for resource " this.getClass().getName()
116         + Strings.getNl() "Introspector exception was: " + e
117       );
118     }
119     AbstractResource.setParameterValue(this, resBeanInf, paramaterName, parameterValue);
120   }
121 
122   /**
123    * Sets the values for more parameters in one step.
124    *
125    @param parameters a feature map that has paramete names as keys and
126    * parameter values as values.
127    */
128   @Override
129   public void setParameterValues(FeatureMap parameters)
130               throws ResourceInstantiationException{
131     AbstractResource.setParameterValues(this, parameters);
132   }
133   
134   /**
135    * Get the current values for all this resource's registered
136    * init-time parameters.
137    */
138   public FeatureMap getInitParameterValues() throws ResourceInstantiationException {
139     return AbstractResource.getInitParameterValues(this);
140   }
141 
142   // Properties for the resource
143   protected FeatureMap features;
144   
145   /**
146    * The handle for this visual resource
147    */
148   protected Handle handle;
149 
150 }//AbstractVisualResource