|
ParameterDisjunction |
|
1 /* 2 * Copyright (c) 1998-2001, The University of Sheffield. 3 * 4 * This file is part of GATE (see http://gate.ac.uk/), and is free 5 * software, licenced under the GNU Library General Public License, 6 * Version 2, June 1991 (in the distribution as file licence.html, 7 * and also available at http://gate.ac.uk/gate/licence.html). 8 * 9 * Valentin Tablan 04/10/2001 10 * 11 * $Id: ParameterDisjunction.java,v 1.3 2001/10/16 12:30:24 valyt Exp $ 12 * 13 */ 14 15 package gate.gui; 16 17 import gate.*; 18 import gate.creole.*; 19 import gate.util.*; 20 21 import java.util.*; 22 import gate.event.*; 23 24 /** 25 * Represents a list of Parameters which are alternative to each other. 26 * This class only gives access to one of those parameters ot any one moment. 27 * The currently accessible (selected) parameter can be changed using the 28 * {@link setSelectedIndex(int index)} method. 29 */ 30 public class ParameterDisjunction implements CreoleListener { 31 32 /** 33 * Creation from a resources and a list of names. 34 * The initial values of the parameters will be read from the resource. If any 35 * of these values is null than the default value will be used. After 36 * initialisation the values will be cached inside this object; any changes 37 * made to these values will not affect the actual values on the resource. 38 * 39 * @param the resource these parameters belong to. 40 * @param parameters a list containing the parameters in this paramater d 41 * isjunction; each element is a {@link gate.creole.Parameter}. 42 */ 43 public ParameterDisjunction(Resource resource, List parameters){ 44 Gate.getCreoleRegister().addCreoleListener(this); 45 this.resource = resource; 46 params = new Parameter[parameters.size()]; 47 names = new String[parameters.size()]; 48 values = new Object[parameters.size()]; 49 comments = new String[parameters.size()]; 50 types = new String[parameters.size()]; 51 required = new Boolean[parameters.size()]; 52 53 for(int i = 0; i < parameters.size(); i++){ 54 params[i] = (Parameter)parameters.get(i); 55 names[i] = params[i].getName(); 56 comments[i] = params[i].getComment(); 57 types[i] = params[i].getTypeName(); 58 try{ 59 values[i] = (resource == null) ? 60 null : resource.getParameterValue(params[i].getName()); 61 if(values[i] == null) values[i] = params[i].getDefaultValue(); 62 }catch(ResourceInstantiationException rie){ 63 throw new GateRuntimeException( 64 "Could not get read accessor method for \"" + names[i] + 65 "\"property of " + resource.getClass().getName()); 66 }catch(ParameterException pe){ 67 throw new GateRuntimeException( 68 "Could not get default value for \"" + names[i] + 69 "\"property of " + resource.getClass().getName()); 70 } 71 required[i] = new Boolean(!params[i].isOptional()); 72 } 73 74 setSelectedIndex(0); 75 } 76 77 /** 78 * Sets the currently selected parameter for this disjunction. 79 */ 80 public void setSelectedIndex(int index){ 81 selectedIndex = index; 82 } 83 84 /** 85 * gets the number of parameters in this disjunction. 86 */ 87 public int size(){ 88 return params.length; 89 } 90 91 /** 92 * is the currently selected parameter required? 93 */ 94 public Boolean isRequired(){ 95 return required[selectedIndex]; 96 } 97 98 /** 99 * returns the name of the curently selected parameter. 100 */ 101 public String getName(){ 102 return names[selectedIndex]; 103 } 104 105 /** 106 * returns the comment for the curently selected parameter. 107 */ 108 public String getComment(){ 109 return comments[selectedIndex]; 110 } 111 112 /** 113 * returns the type for the curently selected parameter. 114 */ 115 public String getType(){ 116 return types[selectedIndex]; 117 } 118 119 /** 120 * Returns the names of the parameters in this disjunction. 121 */ 122 public String[] getNames(){ 123 return names; 124 } 125 126 public void setValue(Object value){ 127 values[selectedIndex] = value; 128 } 129 130 public Object getValue(){ 131 return values[selectedIndex]; 132 } 133 134 public Parameter[] getParameters(){ 135 return params; 136 } 137 138 public Parameter getParameter(){ 139 return params[selectedIndex]; 140 } 141 142 /** 143 * Called when a resource has been unloaded from the system; 144 * If any of the parameters has this resource as value then the value will be 145 * deleted. 146 * If the resource is null then an attempt will be made to reinitialise the 147 * null values. 148 */ 149 protected void updateValues(Resource res){ 150 for(int i =0 ; i < values.length; i++){ 151 if(values[i] == res){ 152 values[i] = null; 153 try{ 154 values[i] = (resource == null) ? 155 null : resource.getParameterValue(params[i].getName()); 156 if(values[i] == null) values[i] = params[i].getDefaultValue(); 157 }catch(ResourceInstantiationException rie){ 158 throw new GateRuntimeException( 159 "Could not get read accessor method for \"" + names[i] + 160 "\"property of " + resource.getClass().getName()); 161 }catch(ParameterException pe){ 162 throw new GateRuntimeException( 163 "Could not get default value for \"" + names[i] + 164 "\"property of " + resource.getClass().getName()); 165 } 166 } 167 } 168 } 169 170 171 int selectedIndex; 172 String[] names; 173 String[] comments; 174 String[] types; 175 Object[] values; 176 Boolean[] required; 177 Parameter[] params; 178 Resource resource; 179 180 public void resourceLoaded(CreoleEvent e) { 181 updateValues(null); 182 } 183 184 public void resourceUnloaded(CreoleEvent e) { 185 updateValues(e.getResource()); 186 } 187 public void datastoreOpened(CreoleEvent e) { 188 } 189 public void datastoreCreated(CreoleEvent e) { 190 } 191 public void datastoreClosed(CreoleEvent e) { 192 } 193 }////// class ParameterDisjunction
|
ParameterDisjunction |
|