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.io.IOException;
009: import java.util.*;
010: import java.util.logging.Logger;
011: import java.util.logging.Level;
012: import java.lang.*;
013: import java.net.*;
014:
015: import javax.servlet.*;
016: import javax.servlet.http.*;
017:
018: import com.iplanet.jato.*;
019: import com.iplanet.jato.view.*;
020: import com.iplanet.jato.model.*;
021: import com.iplanet.jato.view.event.*;
022: import com.iplanet.jato.view.html.*;
023: import com.iplanet.jato.model.*;
024: import javax.servlet.http.HttpServletRequest;
025: import javax.servlet.http.HttpServletResponse;
026:
027: import com.iplanet.am.console.components.view.html.IPlanetButton;
028:
029: import com.sun.portal.search.rdm.RDMTaxonomy;
030: import com.sun.portal.log.common.PortalLogger;
031:
032: /**
033: * This view uses model of type RequestHandlingTiledViewBase to display
034: * a path like view of the selected category
035: */
036: public class NewCategoryPathView extends RequestHandlingTiledViewBase {
037: public static final String CHILD_ELEM_HREF = "catPathElemHref";
038: public static final String CHILD_ELEM_NAME = "catPathElemName";
039: public static final String CHILD_ELEM_SEPARATOR = "catPathElemSeparator";
040: public static final String CHILD_CATEGORY_ID = "catId";
041:
042: private static String separatorStr;
043: private String selectedCategory;
044: private int nbLevels = 0;
045:
046: // Create a Logger for this class
047: private static Logger debugLogger = PortalLogger
048: .getLogger(NewCategoryPathView.class);
049:
050: public NewCategoryPathView(View parent, String name) {
051: super (parent, name);
052: // init of the Category Path Element's separator string
053: separatorStr = ((CSViewBeanBase) getParentViewBean())
054: .getLocalizedString("category.edit.path_separator");
055: separatorStr = (separatorStr == null) ? ">" : separatorStr;
056: setPrimaryModel((DatasetModel) getDefaultModel());
057: registerChildren();
058: }
059:
060: protected void registerChildren() {
061: registerChild(CHILD_ELEM_HREF, HREF.class);
062: registerChild(CHILD_ELEM_NAME, StaticTextField.class);
063: registerChild(CHILD_ELEM_SEPARATOR, StaticTextField.class);
064: registerChild(CHILD_CATEGORY_ID, HiddenField.class);
065: }
066:
067: protected View createChild(String name) {
068: if (name.equals(CHILD_ELEM_HREF)) {
069: // return new HREF(this, CHILD_ELEM_HREF, "");
070: return new HREF(this , getDefaultModel(), CHILD_ELEM_HREF,
071: CHILD_ELEM_HREF, "");
072: }
073: if (name.equals(CHILD_ELEM_NAME)) {
074: return new StaticTextField(this , getDefaultModel(),
075: CHILD_ELEM_NAME, CHILD_ELEM_NAME, "");
076: }
077: if (name.equals(CHILD_ELEM_SEPARATOR)) {
078: return new StaticTextField(this , CHILD_ELEM_SEPARATOR,
079: separatorStr);
080: }
081: if (name.equals(CHILD_CATEGORY_ID)) {
082: return new HiddenField(this , CHILD_CATEGORY_ID, "");
083: }
084: throw new IllegalArgumentException("Invalid child name ["
085: + name + "]");
086: }
087:
088: public void beginDisplay(DisplayEvent event)
089: throws ModelControlException {
090: super .beginDisplay(event);
091: updateModel();
092: resetTileIndex();
093: }
094:
095: /*
096: * do not display the separator for the last element of the path
097: */
098: public boolean beginCatPathElemSeparatorDisplay(
099: ChildDisplayEvent event) {
100: try {
101: int tileIndex = getTileIndex();
102: int numOfTiles = getNumTiles();
103: return (tileIndex < numOfTiles - 1);
104: } catch (Exception e) {
105: return false;
106: }
107: }
108:
109: /*
110: public boolean nextTile() throws ModelControlException{
111: boolean movedToRow = super.nextTile();
112: if (movedToRow){
113: NTEViewBean pvb = (NTEViewBean) getParentViewBean();
114: // Put row specific logic here
115: int index = getTileIndex();
116: String targetCategoryId = (String) ((DefaultModel)getPrimaryModel()).getValue(CHILD_CATEGORY_ID);
117: setDisplayFieldValue(CHILD_CATEGORY_ID, targetCategoryId);
118: HREF href = (HREF) getDisplayField(CHILD_ELEM_HREF);
119: href.addExtraValue(NTEViewBean.DISPLAY_PAGE, String.valueOf(pvb.findNodePage(targetCategoryId)));
120: setDisplayFieldValue(CHILD_ELEM_HREF, href);
121: setDisplayFieldValue(CHILD_ELEM_NAME,
122: (String) ((DefaultModel)getPrimaryModel()).getValue(CHILD_ELEM_NAME));
123: }
124: return movedToRow;
125: }
126: */
127: /*
128: * returns the number of element in the path to the selected Category.
129: * if selected category is null we always display root so return=1
130: * for any given non root category, the return value is the number of
131: * category separator(interval) caracter ":" +(1 for interval)
132: * +(1 for root level not counted in category ID)
133: */
134: private void updateModel() throws ModelControlException {
135: nbLevels = 0;
136: DefaultModel model = (DefaultModel) getPrimaryModel();
137: try {
138: // clear Model
139: model.clear();
140:
141: TaxonomyBrowserView pv = (TaxonomyBrowserView) getParent();
142: String catIdStr = pv.currentTaxName;
143: debugLogger.log(Level.FINER, "PSSH_CSPSA0057", catIdStr);
144:
145: // adding the taxonomy element (ie ROOT)
146: model.appendRow();
147: model.setValue(CHILD_ELEM_NAME, pv.getTaxonomyName());
148: model.setValue(CHILD_ELEM_HREF, new Integer(1));
149: nbLevels++;
150:
151: // adding the category path elements
152: StringTokenizer st = new StringTokenizer(catIdStr, ":");
153: int prevIndex = 0;
154: int nextIndex = 0;
155: String levelCategoryId;
156:
157: // do following only if selecteed cat is not root
158: if (!catIdStr.equals(RDMTaxonomy.RDM_TAXONOMY_ROOT)) {
159: while (st.hasMoreTokens()) {
160: String token = st.nextToken();
161: // currentId = currentId + token;
162: model.appendRow();
163: model.setValue(CHILD_ELEM_NAME, token);
164: nbLevels++;
165: nextIndex = catIdStr.indexOf(":", prevIndex + 1);
166: if (nextIndex != -1) {
167: levelCategoryId = catIdStr.substring(0,
168: nextIndex);
169: prevIndex = nextIndex;
170: } else {
171: levelCategoryId = catIdStr;
172: }
173: model.setValue(CHILD_ELEM_HREF, new Integer(pv
174: .getIndexByTax(levelCategoryId)));
175: }
176: }
177: // setting the number of tiles
178: } catch (Exception e) {
179: getPrimaryModel().setSize(nbLevels);
180: }
181: }
182:
183: /*
184: * handles the clik on the HREF
185: */
186: public void handleCatPathElemHrefRequest(
187: RequestInvocationEvent event) throws ModelControlException {
188: TiledViewRequestInvocationEvent tiledEvent = (TiledViewRequestInvocationEvent) event;
189: int selRow = tiledEvent.getTileNumber();
190: setTileIndex(selRow);
191: int nodeIndex = getDisplayFieldIntValue(CHILD_ELEM_HREF);
192: debugLogger.log(Level.FINER, "PSSH_CSPSA0059", new String[] {
193: TaxonomyBrowserView.DISPLAY_PAGE,
194: Integer.toString(nodeIndex) });
195: getParentViewBean().setPageSessionAttribute(
196: TaxonomyBrowserView.DISPLAY_PAGE,
197: new Integer(nodeIndex));
198: getParentViewBean().forwardTo(getRequestContext());
199:
200: }
201: }
|