diff options
Diffstat (limited to 'bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/monitor/config/impl/MonitorConfigImpl.java')
-rw-r--r-- | bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/monitor/config/impl/MonitorConfigImpl.java | 561 |
1 files changed, 561 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/monitor/config/impl/MonitorConfigImpl.java b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/monitor/config/impl/MonitorConfigImpl.java new file mode 100644 index 000000000..586966d83 --- /dev/null +++ b/bundles/org.eclipse.wst.wsi/src/org/eclipse/wst/wsi/internal/core/monitor/config/impl/MonitorConfigImpl.java @@ -0,0 +1,561 @@ +/******************************************************************************* + * Copyright (c) 2002-2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + *******************************************************************************/ +package org.eclipse.wst.wsi.internal.core.monitor.config.impl; + +import java.io.PrintWriter; +import java.io.StringWriter; + +import org.eclipse.wst.wsi.internal.core.WSIConstants; +import org.eclipse.wst.wsi.internal.core.WSIException; +import org.eclipse.wst.wsi.internal.core.common.AddStyleSheet; +import org.eclipse.wst.wsi.internal.core.common.impl.AddStyleSheetImpl; +import org.eclipse.wst.wsi.internal.core.monitor.Monitor; +import org.eclipse.wst.wsi.internal.core.monitor.config.Comment; +import org.eclipse.wst.wsi.internal.core.monitor.config.ManInTheMiddle; +import org.eclipse.wst.wsi.internal.core.monitor.config.MonitorConfig; +import org.eclipse.wst.wsi.internal.core.monitor.config.MonitorConfigReader; +import org.eclipse.wst.wsi.internal.core.monitor.config.Redirect; +import org.eclipse.wst.wsi.internal.core.util.MessageList; + +/** + * This is the implementation for the monitor configuration file. + * + * @version 1.0.1 + * @author Peter Brittenham (peterbr@us.ibm.com) + */ +public class MonitorConfigImpl implements MonitorConfig +{ + /** + * Message list reference. + */ + protected MessageList messageList = null; + + /** + * Monitor configuration file URI. + */ + protected String documentURI = null; + + /** + * Comment. + */ + protected Comment comment = null; + + /** + * Log location. + */ + protected String logURI; + + /** + * Replace log indicator. + */ + protected boolean replaceLog = false; + + /** + * Style sheet declaration. + */ + protected AddStyleSheet addStyleSheet; + + /** + * Log duration. + */ + protected int logDuration = 600; + + /** + * Timeout. + */ + protected int timeout = 3; + + /** + * Man-in-the-middle settings. + */ + protected ManInTheMiddle manInTheMiddle = null; + + /** + * Verbose option. + */ + protected boolean verbose = false; + + /** + * Initialize monitor config. + */ + public void init(MessageList messageList) + { + this.messageList = messageList; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#getComment() + */ + public Comment getComment() + { + return this.comment; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#setComment(Comment) + */ + public void setComment(Comment comment) + { + this.comment = comment; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#getLogLocation() + */ + public String getLogLocation() + { + return this.logURI; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#setLogLocation(String) + */ + public void setLogLocation(String logURI) + { + this.logURI = logURI; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#getReplaceLog() + */ + public boolean getReplaceLog() + { + return this.replaceLog; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#setReplaceLog(boolean) + */ + public void setReplaceLog(boolean replaceLog) + { + this.replaceLog = replaceLog; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#getAddStyleSheet() + */ + public AddStyleSheet getAddStyleSheet() + { + return this.addStyleSheet; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#setAddStyleSheet(org.wsi.test.common.AddStyleSheet) + */ + public void setAddStyleSheet(AddStyleSheet addStyleSheet) + { + this.addStyleSheet = addStyleSheet; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#getLogDuration() + */ + public int getLogDuration() + { + return logDuration; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#setLogDuration(int) + */ + public void setLogDuration(int logDuration) + { + this.logDuration = logDuration; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#getTimeout() + */ + public int getTimeout() + { + return this.timeout; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#setTimeout(int) + */ + public void setTimeout(int timeout) + { + this.timeout = timeout; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#getManInTheMiddle() + */ + public ManInTheMiddle getManInTheMiddle() + { + return manInTheMiddle; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#setManInTheMiddle(ManInTheMiddle) + */ + public void setManInTheMiddle(ManInTheMiddle manInTheMiddle) + { + this.manInTheMiddle = manInTheMiddle; + } + + /* (non-Javadoc) + * @see org.wsi.test.document.WSIDocument#getLocation() + */ + public String getLocation() + { + return this.documentURI; + } + + /* (non-Javadoc) + * @see org.wsi.test.document.WSIDocument#setLocation(String) + */ + public void setLocation(String documentURI) + { + this.documentURI = documentURI; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#getVerboseOption() + */ + public boolean getVerboseOption() + { + return this.verbose; + } + + /* (non-Javadoc) + * @see org.wsi.test.monitor.config.MonitorConfig#setVerboseOption(boolean) + */ + public void setVerboseOption(boolean verbose) + { + this.verbose = verbose; + } + + /* (non-Javadoc) + * @see org.wsi.test.document.DocumentElement#toXMLString(String) + */ + public String toXMLString(String namespaceName) + { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + + String nsName = namespaceName; + if ((!nsName.equals("") && (!nsName.endsWith(":")))) + nsName += ":"; + + // Config options + pw.println(" <" + nsName + ELEM_NAME + ">"); + + // Comment + if (this.comment != null) + { + pw.print(comment.toXMLString(nsName)); + } + + // Log file + pw.print(" <" + nsName + WSIConstants.ELEM_LOG_FILE + " "); + pw.print(WSIConstants.ATTR_REPLACE + "=\"" + this.replaceLog + "\" "); + pw.println(WSIConstants.ATTR_LOCATION + "=\"" + this.logURI + "\">"); + pw.print(getAddStyleSheet().toXMLString(namespaceName)); + pw.println(" </" + nsName + WSIConstants.ELEM_LOG_FILE + ">"); + + // Log duration + pw.print(" <" + nsName + WSIConstants.ELEM_LOG_DURATION + ">"); + pw.print(this.logDuration); + pw.println("</" + nsName + WSIConstants.ELEM_LOG_DURATION + ">"); + + // Timeout + pw.print( + " <" + nsName + WSIConstants.ELEM_CLEANUP_TIMEOUT_SECONDS + ">"); + pw.print(this.timeout); + pw.println("</" + nsName + WSIConstants.ELEM_CLEANUP_TIMEOUT_SECONDS + ">"); + + // Man-in-the-middle + if (this.manInTheMiddle != null) + { + pw.print(manInTheMiddle.toXMLString(nsName)); + } + + // End element + pw.println(" </" + nsName + ELEM_NAME + ">"); + + return sw.toString(); + } + + /** + * Get string representation of this object. + */ + public String toString() + { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + + pw.println(" comment ..................... " + this.comment); + pw.println(" logURI ...................... " + this.logURI); + pw.println(" replaceLog .................. " + this.replaceLog); + pw.println(" logDuration ................. " + this.logDuration); + pw.println(" timeout ..................... " + this.timeout); + + // addStyleSheet + if (this.addStyleSheet != null) + pw.println( + " addStyleSheet ............... " + this.addStyleSheet.toString()); + + // Man-in-the-middle + if (this.manInTheMiddle != null) + { + pw.print(this.manInTheMiddle.toString()); + } + + return sw.toString(); + } + + /** + * Set config values from another monitor config object. + */ + private void setConfig(MonitorConfig monitorConfig) + { + // ADD: Should this be a clone operation? + this.comment = monitorConfig.getComment(); + this.documentURI = monitorConfig.getLocation(); + this.logURI = monitorConfig.getLogLocation(); + this.replaceLog = monitorConfig.getReplaceLog(); + this.logDuration = monitorConfig.getLogDuration(); + this.timeout = monitorConfig.getTimeout(); + this.manInTheMiddle = monitorConfig.getManInTheMiddle(); + this.addStyleSheet = monitorConfig.getAddStyleSheet(); + this.verbose = monitorConfig.getVerboseOption(); + } + + /** + * Verify config options. + */ + private void verifyConfig() throws WSIException + { + // If no redirect statements, then exit + if ((this.manInTheMiddle == null) + || (this.manInTheMiddle.getRedirectList() == null) + || (this.manInTheMiddle.getRedirectList().size() == 0)) + { + throw new IllegalArgumentException( + getMessage( + "config05", + "Monitor config file did not contain any redirect statements.")); + } + + if (this.logURI == null) + { + throw new IllegalArgumentException( + getMessage( + "config06", + "Monitor config file did not contain the log file URI.")); + } + } + + /** + * Parse the command line arguments. + */ + public void parseArgs(String[] args) throws WSIException + { + // Get new config reader + MonitorConfigReader monitorConfigReader = new MonitorConfigReaderImpl(); + + // Monitor config object which will be merged after all of the input parms are processed + MonitorConfig monitorConfigFromArgs = null; + + // If no input arguments, then throw exception + if (args.length == 0) + { + // ADD: + throw new IllegalArgumentException( + getMessage("usage01", Monitor.USAGE_MESSAGE)); + } + + // Parse the command line arguments to locate the config file option (if it was specified) + for (int argCount = 0; argCount < args.length; argCount++) + { + // -configFile + if ((args[argCount].equalsIgnoreCase("-config")) + || (args[argCount].equals("-c"))) + { + argCount++; + monitorConfigFromArgs = + monitorConfigReader.readMonitorConfig(args[argCount]); + } + } + + // If config file was not specified, then create analyzer config object + if (monitorConfigFromArgs == null) + { + monitorConfigFromArgs = new MonitorConfigImpl(); + monitorConfigFromArgs.init(this.messageList); + } + + // Parse all of the command line arguments + for (int argCount = 0; argCount < args.length; argCount++) + { + // -configFile + if ((args[argCount].equalsIgnoreCase("-config")) + || (args[argCount].equals("-c"))) + { + // Skip this option since it was already processed + argCount++; + } + + // -comment + else if ( + (args[argCount].equalsIgnoreCase("-comment")) + || (args[argCount].equals("-C"))) + { + argCount++; + Comment comment = new CommentImpl(); + comment.setText(args[argCount]); + monitorConfigFromArgs.setComment(comment); + } + + // -logFile + else if ( + (args[argCount].equalsIgnoreCase("-logFile")) + || (args[argCount].equals("-l"))) + { + argCount++; + monitorConfigFromArgs.setLogLocation(args[argCount]); + } + + // -replace + else if ( + (args[argCount].equalsIgnoreCase("-replace")) + || (args[argCount].equals("-r"))) + { + argCount++; + monitorConfigFromArgs.setReplaceLog( + Boolean.valueOf(args[argCount]).booleanValue()); + } + + // -logDuration + else if ( + (args[argCount].equalsIgnoreCase("-logDuration")) + || (args[argCount].equals("-d"))) + { + argCount++; + monitorConfigFromArgs.setLogDuration( + Integer.valueOf(args[argCount]).intValue()); + } + + // -timeout + else if ( + (args[argCount].equalsIgnoreCase("-timeout")) + || (args[argCount].equals("-t"))) + { + argCount++; + monitorConfigFromArgs.setTimeout( + Integer.valueOf(args[argCount]).intValue()); + } + + // -manInTheMiddle + else if ( + (args[argCount].equalsIgnoreCase("-manInTheMiddle")) + || (args[argCount].equals("-m"))) + { + ManInTheMiddle manInTheMiddle = null; + + // Increment arg count + argCount++; + + // Get the man-in-the-middle object + if ((manInTheMiddle = monitorConfigFromArgs.getManInTheMiddle()) + == null) + manInTheMiddle = new ManInTheMiddleImpl(); + + // ADD: Check for correct number of remaining args + + // Create redirect + Redirect redirect = new RedirectImpl(); + + // Get the redirect values + redirect.setListenPort(Integer.valueOf(args[argCount++]).intValue()); + redirect.setHost(args[argCount++]); + redirect.setMaxConnections( + Integer.valueOf(args[argCount++]).intValue()); + redirect.setReadTimeoutSeconds( + Integer.valueOf(args[argCount++]).intValue()); + + // Add redirect + manInTheMiddle.addRedirect(redirect); + + // Set the man-in-the-middle + monitorConfigFromArgs.setManInTheMiddle(manInTheMiddle); + } + + // -verbose + else if ( + (args[argCount].equalsIgnoreCase("-verbose")) + || (args[argCount].equals("-v"))) + { + argCount++; + //monitorConfigFromArgs.setVerboseOption(Boolean.valueOf(args[argCount]).booleanValue()); + monitorConfigFromArgs.setVerboseOption(true); + } + + // -GUI + else if (args[argCount].equalsIgnoreCase("-GUI")) + { + // Ignore -GUI option + } + + else + { + throw new IllegalArgumentException( + getMessage( + "config01", + args[argCount], + "The specified option is not supported.")); + } + } + + // If addStyleSheet was not specified, then create a comment version of it + if (monitorConfigFromArgs.getAddStyleSheet() == null) + { + AddStyleSheet addStyleSheet = new AddStyleSheetImpl(); + addStyleSheet.setHref(WSIConstants.DEFAULT_LOG_XSL); + addStyleSheet.setType(WSIConstants.DEFAULT_XSL_TYPE); + addStyleSheet.setComment(true); + monitorConfigFromArgs.setAddStyleSheet(addStyleSheet); + } + + // Merge config info into this object + setConfig(monitorConfigFromArgs); + + // Verify config options + verifyConfig(); + } + + /** + * Get message from resource bundle. + */ + private String getMessage(String messageID, String defaultMessage) + { + return getMessage(messageID, null, defaultMessage); + } + + /** + * Get message from resource bundle. + */ + private String getMessage( + String messageID, + String messageData, + String defaultMessage) + { + String message = defaultMessage; + if (messageList != null) + message = messageList.getMessage(messageID, messageData, defaultMessage); + else + message += " " + messageData + "."; + + return message; + } +} |