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    }