com.panet.imeta.www.SlaveServerJobStatus.java Source code

Java tutorial

Introduction

Here is the source code for com.panet.imeta.www.SlaveServerJobStatus.java

Source

/*
 * 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;
    }
}