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.io.*;
017: import java.net.*;
018:
019: import javax.faces.context.FacesContext;
020: import javax.faces.application.FacesMessage;
021: import javax.faces.component.UIComponent;
022: import javax.faces.validator.*;
023: import javax.servlet.http.HttpServletRequest;
024: import javax.management.*;
025:
026: import com.sun.web.ui.model.*;
027: import com.sun.web.ui.event.*;
028:
029: import com.sun.data.provider.*;
030:
031: import com.sun.cacao.agent.JmxClient;
032:
033: import com.sun.portal.admin.common.util.AdminClientUtil;
034: import com.sun.portal.admin.console.common.PSBaseBean;
035:
036: public class CreateCategoryBean extends PSBaseBean {
037:
038: public String category = "";
039: public String description = "";
040: public String matchingRule = "";
041:
042: public CreateCategoryBean() {
043: category = "";
044: description = "";
045: matchingRule = "";
046: }
047:
048: public boolean getShowError() {
049: String value = (String) getSessionAttribute("search.createcategory.showerror");
050: if (value == null || value.equals("false")) {
051: return false;
052: } else {
053: return true;
054: }
055: }
056:
057: public boolean getShowSyncAlert() {
058: return isOutOfSync();
059: }
060:
061: public String getCategory() {
062: return category;
063: }
064:
065: public void setCategory(String category) {
066: this .category = category;
067: }
068:
069: public String getDescription() {
070: return description;
071: }
072:
073: public void setDescription(String description) {
074: this .description = description;
075: }
076:
077: public String getMatchingRule() {
078: return matchingRule;
079: }
080:
081: public void setMatchingRule(String matchingRule) {
082: this .matchingRule = matchingRule;
083: }
084:
085: public void validate(FacesContext fc, UIComponent component,
086: Object value) throws ValidatorException {
087: String id = component.getId();
088: if (id.equals("category")) {
089: if (!Validators.isCategoryValid((String) value)) {
090: throw new ValidatorException(new FacesMessage(
091: FacesMessage.SEVERITY_ERROR,
092: getLocalizedString("search",
093: "search.error.error"),
094: getLocalizedString("search",
095: "search.error.badcategory")));
096: }
097: if (isDuplicate((String) value)) {
098: throw new ValidatorException(new FacesMessage(
099: FacesMessage.SEVERITY_ERROR,
100: getLocalizedString("search",
101: "search.error.error"),
102: getLocalizedString("search",
103: "search.error.duplicatecategory")));
104: }
105: } else if (id.equals("description")) {
106: } else if (id.equals("matchingRule")) {
107: }
108: }
109:
110: public String create() {
111: if (isOutOfSync()) {
112: String s = (String) getSessionAttribute("search.createcategory.alertlevel");
113: if (s == null || s.equals("")) {
114: setSessionAttribute("search.createcategory.alertlevel",
115: "on");
116: return null;
117: } else {
118: setSessionAttribute("search.createcategory.alertlevel",
119: "");
120: return doCreate();
121: }
122: } else {
123: setSessionAttribute("search.createcategory.alertlevel", "");
124: return doCreate();
125: }
126: }
127:
128: public String cancel() {
129: setSessionAttribute("search.createcategory.alertlevel", "");
130: setSessionAttribute("search.createcategory.showerror", "false");
131: return "gotoCategoriesHome";
132: }
133:
134: private boolean isDuplicate(String value) {
135: String currentNodeID = (String) getSessionAttribute("search.categorieshome.category");
136: if (currentNodeID.equals("")) {
137: currentNodeID = "ROOT";
138: }
139:
140: try {
141: LinkedList path = new LinkedList();
142: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
143: path
144: .addFirst((String) getSessionAttribute("search.server.selected"));
145: path.addFirst("category");
146: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
147: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
148:
149: Object[] params = { currentNodeID };
150: String[] signatures = { "java.lang.String" };
151: ArrayList data = (ArrayList) getMBeanServerConnection()
152: .invoke(on, "getTaxTreeChildren", params,
153: signatures);
154: for (int index = 0; index < data.size(); index++) {
155: String nodeID = (String) data.get(index);
156: String[] strings = nodeID.split(":");
157: if (strings[strings.length - 1].equals(value)) {
158: return true;
159: }
160: }
161: } catch (Exception e) {
162: }
163: return false;
164: }
165:
166: private boolean isOutOfSync() {
167: try {
168: LinkedList path = new LinkedList();
169: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
170: path
171: .addFirst((String) getSessionAttribute("search.server.selected"));
172: path.addFirst("category");
173: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
174: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
175:
176: Object[] params = {};
177: String[] signatures = {};
178: Boolean result = (Boolean) getMBeanServerConnection()
179: .invoke(on, "isOutOfSync", params, signatures);
180: return result.booleanValue();
181: } catch (Exception e) {
182: log(Level.SEVERE, "CreateCategoryBean.isOutOfSync()", e);
183: }
184: return false;
185: }
186:
187: private String doCreate() {
188: String currentNodeID = (String) getSessionAttribute("search.categorieshome.category");
189: if (currentNodeID.equals("")) {
190: currentNodeID = "ROOT";
191: }
192:
193: try {
194: LinkedList path = new LinkedList();
195: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
196: path
197: .addFirst((String) getSessionAttribute("search.server.selected"));
198: path.addFirst("category");
199: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
200: AdminClientUtil.SEARCH_CATEGORY_MBEAN_TYPE, path);
201:
202: Object[] params = { currentNodeID, category, description,
203: matchingRule };
204: String[] signatures = { "java.lang.String",
205: "java.lang.String", "java.lang.String",
206: "java.lang.String" };
207: getMBeanServerConnection().invoke(on,
208: "insertTaxTreeChildNode", params, signatures);
209:
210: setSessionAttribute("search.createcategory.showerror",
211: "false");
212: return "gotoCategoriesHome";
213: } catch (Exception e) {
214: log(Level.SEVERE, "CreateCategoryBean.doCreate()", e);
215: setSessionAttribute("search.createcategory.showerror",
216: "true");
217: return null;
218: }
219: }
220:
221: }
|