/*******************************************************************************
* Copyright (c) 2007, 2010 The Planets Project Partners.
*
* All rights reserved. This program and the accompanying
* materials are made available under the terms of the
* Apache License, Version 2.0 which accompanies
* this distribution, and is available at
* http://www.apache.org/licenses/LICENSE-2.0
*
*******************************************************************************/
package eu.planets_project.tb.gui.backing.admin.wsclient.faces;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;
import javax.faces.model.SelectItem;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.ibm.wsdl.xml.WSDLReaderImpl;
import eu.planets_project.tb.gui.backing.admin.wsclient.util.ComponentBuilder;
import eu.planets_project.tb.gui.backing.admin.wsclient.util.OperationInfo;
import eu.planets_project.tb.gui.backing.admin.wsclient.util.ServiceInfo;
import eu.planets_project.tb.gui.backing.admin.wsclient.util.WSClient;
/**
* This bean implements the following logic:
* a generic SOAP client
* a WSDL conformance check
*
* @author Markus Reis, ARC
*/
public class WSClientBean implements ValueChangeListener
{
//the log of this class
private Log log = LogFactory.getLog(WSClientBean.class);
//the selected WebService (i.e. a SelectItem) in the
// drop-down list of available services
// (defined in the selected WSDL contract)
SelectItem serviceSelectItem = null;
//the selected WebService operation (i.e. a SelectItem) in the
// drop-down list of available operations
// (defined in the selected WSDL contract)
SelectItem operationSelectItem = null;
//the wsdl uri displayed in the text control
String wsdlURI = "";
//the SelectItems displayed in the drop-down list of
// available services (defined in the selected WSDL contract)
ArrayList<SelectItem> serviceSelectItems = new ArrayList<SelectItem>();
//the SelectItems displayed in the drop-down list of
// available service operations
// (defined in the selected WSDL contract for the selected WebService)
ArrayList<SelectItem> operationSelectItems = new ArrayList<SelectItem>();
//the ServiceInfo objects corresponding to the
// WebServices displayed in the drop-down list of
// available services (defined in the selected WSDL contract)
HashMap<String, ServiceInfo> serviceInfos = new HashMap<String, ServiceInfo>();
//the OperationInfo objects corresponding to the
// WebService operations displayed in the drop-down list of
// available service operations
// (defined in the selected WSDL contract for the selected WebService)
HashMap<String, OperationInfo> operationInfos = new HashMap<String, OperationInfo>();
//the XML data sent back from the WebService endpoint on a previous request
String xmlResponse = "";
//the directory on the local FS where files are stored/served from
String workDir = "";
//http URL pointing to a certain context on the application server
String reportContext = "";
//the URI specifying the location where to download the HTML conformance
// check results
String wsiResultURI = "";
/**
* Constructor
*/
public WSClientBean()
{
}
/**
* sets the working directory
* @param dir - a file path (either relative or absolute) to a
* directory on the local FS
*/
public void setWorkDir(String dir) {
workDir = dir;
}
/**
* gets the working directory
* @return a file path (either relative or absolute) to a
* directory on the local FS
*/
public String getWorkDir() {
return workDir;
}
/**
* a http URL pointing to a certain context on the application server
* @param context - in the form of a http URL
*/
public void setReportContext(String context) {
reportContext = context;
}
/**
* the http URL pointing to a certain context on the application server
* @return context in the form of a http URL
*/
public String getReportContext() {
return reportContext;
}
/**
* Sets the wsdl uri displayed in the text control
*
* @param uri - The URI of the WSDL to set
*/
public void setWsdlURI(String uri)
{
log.debug("Setting WSDL uri to: " + uri);
wsdlURI = uri;
}
/**
* Gets the wsdl uri displayed in the text control
*
* @return The URI of the WSDL to set
*/
public String getWsdlURI()
{
log.debug("Getting WSDL uri ...");
return wsdlURI;
}
/**
* Gets the SelectItems displayed in the drop-down list of
* available services (defined in the selected WSDL contract)
*
* @return a list of SelectItems
*/
public List<SelectItem> getServiceSelectItems()
{
log.debug("Getting serviceSelectItems");
return serviceSelectItems;
}
/**
* Sets the SelectItems displayed in the drop-down list of
* available services (defined in the selected WSDL contract)
*
* @param itemList - a list of SelectItems corresponding to
* WebServices
*/
public void setServiceSelectItems(List<SelectItem> itemList)
{
log.debug("Setting serviceSelectItems");
}
/**
* Gets the selected WebService (i.e. a SelectItem) from the
* drop-down list of available services
* (defined in the selected WSDL contract)
*
* @return the selected WebService (i.e. a SelectItem)
*/
public SelectItem getServiceSelectItem()
{
log.debug("Getting serviceSelectItem");
if (serviceSelectItem != null) {
log.debug(serviceSelectItem);
}
return serviceSelectItem;
}
/**
* Sets the selected WebService (i.e. a SelectItem) in the
* drop-down list of available services
* (defined in the selected WSDL contract)
*
* @param selectItem - the selected WebService
*/
public void setServiceSelectItem(SelectItem selectItem)
{
log.debug("Setting serviceSelectItem ...");
if (selectItem != null) {
boolean hasChanged = false;
if (this.serviceSelectItem == null)
hasChanged = true;
else if (!((String)this.serviceSelectItem.getValue()).equalsIgnoreCase((String)selectItem.getValue()))
hasChanged = true;
else ;
if (hasChanged) {
serviceSelectItem = selectItem;
reloadOperations();
}
else ;
}
else ;
log.debug("Setting serviceSelectItem DONE");
}
/**
* Gets the selected WebService name (i.e. a String) from the
* drop-down list of available services
* (defined in the selected WSDL contract)
*
* @return the selected WebService name (i.e. a String)
*/
public String getServiceSelectItemValue()
{
log.debug("Getting serviceSelectItemValue");
if (serviceSelectItem != null) {
if (serviceSelectItem.getValue() != null)
return serviceSelectItem.getValue().toString();
}
return "";
}
/**
* Sets the selected WebService name (i.e. a String) in the
* drop-down list of available services
* (defined in the selected WSDL contract)
*
* @param value - the selected WebService name (i.e. a String)
*/
public void setServiceSelectItemValue(String value)
{
log.debug("Setting serviceSelectItemValue");
setServiceSelectItem(new SelectItem(value));
}
/**
* reloads the list of available operations given a selected
* WebService
*/
private void reloadOperations() {
operationSelectItems.clear();
operationInfos.clear();
operationSelectItem = null;
if (serviceSelectItem != null) {
Iterator operationIterator = ((ServiceInfo)serviceInfos.get(serviceSelectItem.getValue())).getOperations();
boolean firstLoop = true;
while (operationIterator.hasNext()) {
OperationInfo operationInfo = (OperationInfo)operationIterator.next();
SelectItem operationSelectItem = new SelectItem(operationInfo.getTargetMethodName());
Iterator operationSelectItemsIterator = operationSelectItems.iterator();
boolean alreadyInserted = false;
while (operationSelectItemsIterator.hasNext()) {
if (operationSelectItem.getValue().equals(((SelectItem)operationSelectItemsIterator.next()).getValue())) {
alreadyInserted = true;
break;
}
else;
}
if (!alreadyInserted)
operationSelectItems.add(operationSelectItem);
if (!operationInfos.containsKey(operationInfo.getTargetMethodName()))
operationInfos.put(operationInfo.getTargetMethodName(), operationInfo);
else ;
if (firstLoop) {
this.operationSelectItem = operationSelectItem;
firstLoop = false;
}
}
}
else ;
}
/**
* Gets the SelectItems displayed in the drop-down list of
* available service operations
* (defined in the selected WSDL contract for the selected WebService)
*
* @return a list of SelectItems (corresponding to WebService operations)
*/
public List<SelectItem> getOperationSelectItems() {
return operationSelectItems;
}
/**
* Sets the SelectItems displayed in the drop-down list of
* available service operations
* (defined in the selected WSDL contract for the selected WebService)
*
* @param itemList - a list of SelectItems (corresponding to WebService operations)
*/
public void setOperationSelectItems(List<SelectItem> itemList)
{
log.debug("Setting operationSelectItems");
}
/**
* Gets the selected WebService operation (i.e. a SelectItem) from the
* drop-down list of available service operations
* (defined in the selected WSDL contract for the selected WebService)
*
* @return the selected WebService operation (i.e. a SelectItem)
*/
public SelectItem getOperationSelectItem()
{
log.debug("Getting operationSelectItem - BR0");
return operationSelectItem;
}
/**
* Sets the selected WebService operation (i.e. a SelectItem) in the
* drop-down list of available service operations
* (defined in the selected WSDL contract for the selected WebService)
*
* @param selectItem - the selected WebService operation (i.e. a SelectItem)
*/
public void setOperationSelectItem(SelectItem selectItem)
{
log.debug("Setting operationSelectItems ...");
if (selectItem != null) {
boolean hasChanged = false;
if (this.operationSelectItem == null)
hasChanged = true;
else if (!((String)this.operationSelectItem.getValue()).equalsIgnoreCase((String)selectItem.getValue()))
hasChanged = true;
else ;
if (hasChanged) {
operationSelectItem = selectItem;
//setXMLRequest();
}
else ;
}
else ;
operationSelectItem = selectItem;
log.debug("Setting operationSelectItems DONE");
}
/**
* Gets the selected WebService operation name (i.e. a String) from the
* drop-down list of available service operations
* (defined in the selected WSDL contract)
*
* @return the selected WebService operation name (i.e. a String)
*/
public String getOperationSelectItemValue()
{
log.debug("Getting operationSelectItemValue");
getOperationSelectItem();
if (operationSelectItem != null) {
return operationSelectItem.getValue().toString();
}
return "";
}
/**
* Sets the selected WebService operation name (i.e. a String) in the
* drop-down list of available service operations
* (defined in the selected WSDL contract)
*
* @param value - the selected WebService operation name (i.e. a String)
*/
public void setOperationSelectItemValue(String value)
{
log.debug("Setting operationSelectItemValue");
setOperationSelectItem(new SelectItem(value));
}
/**
* gets the XML request data to be sent to the WebService endpoint
*
* @return the XML request
*/
public String getXmlRequest()
{
log.debug("Getting xmlRequest");
String ret = "<xml>No operation defined yet!</xml>";
if (operationSelectItem != null) {
if (operationInfos != null) {
if (operationInfos.containsKey(operationSelectItem.getValue())) {
log.debug("getXMLRequest.operationSelectItem.getValue() = " + operationSelectItem.getValue());
log.debug("operationInfos.size = "+operationInfos.size());
OperationInfo o = (OperationInfo)operationInfos.get(operationSelectItem.getValue());
log.debug("TargetMethod Name = "+o.getTargetMethodName());
ret = o.getInputMessageText();
//ret = ((OperationInfo)operationInfos.get(operationSelectItem.getValue())).getInputMessageText();
}
else
ret = "<xml>No operationInfos key matched!</xml>";
}
else
ret = "<xml>No operationInfos object or null!</xml>";
}
else ;
log.debug("Getting xmlRequest - ret = " + ret + " - DONE");
return ret;
}
/**
* sets the XML request data to be sent to the WebService endpoint
*
* @param xmlRequest - the XML request to be sent
*/
public void setXmlRequest(String xmlRequest)
{
log.debug("Setting XML Request to: " + xmlRequest);
if (operationSelectItem != null) {
if (operationInfos != null) {
if (operationInfos.containsKey(operationSelectItem.getValue()))
((OperationInfo)operationInfos.get(operationSelectItem.getValue())).setInputMessageText(xmlRequest);
else ;
}
else ;
}
else ;
log.debug("XML Request set to: " + xmlRequest);
}
/**
* sets the XML response data received from the WebService endpoint
*
* @param response - the XML response
*/
public void setXmlReponse(String response) {
this.xmlResponse = response;
}
/**
* gets the xml input template message (i.e. including "?") from the OperationInfo Bean
*
* @return the xml request template
*/
public String getOperationRequestTemplate(){
if (operationSelectItem != null) {
if (operationInfos != null) {
if (operationInfos.containsKey(operationSelectItem.getValue()))
return ((OperationInfo)operationInfos.get(operationSelectItem.getValue())).getInputMessageText();
}
}
return null;
}
/**
* gets the xml output template message (i.e. including "?") from the OperationInfo Bean
*
* @return the xml responds template
*/
public String getOperationRespondsTemplate(){
if (operationSelectItem != null) {
if (operationInfos != null) {
if (operationInfos.containsKey(operationSelectItem.getValue()))
return ((OperationInfo)operationInfos.get(operationSelectItem.getValue())).getOutputMessageText();
}
}
return null;
}
/**
* gets the XML response data received from the WebService endpoint
*
* @return the XML response
*/
public String getXmlResponse() {
return this.xmlResponse;
}
/**
* sets the URI pointing to the WS-I conformance check
* result file on the application server
*
* @param result - the URI to be set
*/
public void setWsiResultURI(String result) {
this.wsiResultURI = result;
}
/**
* gets the URI pointing to the WS-I conformance check
* result file on the application server
*
* @return the URI
*/
public String getWsiResultURI() {
log.debug("Getting WSIResultURI = " + this.wsiResultURI);
return this.wsiResultURI;
}
/**
* tells whether the request to be sent to the WebService
* endpoint is not ready
*
* @return a boolean
*/
public boolean isRequestNotReady()
{
if (getServiceSelectItemValue() != null) {
if (getServiceSelectItemValue().length() > 0) {
if (getOperationSelectItemValue() != null) {
if (getOperationSelectItemValue().length() > 0)
return false;
else
return true;
}
else
return true;
}
else
return true;
}
else
return false;
}
/**
* Reads the WSDL and creates Service and Service Operation
* information.
*
* @return a String saying either "error" or "success"
*/
public String analyzeWsdl()
{
try
{
log.debug("Clean up");
this.serviceInfos.clear();
this.operationInfos.clear();
this.operationSelectItem = null;
this.serviceSelectItem = null;
this.operationSelectItems.clear();
this.serviceSelectItems.clear();
this.xmlResponse = "";
// Create the in memory model of services and operations
// defined in the current WSDL
log.debug("WsdlURI = " + wsdlURI);
ComponentBuilder builder = new ComponentBuilder();
List services = builder.buildComponents(wsdlURI.toString());
// List all the services defined in the current WSDL
Iterator iter = services.iterator();
boolean firstLoop = true;
while(iter.hasNext())
{
// Load each service into the services combobox model
ServiceInfo serviceInfo = (ServiceInfo)iter.next();
SelectItem serviceSelectItem = new SelectItem(serviceInfo.getName());
this.serviceSelectItems.add(serviceSelectItem);
serviceInfos.put(serviceInfo.getName(), serviceInfo);
if (firstLoop) {
setServiceSelectItem(serviceSelectItem);
//this.serviceSelectItem = serviceSelectItem;
firstLoop = false;
}
}
return "success-analyze";
}
catch(Exception e)
{
// Report the error to the user
log.debug("NOT successfully analyzed");
log.error(e.getMessage());
e.printStackTrace();
return "error-analyze";
}
}
/**
* Checks the WSDL whether it conforms to the latest WS-I profile or not
*
* @return a String saying either "error" or "success"
*/
public String checkWsdl()
{
try
{
log.debug("Checking WSDL for WS-I compliance");
//create working dir
File wsiDir = new File(workDir + "/wsi");
wsiDir.mkdirs();
log.debug("File created at: " + wsiDir.getCanonicalPath());
//create analyzer config file
log.debug("location of template file is: " + this.getClass().getClassLoader().getResource("resources/wsi/analyzerConfigTemplate.xml"));
File analyzerConfigTemplate = new File(this.getClass().getClassLoader().getResource("resources/wsi/analyzerConfigTemplate.xml").toURI());
String analyzerConfigTemplateString = readFileAsString(analyzerConfigTemplate);
File reportFile = new File (wsiDir, "report.xml");
analyzerConfigTemplateString = analyzerConfigTemplateString.replaceAll("@report_file_location@", reportFile.getCanonicalPath().replace('\\', '/'));
File _checkFile = new File(this.getClass().getClassLoader().getResource("resources/wsi/profiles/SSBP10_BP11_TAD.xml").toURI());
File checkFile = new File (wsiDir, "checkFile.xml");
copy(_checkFile, checkFile);
analyzerConfigTemplateString = analyzerConfigTemplateString.replaceAll("@check_file_location@", checkFile.getCanonicalPath().replace('\\', '/'));
WSDLReaderImpl wsdlReader = new WSDLReaderImpl();
Definition wsdlDefinition = wsdlReader.readWSDL(getWsdlURI());
Iterator bindingsIterator = wsdlDefinition.getBindings().values().iterator();
if (bindingsIterator.hasNext()) {
Binding binding = (Binding)bindingsIterator.next();
analyzerConfigTemplateString = analyzerConfigTemplateString.replaceAll("@binding_name@", binding.getQName().getLocalPart());
analyzerConfigTemplateString = analyzerConfigTemplateString.replaceAll("@target_namespace@", binding.getQName().getNamespaceURI());
}
analyzerConfigTemplateString = analyzerConfigTemplateString.replaceAll("@wsdl_uri@", getWsdlURI());
log.debug("analyzerConfigTemplateString = \n" + analyzerConfigTemplateString);
File analyzerConfigFile = new File (wsiDir, "analyzerConfig.xml");
BufferedWriter out = new BufferedWriter(new FileWriter(analyzerConfigFile));
out.write(analyzerConfigTemplateString);
out.close();
log.debug("analyzerConfigFile created at: " + analyzerConfigFile.getCanonicalPath().replace('\\', '/'));
//start analyze
runWSICheck(analyzerConfigFile.getCanonicalPath().replace('\\', '/'));
log.debug("Analyze COMPLETED - report at: " + reportFile.getCanonicalPath().replace('\\', '/'));
File transformedReport = transformReport(reportFile);
log.debug( "WSI Report temporarily created at [" + transformedReport.getCanonicalPath() + "]" );
this.wsiResultURI = reportContext + transformedReport.getName();
log.debug("Transform COMPLETED - transformed report at: " + this.wsiResultURI);
return "success-check";
}
catch(Exception e)
{
// Report the error to the user
log.debug("NOT successfully analyzed");
log.error(e.getMessage());
e.printStackTrace();
return "error-check";
}
}
/**
* Sends the built XML request to the WebService endpoint
*
* @return a String saying either "error" or "success"
*/
public String sendRequest()
{
try {
log.debug("Sending Request ....");
if (operationSelectItem != null) {
if (operationInfos != null) {
if (operationInfos.containsKey(operationSelectItem.getValue())) {
log.debug("Invoking WS-Operation ...");
this.xmlResponse = WSClient.invokeOperation((OperationInfo)operationInfos.get(operationSelectItem.getValue()));
log.debug("Invoking WS-Operation DONE");
}
else {
log.debug("<xml>No operationInfos key matched!</xml>");
return "error-send";
}
}
else {
log.debug("<xml>No operationInfos object or null!</xml>");
return "error-send";
}
}
else {
log.debug("<xml>No operation defined yet!</xml>");
return "error-send";
}
} catch (Exception e) {
log.debug("excpetion during send", e);
log.debug(e);
log.debug(e.getMessage());
//e.printStackTrace();
return "error-send";
}
return "success-send";
}
/**
* reads the contents of a file into a String
*
* @param filePath the name of the file to open.
*/
private static String readFileAsString(File file)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(
new FileReader(file));
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
/**
* copies a file from one location to another
* @param src - the source file
* @param dst - the destinationfile
* @throws IOException
*/
private void copy(File src, File dst) throws IOException {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
/**
* runs the WSI Check using the official WS-I Testing Tool (and runs
* this tool via Runtime.exec(..))
* @param configFile - the path to the confguration file used by the
* official WS-I Testing Tool
*/
private void runWSICheck(String configFile) {
String[] args;
log.debug("WSI_HOME = " + System.getenv("WSI_HOME"));
log.debug("os.name = " + System.getProperty("os.name"));
if( System.getProperty("os.name").contains("indows"))
{
args = new String[5];
args[0] = "cmd.exe";
args[1] = "/C";
args[2] = "%WSI_HOME%/java/bin/Analyzer.bat";
args[3] = "-config";
args[4] = configFile;
}
else
{
args = new String[4];
args[0] = "sh";
//args[1] = "-c";
//args[1] = "$WSI_HOME/java/bin/Analyzer.sh";
args[1] = System.getenv("WSI_HOME")+"/java/bin/Analyzer.sh";
args[2] = "-config";
args[3] = configFile;
}
log.debug("Execution stmt: " );
for (int i= 0; i< args.length; i++) {
log.debug(args[i] + " ");
}
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(args);
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR");
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT");
errorGobbler.start();
outputGobbler.start();
try {
if (proc.waitFor() != 0) {
log.error("exit value = " + proc.exitValue());
}
else
log.debug("Terminated gracefully");
}
catch (InterruptedException e) {
log.error(e);
}
} catch (Exception e) {e.printStackTrace();}
}
/**
* For testing purposes ONLY!
* @param args
*/
public static void main (String[] args) {
/*File f = new File("samples/log.xml");
try {//f.createNewFile();
log.debug(f.getCanonicalPath());} catch (Exception e) {e.printStackTrace();}
WSClientBean wscb = new WSClientBean();
log.debug("Starting analyze ...");
String inputArg = "-config";
String[] args2 = {inputArg, "C:/DATA/projects/PLANETS/wsi-test-tools/java/samples/analyzerConfig.xml"};
//BasicProfileAnalyzer.main(args);
wscb.runWSICheck(args2);
log.debug("Analyze COMPLETED");*/
/*log.debug("Start ...");
String uri = "C:/DATA/projects/PLANETS/ifr_server/server/default/data/planets/pcfr/wsi/checkFile.xml";
org.xml.sax.InputSource inputSource = new org.xml.sax.InputSource(uri);
try {
XMLReader reader = XMLUtils.getXMLReader();
// Set content handler to inner class
//reader.setContentHandler(new ProfileAssertionsReaderImpl.ProfileAssertionsHandler());
reader.parse(inputSource);
} catch (Exception e) { e.printStackTrace();}*/
System.out.println("Success");
}
/**
* transforms a WS-I XML report to html using the corresponding stylesheet
* @param reportFile - the XML report file
* @return the transformed HTML report file
* @throws Exception
*/
private static File transformReport( File reportFile ) throws Exception
{
String dir = System.getenv("WSI_HOME");
File xsltFile = new File( dir + File.separatorChar + "common" + File.separatorChar + "xsl" +
File.separatorChar + "report.xsl" );
Source xmlSource = new StreamSource(reportFile);
Source xsltSource = new StreamSource(xsltFile);
TransformerFactory transFact = TransformerFactory.newInstance();
Transformer trans = transFact.newTransformer(xsltSource);
String outputFolder = reportFile.getParent();
File output = outputFolder == null || outputFolder.trim().length() == 0 ? null : new File( outputFolder );
File tempFile = File.createTempFile( "wsi-report", ".html", output );
trans.transform(xmlSource, new StreamResult( tempFile ));
return tempFile;
}
/**
* This class handles the runtime output of the WS-I Testing Tool
*
* @author Markus Reis, ARC
*/
class StreamGobbler extends Thread
{
InputStream is;
String type;
OutputStream os;
StreamGobbler(InputStream is, String type)
{
this(is, type, null);
}
StreamGobbler(InputStream is, String type, OutputStream redirect)
{
this.is = is;
this.type = type;
this.os = redirect;
}
public void run()
{
try
{
PrintWriter pw = null;
if (os != null)
pw = new PrintWriter(os);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
{
if (pw != null)
pw.println(line);
log.debug(line);
}
if (pw != null)
pw.flush();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
/**
* handles generic events
*/
public void processValueChange(ValueChangeEvent vce)
{
log.debug("Processing generic value change: " + vce.getNewValue().toString());
}
/**
* handles generic events occurring due to changes on the operation drop-down box
*/
public void processOperationChange(ValueChangeEvent vce)
{
log.debug("Processing operation value change: " + vce.getNewValue().toString());
setOperationSelectItemValue((String)vce.getNewValue());
}
/**
* handles generic events occurring due to changes on the service drop-down box
*/
public void processServiceChange(ValueChangeEvent vce)
{
log.debug("Processing service value change: " + vce.getNewValue().toString());
setServiceSelectItemValue((String)vce.getNewValue());
}
}