001: /*
002: * Copyright 2001 Sun Microsystems, Inc. All rights reserved.
003: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
004: */
005:
006: package com.sun.portal.search.admin;
007:
008: import java.net.URL;
009: import java.io.IOException;
010: import java.util.logging.Logger;
011: import java.util.logging.Level;
012:
013: import com.sun.portal.search.admin.CSViewBeanBase;
014:
015: import javax.servlet.http.HttpServletRequest;
016: import javax.servlet.http.HttpServletResponse;
017:
018: import com.iplanet.jato.RequestContext;
019:
020: import com.iplanet.jato.view.event.DisplayEvent;
021: import com.iplanet.jato.view.event.ChildDisplayEvent;
022: import com.iplanet.jato.view.event.RequestInvocationEvent;
023:
024: import com.iplanet.jato.view.html.StaticTextField;
025: import com.iplanet.jato.view.html.TextField;
026: import com.iplanet.jato.view.html.CheckBox;
027: import com.iplanet.jato.view.html.Button;
028: import com.iplanet.jato.view.html.ComboBox;
029: import com.iplanet.jato.view.html.RadioButtonGroup;
030: import com.iplanet.jato.view.html.HiddenField;
031:
032: import com.iplanet.jato.view.html.Option;
033: import com.iplanet.jato.view.html.OptionList;
034:
035: import com.iplanet.jato.view.View;
036: import com.iplanet.jato.view.ViewBean;
037: import com.iplanet.jato.view.ViewBeanBase;
038:
039: import com.iplanet.jato.ViewBeanManager;
040:
041: import com.iplanet.jato.model.*;
042:
043: import com.iplanet.am.console.components.view.html.IPlanetButton;
044:
045: import com.sun.portal.search.robot.*;
046: import com.sun.portal.search.admin.resources.SearchResource;
047: import com.sun.portal.log.common.PortalLogger;
048:
049: /**
050: * iPS admin console view bean: TODO
051: */
052: public class FilterViewBean extends CSViewBeanBase {
053: public static final String DEFAULT_DISPLAY_URL = "/ps/searchadmin/Filter.jsp";
054: public static final String PAGE_NAME = "Filter";
055: public static final String ID_TEXT = "FilterID";
056: public static final String NICKNAME_TEXT = "Nickname";
057: public static final String OLD_NICKNAME_TEXT = "OldNickname";
058: public static final String STRING_FILTER_LIST = "StringFilterList";
059: public static final String NEW_BUTTON = "NewButton";
060: public static final String DELETE_BUTTON = "DeleteButton";
061: public static final String COMMENT_TEXTAREA = "Description";
062: public static final String OLD_COMMENT_TEXTAREA = "OldDescription";
063: public static final String QUIKCF_CHECKBOX = "quikcf";
064: public static final String DEFAULT_RBUTTON = "default";
065: public static final String DEPLOYMENT_TEXT = "Deployment";
066: public static final String SUBMIT_BUTTON = "SubmitButton";
067: public static final String RESET_BUTTON = "ResetButton";
068: public static final String CANCEL_BUTTON = "CancelButton";
069:
070: String ruleID = null;
071:
072: // Create a logger for this class
073: private static Logger debugLogger = PortalLogger
074: .getLogger(FilterViewBean.class);
075:
076: /**
077: * constructor
078: *
079: * @param PageName of this view bean
080: * @param displayURL default display URL
081: */
082: public FilterViewBean() {
083: super (PAGE_NAME);
084: setDefaultDisplayURL(DEFAULT_DISPLAY_URL);
085: registerChildren();
086: }
087:
088: /**
089: * register child component
090: */
091: protected void registerChildren() {
092: registerChild(ID_TEXT, HiddenField.class);
093: registerChild(STRING_FILTER_LIST, StringFilterListView.class);
094: registerChild(NICKNAME_TEXT, TextField.class);
095: registerChild(OLD_NICKNAME_TEXT, HiddenField.class);
096: registerChild(NEW_BUTTON, IPlanetButton.class);
097: registerChild(DELETE_BUTTON, IPlanetButton.class);
098: registerChild(COMMENT_TEXTAREA, TextField.class);
099: registerChild(OLD_COMMENT_TEXTAREA, HiddenField.class);
100: registerChild(QUIKCF_CHECKBOX, CheckBox.class);
101: registerChild(DEFAULT_RBUTTON, RadioButtonGroup.class);
102: registerChild(SUBMIT_BUTTON, IPlanetButton.class);
103: registerChild(RESET_BUTTON, IPlanetButton.class);
104: registerChild(CANCEL_BUTTON, IPlanetButton.class);
105: registerChild(DEPLOYMENT_TEXT, StaticTextField.class);
106:
107: }
108:
109: /**
110: * create child component
111: *
112: * @param name of component
113: * @return child component
114: */
115: protected View createChild(String name) {
116:
117: View Headerchild = super .createChild(name);
118: if (Headerchild != null)
119: return Headerchild;
120: if (name.equals(ID_TEXT)) {
121: return new HiddenField(this , ID_TEXT, "");
122: }
123: if (name.equals(NICKNAME_TEXT)) {
124: return new TextField(this , NICKNAME_TEXT,
125: getLocalizedString("filter.nickname.undefined"));
126: }
127: if (name.equals(OLD_NICKNAME_TEXT)) {
128: return new HiddenField(this , OLD_NICKNAME_TEXT, "");
129: }
130: if (name.equals(STRING_FILTER_LIST)) {
131: return new StringFilterListView(this , STRING_FILTER_LIST);
132: }
133: if (name.equals(NEW_BUTTON)) {
134: return new IPlanetButton(this , NEW_BUTTON, "");
135: }
136: if (name.equals(DELETE_BUTTON)) {
137: return new IPlanetButton(this , DELETE_BUTTON, "");
138: }
139: if (name.equals(COMMENT_TEXTAREA)) {
140: return new TextField(this , COMMENT_TEXTAREA,
141: getLocalizedString("filter.new.comment"));
142: }
143: if (name.equals(OLD_COMMENT_TEXTAREA)) {
144: return new HiddenField(this , OLD_COMMENT_TEXTAREA, "");
145: }
146: if (name.equals(DEPLOYMENT_TEXT)) {
147: return new TextField(this , DEPLOYMENT_TEXT, "");
148: }
149: if (name.equals(QUIKCF_CHECKBOX)) {
150: return new CheckBox(this , QUIKCF_CHECKBOX, "true", "false",
151: true);
152: }
153: if (name.equals(DEFAULT_RBUTTON)) {
154: RadioButtonGroup child = new RadioButtonGroup(this ,
155: DEFAULT_RBUTTON, "");
156: OptionList matchOptions = new OptionList(
157: getLocalizedStringArray("filter.match.options", ","), // labels
158: new String[] { "allow", "deny" }); // values
159: child.setOptions(matchOptions);
160: child.setValue("deny");
161: return child;
162: }
163: if (name.equals(SUBMIT_BUTTON)) {
164: return new IPlanetButton(this , SUBMIT_BUTTON, "");
165: }
166: if (name.equals(RESET_BUTTON)) {
167: return new IPlanetButton(this , RESET_BUTTON, "");
168: }
169: if (name.equals(CANCEL_BUTTON)) {
170: return new IPlanetButton(this , CANCEL_BUTTON, "");
171: }
172: throw new IllegalArgumentException("Invalid child name ["
173: + name + "]");
174: }
175:
176: private void setDeployment(String id) {
177: String[] ids = CSConfig.getRobotConfig()
178: .getFiletrRulesetIDsForFilterRule(id);
179: if (ids != null) {
180: StringBuffer buf = new StringBuffer();
181: for (int j = 0; j < ids.length; j++) {
182: FilterRuleset frs = CSConfig.getRobotConfig()
183: .GetRuleSet(ids[j]);
184: buf.append("<a href=\"Site?id=" + frs.id + "\">"
185: + frs.nickname + "</a>");
186: if (j < ids.length - 1) {
187: buf.append(", ");
188: }
189: }
190: setDisplayFieldValue(DEPLOYMENT_TEXT, buf.toString());
191: } else {
192: setDisplayFieldValue(DEPLOYMENT_TEXT,
193: getLocalizedString("filter.nodeployment"));
194: }
195: }
196:
197: /** begin displaying page. we set the required information
198: *
199: * @param event display event
200: * @throws ModelControlException if problem access value of component
201: */
202: public void beginDisplay(DisplayEvent event) {
203: // Get request attributes and store them as Page Session Attributes
204: setPageEncoding();
205: setDisplayFieldValue(SUBMIT_BUTTON,
206: getLocalizedString("submit.text"));
207: setDisplayFieldValue(RESET_BUTTON,
208: getLocalizedString("reset.text"));
209: setDisplayFieldValue(CANCEL_BUTTON,
210: getLocalizedString("cancel.text"));
211: setDisplayFieldValue(NEW_BUTTON, getLocalizedString("new.text"));
212: setDisplayFieldValue(DELETE_BUTTON,
213: getLocalizedString("delete.text"));
214: RequestContext rc = getRequestContext();
215: HttpServletRequest req = rc.getRequest();
216: ruleID = req.getParameter("id");
217: if (ruleID == null || ruleID.trim() == "") {
218: ruleID = this .getDisplayFieldStringValue(ID_TEXT);
219: if (ruleID == null || ruleID.trim() == "") {
220: //this.setDisplayFieldValue(this.PAGE_HEADER, "New Filter");
221: ruleID = "new";
222: setDisplayFieldValue(ID_TEXT, ruleID);
223: }
224: if (!ruleID.equalsIgnoreCase("new")) {
225: setDeployment(ruleID);
226: }
227: } else {
228: FilterRule fr = CSConfig.getRobotConfig().GetRule(ruleID);
229: if (fr != null) {
230: setDisplayFieldValue(ID_TEXT, ruleID);
231: String localizedName = this .getLocalizedString(
232: fr.nickname, false);
233: if (localizedName != null) {
234: setDisplayFieldValue(OLD_NICKNAME_TEXT,
235: localizedName);
236: setDisplayFieldValue(NICKNAME_TEXT, localizedName);
237: } else {
238: setDisplayFieldValue(OLD_NICKNAME_TEXT, fr.nickname);
239: setDisplayFieldValue(NICKNAME_TEXT, fr.nickname);
240: }
241: String localizedDesc = this .getLocalizedString(
242: fr.nickname + ".desc", false);
243: if (localizedDesc != null) {
244: setDisplayFieldValue(OLD_COMMENT_TEXTAREA,
245: localizedDesc);
246: setDisplayFieldValue(COMMENT_TEXTAREA,
247: localizedDesc);
248: } else {
249: setDisplayFieldValue(OLD_COMMENT_TEXTAREA, fr
250: .getComments());
251: setDisplayFieldValue(COMMENT_TEXTAREA, fr
252: .getComments());
253: }
254: CheckBox child = (CheckBox) getChild(QUIKCF_CHECKBOX);
255: child.setChecked(fr.quickcf);
256: setDisplayFieldValue(DEFAULT_RBUTTON, RobotConfig
257: .ADtoString(fr.default_ad));
258: setDeployment(ruleID);
259: }
260: }
261: StringFilterListView child_filters = (StringFilterListView) getChild(STRING_FILTER_LIST);
262: String retrieved = (String) getPageSessionAttribute("retrieved");
263: if (retrieved == null) {
264: child_filters.ruleID = ruleID;
265: }
266: setPageSessionAttribute("retrieved", "true");
267: }
268:
269: public void handleResetButtonRequest(RequestInvocationEvent event)
270: throws ModelControlException {
271: String id = getDisplayFieldStringValue(ID_TEXT);
272: String args = "";
273: if (!id.equals("new")) {
274: args = "?id=" + id;
275: }
276: clearPageSessionAttributes();
277: HttpServletResponse response = this .getRequestContext()
278: .getResponse();
279: try {
280: response.sendRedirect("Filter" + args);
281: } catch (IOException e) {
282: //TOFIX: handle this
283: }
284: }
285:
286: public void handleDeleteButtonRequest(RequestInvocationEvent event) {
287: StringFilterListView child = (StringFilterListView) getChild(STRING_FILTER_LIST);
288: try {
289: ModelExecutionContext modExe = new ModelExecutionContextBase(
290: ModelExecutionContext.OPERATION_DELETE);
291: child.executeAutoDeletingModels(modExe);
292: } catch (ModelControlException e) {
293: debugLogger.log(Level.INFO, "PSSH_CSPSA0010", e
294: .getMessage());
295: }
296: forwardTo();
297: }
298:
299: public void handleNewButtonRequest(RequestInvocationEvent event)
300: throws ModelControlException {
301: StringFilterListView child = (StringFilterListView) getChild(STRING_FILTER_LIST);
302: try {
303: ModelExecutionContext modExe = new ModelExecutionContextBase(
304: ModelExecutionContext.OPERATION_INSERT);
305: child.executeAutoInsertingModels(modExe);
306: } catch (ModelControlException e) {
307: debugLogger.log(Level.INFO, "PSSH_CSPSA0010", e
308: .getMessage());
309: }
310: forwardTo();
311: }
312:
313: public void handleSubmitButtonRequest(RequestInvocationEvent event)
314: throws ModelControlException {
315: RobotConfig rc = CSConfig.getRobotConfig();
316: ruleID = getDisplayFieldStringValue(ID_TEXT);
317: String nick = getDisplayFieldStringValue(NICKNAME_TEXT);
318: String old_nick = getDisplayFieldStringValue(OLD_NICKNAME_TEXT);
319: String desc = getDisplayFieldStringValue(COMMENT_TEXTAREA);
320: String old_desc = getDisplayFieldStringValue(OLD_COMMENT_TEXTAREA);
321: String ad = getDisplayFieldStringValue(DEFAULT_RBUTTON);
322: String quikcf = getDisplayFieldStringValue(QUIKCF_CHECKBOX);
323: if (nick.trim().length() == 0) {
324: errorMessage = getLocalizedString("filter.need.nickname");
325: forwardTo();
326: return;
327: }
328: String existID = rc.getIDByNick(nick);
329:
330: if (ruleID.compareTo("new") == 0) {
331: if (existID != null) {
332: errorMessage = getLocalizedString("filter.nickname.exist");
333: forwardTo();
334: return;
335: }
336:
337: ruleID = Integer.toString(rc.lastRuleID + 1);
338: setDisplayFieldValue(this .ID_TEXT, ruleID);
339: FilterRule fr = new FilterRule(ruleID, true, nick,
340: RobotConfig.ADStringtoBoolean(ad), RobotConfig
341: .StringtoBoolean(quikcf));
342: fr.setComments(desc);
343: rc.AddRule(ruleID, fr);
344: } else {
345: if (existID != null && !existID.equals(ruleID)) {
346: errorMessage = getLocalizedString("filter.nickname.exist");
347: forwardTo();
348: return;
349: }
350:
351: FilterRule fr = rc.GetRule(ruleID);
352: if (!nick.equals(old_nick)) {
353: fr.nickname = nick;
354: }
355: if (!desc.equals(old_desc)) {
356: fr.setComments(desc);
357: }
358: fr.default_ad = RobotConfig.ADStringtoBoolean(ad);
359: fr.quickcf = RobotConfig.StringtoBoolean(quikcf);
360: }
361: StringFilterListView child = (StringFilterListView) getChild(STRING_FILTER_LIST);
362: child.ruleID = ruleID;
363: try {
364: ModelExecutionContext modExe = new ModelExecutionContextBase(
365: ModelExecutionContext.OPERATION_UPDATE);
366: child.executeAutoUpdatingModels(modExe);
367: } catch (ModelControlException e) {
368: debugLogger.log(Level.INFO, "PSSH_CSPSA0010", e
369: .getMessage());
370: }
371: rc.updateFile();
372: rc.freshRulesArray();
373: HttpServletResponse response = this .getRequestContext()
374: .getResponse();
375: try {
376: response.sendRedirect("Filters");
377: } catch (IOException e) {
378: //TOFIX: handle this
379: }
380:
381: }
382: }
|