001: /*
002: * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions
006: * are met:
007: *
008: * - Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: *
011: * - Redistribution in binary form must reproduce the above copyright
012: * notice, this list of conditions and the following disclaimer in
013: * the documentation and/or other materials provided with the
014: * distribution.
015: *
016: * Neither the name of Sun Microsystems, Inc. or the names of
017: * contributors may be used to endorse or promote products derived
018: * from this software without specific prior written permission.
019: *
020: * This software is provided "AS IS," without a warranty of any
021: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
022: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
023: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
024: * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
025: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
026: * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
027: * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
028: * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
029: * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
030: * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
031: * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
032: *
033: * You acknowledge that Software is not designed, licensed or intended
034: * for use in the design, construction, operation or maintenance of
035: * any nuclear facility.
036: */
037:
038: package com.sun.portal.portlet.samples.weatherportlet;
039:
040: import javax.portlet.PortletConfig;
041: import javax.portlet.PortletException;
042: import javax.portlet.ActionRequest;
043: import javax.portlet.ActionResponse;
044: import javax.portlet.RenderRequest;
045: import javax.portlet.RenderResponse;
046: import javax.portlet.PortletRequestDispatcher;
047: import javax.portlet.PortletPreferences;
048: import javax.portlet.UnavailableException;
049: import javax.portlet.PortletMode;
050: import javax.portlet.ValidatorException;
051:
052: import java.io.IOException;
053: import java.io.PrintWriter;
054: import java.net.URLEncoder;
055:
056: import com.sun.portal.portlet.samples.jspportlet.JSPPortlet;
057:
058: /**
059: * This portlet uses the JAXRPC API to get to a RPC based weather web service.
060: * The weather web service gets a zip code as input, and returns the
061: * current temperature as output.
062: */
063: public class WeatherPortlet extends JSPPortlet {
064:
065: private WeatherService _weatherService;
066:
067: public void init(PortletConfig config) throws PortletException,
068: UnavailableException {
069: String weatherWSURLString;
070:
071: super .init(config);
072:
073: weatherWSURLString = config.getInitParameter("weather.url");
074: if (weatherWSURLString == null) {
075: throw new UnavailableException(
076: "Weather Service URL not found", -1);
077: }
078: try {
079: _weatherService = new WeatherService(weatherWSURLString);
080: } catch (Exception ex) {
081: throw new UnavailableException(
082: "Weather Service can not be initialized");
083: }
084: }
085:
086: public void processAction(ActionRequest aReq, ActionResponse aRes)
087: throws PortletException, IOException {
088: PortletPreferences prefs = aReq.getPreferences();
089: String zip = aReq.getParameter("zip");
090:
091: if (aReq.getPortletMode().equals(PortletMode.VIEW)) {
092: if (zip == null) {
093: zip = prefs.getValue("zip", "10000");
094: }
095: aRes.setRenderParameter("zip", zip);
096: } else if (aReq.getPortletMode().equals(PortletMode.EDIT)) {
097: boolean editOK;
098: String errorMsg = null;
099: String unit = aReq.getParameter("unit");
100: prefs.setValue("zip", zip);
101: prefs.setValue("unit", unit);
102: try {
103: prefs.store();
104: editOK = true;
105: } catch (ValidatorException ex) {
106: editOK = false;
107: errorMsg = ex.getMessage();
108: }
109: if (editOK) {
110: aRes.setPortletMode(PortletMode.VIEW);
111: } else {
112: aRes.setRenderParameter("error", errorMsg);
113: }
114: }
115:
116: }
117:
118: public void doView(RenderRequest rReq, RenderResponse rRes)
119: throws PortletException, IOException {
120:
121: PortletPreferences prefs = rReq.getPreferences();
122: String zip = rReq.getParameter("zip");
123: if (zip == null) {
124: zip = prefs.getValue("zip", "10000");
125: }
126: String unit = prefs.getValue("unit", "F");
127: rRes.setContentType(rReq.getResponseContentType());
128:
129: try {
130: Weather weather = _weatherService.getWeather(zip, unit
131: .toUpperCase().charAt(0));
132: rReq.setAttribute("weather", weather);
133:
134: super .doView(rReq, rRes);
135: } catch (Exception ex) {
136: rRes.setProperty("expiration-cache", "0");
137: PortletRequestDispatcher rd = getPortletContext()
138: .getRequestDispatcher(
139: "/weather/weatherServiceUnavailable.jsp");
140: rd.include(rReq, rRes);
141: }
142: }
143:
144: public void doEdit(RenderRequest rReq, RenderResponse rRes)
145: throws PortletException {
146:
147: PortletPreferences prefs = rReq.getPreferences();
148: String zip = prefs.getValue("zip", "1000");
149: String unit = prefs.getValue("unit", "F");
150: rReq.setAttribute("zip", zip);
151: rReq.setAttribute("unit", unit);
152:
153: super .doEdit(rReq, rRes);
154:
155: }
156:
157: public void destroy() {
158: _weatherService.destroy();
159: _weatherService = null;
160: }
161:
162: }
|