001: /**
002: * Copyright 2004 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.cli.commands.search;
013:
014: import java.io.*;
015: import java.lang.*;
016: import java.util.*;
017: import java.text.*;
018:
019: // JMX
020: import javax.management.MBeanServerConnection;
021: import javax.management.ObjectName;
022: import javax.management.InstanceNotFoundException;
023: import javax.management.MBeanException;
024: import javax.management.ReflectionException;
025: import javax.management.MalformedObjectNameException;
026: import javax.management.RuntimeOperationsException;
027:
028: // PS Admin Common
029: import com.sun.portal.admin.common.util.AdminClientUtil;
030:
031: // CLI framework
032: import com.sun.enterprise.cli.framework.*;
033:
034: // Base Class
035: import com.sun.portal.admin.cli.commands.GenericCommand;
036:
037: /**
038: * This class implements the psadmin analyze-search-db subcommand. The
039: * analyze-search-db subcommand calls the DatabaseMBean and shows a
040: * statistical analysis on a search database.
041: */
042: public class AnalyzeDatabaseCommand extends GenericCommand {
043:
044: private static final String DATE_OLD_LABEL = "psadmin.subcommand.resource.analyze-search-database.date_old.label";
045: private static final String DATE_UPTODATE_LABEL = "psadmin.subcommand.resource.analyze-search-database.date_uptodate.label";
046: private static final String URLS_LABEL = "psadmin.subcommand.resource.analyze-search-database.urls.label";
047: private static final String PROTOCOLS_LABEL = "psadmin.subcommand.resource.analyze-search-database.protocols.label";
048:
049: /**
050: * An abstract method that executes the command
051: * @throws CommandException
052: * @throws CommandValidationException
053: */
054: public void runCommand() throws CommandException,
055: CommandValidationException {
056: validateOptions();
057: validateSearchServerID();
058:
059: StringBuffer sb = new StringBuffer();
060: String method = "";
061:
062: try {
063: LinkedList path = new LinkedList();
064: path.addFirst(AdminClientUtil.DEFAULT_DOMAIN);
065: path.addFirst(getSearchServerId());
066: path.addFirst("database");
067: ObjectName on = AdminClientUtil.getResourceMBeanObjectName(
068: AdminClientUtil.SEARCH_DATABASE_MBEAN_TYPE, path);
069:
070: MBeanServerConnection msc = getMBeanServerConnection(
071: getUserId(), getPassword(), getHost());
072:
073: Object[] params1 = {
074: getOption("database"),
075: (getBooleanOption("refresh")) ? new Boolean(true)
076: : new Boolean(false) };
077: String[] signatures1 = { "java.lang.String",
078: "java.lang.Boolean" };
079: method = "getStatistics";
080: ArrayList data = (ArrayList) msc.invoke(on, method,
081: params1, signatures1);
082:
083: Object[] params2 = { getOption("database") };
084: String[] signatures2 = { "java.lang.String" };
085: method = "isStatisticsOld";
086:
087: Boolean isOld = (Boolean) msc.invoke(on, method, params2,
088: signatures2);
089:
090: Date date = (Date) data.get(0);
091: DateFormat df = new SimpleDateFormat(
092: "MMMM d, yyyy h:mm a z");
093:
094: if (isOld.booleanValue()) {
095: sb.append(getLocalizedString(DATE_OLD_LABEL,
096: new Object[] { df.format(date) }));
097: } else {
098: sb.append(getLocalizedString(DATE_UPTODATE_LABEL,
099: new Object[] { df.format(date) }));
100: }
101:
102: Hashtable servers = (Hashtable) data.get(2);
103: Enumeration e1 = servers.keys();
104: Enumeration e2 = servers.elements();
105: if (e1.hasMoreElements()) {
106: sb.append(getLocalizedString(URLS_LABEL));
107: }
108: while (e1.hasMoreElements()) {
109: sb.append(" " + e1.nextElement() + " "
110: + e2.nextElement() + "\n");
111: }
112:
113: Hashtable protocols = (Hashtable) data.get(1);
114: e1 = protocols.keys();
115: e2 = protocols.elements();
116: if (e1.hasMoreElements()) {
117: sb.append(getLocalizedString(PROTOCOLS_LABEL));
118: }
119: while (e1.hasMoreElements()) {
120: sb.append(" " + e1.nextElement() + " "
121: + e2.nextElement() + "\n");
122: }
123: } catch (InstanceNotFoundException ie) {
124: throw new CommandException(getLocalizedString(
125: ERROR_MBEAN_INSTANCE_NOT_FOUND,
126: new Object[] { method }), ie);
127: } catch (MBeanException me) {
128: throw new CommandException(getLocalizedString(
129: ERROR_JMX_INVOKE, new Object[] { method }), me);
130: } catch (ReflectionException re) {
131: throw new CommandException(getLocalizedString(
132: ERROR_MBEAN_REFLECTION_ERROR,
133: new Object[] { method }), re);
134: } catch (CommandException ce) {
135: throw ce;
136: } catch (Exception e) {
137: throw new CommandException(
138: getLocalizedString(COMMAND_FAILED), e);
139: } finally {
140: closeMBeanServerConnection();
141: }
142:
143: CLILogger.getInstance().printMessage(sb.toString());
144: }
145:
146: }
|