001: /**
002: * Copyright 2005 Sun Microsystems, Inc. All
003: * rights reserved. Use of this product is subject
004: * to license terms. Federal Acquisitions:
005: * Commercial Software -- Government Users
006: * Subject to Standard License Terms and
007: * Conditions.
008: *
009: * Sun, Sun Microsystems, the Sun logo, and Sun ONE
010: * are trademarks or registered trademarks of Sun Microsystems,
011: * Inc. in the United States and other countries.
012: */package com.sun.portal.admin.console.search;
013:
014: import java.util.*;
015: import java.util.logging.Level;
016: import java.lang.*;
017: import java.io.*;
018: import java.net.*;
019: import java.text.*;
020:
021: import javax.faces.context.FacesContext;
022: import javax.faces.component.*;
023: import javax.faces.el.*;
024: import javax.faces.event.*;
025: import javax.faces.application.Application;
026: import javax.servlet.http.HttpServletRequest;
027: import javax.management.*;
028:
029: import com.sun.web.ui.model.*;
030: import com.sun.web.ui.event.*;
031: import com.sun.web.ui.component.*;
032:
033: import com.sun.data.provider.*;
034: import com.sun.data.provider.impl.ObjectListDataProvider;
035:
036: import com.sun.cacao.agent.JmxClient;
037:
038: import com.sun.portal.admin.common.util.AdminClientUtil;
039: import com.sun.portal.admin.console.common.PSBaseBean;
040:
041: public class CategoriesHomeBean extends PSBaseBean {
042:
043: private String rootNodeID = null;
044: private String currentNodeID = null;
045: private Hyperlink[] categories = null;
046: private ObjectListDataProvider children = null;
047:
048: private String searchText = null;
049: private String searchScope = null;
050: private ObjectListDataProvider searchResults = null;
051:
052: public CategoriesHomeBean() {
053: sync();
054:
055: rootNodeID = retrieveRootNodeID();
056:
057: String mode = (String) getSessionAttribute("search.categorieshome.mode");
058: if (mode == null || mode.equals("")) {
059: mode = "browse";
060: setSessionAttribute("search.categorieshome.mode", "browse");
061: }
062: if (mode.equals("browse")) {
063: HttpServletRequest hsr = (HttpServletRequest) FacesContext
064: .getCurrentInstance().getExternalContext()
065: .getRequest();
066: currentNodeID = (String) hsr
067: .getParameter("search.categorieshome.category");
068: if (currentNodeID == null) {
069: currentNodeID = (String) getSessionAttribute("search.categorieshome.category");
070: }
071: if (currentNodeID == null) {
072: currentNodeID = "";
073: }
074: setSessionAttribute("search.categorieshome.category",
075: currentNodeID);
076:
077: retrieveCategories(currentNodeID);
078: retrieveChildren(currentNodeID);
079:
080: searchText = "";
081: setSessionAttribute("search.categorieshome.searchtext",
082: searchText);
083: searchScope = "all";
084: setSessionAttribute("search.categorieshome.searchscope",
085: searchScope);
086: } else {
087: searchText = (String) getSessionAttribute("search.categorieshome.searchtext");
088: if (searchText == null) {
089: searchText = "";
090: }
091: setSessionAttribute("search.categorieshome.searchtext",
092: searchText);
093:
094: searchScope = (String) getSessionAttribute("search.categorieshome.searchscope");
095: if (searchScope == null) {
096: searchScope = "all";
097: }
098: setSessionAttribute("search.categorieshome.searchscope",
099: searchScope);
100:
101: retrieveSearchResults();
102: }
103: }
104:
105: public boolean getShowAlert() {
106: Boolean b = new Boolean(false);
107: try {
108: LinkedList path = new LinkedList();
109: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
110: path
111: .addFirst((String) getSessionAttribute("search.server.selected"));
112: path.addFirst("category");
113: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
114: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
115:
116: Object[] params = {};
117: String[] signatures = {};
118: b = (Boolean) getMBeanServerConnection().invoke(on,
119: "needReindex", params, signatures);
120: } catch (Exception e) {
121: log(Level.SEVERE,
122: "CategoriesHomeBean.getShowAlert() : Exception ", e);
123: }
124: return b.booleanValue();
125: }
126:
127: public boolean getInSearchResults() {
128: String mode = (String) getSessionAttribute("search.categorieshome.mode");
129: if (mode == null && mode.equals("")) {
130: mode = "browse";
131: setSessionAttribute("search.categorieshome.mode", "browse");
132: }
133: if (mode.equals("browse")) {
134: return false;
135: } else {
136: return true;
137: }
138: }
139:
140: public String getSearchText() {
141: return searchText;
142: }
143:
144: public void setSearchText(String searchText) {
145: this .searchText = searchText;
146: }
147:
148: public Option[] getAvailableSearchScopes() {
149: Option[] options = new Option[2];
150: options[0] = new Option("all", getLocalizedString("search",
151: "search.categories.scope.allcategories"));
152: options[1] = new Option("this", getLocalizedString("search",
153: "search.categories.scope.thiscategory"));
154: return options;
155: }
156:
157: public String getSearchScope() {
158: return searchScope;
159: }
160:
161: public void setSearchScope(String searchScope) {
162: this .searchScope = searchScope;
163: }
164:
165: public String search() {
166: setSessionAttribute("search.categorieshome.searchtext",
167: searchText);
168: setSessionAttribute("search.categorieshome.searchscope",
169: searchScope);
170: retrieveSearchResults();
171:
172: setSessionAttribute("search.categorieshome.mode",
173: "searchresults");
174: return null;
175: }
176:
177: public String reindex() {
178: try {
179: LinkedList path = new LinkedList();
180: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
181: path
182: .addFirst((String) getSessionAttribute("search.server.selected"));
183: path.addFirst("category");
184: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
185: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
186:
187: Object[] params = {};
188: String[] signatures = {};
189: getMBeanServerConnection().invoke(on, "reindexTaxTree",
190: params, signatures);
191: } catch (Exception e) {
192: log(Level.SEVERE,
193: "CategoriesHomeBean.reindex() : Exception ", e);
194: }
195: return null;
196: }
197:
198: public Hyperlink[] getCategories() {
199: return categories;
200: }
201:
202: public void setCategories(Hyperlink[] categories) {
203: this .categories = categories;
204: }
205:
206: public ObjectListDataProvider getChildren() {
207: return children;
208: }
209:
210: public void setChildren(ObjectListDataProvider children) {
211: this .children = children;
212: }
213:
214: public String drillDown() {
215: return null;
216: }
217:
218: public ObjectListDataProvider getSearchResults() {
219: return searchResults;
220: }
221:
222: public void setSearchResults(ObjectListDataProvider searchResults) {
223: this .searchResults = searchResults;
224: }
225:
226: public String selectSearchResult() {
227: FacesContext fc = FacesContext.getCurrentInstance();
228: ValueBinding vb = fc.getApplication().createValueBinding(
229: "#{category.value.nodeID}");
230: String value = (String) vb.getValue(fc);
231: setSessionAttribute("search.categorieshome.category", value);
232: retrieveCategories(value);
233: retrieveChildren(value);
234:
235: setSessionAttribute("search.categorieshome.mode", "browse");
236: return null;
237: }
238:
239: public String backToBrowse() {
240: String value = (String) getSessionAttribute("search.categorieshome.category");
241: retrieveCategories(value);
242: retrieveChildren(value);
243:
244: setSessionAttribute("search.categorieshome.mode", "browse");
245: return null;
246: }
247:
248: public String gotoCreateCategory() {
249: return "gotoCreateCategory";
250: }
251:
252: public String edit() {
253: List l = Checkbox.getSelected("checkbox");
254: if (l != null) {
255: setSessionAttribute("search.categorieshome.edit",
256: (String) l.get(0));
257: return "gotoEditCategory";
258: } else {
259: return null;
260: }
261: }
262:
263: public String delete() {
264: try {
265: LinkedList path = new LinkedList();
266: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
267: path
268: .addFirst((String) getSessionAttribute("search.server.selected"));
269: path.addFirst("category");
270: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
271: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
272:
273: List l = Checkbox.getSelected("checkbox");
274: for (int index = 0; index < l.size(); index++) {
275: Object[] params = { (String) l.get(index) };
276: String[] signatures = { "java.lang.String" };
277: getMBeanServerConnection().invoke(on,
278: "deleteTaxTreeNode", params, signatures);
279: }
280: } catch (Exception e) {
281: log(Level.SEVERE,
282: "CategoriesHomeBean.delete() : Exception ", e);
283: }
284: retrieveChildren(currentNodeID);
285: return null;
286: }
287:
288: private void sync() {
289: try {
290: LinkedList path = new LinkedList();
291: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
292: path
293: .addFirst((String) getSessionAttribute("search.server.selected"));
294: path.addFirst("category");
295: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
296: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
297: Object[] params = {};
298: String[] signatures = {};
299: getMBeanServerConnection().invoke(on, "syncTaxFile",
300: params, signatures);
301: } catch (Exception e) {
302: log(Level.SEVERE, "CategoriesHomeBean.sync() : Exception ",
303: e);
304: }
305: }
306:
307: private String retrieveRootNodeID() {
308: try {
309: LinkedList path = new LinkedList();
310: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
311: path
312: .addFirst((String) getSessionAttribute("search.server.selected"));
313: path.addFirst("category");
314: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
315: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
316: Object[] params = {};
317: String[] signatures = {};
318: return (String) getMBeanServerConnection().invoke(on,
319: "retrieveTaxName", params, signatures);
320: } catch (Exception e) {
321: log(
322: Level.SEVERE,
323: "CategoriesHomeBean.retrieveRootNodeID() : Exception ",
324: e);
325: return "";
326: }
327: }
328:
329: private void retrieveCategories(String startNodeID) {
330: Random r = new Random();
331:
332: if (startNodeID.equals("")) {
333: Hyperlink hl = new Hyperlink();
334: hl.setId("hl_" + Integer.toString(r.nextInt()));
335: hl.setText(rootNodeID);
336: try {
337: hl
338: .setUrl("../faces/search/CategoriesHome.jsp?search.categorieshome.category=");
339: } catch (Exception e) {
340: log(
341: Level.SEVERE,
342: "CategoriesHomeBean.retrieveCategories() : Exception ",
343: e);
344: }
345:
346: categories = new Hyperlink[1];
347: categories[0] = hl;
348: } else {
349: String[] strings = startNodeID.split(":");
350:
351: categories = new Hyperlink[strings.length + 1];
352:
353: Hyperlink hl = new Hyperlink();
354: hl.setId("hl_" + Integer.toString(r.nextInt()));
355: hl.setText(rootNodeID);
356: try {
357: hl
358: .setUrl("../faces/search/CategoriesHome.jsp?search.categorieshome.category=");
359: } catch (Exception e) {
360: log(
361: Level.SEVERE,
362: "CategoriesHomeBean.retrieveCategories() : Exception ",
363: e);
364: }
365:
366: categories[0] = hl;
367:
368: String runningNodeID = "";
369: for (int index = 0; index < strings.length; index++) {
370: String nodeID = strings[index];
371:
372: runningNodeID = (!runningNodeID.equals("")) ? runningNodeID
373: + ":" + nodeID
374: : nodeID;
375:
376: hl = new Hyperlink();
377: hl.setId("hl_" + Integer.toString(r.nextInt()));
378: hl.setText(nodeID);
379: try {
380: hl
381: .setUrl("../faces/search/CategoriesHome.jsp?search.categorieshome.category="
382: + URLEncoder.encode(runningNodeID,
383: "UTF-8"));
384: } catch (Exception e) {
385: log(
386: Level.SEVERE,
387: "CategoriesHomeBean.retrieveCategories() : Exception ",
388: e);
389: }
390:
391: categories[index + 1] = hl;
392: }
393: }
394: }
395:
396: private void retrieveChildren(String startNodeID) {
397: ArrayList al = new ArrayList();
398: try {
399: LinkedList path = new LinkedList();
400: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
401: path
402: .addFirst((String) getSessionAttribute("search.server.selected"));
403: path.addFirst("category");
404: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
405: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
406:
407: Object[] params = { (startNodeID.equals("")) ? rootNodeID
408: : startNodeID };
409: String[] signatures = { "java.lang.String" };
410: ArrayList data = (ArrayList) getMBeanServerConnection()
411: .invoke(on, "getTaxTreeChildren", params,
412: signatures);
413: for (int index = 0; index < data.size(); index++) {
414: String nodeID = (String) data.get(index);
415:
416: CategoryBean cb = new CategoryBean();
417: cb.initialize(nodeID, hasChildren(nodeID));
418: al.add(cb);
419: }
420: } catch (Exception e) {
421: log(
422: Level.SEVERE,
423: "CategoriesHomeBean.retrieveChildren() : Exception ",
424: e);
425: }
426: children = new ObjectListDataProvider(al);
427: children.setObjectType(CategoryBean.class);
428: }
429:
430: private boolean hasChildren(String startNodeID) {
431: try {
432: LinkedList path = new LinkedList();
433: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
434: path
435: .addFirst((String) getSessionAttribute("search.server.selected"));
436: path.addFirst("category");
437: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
438: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
439:
440: Object[] params = { (startNodeID.equals("")) ? rootNodeID
441: : startNodeID };
442: String[] signatures = { "java.lang.String" };
443: ArrayList data = (ArrayList) getMBeanServerConnection()
444: .invoke(on, "getTaxTreeChildren", params,
445: signatures);
446: if (data.size() > 0) {
447: return true;
448: } else {
449: return false;
450: }
451: } catch (Exception e) {
452: log(Level.SEVERE,
453: "CategoriesHomeBean.hasChildren() : Exception ", e);
454: }
455: return false;
456: }
457:
458: private void retrieveSearchResults() {
459: String searchServer = (String) getSessionAttribute("search.server.selected");
460: String searchText = (String) getSessionAttribute("search.categorieshome.searchtext");
461: String searchScope = (String) getSessionAttribute("search.categorieshome.searchscope");
462:
463: ArrayList al = new ArrayList();
464: try {
465: LinkedList path1 = new LinkedList();
466: path1.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
467: path1.addFirst(searchServer);
468: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
469: AdminClientUtil.SEARCHSERVER_MBEAN_TYPE, path1);
470:
471: Object[] params1 = {};
472: String[] signatures1 = {};
473: Properties p = (Properties) getMBeanServerConnection()
474: .invoke(on, "retrieveVitals", params1, signatures1);
475: String url = p.getProperty("url");
476:
477: LinkedList path2 = new LinkedList();
478: path2.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
479: path2.addFirst(searchServer);
480: path2.addFirst("category");
481: on = AdminClientUtil.getResourceMBeanObjectName(
482: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path2);
483:
484: Object[] params2 = { url + "/search", searchText, "1000",
485: searchScope };
486: String[] signatures2 = { "java.lang.String",
487: "java.lang.String", "java.lang.String",
488: "java.lang.String" };
489: ArrayList data = (ArrayList) getMBeanServerConnection()
490: .invoke(on, "searchTaxTree", params2, signatures2);
491:
492: for (int index = 0; index < data.size(); index++) {
493: String nodeID = (String) data.get(index);
494:
495: CategoryBean cb = new CategoryBean();
496: cb.initialize(nodeID, hasChildren(nodeID));
497: al.add(cb);
498: }
499: } catch (Exception e) {
500: log(Level.SEVERE, "CategoriesHome.retrieveSearchResults()",
501: e);
502: }
503: searchResults = new ObjectListDataProvider(al);
504: searchResults.setObjectType(CategoryBean.class);
505: }
506:
507: }
|