org.devgateway.eudevfin.sheetexp.iati.transformer.IatiTransformer.java Source code

Java tutorial

Introduction

Here is the source code for org.devgateway.eudevfin.sheetexp.iati.transformer.IatiTransformer.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Development Gateway.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 *******************************************************************************/
/**
 *
 */
package org.devgateway.eudevfin.sheetexp.iati.transformer;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.List;

import org.devgateway.eudevfin.financial.CustomFinancialTransaction;
import org.devgateway.eudevfin.sheetexp.dto.EntityWrapperInterface;
import org.devgateway.eudevfin.sheetexp.iati.domain.IatiActivities;
import org.devgateway.eudevfin.sheetexp.iati.domain.IatiActivity;
import org.devgateway.eudevfin.sheetexp.iati.transformer.xmlutil.ExtendedXStream;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.springframework.context.annotation.Lazy;
import org.springframework.integration.annotation.Header;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.stereotype.Component;

import com.google.common.collect.ImmutableMap;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.basic.DateConverter;

/**
 * @author alexandru-m-g
 *
 */
@Component
@Lazy(value = false)
public class IatiTransformer {
    /**
     * @deprecated Use createIatiExportManually instead
     * @return
     */
    @Deprecated
    public Boolean createIatiExport(final List<EntityWrapperInterface<CustomFinancialTransaction>> list,
            @Header("outputStream") final OutputStream out, @Header("exportName") final String exportName) {

        final IatiTransformerEngine engine = new IatiTransformerEngine(list);

        final IatiActivities iatiActivities = engine.transform().getIatiActivities();

        final DateTime now = new DateTime();
        final ExtendedXStream xStream = new ExtendedXStream(
                ImmutableMap.of("generated-datetime", now.toString(), "version", "1.04"));

        xStream.processAnnotations(IatiActivities.class);
        xStream.registerConverter(new DateConverter("yyyy-MM-dd", new String[] {}));

        try (final ObjectOutputStream oos = xStream.createObjectOutputStream(out, "iati-activities")) {
            for (final IatiActivity iatiActivity : iatiActivities.getActivities()) {
                oos.writeObject(iatiActivity);
            }
        } catch (final IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }

        return true;
    }

    @ServiceActivator(inputChannel = "iatiListExporterChannel")
    public Boolean createIatiExportManually(final List<EntityWrapperInterface<CustomFinancialTransaction>> list,
            @Header("outputStream") final OutputStream out, @Header("exportName") final String exportName) {

        final IatiTransformerEngine engine = new IatiTransformerEngine(list);

        final IatiActivities iatiActivities = engine.transform().getIatiActivities();

        final DateTimeFormatter formatter = ISODateTimeFormat.dateTimeNoMillis();
        final DateTime now = new DateTime().millisOfSecond().withMinimumValue();
        final XStream xStream = new XStream();

        xStream.processAnnotations(IatiActivities.class);
        xStream.registerConverter(new DateConverter("yyyy-MM-dd", new String[] {}));

        try (final OutputStreamWriter writer = new OutputStreamWriter(out, Charset.forName("UTF-8"))) {
            writer.write(String.format("<iati-activities generated-datetime=\"%s\" version=\"1.04\">",
                    formatter.print(now)));
            writer.write("<!-- Generated By EUDEVFIN -->");
            for (final IatiActivity iatiActivity : iatiActivities.getActivities()) {
                final String xml = xStream.toXML(iatiActivity);
                writer.write(xml);
            }
            writer.write("</iati-activities>");
        } catch (final IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }

        return true;
    }

}