com.flipkart.phantom.runtime.impl.spring.utils.ConfigFileUtils.java Source code

Java tutorial

Introduction

Here is the source code for com.flipkart.phantom.runtime.impl.spring.utils.ConfigFileUtils.java

Source

/*
 * Copyright 2012-2015, the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.flipkart.phantom.runtime.impl.spring.utils;

import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.trpr.platform.core.PlatformException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.IOException;
import java.io.StringWriter;
import java.util.LinkedList;
import java.util.List;

/**
 * <code> {@link ConfigFileUtils} </code> provides methods for performing useful 
 * operations on Task Handler configuration file contents.
 * 
 * @author devashishshankar
 * @version 1.0, 2nd May, 2013
 */
public class ConfigFileUtils {
    /** Tag names used in spring batch files */
    private static final String BATCH_JOB_TAG = "batch:job";
    private static final String ID_PROP = "id";

    /** Logger instance for this class*/
    private static final Logger LOGGER = LoggerFactory.getLogger(ConfigFileUtils.class);

    /**
     * Gets the handler names from Config file
     * @param configFile Task Handler config file or its contents as a <code> Resource </code>
     * @return List of taskHandler names, null if unable to find a TaskHandler name.
     */
    public static List<String> getHandlerNames(Resource configFile) {
        return ConfigFileUtils
                .getHandlerNames(new ByteArrayResource(ConfigFileUtils.getContents(configFile).getBytes()));
    }

    /**
     * Gets the task handler names from Config file
     * @param configFile job config file contents as a <code> ByteArrayResource </code>
     * @return List of task handler names, null if unable to find a TaskHandler name.
     */
    public static List<String> getHandlerNames(ByteArrayResource configFile) {
        List<String> jobNameList = new LinkedList<String>();
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            Document dom = db.parse(configFile.getInputStream());
            Element docEle = dom.getDocumentElement();
            //get a nodelist of nodes with the name "ConfigFileUtils.BATCH_JOB_TAG" 
            NodeList nl = docEle.getElementsByTagName(ConfigFileUtils.BATCH_JOB_TAG);
            //Loop over all found nodes
            if (nl != null && nl.getLength() > 0) {
                for (int i = 0; i < nl.getLength(); i++) {
                    //get the element
                    Element el = (Element) nl.item(i);
                    if (el.hasAttribute(ConfigFileUtils.ID_PROP)) {
                        jobNameList.add(el.getAttribute(ConfigFileUtils.ID_PROP));
                    }
                }
            }
        } catch (Exception e) {
            LOGGER.error("Unable to get the job name from the given Spring Batch configuration file", e);
            throw new PlatformException(e);
        }
        return jobNameList;
    }

    /**
     * Gets the contents of a <code>Resource</code> in a single String
     * @param resource Resource to be read
     * @return Contents as a <code>String<code/>
     */
    public static String getContents(Resource resource) {
        StringWriter writer = new StringWriter();
        try {
            IOUtils.copy(resource.getInputStream(), writer, "UTF-8");
        } catch (IOException e) {
            LOGGER.error("Exception while reading file " + resource.getFilename(), e);
        }
        return writer.toString();
    }
}