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 }