001: /**
002: * Copyright (c) 2003-2007, David A. Czarnecki
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions are met:
007: *
008: * Redistributions of source code must retain the above copyright notice, this list of conditions and the
009: * following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
011: * following disclaimer in the documentation and/or other materials provided with the distribution.
012: * Neither the name of "David A. Czarnecki" and "blojsom" nor the names of its contributors may be used to
013: * endorse or promote products derived from this software without specific prior written permission.
014: * Products derived from this software may not be called "blojsom", nor may "blojsom" appear in their name,
015: * without prior written permission of David A. Czarnecki.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
018: * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
019: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
020: * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
021: * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
022: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
025: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
026: * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
027: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
028: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
029: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
030: */package org.blojsom.plugin.weather.beans;
031:
032: import org.w3c.dom.Document;
033: import org.w3c.dom.Node;
034: import org.w3c.dom.NodeList;
035: import org.w3c.dom.DOMException;
036:
037: import java.text.MessageFormat;
038:
039: /**
040: * NWSInformation
041: *
042: * @author David Czarnecki
043: * @author Mark Lussier
044: * @version $Id: NWSInformation.java,v 1.2 2007/01/17 02:35:15 czarneckid Exp $
045: * @since blojsom 3.0
046: */
047: public class NWSInformation implements WeatherInformation {
048:
049: public static final String NWS_URL_FORMAT = "http://www.nws.noaa.gov/data/current_obs/{0}.xml";
050:
051: public static final String TAG_CREDIT = "credit";
052: public static final String TAG_CREDIT_URL = "credit_URL";
053: public static final String TAG_LOCATION = "location";
054: public static final String TAG_OBSERVATION = "observation_time";
055: public static final String TAG_WEATHER = "weather";
056: public static final String TAG_TEMP_STRING = "temperature_string";
057: public static final String TAG_TEMP_F = "temp_f";
058: public static final String TAG_TEMP_C = "temp_c";
059: public static final String TAG_HUMIDITY = "relative_humidity";
060: public static final String TAG_WIND_STRING = "wind_string";
061: public static final String TAG_WIND_DIRECTION = "wind_dir";
062: public static final String TAG_WIND_DEGREES = "wind_degrees";
063: public static final String TAG_WIND_MPH = "wind_mph";
064: public static final String TAG_WIND_GUST_MPH = "wind_gust_mph";
065: public static final String TAG_STATION = "station_id";
066: public static final String TAG_VISIBILITY = "visibility_mi";
067: public static final String TAG_HISTORY = "two_day_history_url";
068:
069: private String _temperatureF = "-0 F";
070: private String _temperatureC = "-0 C";
071: private String _stationCode = "";
072: private String _location = "a";
073: private String _visibility = "";
074: private String _wind = "";
075: private String _history = "#";
076: private Document _document;
077:
078: /**
079: * Public Constructor
080: *
081: * @param stationCode The Provider Station Id
082: */
083: public NWSInformation(String stationCode) {
084: _stationCode = stationCode;
085: }
086:
087: /**
088: * Parse an XML document containing weather related information
089: *
090: * @param document XML document with weather information
091: */
092: public void parseDocument(Document document) {
093: _document = document;
094:
095: _temperatureC = getValueOfTag(TAG_TEMP_C);
096: _temperatureF = getValueOfTag(TAG_TEMP_F);
097: _stationCode = getValueOfTag(TAG_STATION);
098: _location = getValueOfTag(TAG_LOCATION);
099: _visibility = getValueOfTag(TAG_VISIBILITY);
100: _wind = getValueOfTag(TAG_WIND_STRING);
101: _history = getValueOfTag(TAG_HISTORY);
102: }
103:
104: /**
105: * Get Contents of a Tag in the Weather Data
106: *
107: * @param tag The Tag Name
108: * @return Value of the Element as a String
109: */
110: private String getValueOfTag(String tag) {
111: String result = null;
112: try {
113: NodeList nodeList = _document.getElementsByTagName(tag);
114: if (nodeList != null) {
115: Node tempNode = nodeList.item(0);
116: Node value = tempNode.getFirstChild();
117: if (value != null) {
118: result = value.getNodeValue();
119: }
120: }
121: } catch (DOMException e) {
122: result = null;
123: }
124:
125: return result;
126: }
127:
128: /**
129: * Get the Location of the Weather Station
130: *
131: * @return The Weather Station name as a String
132: */
133: public String getLocation() {
134: return _location;
135: }
136:
137: /**
138: * Get the Station Id
139: *
140: * @return The Station Id as a String
141: */
142: public String getStationCode() {
143: return _stationCode;
144: }
145:
146: /**
147: * Get the current temperature as Farenheit
148: *
149: * @return A String containing the current temperature in Farenheit
150: */
151: public String getFahrenheit() {
152: return _temperatureF + " F";
153: }
154:
155: /**
156: * Get the current temperate as Celcius
157: *
158: * @return A String containing the current temperature as Celcius
159: */
160: public String getCelcius() {
161: return _temperatureC + " C";
162: }
163:
164: /**
165: * Get the current Visibility
166: *
167: * @return The current visbility as a String
168: */
169: public String getVisibility() {
170: return _visibility;
171: }
172:
173: /**
174: * Get the current Wind conditions
175: *
176: * @return The current wind conditions as a String
177: */
178: public String getWind() {
179: return _wind;
180: }
181:
182: /**
183: * Get the URL containing a link to weather history information
184: *
185: * @return URL for weather history information
186: */
187: public String getHistoryUrl() {
188: return _history;
189: }
190:
191: /**
192: * Gets the URL required to fetch this resource
193: *
194: * @return The resource location as a String
195: */
196: public String getProviderUrl() {
197: return MessageFormat.format(NWS_URL_FORMAT,
198: new Object[] { _stationCode });
199: }
200:
201: /**
202: * Get the value for a given tag from the parsed XML weather information
203: *
204: * @param tag Tag to retrieve
205: * @return Value of tag or <code>null</code> if the tag is not present
206: * @since blojsom 2.24
207: */
208: public String getValueForTag(String tag) {
209: return getValueOfTag(tag);
210: }
211: }
|