ch.sdi.SocialDataImporterRunner.java Source code

Java tutorial

Introduction

Here is the source code for ch.sdi.SocialDataImporterRunner.java

Source

/**
 * Copyright (c) 2014 by the original author or authors.
 *
 * This code is free software; you can redistribute it and/or modify it under the terms of the
 * GNU Lesser General Public License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * The above copyright notice and this permission notice shall be included in all copies or
 * substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

package ch.sdi;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Collection;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.ConversionService;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;
import org.springframework.core.env.SimpleCommandLinePropertySource;
import org.springframework.stereotype.Component;

import ch.sdi.core.exc.SdiException;
import ch.sdi.core.impl.cfg.ConfigUtils;
import ch.sdi.core.impl.data.InputCollectorExecutor;
import ch.sdi.core.impl.data.Person;
import ch.sdi.core.impl.data.PersonKey;
import ch.sdi.core.impl.target.TargetExecutor;
import ch.sdi.report.SdiReporter;

/**
 * Entry point of the SocialDataImporter application.
 * <p>
 *
 * @version 1.0 (10.11.2014)
 * @author  Heri
 */
@Component
public class SocialDataImporterRunner {

    /** logger for this class */
    private static Logger myLog = LogManager.getLogger(SocialDataImporterRunner.class);

    @Autowired
    private ConfigurableEnvironment myEnv;
    @Autowired
    private InputCollectorExecutor myCollectorExecutor;
    @Autowired
    private UserPropertyOverloader myUserPropertyOverloader;
    @Autowired
    private TargetExecutor myTargetExecutor;
    @Autowired
    private SdiReporter mySdiReporter;
    @Autowired
    private ConversionService myConversionService;

    /**
     * Constructor
     *
     */
    public SocialDataImporterRunner() {
        super();
    }

    /**
     * Runs the SocialDataImporter application.
     * <p>
     * @param args
     * @throws SdiException
     */
    public void run(String[] args) throws SdiException {
        initialize(args);

        try {
            PersonKey.initCustomKeys(myEnv);

            mySdiReporter.reset();

            Collection<? extends Person<?>> inputPersons = myCollectorExecutor.execute();

            if (myLog.isDebugEnabled()) {
                myLog.debug("collected persons: " + inputPersons);
            } // if myLog.isDebugEnabled()

            myTargetExecutor.execute(inputPersons);

        } finally {
            String report = mySdiReporter.getReport();
            myLog.debug("Generated report:\n" + report);
            File outputDir = myEnv.getProperty(ConfigUtils.KEY_PROP_OUTPUT_DIR, File.class);
            if (outputDir != null) {
                File reportFile = new File(outputDir, "SdiReport.txt");
                try {
                    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(reportFile), "UTF-8");
                    osw.write(report);
                    osw.close();
                } catch (IOException t) {
                    myLog.warn("Unable to write report file: " + reportFile.getPath(), t);
                }
            } // if outputDir != null

        }

    }

    /**
     * Initializes the environment.
     * <p>
     * @param aArgs the command line arguments
     * @throws SdiException on any problems
     */
    private void initialize(String[] aArgs) throws SdiException {
        if (myConversionService == null) {
            throw new SdiException("ConversionService not injected", SdiException.EXIT_CODE_CONFIG_ERROR);
        } // if myConversionService == null

        ConfigUtils.setConversionService(myConversionService);

        myUserPropertyOverloader.overrideByUserProperties();

        String s = Arrays.toString(aArgs);
        myLog.debug("adding command line arguments to the environment: " + s);

        MutablePropertySources propertySources = myEnv.getPropertySources();
        propertySources.addFirst(new SimpleCommandLinePropertySource(ConfigUtils.PROP_SOURCE_NAME_CMD_LINE, aArgs));

        if (myLog.isDebugEnabled()) {
            StringBuilder sb = new StringBuilder(
                    "After self-configuration, and after user property " + "override. ");
            sb.append(myLog.isTraceEnabled() ? "Loaded properties: " : "Loaded property sources: ");

            MutablePropertySources mps = myEnv.getPropertySources();
            for (PropertySource<?> propertySource : mps) {
                sb.append("\n    PropertySource: ").append(propertySource.getName());

                if (myLog.isTraceEnabled()) {
                    sb.append("\n        ").append("" + propertySource.getSource());
                } // if myLog.isTraceEnabled()
            }

            if (myLog.isTraceEnabled()) {
                myLog.trace(sb.toString());
            } // if myLog.isTraceEnabled()
            else if (myLog.isDebugEnabled()) {
                myLog.debug(sb.toString());
            }
        } // if myLog.isDebugEnabled()

        myLog.trace(
                "inputcollector.thing.alternateName: " + myEnv.getProperty("inputcollector.thing.alternateName"));
    }

}