001: /*
002: * $Header: /export/home/cvsroot/MyPersonalizerRepository/MyPersonalizer/Subsystems/Portal/Sources/es/udc/mypersonalizer/portal/view/mainpage/ServiceView.java,v 1.1.1.1 2004/03/25 12:08:41 fbellas Exp $
003: * $Revision: 1.1.1.1 $
004: * $Date: 2004/03/25 12:08:41 $
005: *
006: * =============================================================================
007: *
008: * Copyright (c) 2003, The MyPersonalizer Development Group
009: * (http://www.tic.udc.es/~fbellas/mypersonalizer/index.html) at
010: * University Of A Coruna
011: * All rights reserved.
012: *
013: * Redistribution and use in source and binary forms, with or without
014: * modification, are permitted provided that the following conditions are met:
015: *
016: * - Redistributions of source code must retain the above copyright notice,
017: * this list of conditions and the following disclaimer.
018: *
019: * - Redistributions in binary form must reproduce the above copyright notice,
020: * this list of conditions and the following disclaimer in the documentation
021: * and/or other materials provided with the distribution.
022: *
023: * - Neither the name of the University Of A Coruna nor the names of its
024: * contributors may be used to endorse or promote products derived from
025: * this software without specific prior written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
028: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
029: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
030: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
031: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
032: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
033: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
034: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
035: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
036: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
037: * POSSIBILITY OF SUCH DAMAGE.
038: *
039: */
040:
041: package es.udc.mypersonalizer.portal.view.mainpage;
042:
043: import java.util.Map;
044:
045: import javax.servlet.http.HttpServletRequest;
046: import javax.servlet.http.HttpServletResponse;
047:
048: import es.udc.mypersonalizer.kernel.log.Log;
049: import es.udc.mypersonalizer.kernel.log.LogManager;
050: import es.udc.mypersonalizer.kernel.log.LogNamingConventions;
051: import es.udc.mypersonalizer.kernel.model.repository.interfaces.ServiceButtonsState;
052: import es.udc.mypersonalizer.kernel.model.repository.interfaces.ServiceProperty;
053: import es.udc.mypersonalizer.kernel.model.repository.interfaces.ServicePropertyKey;
054: import es.udc.mypersonalizer.portal.controller.services.ServiceReplyManager;
055:
056: /**
057: * This bean contains information about a service being displayed in a user's
058: * main page and provides the mechanism to call a service and receive its
059: * reply. Its contents vary depending on its reply being cached or not.
060: * If the reply is not cached, this bean will contain:
061: * <ul>
062: * <li>The <b>service identifier</b>.</li>
063: * <li>The <b>request</b>.</li>
064: * <li>The <b>response</b>.</li>
065: * <li>The Map of <b>allowed buttons</b>, indexed by button name, and each
066: * values being a {@link ButtonView} object.
067: * <li>The <b>service property key</b>.</li>
068: * <li>The <b>service property</b>.</li>
069: * <li>The <b>service buttons state</b>.</li>
070: * </ul>
071: *
072: * And if the reply is cached, the contents would be:
073: * <ul>
074: * <li>The <b>service identifier</b>.</li>
075: * <li>The <b>request</b>.</li>
076: * <li>The <b>response</b>.</li>
077: * <li>The Map of <b>allowed buttons</b>, indexed by button name, and each
078: * values being a {@link ButtonView} object.
079: * <li>The <b>service property key</b>.</li>
080: * <li>The <b>cached reply</b> for this service.</li>
081: * </ul>
082: *
083: * When the reply is not cached, the <tt>getReply</tt> method performs
084: * the request to the service by callying {@link ServiceReplyManager}.getReply.
085: *
086: * @author Daniel Fernandez
087: * @author Fernando Bellas
088: * @since 1.0
089: */
090: public class ServiceView {
091:
092: /**
093: * The service identifier.
094: */
095: private String serviceIdentifier = null;
096:
097: /**
098: * The request.
099: */
100: private HttpServletRequest request = null;
101:
102: /**
103: * The response.
104: */
105: private HttpServletResponse response = null;
106:
107: /**
108: * The Map of allowed buttons.
109: */
110: private Map allowedButtons = null;
111:
112: /**
113: * The service property key.
114: */
115: private ServicePropertyKey servicePropertyKey = null;
116:
117: /**
118: * The service property.
119: */
120: private ServiceProperty serviceProperty = null;
121:
122: /**
123: * The service buttons state.
124: */
125: private ServiceButtonsState serviceButtonsState = null;
126:
127: /**
128: * The service cached reply.
129: */
130: private String cachedReply = null;
131:
132: /**
133: * Creates a new instance of a cached-reply ServiceView.
134: *
135: * @param serviceIdentifier the service identifier.
136: * @param request the request.
137: * @param response the response.
138: * @param allowedButtons the Map of allowed buttons.
139: * @param cachedReply the cached reply.
140: */
141: public ServiceView(String serviceIdentifier,
142: HttpServletRequest request, HttpServletResponse response,
143: Map allowedButtons, String cachedReply) {
144: this .serviceIdentifier = serviceIdentifier;
145: this .request = request;
146: this .response = response;
147: this .allowedButtons = allowedButtons;
148: this .cachedReply = cachedReply;
149: }
150:
151: /**
152: * Creates a new instance of a non-cached-reply ServiceView.
153: *
154: * @param serviceIdentifier the service identifier.
155: * @param request the request.
156: * @param response the response.
157: * @param allowedButtons the response.
158: * @param servicePropertyKey the service property key.
159: * @param serviceProperty the service property.
160: * @param serviceButtonsState the service buttons state.
161: */
162: public ServiceView(String serviceIdentifier,
163: HttpServletRequest request, HttpServletResponse response,
164: Map allowedButtons, ServicePropertyKey servicePropertyKey,
165: ServiceProperty serviceProperty,
166: ServiceButtonsState serviceButtonsState) {
167: this .serviceIdentifier = serviceIdentifier;
168: this .request = request;
169: this .response = response;
170: this .allowedButtons = allowedButtons;
171: this .servicePropertyKey = servicePropertyKey;
172: this .serviceProperty = serviceProperty;
173: this .serviceButtonsState = serviceButtonsState;
174: }
175:
176: /**
177: * Returns the service identifier.
178: *
179: * @return the service identifier.
180: */
181: public String getServiceIdentifier() {
182: return serviceIdentifier;
183: }
184:
185: /**
186: * Returns the service reply. This will be already ready if it was cached,
187: * but if not this method will call {@link ServiceReplyManager}.getReply
188: * and make the reques to the service.<p>
189: *
190: * It returns <code>null</code> if the service is down.
191: *
192: * @return the service reply, or null if the service is down.
193: */
194: public String getReply() {
195: if (cachedReply == null) {
196: try {
197: cachedReply = ServiceReplyManager.getReply(request,
198: response, servicePropertyKey, serviceProperty,
199: serviceButtonsState);
200: } catch (Exception e) {
201: Log mypersonalizerLog = LogManager
202: .getLog(LogNamingConventions.MYPERSONALIZER);
203: mypersonalizerLog.write((e.getMessage()), e, this
204: .getClass());
205: }
206: }
207: return cachedReply;
208: }
209:
210: /**
211: * Returns the Map of allowed buttons, indexed by button name. Each of the
212: * values of this Map is a {@link ButtonView} object.
213: *
214: * @return the Map of allowed buttons.
215: */
216: public Map getAllowedButtons() {
217: return allowedButtons;
218: }
219:
220: }
|