001 /* 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * ACL Lab, School of Computer Science, Montreal, QC 005 * Date: 2002-8-27 006 * Time: 21:51:21 007 */ 008 package EVolve.util; 009 010 import EVolve.visualization.*; 011 import EVolve.visualization.Dimension; 012 import EVolve.data.*; 013 import EVolve.*; 014 import java.awt.*; 015 import java.util.StringTokenizer; 016 017 public class VizInfo { 018 private VisualizationFactory factory; 019 private ElementDefinition subjectDefinition; // definition of the subject 020 private int subjectIndex; 021 private Dimension[] dimension; // dimension of the visualization 022 private PredictorFactory predictor; 023 private int interval; 024 private String windowTitle; 025 private Rectangle windowPos; 026 private int beginCall; 027 private int endCall; 028 private float match; 029 private String options; 030 031 private ElementDefinition[] elementDefinition; // definition of elements that can be used as subject 032 private DataFilter[][][] dataFilter; // data filters that can be used by the dimensions 033 private VisualizationDefinition definition; // definition of the visualization 034 035 private boolean validCallRange; 036 037 038 public VizInfo() { 039 factory = null; 040 subjectDefinition = null; 041 subjectIndex = 0; 042 elementDefinition = null; 043 dataFilter = null; 044 dimension = null; 045 windowPos = null; 046 beginCall = Integer.MIN_VALUE; 047 endCall = Integer.MIN_VALUE ; 048 match = 100; 049 validCallRange = false; 050 051 definition = null; 052 interval = -1; 053 predictor = null; 054 windowTitle = null; 055 } 056 057 public VisualizationFactory getFactory() { 058 return factory; 059 } 060 061 public void setFactory(VisualizationFactory factory) { 062 try { 063 createFactory(factory.getFactoryName()); 064 } catch (Exception e) { 065 System.out.println("Class "+factory.getFactoryName()+" creation failed!"); 066 } 067 } 068 069 public VisualizationFactory createFactory(String name) throws Exception{ 070 String fullname = "EVolve/visualization/VizFactory/" + name; 071 ClassLoader loader = ClassLoader.getSystemClassLoader(); 072 factory = (VisualizationFactory)loader.loadClass(fullname).newInstance(); 073 074 factory.createDefinition(); 075 definition = factory.getDefinition(); 076 elementDefinition = Scene.getDataManager().getElementDefinition(definition); 077 dataFilter = new DataFilter[elementDefinition.length][definition.getDimensionDefinition().length][]; 078 for (int i = 0; i < dataFilter.length; i++) { 079 for (int j = 0; j < dataFilter[i].length; j++) { 080 dataFilter[i][j] = Scene.getDataManager().getDataFilter(elementDefinition[i], definition.getDimensionDefinition()[j].getProperty()); 081 for (int k = 0; k < dataFilter[i][j].length; k++) { 082 assert (((dataFilter[i][j][k].getTargetType() != -1) && (dimension[j] instanceof ReferenceDimension)) || ((dataFilter[i][j][k].getTargetType() == -1) && (dimension[j] instanceof ValueDimension))) : "Incompatible dimension type."; 083 } 084 } 085 } 086 087 return this.factory; 088 } 089 090 public ElementDefinition getSubject() { 091 return subjectDefinition; 092 } 093 094 public void setSubject(ElementDefinition subject) { 095 for (int i=0;i<elementDefinition.length;i++) { 096 if (subject.getName().equals(elementDefinition[i].getName())) { 097 subjectDefinition = elementDefinition[i]; 098 subjectIndex = i; 099 break; 100 } 101 } 102 } 103 104 public ElementDefinition createSubjectDefinition(String name) { 105 for (int i = 0; i < elementDefinition.length; i++) { 106 if (elementDefinition[i].getName().equals(name)) { 107 subjectDefinition = elementDefinition[i]; 108 subjectIndex = i; 109 break; 110 } 111 } 112 113 return this.subjectDefinition; 114 } 115 116 public Dimension[] getDimension() { 117 return dimension; 118 } 119 120 public void setDimension(Dimension[] dimension) { 121 this.dimension = new Dimension[dimension.length]; 122 123 for (int i = 0; i < dimension.length; i++) { 124 this.dimension[i] = dimension[i]; 125 } 126 } 127 128 public Dimension[] createDimension(String[] defs) { 129 dimension = factory.createVisualization().createDimension(); 130 131 for (int i=0;i<dimension.length;i++) { 132 for (int j=i;j<defs.length;j++) { 133 if (defs[j].charAt(0) == ';') continue; //a unused entry 134 for (int k=0;k<dataFilter[subjectIndex][i].length;k++) { 135 if (dataFilter[subjectIndex][i][k].getName().equals(defs[j])) { 136 dimension[i].setDataFilter(dataFilter[subjectIndex][i][k]); 137 j = defs.length+1; 138 break; 139 } 140 } 141 } 142 } 143 144 return dimension; 145 } 146 147 public int getInterval() { 148 return interval; 149 } 150 151 public void setInterval(int interval) { 152 this.interval = interval; 153 } 154 155 public Integer createInterval(String interval) { 156 157 StringTokenizer token; 158 float values[] = new float[3]; 159 int counter = 0; 160 161 int pos = interval.indexOf(';'); 162 if (pos == -1) 163 this.interval = Integer.parseInt(interval); 164 else { // exist begin/end/match 165 this.interval = Integer.parseInt(interval.substring(0,pos)); 166 token = new StringTokenizer(interval.substring(pos+1)+",",","); 167 while (token.hasMoreTokens()) { 168 values[counter++] = Float.parseFloat(token.nextToken()); 169 } 170 beginCall = (int)values[0]; 171 endCall = (int)values[1]; 172 if (counter>2) match = values[2]; 173 } 174 175 return new Integer(this.interval); 176 } 177 178 public PredictorFactory getPredictor() { 179 return predictor; 180 } 181 182 public void setPredictor(PredictorFactory predictor) { 183 this.predictor = predictor; 184 } 185 186 public PredictorFactory createPredictor(String name) { 187 if (name.charAt(0) == ';') { 188 this.predictor = null; 189 } else { 190 this.predictor = new DefaultPredictorFactory(); 191 } 192 193 return this.predictor; 194 } 195 196 public void setWindowPosition(Rectangle position) { 197 this.windowPos = position; 198 } 199 200 public Rectangle getWindowPosition() { 201 return this.windowPos; 202 } 203 204 public void createWindowPosition(String x,String y,String w,String h) { 205 this.windowPos = new Rectangle(new Integer(x).intValue(),new Integer(y).intValue(), 206 new Integer(w).intValue(),new Integer(h).intValue()); 207 } 208 209 public void reset() { 210 factory = null; 211 subjectDefinition = null; 212 subjectIndex = 0; 213 dimension = null; 214 definition = null; 215 interval = -1; 216 predictor = null; 217 windowPos = null; 218 } 219 220 public VisualizationDefinition getDefinition() { 221 return definition; 222 } 223 224 public void setDefinition(VisualizationDefinition def) { 225 definition = def; 226 } 227 228 public VisualizationDefinition creatDefinition() { 229 return null; 230 } 231 232 public String getTitle() { 233 return windowTitle; 234 } 235 236 public void createTitle(String title) { 237 this.windowTitle = title; 238 } 239 240 public int getBeginCall() { 241 return beginCall; 242 } 243 244 public int getEndCall() { 245 return endCall; 246 } 247 248 public float getMatch() { 249 return match; 250 } 251 252 public boolean isValidCallRange() { 253 return validCallRange; 254 } 255 256 //options are in string format 257 public String getOptions() { 258 return options; 259 } 260 261 public void setOptions(String options) { 262 this.options = options; 263 } 264 265 public void createOptions(String options) { 266 this.options = options; 267 } 268 }