001 /*
002 * This file is part of McIDAS-V
003 *
004 * Copyright 2007-2013
005 * Space Science and Engineering Center (SSEC)
006 * University of Wisconsin - Madison
007 * 1225 W. Dayton Street, Madison, WI 53706, USA
008 * https://www.ssec.wisc.edu/mcidas
009 *
010 * All Rights Reserved
011 *
012 * McIDAS-V is built on Unidata's IDV and SSEC's VisAD libraries, and
013 * some McIDAS-V source code is based on IDV and VisAD source code.
014 *
015 * McIDAS-V is free software; you can redistribute it and/or modify
016 * it under the terms of the GNU Lesser Public License as published by
017 * the Free Software Foundation; either version 3 of the License, or
018 * (at your option) any later version.
019 *
020 * McIDAS-V is distributed in the hope that it will be useful,
021 * but WITHOUT ANY WARRANTY; without even the implied warranty of
022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023 * GNU Lesser Public License for more details.
024 *
025 * You should have received a copy of the GNU Lesser Public License
026 * along with this program. If not, see http://www.gnu.org/licenses.
027 */
028
029 package edu.wisc.ssec.mcidasv.chooser;
030
031
032 import edu.wisc.ssec.mcidasv.ResourceManager;
033
034 import java.awt.BorderLayout;
035 import java.awt.Dimension;
036
037 import java.awt.event.ActionListener;
038 import java.awt.event.ActionEvent;
039 import java.awt.event.KeyAdapter;
040 import java.awt.event.KeyEvent;
041 import java.awt.event.KeyListener;
042 import java.awt.event.ItemListener;
043 import java.awt.event.ItemEvent;
044
045 import java.util.ArrayList;
046 import java.util.List;
047 import java.util.StringTokenizer;
048
049 import javax.swing.*;
050
051 import org.w3c.dom.Document;
052 import org.w3c.dom.Element;
053 import org.w3c.dom.Node;
054 import org.w3c.dom.NodeList;
055
056 import ucar.unidata.data.imagery.AddeImageDescriptor;
057 import ucar.unidata.ui.XmlTree;
058 import ucar.unidata.ui.imagery.ImageSelector;
059
060 import ucar.unidata.util.GuiUtils;
061 import ucar.unidata.util.Misc;
062 import ucar.unidata.util.NamedThing;
063 import ucar.unidata.util.PreferenceList;
064
065 import ucar.unidata.xml.XmlResourceCollection;
066 import ucar.unidata.xml.XmlUtil;
067
068
069 public class ImageParameters extends NamedThing {
070
071 private static final String TAG_FOLDER = "folder";
072 private static final String TAG_SAVESET = "set";
073 private static final String ATTR_NAME = "name";
074 private static final String ATTR_URL = "url";
075
076 private static final String[] ATTRS = { "user", "proj", "pos",
077 "satband", "band", "id", "key", "latlon", "linele", "loc",
078 "mag", "num", "place", "size" , "spac", "unit", "nav",
079 "center", "uleft", "lleft", "uright", "lright", "descriptor",
080 "group"
081 };
082
083 private String server;
084 private List properties;
085 private List values;
086
087 private String user;
088 private String proj;
089 private String pos;
090 private String satband;
091 private String band;
092 private String id;
093 private String key;
094 private String latlon;
095 private String linele;
096 private String loc;
097 private String mag;
098 private String num;
099 private String place;
100 private String size;
101 private String spac;
102 private String unit;
103 private String nav;
104 private String center;
105 private String uleft;
106 private String lleft;
107 private String uright;
108 private String lright;
109 private String descriptor;
110 private String group;
111
112
113 public ImageParameters(String url) {
114 List props = new ArrayList();
115 List vals = new ArrayList();
116 parametersBreakdown(url, props, vals);
117 this.properties = props;
118 this.values = vals;
119 setValues(props, vals);
120 }
121
122 public ImageParameters(List props, List vals) {
123 this.properties = props;
124 this.values = vals;
125 setValues(props, vals);
126 }
127
128 public List getProperties() {
129 return this.properties;
130 }
131
132 public List getValues() {
133 return this.values;
134 }
135
136 public String getServer() {
137 return this.server;
138 }
139
140 private void setValues(List props, List vals) {
141 int len = props.size();
142 if (len < 1) return;
143 for (int i=0; i<len; i++) {
144 String prop = (String)props.get(i);
145 if (!isKeyword(prop)) break;
146 String val = (String)vals.get(i);
147 if (prop.equals("user")) {
148 user = val;
149 break;
150 }
151 if (prop.equals("proj")) {
152 proj = val;
153 break;
154 }
155 if (prop.equals("pos")) {
156 pos = val;
157 break;
158 }
159 if (prop.equals("satband")) {
160 satband = val;
161 break;
162 }
163 if (prop.equals("band")) {
164 band = val;
165 break;
166 }
167 if (prop.equals("id")) {
168 id = val;
169 break;
170 }
171 if (prop.equals("key")) {
172 key = val;
173 break;
174 }
175 if (prop.equals("latlon")) {
176 latlon = val;
177 break;
178 }
179 if (prop.equals("linele")) {
180 linele = val;
181 break;
182 }
183 if (prop.equals("loc")) {
184 loc = val;
185 break;
186 }
187 if (prop.equals("mag")) {
188 mag = val;
189 break;
190 }
191 if (prop.equals("num")) {
192 num = val;
193 break;
194 }
195 if (prop.equals("place")) {
196 place = val;
197 break;
198 }
199 if (prop.equals("size")) {
200 size = val;
201 break;
202 }
203 if (prop.equals("spac")) {
204 spac = val;
205 break;
206 }
207 if (prop.equals("unit")) {
208 unit = val;
209 break;
210 }
211 if (prop.equals("nav")) {
212 nav = val;
213 break;
214 }
215 if (prop.equals("center")) {
216 center = val;
217 break;
218 }
219 if (prop.equals("uleft")) {
220 uleft = val;
221 break;
222 }
223 if (prop.equals("lleft")) {
224 lleft = val;
225 break;
226 }
227 if (prop.equals("uright")) {
228 uright = val;
229 break;
230 }
231 if (prop.equals("lright")) {
232 lright = val;
233 break;
234 }
235 if (prop.equals("descriptor")) {
236 descriptor = val;
237 break;
238 }
239 if (prop.equals("group")) {
240 group = val;
241 break;
242 }
243 }
244 }
245
246 private boolean isKeyword(String prop) {
247 for (int i=0; i<ATTRS.length; i++) {
248 if (prop.equals(ATTRS[i])) return true;
249 }
250 return false;
251 }
252
253 public String getUser() {
254 return user;
255 }
256
257 public String getProj() {
258 return proj;
259 }
260
261 public String getPos() {
262 return pos;
263 }
264
265 public String getSatband() {
266 return satband;
267 }
268
269 public String getBand() {
270 return band;
271 }
272
273 public String getId() {
274 return id;
275 }
276
277 public String getKey() {
278 return key;
279 }
280
281 public String getLatlon() {
282 return latlon;
283 }
284
285 public String getLinele() {
286 return linele;
287 }
288
289 public String getLoc() {
290 return loc;
291 }
292
293 public String getMag() {
294 return mag;
295 }
296
297 public String getNum() {
298 return num;
299 }
300
301 public String getPlace() {
302 return place;
303 }
304
305 public String getSize() {
306 return size;
307 }
308
309 public String getSpac() {
310 return spac;
311 }
312
313 public String getUnit() {
314 return unit;
315 }
316
317 public String getNav() {
318 return nav;
319 }
320
321 public String getCenter() {
322 return center;
323 }
324
325 public String getUleft() {
326 return uleft;
327 }
328
329 public String getLleft() {
330 return lleft;
331 }
332
333 public String getUright() {
334 return uright;
335 }
336
337 public String getLright() {
338 return lright;
339 }
340
341 public String getDescriptor() {
342 return descriptor;
343 }
344
345 public String getGroup() {
346 return group;
347 }
348
349 private void parametersBreakdown(String url, List props, List vals) {
350 //System.out.println("url=" + url);
351 String prop;
352 String val;
353 //StringTokenizer tok = new StringTokenizer(url, "&");
354 StringTokenizer tok = new StringTokenizer(url, "/");
355 tok.nextToken();
356 this.server = tok.nextToken();
357 //System.out.println("server=" + server);
358 tok = new StringTokenizer(url, "&");
359 String remnant = tok.nextToken();
360 while (tok.hasMoreElements()) {
361 remnant = tok.nextToken();
362 StringTokenizer tok2 = new StringTokenizer(remnant, "=");
363 if (tok2.countTokens() >= 2) {
364 props.add(tok2.nextToken());
365 vals.add(tok2.nextToken());
366 }
367 }
368 /*
369 for (int i=0; i<props.size(); i++) {
370 System.out.println(props.get(i) + "=" + vals.get(i));
371 }
372 */
373 }
374 }