Java tutorial
/* * Copyright (c) 2007 Pentaho Corporation. All rights reserved. * This software was developed by Pentaho Corporation and is provided under the terms * of the GNU Lesser General Public License, Version 2.1. You may not use * this file except in compliance with the license. If you need a copy of the license, * please go to http://www.gnu.org/licenses/lgpl-2.1.txt. The Original Code is Pentaho * Data Integration. The Initial Developer is Pentaho Corporation. * * Software distributed under the GNU Lesser Public License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. Please refer to * the license for the specific language governing your rights and limitations. */ package com.panet.imeta.www; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; import org.apache.commons.codec.binary.Base64; import org.w3c.dom.Document; import org.w3c.dom.Node; import com.panet.imeta.core.Const; import com.panet.imeta.core.Result; import com.panet.imeta.core.exception.KettleXMLException; import com.panet.imeta.core.logging.LogWriter; import com.panet.imeta.core.xml.XMLHandler; import com.panet.imeta.trans.Trans; public class SlaveServerJobStatus { public static final String XML_TAG = "jobstatus"; private String jobName; private String statusDescription; private String errorDescription; private String loggingString; private Result result; public SlaveServerJobStatus() { } /** * @param transName * @param statusDescription */ public SlaveServerJobStatus(String transName, String statusDescription) { this(); this.jobName = transName; this.statusDescription = statusDescription; } public String getXML() { StringBuffer xml = new StringBuffer(); xml.append("<" + XML_TAG + ">").append(Const.CR); xml.append(XMLHandler.addTagValue("jobname", jobName)); xml.append(XMLHandler.addTagValue("status_desc", statusDescription)); xml.append(XMLHandler.addTagValue("error_desc", errorDescription)); xml.append(XMLHandler.addTagValue("logging_string", XMLHandler.buildCDATA(loggingString))); if (result != null) { try { String resultXML = result.getXML(); xml.append(resultXML); } catch (IOException e) { LogWriter.getInstance().logError("Slave server job status", "Unable to serialize result object as XML", e); } } xml.append("</" + XML_TAG + ">"); return xml.toString(); } public SlaveServerJobStatus(Node jobStatusNode) { this(); jobName = XMLHandler.getTagValue(jobStatusNode, "jobname"); statusDescription = XMLHandler.getTagValue(jobStatusNode, "status_desc"); errorDescription = XMLHandler.getTagValue(jobStatusNode, "error_desc"); String loggingString64 = XMLHandler.getTagValue(jobStatusNode, "logging_string"); // This is a Base64 encoded GZIP compressed stream of data. // try { byte[] bytes = new byte[] {}; if (loggingString64 != null) bytes = Base64.decodeBase64(loggingString64.getBytes()); if (bytes.length > 0) { ByteArrayInputStream bais = new ByteArrayInputStream(bytes); GZIPInputStream gzip = new GZIPInputStream(bais); int c; StringBuffer buffer = new StringBuffer(); while ((c = gzip.read()) != -1) buffer.append((char) c); gzip.close(); loggingString = buffer.toString(); } else { loggingString = ""; } } catch (IOException e) { loggingString = "Unable to decode logging from remote server : " + e.toString() + Const.CR + Const.getStackTracker(e) + Const.CR; } // get the result object, if there is any... // Node resultNode = XMLHandler.getSubNode(jobStatusNode, Result.XML_TAG); if (resultNode != null) { try { result = new Result(resultNode); } catch (IOException e) { loggingString += "Unable to serialize result object as XML" + Const.CR + Const.getStackTracker(e) + Const.CR; } } } public static SlaveServerJobStatus fromXML(String xml) throws KettleXMLException { Document document = XMLHandler.loadXMLString(xml); SlaveServerJobStatus status = new SlaveServerJobStatus(XMLHandler.getSubNode(document, XML_TAG)); return status; } /** * @return the statusDescription */ public String getStatusDescription() { return statusDescription; } /** * @param statusDescription the statusDescription to set */ public void setStatusDescription(String statusDescription) { this.statusDescription = statusDescription; } /** * @return the job name */ public String getJobName() { return jobName; } /** * @param jobName the job name to set */ public void setJobName(String jobName) { this.jobName = jobName; } /** * @return the errorDescription */ public String getErrorDescription() { return errorDescription; } /** * @param errorDescription the errorDescription to set */ public void setErrorDescription(String errorDescription) { this.errorDescription = errorDescription; } /** * @return the loggingString */ public String getLoggingString() { return loggingString; } /** * @param loggingString the loggingString to set */ public void setLoggingString(String loggingString) { this.loggingString = loggingString; } public boolean isRunning() { return getStatusDescription().equalsIgnoreCase(Trans.STRING_RUNNING) || getStatusDescription().equalsIgnoreCase(Trans.STRING_INITIALIZING); } public boolean isWaiting() { return getStatusDescription().equalsIgnoreCase(Trans.STRING_WAITING); } /** * @return the result */ public Result getResult() { return result; } /** * @param result the result to set */ public void setResult(Result result) { this.result = result; } }