Worldwind public release 0.2.1
[worldwind-tracker.git] / gov / nasa / worldwind / examples / WMSCapabilitiesParsing.java
blob2c35bf5c5782fb001890e5da51ed25c67dd1fd23
1 /*
2 Copyright (C) 2001, 2006 United States Government
3 as represented by the Administrator of the
4 National Aeronautics and Space Administration.
5 All Rights Reserved.
6 */
7 package gov.nasa.worldwind.examples;
9 import gov.nasa.worldwind.*;
10 import gov.nasa.worldwind.wms.*;
11 import org.w3c.dom.*;
12 import org.xml.sax.*;
14 import javax.swing.*;
15 import javax.swing.border.*;
16 import javax.xml.parsers.*;
17 import java.awt.*;
18 import java.awt.event.*;
19 import java.io.*;
20 import java.net.*;
22 /**
23 * @author tag
24 * @version $Id: WMSCapabilitiesParsing.java 2131 2007-06-22 22:45:35Z jason $
26 public class WMSCapabilitiesParsing
28 private static final String TAB = "\t";
30 private static final String[] servers = new String[]
32 "http://neowms.sci.gsfc.nasa.gov/wms/wms"
35 private static class MainFrame extends JFrame
37 private static JComboBox serverList = new JComboBox(servers);
38 private static JTextArea outputArea = new JTextArea(40, 80);
40 private static class RunAction extends AbstractAction
42 public RunAction()
44 super("Get Capabilities");
47 public void actionPerformed(ActionEvent actionEvent)
49 outputArea.setText("");
51 try
53 DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
54 docBuilderFactory.setNamespaceAware(true);
55 DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
56 Document doc;
58 String s = (String) serverList.getSelectedItem();
59 if (s.startsWith("file://"))
61 File f = new File(s.substring(7, s.length()));
62 if (!f.exists())
64 System.out.println(f.getPath() + " does not exist.");
65 return;
67 doc = docBuilder.parse(f);
69 else
71 CapabilitiesRequest req = new CapabilitiesRequest(new URI(s));
72 doc = docBuilder.parse(req.toString());
75 Capabilities caps = Capabilities.parse(doc);
77 print("version", caps.getVersion());
78 print("update sequence", caps.getUpdateSequence());
79 print("abstract", caps.getAbstract());
80 print("title", caps.getTitle());
81 print("name", caps.getName());
82 print("fees", caps.getFees());
83 print("access constraints", caps.getAccessConstraints());
84 print("layer limit", caps.getLayerLimit());
85 print("max width", caps.getMaxWidth());
86 print("max height", caps.getMaxHeight());
87 print("exception formats", caps.getExceptionFormats());
88 print("map get url", caps.getGetMapRequestGetURL());
89 print("capabilities get url", caps.getGetCapabilitiesRequestGetURL());
90 print("feature info get url", caps.getFeatureInfoRequestGetURL());
91 print("map post url", caps.getGetMapRequestPostURL());
92 print("capabilities post url", caps.getGetCapabilitiesRequestPostURL());
93 print("feature info post url", caps.getFeatureInfoRequestPostURL());
94 print("keywords", caps.getKeywordList());
96 Element[] elements = caps.getNamedLayers();
97 if (elements == null || elements.length == 0)
98 print("named layers", "empty");
99 else
100 for (Element e : elements)
102 print("named layer", caps.getLayerName(e));
105 Element layer = caps.getLayer();
106 if (layer != null)
107 printLayer(caps, layer);
109 catch (URISyntaxException e)
111 e.printStackTrace();
113 catch (MalformedURLException e)
115 e.printStackTrace();
117 catch (IOException e)
119 e.printStackTrace();
121 catch (ParserConfigurationException e)
123 e.printStackTrace();
125 catch (SAXException e)
127 e.printStackTrace();
132 private static String indent = "";
134 private static void printLayer(Capabilities caps, Element layer)
136 print(indent, "===== LAYER =====");
137 String lastIndent = indent;
138 indent += TAB;
140 print("layer title", caps.getLayerTitle(layer));
141 print("layer name", caps.getLayerName(layer));
142 print("layer abstract", caps.getLayerAbstract(layer));
143 print("layer srs", caps.getLayerSRS(layer));
144 print("layer crs", caps.getLayerCRS(layer));
146 print("layer scale", "min " + caps.getLayerMinScaleDenominator(layer) + ", "
147 + ", max " + caps.getLayerMaxScaleDenominator(layer));
148 print("layer queryable", caps.getLayerQueryable(layer));
149 print("layer cascaded", caps.getLayerCascaded(layer));
150 print("layer opaque", caps.getLayerOpaque(layer));
151 print("layer nosubsets", caps.getLayerNoSubsets(layer));
152 print("layer fixed width, height", caps.getLayerFixedWidth(layer) + ", "
153 + caps.getLayerFixedHeight(layer));
154 BoundingBox bbox = caps.getLayerGeographicBoundingBox(layer);
155 print("layer geographic bounding box", bbox != null ? bbox.toString() : "empty");
157 print("layer keywords", caps.getLayerKeywordList(layer));
159 print("layer attribution url title", caps.getLayerAttributionTitle(layer));
160 print("layer attribution url online resource", caps.getLayerAttributionURL(layer));
161 print("layer attribution url logo format", caps.getLayerAttributionLogoFormat(layer));
162 print("layer attribution url logo online resource", caps.getLayerAttributionLogoURL(layer));
164 print("layer data url format", caps.getLayerDataURLFormat(layer));
165 print("layer data URL", caps.getLayerDataURL(layer));
167 print("layer feature list url format", caps.getLayerFeatureListFormat(layer));
168 print("layer feature list URL", caps.getLayerFeatureListURL(layer));
170 Element[] elements;
172 elements = caps.getLayerStyles(layer);
173 if (elements == null || elements.length == 0)
174 print("layer styles", "empty");
175 else
176 for (Element e : elements)
178 print("layer style name", caps.getStyleName(e));
179 print("layer style title", caps.getStyleTitle(e));
180 print("layer style abstract", caps.getStyleAbstract(e));
181 print("layer style legend URL", caps.getStyleLegendURL(e));
182 print("layer style legend format", caps.getStyleLegendFormat(e));
183 print("layer style legend width", caps.getStyleLegendWidth(e));
184 print("layer style legend height", caps.getStyleLegendHeight(e));
185 print("layer style sheet URL", caps.getStyleSheetURL(e));
186 print("layer style sheet format", caps.getStyleSheetURLFormat(e));
189 elements = caps.getLayerAuthorityURLs(layer);
190 if (elements == null || elements.length == 0)
191 print("layer authority URL", "empty");
192 else
193 for (Element e : elements)
195 print("layer authority URL", caps.getAuthorityName(e) + ": " + caps.getAuthorityURL(e));
198 elements = caps.getLayerMetadataURLs(layer);
199 if (elements == null || elements.length == 0)
200 print("layer metadata URL", "empty");
201 else
202 for (Element e : elements)
204 print("metadata URL", caps.getMetadataType(e) + ": " + caps.getMetadataFormat(e) + ", "
205 + caps.getAuthorityURL(e));
208 elements = caps.getLayerIdentifiers(layer);
209 if (elements == null || elements.length == 0)
210 print("layer identifiers URL", "empty");
211 else
212 for (Element e : elements)
214 print("layer identifiers authority ", caps.getIdentifierAuthority(e)
215 + ", identifier " + caps.getIdentifier(e));
218 elements = caps.getLayerDimensions(layer);
219 if (elements == null || elements.length == 0)
220 print("layer dimensions", "empty");
221 else
222 for (Element e : elements)
224 print("layer dimension current", caps.getDimensionCurrent(e));
225 print("layer dimension default", caps.getDimensionDefault(e));
226 print("layer dimension extent", caps.getDimensionExtent(e));
227 print("layer dimension multiple values", caps.getDimensionMultipleValues(e));
228 print("layer dimension name", caps.getDimensionName(e));
229 print("layer dimension nearest value", caps.getDimensionNearestValue(e));
230 print("layer dimension units", caps.getDimensionUnits(e));
231 print("layer dimension unit symbol", caps.getDimensionUnitSymbol(e));
234 elements = caps.getLayerExtents(layer);
235 if (elements == null || elements.length == 0)
236 print("layer extents", "empty");
237 else
238 for (Element e : elements)
240 print("layer extent current", caps.getExtentCurrent(e));
241 print("layer extent default", caps.getExtentDefault(e));
242 print("layer extent multiple values", caps.getExtentMultipleValues(e));
243 print("layer extent name", caps.getExtentName(e));
244 print("layer extent nearest value", caps.getExtentNearestValue(e));
245 print("layer extent extent", caps.getExtentText(e));
248 BoundingBox[] bboxes = caps.getLayerBoundingBoxes(layer);
249 if (bboxes == null || bboxes.length == 0)
250 print("layer bounding boxes", "empty");
251 else
252 for (BoundingBox bb : bboxes)
254 print("bounding box", bb.toString());
257 Element[] children = caps.getLayerSubLayers(layer);
258 if (children == null || children.length == 0)
259 print("layer sublayers", "empty");
260 else if (children != null)
262 for (Element l : children)
264 printLayer(caps, l);
268 indent = lastIndent;
271 private static void print(String name, String s)
273 outputArea.append(indent);
275 if (name != null)
276 outputArea.append(name + ": ");
278 outputArea.append(s == null ? "null" : s.equals("") ? "empty" : s.replaceAll("\n", " ").trim());
279 outputArea.append("\n");
282 private static void print(String name, String[] ss)
284 outputArea.append(indent + name + "\n");
286 if (ss == null)
288 print(TAB, "null");
289 return;
292 for (String s : ss)
294 if (s != null)
295 print(TAB, s.trim());
299 public MainFrame()
303 JPanel mainPanel = new JPanel();
304 mainPanel.setLayout(new BorderLayout());
305 mainPanel.setBorder(BorderFactory.createEmptyBorder(9, 9, 9, 9));
307 JPanel outputContainer = new JPanel();
308 outputContainer.setBorder(new TitledBorder("Capabilities"));
309 outputArea.setLineWrap(true);
310 outputContainer.add(new JScrollPane(outputArea), BorderLayout.CENTER);
312 JPanel controlContainer = new JPanel(new BorderLayout());
313 controlContainer.setBorder(new TitledBorder("Server"));
314 JButton btn = new JButton(new RunAction());
315 controlContainer.add(btn, BorderLayout.WEST);
316 serverList.setEditable(false);
317 controlContainer.add(serverList, BorderLayout.CENTER);
319 mainPanel.add(controlContainer, BorderLayout.NORTH);
320 mainPanel.add(outputContainer, BorderLayout.CENTER);
321 this.getContentPane().add(mainPanel, BorderLayout.CENTER);
323 this.pack();
325 java.awt.Dimension prefSize = this.getPreferredSize();
326 prefSize.setSize(prefSize.getWidth(), 1.1 * prefSize.getHeight());
327 this.setSize(prefSize);
329 java.awt.Dimension parentSize;
330 java.awt.Point parentLocation = new java.awt.Point(0, 0);
331 parentSize = Toolkit.getDefaultToolkit().getScreenSize();
332 int x = parentLocation.x + (parentSize.width - prefSize.width) / 2;
333 int y = parentLocation.y + (parentSize.height - prefSize.height) / 2;
334 this.setLocation(x, y);
335 this.setResizable(true);
337 catch (Exception e)
339 e.printStackTrace();
344 static
346 if (Configuration.isMacOS())
348 System.setProperty("apple.laf.useScreenMenuBar", "true");
349 System.setProperty("com.apple.mrj.application.apple.menu.about.name", "World Wind wms Caps Parsing");
350 System.setProperty("com.apple.mrj.application.growbox.intrudes", "false");
354 public static void main(String[] arg)
356 final MainFrame frame = new MainFrame();
357 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
358 frame.setVisible(true);