001: /**
002: * $Id: TemplateContentProvider.java,v 1.19 2006/09/05 19:56:20 dpolla Exp $
003: * Copyright 2003 Sun Microsystems, Inc. All
004: * rights reserved. Use of this product is subject
005: * to license terms. Federal Acquisitions:
006: * Commercial Software -- Government Users
007: * Subject to Standard License Terms and
008: * Conditions.
009: *
010: * Sun, Sun Microsystems, the Sun logo, and Sun ONE
011: * are trademarks or registered trademarks of Sun Microsystems,
012: * Inc. in the United States and other countries.
013: */package com.sun.portal.wireless.providers.containers.template;
014:
015: import com.sun.portal.providers.ProviderException;
016: import com.sun.portal.providers.context.ProviderContextException;
017: import com.sun.portal.wireless.providers.containers.DesktopDispatcherProvider;
018: import com.sun.portal.wireless.providers.containers.WirelessContainerProvider;
019: import com.sun.portal.log.common.PortalLogger;
020:
021: import javax.servlet.http.HttpServletRequest;
022: import javax.servlet.http.HttpServletResponse;
023: import java.net.URL;
024: import java.net.MalformedURLException;
025: import java.util.ResourceBundle;
026: import java.util.List;
027: import java.util.Map;
028: import java.util.Hashtable;
029: import java.util.Iterator;
030: import java.util.Vector;
031: import java.util.StringTokenizer;
032: import java.util.logging.Level;
033: import java.util.logging.Logger;
034:
035: public class TemplateContentProvider extends
036: WirelessContainerProviderAdapter {
037:
038: private static Logger logger = PortalLogger
039: .getLogger(TemplateContentProvider.class);
040:
041: public StringBuffer getEdit(HttpServletRequest request,
042: HttpServletResponse response) throws ProviderException {
043:
044: // read client type passed in
045: String client = request.getParameter(CLIENT);
046: if (client == null) {
047: throw new ProviderException(
048: "WirelessTemplateContent.getEdit():"
049: + "client parameter missing.");
050: }
051: String containerName = null;
052: WirelessContainerProvider clientContainer = null;
053: List allChannels = null;
054: List userChannels = null;
055: try {
056: containerName = DesktopDispatcherProvider
057: .getClientContainerName(
058: getContainerProviderContext(), client);
059: clientContainer = (WirelessContainerProvider) getContainerProviderContext()
060: .getProvider(request, null, containerName);
061:
062: allChannels = clientContainer.getAvailableChannels(request);
063: userChannels = clientContainer
064: .getOrderedSelectedChannels(request);
065:
066: } catch (ProviderContextException e) {
067: throw new ProviderException(
068: "WirelessTemplateContent.getEdit():", e);
069: }
070:
071: // edit content
072: StringBuffer content = new StringBuffer();
073: StringBuffer semicolonSelectedList = new StringBuffer();
074:
075: // tag tables
076: Hashtable channelTags = new Hashtable();
077: Hashtable mainTags = new Hashtable();
078:
079: String name, title, description;
080:
081: if (getTemplatePath(BANNER_TEMPLATE) != null) {
082: mainTags.put(BANNER_TAG, getTemplate(BANNER_TEMPLATE));
083: }
084: if (getTemplatePath(BULLETCOLOR_TEMPLATE) != null) {
085: mainTags.put(BULLETCOLOR_TAG,
086: getTemplate(BULLETCOLOR_TEMPLATE));
087: }
088: if (getTemplatePath(DEVICEMENUBAR_TEMPLATE) != null) {
089: mainTags.put(DEVICEMENUBAR_TAG,
090: getTemplate(DEVICEMENUBAR_TEMPLATE));
091: }
092:
093: if (client != null) {
094: ResourceBundle bundle = null;
095: try {
096: bundle = getResourceBundle(PROPERTIES_DEV);
097: mainTags.put(CLIENTNAME_TAG, bundle.getString(client));
098: } catch (Exception e) {
099: mainTags.put(CLIENTNAME_TAG, client);
100: }
101: }
102:
103: StringBuffer clientconfigQuerystring = new StringBuffer();
104: Map editPages = getMapProperty(EDITPAGES);
105: clientconfigQuerystring = clientconfigQuerystring
106: .append(ACTION).append('=').append(EDIT).append('&')
107: .append(PROVIDER).append('=').append(
108: editPages.get(CLIENTCONFIG));
109: mainTags.put(CLIENTCONFIGLINK_TAG, getProviderContext()
110: .getDesktopURL(request,
111: clientconfigQuerystring.toString(), true));
112: mainTags.put(LOGOUTLINK_TAG, getProviderContext()
113: .getLogoutURL());
114: mainTags.put(PRODUCTNAME, getStringProperty(PRODUCTNAME));
115: mainTags.put(CONTENTPROVIDER_TAG, editPages.get(CONTENT));
116: mainTags.put(CLIENTCONTAINER_TAG, containerName);
117: URL helpURL = null;
118: try {
119: helpURL = getHelp(request);
120: } catch (ProviderException e) {
121: if (logger.isLoggable(Level.INFO))
122: logger.log(Level.INFO, "PSMA_CSPWPCT0003", e);
123: }
124: if (helpURL != null) {
125: mainTags.put(HELPLINK_TAG, helpURL.toString());
126: }
127:
128: // Iterate thru the available providers
129: for (Iterator i = allChannels.iterator(); i.hasNext();) {
130: name = (String) i.next();
131:
132: try {
133: title = getProviderContext().getStringProperty(name,
134: TITLE);
135: description = getProviderContext().getStringProperty(
136: name, DESCRIPTION);
137: } catch (ProviderContextException e) {
138: throw new ProviderException(
139: "WirelessTemplateContent.getEdit(): ", e);
140: }
141:
142: channelTags.put(PROVIDER_TAG, name);
143: channelTags.put(TITLE_TAG, title);
144: channelTags.put(DESCRIPTION_TAG, description);
145:
146: if (userChannels.contains(name)) {
147: semicolonSelectedList.append(name).append(';');
148: content.append(getTemplate(SELECTWRAPPERTRUE_TEMPLATE,
149: channelTags));
150: } else {
151: content.append(getTemplate(SELECTWRAPPERFALSE_TEMPLATE,
152: channelTags));
153: }
154:
155: }
156:
157: // Put the semicolon list of selected channels into the main tagtable.
158: mainTags.put(SEMICOLONSELECTEDLIST_TAG, semicolonSelectedList
159: .toString());
160: // Put the content stringbuffer into the main tagtable.
161: if (content.length() == 0) {
162: ResourceBundle bundle = getResourceBundle(PROPERTIES_BASE);
163: channelTags.put(TITLE_TAG, bundle.getString(NOCHANNELS));
164: channelTags.put(PROVIDER_TAG, "");
165: content.append(getTemplate(OPTIONWRAPPER_TEMPLATE,
166: channelTags));
167: }
168:
169: mainTags.put(CONTENT_TAG, content.toString());
170:
171: return getTemplate(CONTENT_TEMPLATE, mainTags);
172: }
173:
174: public URL processEdit(HttpServletRequest request,
175: HttpServletResponse response) throws ProviderException {
176:
177: // read container name passed from client config provider
178: String containerName = request.getParameter(CONTAINER);
179: if (containerName == null) {
180: throw new ProviderException(
181: "WirelessTemplateContent.processEdit():"
182: + "container parameter missing.");
183: }
184: List allChannels = null;
185: List userChannels = null;
186: WirelessContainerProvider clientContainer = null;
187: String name = null;
188:
189: clientContainer = (WirelessContainerProvider) getContainerProviderContext()
190: .getProvider(request, null, containerName);
191:
192: allChannels = clientContainer.getAvailableChannels(request);
193: userChannels = clientContainer
194: .getOrderedSelectedChannels(request);
195:
196: // get newly selected channels param
197: String selectedChannelsParam = request
198: .getParameter(SELECTEDCHANNELS);
199: List selected = new Vector();
200: if (selectedChannelsParam != null) {
201: StringTokenizer channelList = new StringTokenizer(
202: selectedChannelsParam, ";");
203: while (channelList.hasMoreElements())
204: selected.add(channelList.nextToken());
205: }
206:
207: // Iterate thru the available providers
208: for (Iterator i = allChannels.iterator(); i.hasNext();) {
209: name = (String) i.next();
210:
211: String checkBoxValue = request.getParameter(name);
212:
213: if (checkBoxValue == null && !selected.contains(name)) {
214: userChannels.remove(name);
215:
216: if (logger.isLoggable(Level.FINEST))
217: logger.log(Level.FINEST, "PSMA_CSPWPCT0016", name);
218:
219: } else if (selected.contains(name)
220: || "1".equals(checkBoxValue)) {
221: if (!userChannels.contains(name)) {
222: userChannels.add(name);
223: if (logger.isLoggable(Level.FINEST))
224: logger.log(Level.FINEST, "PSMA_CSPWPCT0017",
225: name);
226: }
227: } else {
228: if (logger.isLoggable(Level.FINEST))
229: logger.log(Level.FINEST, "PSMA_CSPWPCT0018", name);
230: }
231:
232: }
233:
234: try {
235: getContainerProviderContext().setSelectedChannels(
236: containerName, userChannels);
237: } catch (ProviderContextException e) {
238: throw new ProviderException(
239: "WirelessTemplateContent.processEdit(): ", e);
240: }
241:
242: URL nextUrl = null;
243: boolean genericHTML;
244: try {
245: genericHTML = Boolean.valueOf(
246: getProviderContext().getClientTypeProperty(
247: GENERICHTML)).booleanValue();
248: } catch (Exception e) {
249: genericHTML = false;
250: }
251:
252: if (genericHTML) {
253: StringBuffer nextQuerystring = new StringBuffer();
254: Map editPages = getMapProperty(EDITPAGES);
255: nextQuerystring.append(PROVIDER).append('=').append(
256: editPages.get(CLIENTCONFIG)).append('&').append(
257: ACTION).append('=').append(EDIT);
258: String next = getProviderContext().getDesktopURL(request,
259: nextQuerystring.toString(), false);
260: try {
261: nextUrl = new URL(next);
262: } catch (MalformedURLException e) {
263: throw new ProviderException(
264: "WirelessTemplateContent.processEdit(): ", e);
265: }
266: }
267:
268: return nextUrl;
269:
270: }
271:
272: }
|