blob: 80e3c1ce135b0f4a58d276a5958a13f56ea30936 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2002-2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*
* </copyright>
*/
package org.eclipse.wst.wsi.internal.core.analyzer;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;
import java.util.Vector;
import org.eclipse.wst.wsi.internal.core.ToolInfo;
import org.eclipse.wst.wsi.internal.core.WSIConstants;
import org.eclipse.wst.wsi.internal.core.WSIException;
import org.eclipse.wst.wsi.internal.core.analyzer.config.AnalyzerConfig;
import org.eclipse.wst.wsi.internal.core.document.DocumentFactory;
import org.eclipse.wst.wsi.internal.core.log.Log;
import org.eclipse.wst.wsi.internal.core.profile.ProfileAssertions;
import org.eclipse.wst.wsi.internal.core.profile.validator.ProfileValidatorFactory;
import org.eclipse.wst.wsi.internal.core.report.Reporter;
import org.eclipse.wst.wsi.internal.core.util.MessageList;
import org.eclipse.wst.wsi.internal.core.util.TestUtils;
/**
* The Analyzer will process all Profile conformance functions.
* This class should be sub-classed for each profile.
*
* @version 1.0.1
* @author Jim Clune
* @author Peter Brittenham
*/
public abstract class Analyzer
{
/**
* Message list.
*/
protected MessageList messageList = null;
protected final static String RESOURCE_BUNDLE_NAME =
"org.eclipse.wst.wsi.internal.core.analyzer.Analyzer";
public final static String USAGE_MESSAGE =
"Usage: Analyzer -config <configFilename>";
protected Reporter reporter = null;
protected AnalyzerContext analyzerContext = null;
protected CandidateInfo candidateInfo = null;
/**
* Analyzer tool information.
*/
protected ToolInfo toolInfo = null;
/**
* Profile validator factory.
*/
protected ProfileValidatorFactory factory = null;
/**
* Profile validator factory.
*/
protected DocumentFactory documentFactory = null;
/**
* Analyzer config file list.
*/
protected List analyzerConfigList = new Vector();
protected int analyzerConfigIndex = 0;
/**
* Profile assertions.
*/
protected ProfileAssertions profileAssertions = null;
/**
* Log file.
*/
protected Log log = null;
/**
* Create an instance of the analyzer tool.
* @param args command line arguments.
* @param toolInfo analyzer tool information.
* @throws WSIException if problems creating the instance of the analyzer tool.
*/
public Analyzer(String[] args, ToolInfo toolInfo) throws WSIException
{
init(toolInfo);
// Get new config object
this.analyzerConfigList.add(
analyzerConfigIndex,
documentFactory.newAnalyzerConfig());
getAnalyzerConfig().init(messageList);
// Parse command line arguments
getAnalyzerConfig().parseArgs(args, true);
// Display copyright and options that were specified
TestUtils.printToolInfo(toolInfo);
System.out.println(getAnalyzerConfig().toString());
// Display message
printMessage(
"progress01",
null,
"Please wait while the specified artifacts are analyzed...");
}
/**
* Create an instance of the analyzer tool.
* @param args command line arguments.
* @param toolInfo analyzer tool information.
* @param validate flag for config options validation.
* @throws WSIException if problems creating the instance of the analyzer tool.
*/
public Analyzer(String[] args, ToolInfo toolInfo, boolean validate) throws WSIException
{
init(toolInfo);
// Get new config object
this.analyzerConfigList.add(
analyzerConfigIndex,
documentFactory.newAnalyzerConfig());
getAnalyzerConfig().init(messageList);
// Parse command line arguments
getAnalyzerConfig().parseArgs(args, validate);
// Display copyright and options that were specified
TestUtils.printToolInfo(toolInfo);
System.out.println(getAnalyzerConfig().toString());
// Display message
printMessage(
"progress01",
null,
"Please wait while the specified artifacts are analyzed...");
}
/**
* Create an instance of the analyzer tool.
* @param analyzerConfigList analyzer config file list.
* @param toolInfo analyzer tool information.
* @throws WSIException if problems creating the instance of the analyzer tool.
*/
public Analyzer(List analyzerConfigList, ToolInfo toolInfo)
throws WSIException
{
init(toolInfo);
this.analyzerConfigList = analyzerConfigList;
}
/**
* Common initialization.
* @param toolInfo analyzer tool information.
* @throws WSIException if problems occur during common initialization.
*/
protected void init(ToolInfo toolInfo) throws WSIException
{
this.toolInfo = toolInfo;
// Create message list
messageList = new MessageList(RESOURCE_BUNDLE_NAME);
// Create profile validator factory
factory = ProfileValidatorFactory.newInstance();
// Create document factory
documentFactory = DocumentFactory.newInstance();
}
/**
* Process all conformance validation functions.
* @return status code.
* @throws WSIException if problems occur during validation.
*/
public int validateAll() throws WSIException
{
int statusCode = 0;
int tempStatusCode;
for (int index = 0; index < analyzerConfigList.size(); index++)
{
// DEBUG:
//System.out.println("index: " + index);
// Set current analyzer config index
setAnalyzerConfig(index);
if ((tempStatusCode = validateConformance()) > statusCode)
statusCode = tempStatusCode;
}
return statusCode;
}
/**
* Process all conformance validation functions.
* @return status code.
* @throws WSIException if problems occur during conformance validation.
*/
public abstract int validateConformance() throws WSIException;
/**
* Get tool information.
* @return the tool information.
*/
public ToolInfo getToolInfo()
{
return this.toolInfo;
}
/**
* Set current analyzer configuration.
* @param index urrent analyzer configuration.
* @see #getAnalyzerConfig
*/
protected void setAnalyzerConfig(int index)
{
this.analyzerConfigIndex = index;
}
/**
* Get analyzer configuration information.
* @return analyzer configuration information.
* @see #setAnalyzerConfig
*/
public AnalyzerConfig getAnalyzerConfig()
{
return (AnalyzerConfig) this.analyzerConfigList.get(analyzerConfigIndex);
}
/**
* Print a message from the resource bundle.
* @param key a key.
* @param messageData message data.
* @param defaultMessage a default message.
*/
public void printMessage(
String key,
String messageData,
String defaultMessage)
{
messageList.printMessage(key, messageData, defaultMessage);
}
/**
* Print message.
* @param key a key.
* @param messageData message data.
* @param defaultMessage a default message.
*/
public static void staticPrintMessage(
String key,
String messageData,
String defaultMessage)
{
MessageList.printMessage(
RESOURCE_BUNDLE_NAME,
key,
messageData,
defaultMessage);
}
/**
* Return XML string representation of this object.
* @param namespaceName a namespace prefix.
* @return XML string representation of this object.
*/
public String toXMLString(String namespaceName)
{
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
// Start
pw.print(toolInfo.getStartXMLString(namespaceName));
// Config
pw.print(
getAnalyzerConfig().toXMLString(
WSIConstants.NS_NAME_WSI_ANALYZER_CONFIG));
// End
pw.println(toolInfo.getEndXMLString(namespaceName));
return sw.toString();
}
/**
* Print a message.
* @param message a message.
*/
public void printMessage(String message)
{
if (getAnalyzerConfig().getVerboseOption())
{
System.err.println(message);
}
}
}