[Branch ~dhis2-devs-core/dhis2/trunk] Rev 1404: Implemented DHIS 1.4 export of data values

revision-diff.txt (30.4 KB)


revno: 1404

committer: Lars Helge Oeverland larshelge@gmail.com

branch nick: trunk

timestamp: Mon 2010-02-08 11:56:08 +0100

message:

Implemented DHIS 1.4 export of data values

modified:

There is actually still a snag here. DHIS 1.4 only accepts the 7zip/lzma format currently. I have talked Greg into making 1.4 accept zip/deflate too.

···

On Mon, Feb 8, 2010 at 11:59 AM, noreply@launchpad.net wrote:

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

lp:dhis2

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.

To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java’

— dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java 2009-03-03 16:46:36 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java 2010-02-08 10:56:08 +0000

@@ -28,7 +28,7 @@

*/

import java.io.BufferedReader;

-import java.io.BufferedWriter;

+import java.util.zip.ZipOutputStream;

/**

  • @author Lars Helge Overland

@@ -36,7 +36,7 @@

*/

public interface CSVConverter

{

  • void write( BufferedWriter writer, ExportParams params );
  • void write( ZipOutputStream out, ExportParams params );

    void read( BufferedReader reader, ImportParams params );

}

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java’

— dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java 2009-11-02 15:55:44 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java 2010-02-08 10:56:08 +0000

@@ -52,7 +52,8 @@

 private List<XMLConverter> xsdConverters = new ArrayList<XMLConverter>();

 private List<XMLConverter> xmlConverters = new ArrayList<XMLConverter>();
  • private List csvConverters = new ArrayList();

 // -------------------------------------------------------------------------

 // Parameters

 // -------------------------------------------------------------------------

@@ -122,6 +123,11 @@

     this.xmlConverters.add( converter );

 }
  • public void registerCSVConverter ( CSVConverter converter )

  • {

  •    this.csvConverters.add( converter );
    
  • }

 // -------------------------------------------------------------------------

 // Thread implementation

 // -------------------------------------------------------------------------

@@ -159,9 +165,20 @@

         }



         afterXML( writer );
         closeDocument( writer );
  •        StreamUtils.closeZipEntry( zipOutputStream );
    
  •        // -----------------------------------------------------------------
    
  •        // CSV
    
  •        // -----------------------------------------------------------------
    
  •        for ( CSVConverter converter : csvConverters )
    
  •        {
    
  •            converter.write( zipOutputStream, params );
    
  •        }
    
         [log.info](http://log.info)( "Export done" );

     }

     catch ( Exception ex )

@@ -172,12 +189,10 @@

     }

     finally

     {
  •        StreamUtils.finishZipEntry( zipOutputStream );
    
  •        writer.closeWriter();
    
    
    
           StreamUtils.closeOutputStream( zipOutputStream );
    
  •        writer.closeWriter();
    
         NameMappingUtil.clearMapping();

     }

 }

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java’

— dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java 2009-06-10 22:25:07 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java 2010-02-08 10:56:08 +0000

@@ -27,14 +27,17 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

import java.util.Iterator;

import java.util.SortedMap;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

@@ -69,27 +72,29 @@

 // CSVConverter implementation

 // -------------------------------------------------------------------------
  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )

    {

    try
    
    {
    
  •        for ( Integer id : params.getReportTables() ) //TODO more than one?
    
  •        for ( Integer id : params.getReportTables() )
    
           {
    
  •            out.putNextEntry( new ZipEntry( "ReportTable" + id + CSV_EXTENSION ) );
    
             ReportTableData data = reportTableService.getReportTableData( id, params.getFormat() );



             Iterator<String> columns = data.getPrettyPrintColumns().iterator();



             while ( columns.hasNext() )

             {
  •                writer.write( csvEncode( columns.next() ) );
    
  •                out.write( csvEncode( columns.next() ).getBytes() );
    
    
    
                   if ( columns.hasNext() )
    
                   {
    
  •                    writer.write( SEPARATOR );
    
  •                    out.write( SEPARATOR_B );
    
                   }
    
               }
    
  •            writer.newLine();
    
  •            out.write( NEWLINE );
    
    
    
               for ( SortedMap<Integer, String> row : data.getRows() )
    
               {
    

@@ -97,15 +102,15 @@

                 while ( values.hasNext() )

                 {
  •                    writer.write( csvEncode( values.next() ) );
    
  •                    out.write( csvEncode( values.next() ).getBytes() );
    
    
    
                       if ( values.hasNext() )
    
                       {
    
  •                        writer.write( SEPARATOR );
    
  •                        out.write( SEPARATOR_B );
    
                       }
    
                   }
    
  •                writer.newLine();
    
  •                out.write( NEWLINE );
    
               }
    
           }
    
       }
    

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java’

— dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java 2009-06-10 22:25:07 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java 2010-02-08 10:56:08 +0000

@@ -27,9 +27,9 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import java.io.BufferedWriter;

import java.util.ArrayList;

import java.util.List;

+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

@@ -48,13 +48,6 @@

{

 private static final Log log = LogFactory.getLog( CSVExportPipeThread.class );
  • private BufferedWriter writer;

  • public void setWriter( BufferedWriter writer )

  • {

  •    this.writer = writer;
    
  • }

 private ExportParams params;



 public void setParams( ExportParams params )

@@ -62,6 +55,13 @@

     this.params = params;

 }
  • private ZipOutputStream outputStream;

  • public void setOutputStream( ZipOutputStream outputStream )

  • {

  •    this.outputStream = outputStream;
    
  • }

 private List<CSVConverter> converters = new ArrayList<CSVConverter>();



 public void registerCSVConverter( CSVConverter converter )

@@ -90,14 +90,18 @@

         for ( CSVConverter converter : converters )

         {
  •            converter.write( writer, params );
    
  •            converter.write( outputStream, params );
    
           }
    
    
    
           [log.info](http://log.info)( "Export finished" );
    
       }
    
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( ex );
    
  •    }
    
       finally
    
       {
    
  •        StreamUtils.closeWriter( writer );
    
  •        StreamUtils.closeOutputStream( outputStream );
    
       }
    

    }

}

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java’

— dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java 2009-06-10 22:25:07 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java 2010-02-08 10:56:08 +0000

@@ -28,13 +28,11 @@

*/

import java.io.BufferedInputStream;

-import java.io.BufferedWriter;

+import java.io.BufferedOutputStream;

import java.io.IOException;

import java.io.InputStream;

-import java.io.OutputStreamWriter;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

-import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;

@@ -50,8 +48,6 @@

public class DefaultCSVExportService

 implements ExportService

{

  • private static final String ZIP_ENTRY_NAME = “Export.csv”;

 // -------------------------------------------------------------------------

 // Dependencies

 // -------------------------------------------------------------------------

@@ -87,20 +83,18 @@

         PipedInputStream in = new PipedInputStream( out );
  •        ZipOutputStream zipOut = new ZipOutputStream( out );
    
  •        ZipOutputStream zipOut = new ZipOutputStream( new BufferedOutputStream( out ) );
    
  •        zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( zipOut ) );
    
         // -----------------------------------------------------------------

         // Writes to one end of the pipe

         // -----------------------------------------------------------------



         CSVExportPipeThread thread = new CSVExportPipeThread( sessionFactory );
  •        thread.setWriter( writer );
    
           thread.setParams( params );
    
  •        thread.setOutputStream( zipOut );
    
    
    
           thread.registerCSVConverter( new ReportTableDataConverter( reportTableService ) );
    

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java’

— dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java 2009-04-16 09:53:17 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java 2010-02-08 10:56:08 +0000

@@ -33,15 +33,80 @@

*/

public class CsvUtil

{

  • public static final char SEPARATOR = ‘,’;

  • private static final String ENCLOSURE = “"”;

  • public static String csvEncode( String string )

  • {

  •    string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
    
  •    string = ENCLOSURE + string + ENCLOSURE;
    
  • public static final String SEPARATOR = “,”;

  • public static final byte SEPARATOR_B = SEPARATOR.getBytes();

  • public static final byte NEWLINE = “\n”.getBytes();

  • public static final String CSV_EXTENSION = “.csv”;

  • private static final String ENCLOSURE = “"”;

  • private static final String EMPTY = “”;

  • /**

  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( int value )

  • {

  •    return csvEncode( String.valueOf( value ) );
    
  • }

  • /**

  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( String value )

  • {

  •    if ( value == null )
    
  •    {
    
  •        value = EMPTY;
    
  •    }
    
  •    else
    
  •    {
    
  •        value = value.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
    
  •        value = ENCLOSURE + value + ENCLOSURE;
    
  •    }
    
  •    return value;
    
  • }

  • /**

  • * Appends a separator to the value and returns the value as a byte array.
    
  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( int value )

  • {

  •    return getCsvEndValue( value + SEPARATOR );
    
  • }

  • /**

  • * Appends a separator to the value and returns the value as a byte array.
    
  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( String value )

  • {

  •    return getCsvEndValue( value + SEPARATOR );
    
  • }

  • public static byte getCsvEndValue( int value )

  • {

  •    return getCsvEndValue( String.valueOf( value ) );
    
  • }

  • public static byte getCsvEndValue( String value )

  • {

  •    if ( value == null )
    
  •    {
    
  •        return EMPTY.getBytes();
    
  •    }
    
  •    return string;
    
  •    return ( value ).getBytes();
    

    }

}

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java’

— dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java 2010-02-08 07:04:26 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java 2010-02-08 10:56:08 +0000

@@ -27,17 +27,28 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

+import java.util.Collection;

import java.util.Map;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;

+import org.amplecode.quick.StatementManager;

import org.hisp.dhis.dataelement.DataElement;

import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;

import org.hisp.dhis.dataelement.DataElementCategoryService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.datavalue.DataValue;

import org.hisp.dhis.datavalue.DataValueService;

+import org.hisp.dhis.datavalue.DeflatedDataValue;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.GroupMemberType;

@@ -47,7 +58,10 @@

import org.hisp.dhis.importexport.converter.AbstractDataValueConverter;

import org.hisp.dhis.organisationunit.OrganisationUnit;

import org.hisp.dhis.period.Period;

+import org.hisp.dhis.period.PeriodService;

+import org.hisp.dhis.system.util.DateUtils;

import org.hisp.dhis.system.util.MimicingHashMap;

+import org.hisp.dhis.system.util.StreamUtils;

/**

  • @author Lars Helge Overland

@@ -57,8 +71,11 @@

 extends AbstractDataValueConverter implements CSVConverter

{

 private static final String SEPARATOR = ",";
  • private static final String FILENAME = “RoutineData.txt”;

    private DataElementCategoryService categoryService;

  • private PeriodService periodService;

  • private StatementManager statementManager;

    // -------------------------------------------------------------------------

    // Properties

@@ -72,6 +89,14 @@

 // Constructor

 // -------------------------------------------------------------------------
  • public DataValueConverter( PeriodService periodService, DataMartService dataMartService,

  •    StatementManager statementManager )
    
  • {

  •    this.periodService = periodService;
    
  •    this.dataMartService = dataMartService;
    
  •    this.statementManager = statementManager;
    
  • }

 /**

  * Constructor for read operations.

  */

@@ -95,9 +120,81 @@

 // CSVConverter implementation

 // -------------------------------------------------------------------------
  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )

    {

  •    // Not implemented
    
  •    try
    
  •    {
    
  •        out.putNextEntry( new ZipEntry( FILENAME ) );
    
  •        out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryText" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Check" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Verified" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Deleted" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Comment" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
    
  •        out.write( getCsvEndValue( csvEncode( "LastUpdated" ) ) );
    
  •        out.write( NEWLINE );
    
  •        if ( params.isIncludeDataValues() )
    
  •        {
    
  •            if ( params.getStartDate() != null && params.getEndDate() != null )
    
  •            {
    
  •                Collection<DeflatedDataValue> values = null;
    
  •                Collection<Period> periods = periodService.getIntersectingPeriods( params.getStartDate(), params.getEndDate() );
    
  •                statementManager.initialise();
    
  •                for ( final Integer element : params.getDataElements() )
    
  •                {
    
  •                    for ( final Period period : periods )
    
  •                    {
    
  •                        values = dataMartService.getDeflatedDataValues( element, period.getId(), params.getOrganisationUnits() );
    
  •                        for ( final DeflatedDataValue value : values )
    
  •                        {
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( value.getSourceId() ) );
    
  •                            out.write( getCsvValue( value.getDataElementId() ) );
    
  •                            out.write( getCsvValue( value.getPeriodId() ) );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( csvEncode( value.getValue() ) ) );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( csvEncode( value.getComment() ) ) );
    
  •                            out.write( getCsvValue( 1 ) );
    
  •                            out.write( getCsvEndValue( DateUtils.getAccessDateString( value.getTimestamp() ) ) );
    
  •                            out.write( NEWLINE );
    
  •                        }
    
  •                    }
    
  •                }
    
  •                statementManager.destroy();
    
  •            }
    
  •        }
    
  •        StreamUtils.closeZipEntry( out );
    
  •    }
    
  •    catch ( IOException ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to write data", ex );
    
  •    }
    

    }

    public void read( BufferedReader reader, ImportParams params )

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java’

— dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java 2009-11-07 14:09:00 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java 2010-02-08 10:56:08 +0000

@@ -35,16 +35,19 @@

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;

import org.amplecode.staxwax.factory.XMLFactory;

import org.amplecode.staxwax.writer.XMLWriter;

import org.hibernate.SessionFactory;

import org.hisp.dhis.dataelement.DataElementService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.ExportPipeThread;

import org.hisp.dhis.importexport.ExportService;

import org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;

import org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;

import org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;

+import org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;

import org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;

import org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;

import org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;

@@ -60,6 +63,7 @@

import org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;

import org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;

import org.hisp.dhis.indicator.IndicatorService;

+import org.hisp.dhis.period.PeriodService;

/**

  • @author Lars Helge Overland

@@ -100,6 +104,27 @@

     this.indicatorService = indicatorService;

 }
  • private PeriodService periodService;

  • public void setPeriodService( PeriodService periodService )

  • {

  •    this.periodService = periodService;
    
  • }

  • private DataMartService dataMartService;

  • public void setDataMartService( DataMartService dataMartService )

  • {

  •    this.dataMartService = dataMartService;
    
  • }

  • private StatementManager statementManager;

  • public void setStatementManager( StatementManager statementManager )

  • {

  •    this.statementManager = statementManager;
    
  • }

 // -------------------------------------------------------------------------

 // ExportService implementation

 // -------------------------------------------------------------------------

@@ -122,7 +147,7 @@

         zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );



         XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
         // -------------------------------------------------------------------------

         // Writes to one end of the pipe

         // -------------------------------------------------------------------------

@@ -156,6 +181,8 @@

         thread.registerXMLConverter( new UserConverter() );

         thread.registerXMLConverter( new UserRoleConverter() );
  •        thread.registerCSVConverter( new DataValueConverter( periodService, dataMartService, statementManager ) );
    
         thread.start();



         // -------------------------------------------------------------------------

=== modified file ‘dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml’

— dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml 2010-02-02 19:21:58 +0000

+++ dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml 2010-02-08 10:56:08 +0000

@@ -381,6 +381,9 @@

            <property name="sessionFactory" ref="sessionFactory" />

            <property name="dataElementService" ref="org.hisp.dhis.dataelement.DataElementService" />

            <property name="indicatorService" ref="org.hisp.dhis.indicator.IndicatorService" />
  •           <property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
    
  •           <property name="dataMartService" ref="org.hisp.dhis.datamart.DataMartService" />
    
  •           <property name="statementManager" ref="statementManager" />
    
      </bean>
    
    
    
      <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
    

=== modified file ‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java’

— dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java 2009-11-19 19:16:46 +0000

+++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java 2010-02-08 10:56:08 +0000

@@ -49,6 +49,20 @@

 public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";



 /**
  • * Formats a Date to the Access date format.
    
  • *
    
  • * @param date the Date to parse.
    
  • * @return a formatted date string.
    
  • */
    
  • public static String getAccessDateString( Date date )

  • {

  •    final SimpleDateFormat format = new SimpleDateFormat();
    
  •    format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
    
  •    return date != null ? format.format( date ) : null;
    
  • }

  • /**

    • Formats a Date to the IXF date format which is YYYY-MM-DD’T’HH:MM:SS.

    • @param date the Date to parse.

=== modified file ‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java’

— dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java 2009-12-19 15:20:41 +0000

+++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java 2010-02-08 10:56:08 +0000

@@ -422,9 +422,26 @@

 }



 /**
  • * Closes the current ZipEntry and positions the stream for writing the next entry.
    
  • *
    
  • * @param out the ZipOutputStream.
    
  • */
    
  • public static void closeZipEntry( ZipOutputStream out )

  • {

  •    try
    
  •    {
    
  •        out.closeEntry();
    
  •    }
    
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to close the current ZipEntry", ex );
    
  •    }
    
  • }

  • /**

    • Finishes writing the contents of the ZIP output stream without closing the underlying stream.

  • * @param out the ZipOutputStream to write to.
    
  • * @param out the ZipOutputStream.
    
    */
    

    public static void finishZipEntry( ZipOutputStream out )

    {

@@ -434,7 +451,7 @@

     }

     catch ( Exception ex )

     {
  •        throw new RuntimeException( "Failed to finish ZipOutputStream", ex );
    
  •        throw new RuntimeException( "Failed to finish the content of the ZipOutputStream", ex );
    
       }
    

    }

=== modified file ‘dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties’

— dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties 2010-01-27 21:45:11 +0000

+++ dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties 2010-02-08 10:56:08 +0000

@@ -146,6 +146,7 @@

import_from_other_systems = Import from other systems

DHIS14_import = DHIS 1.4 Import

DHIS14_metadata_export = DHIS 1.4 Metadata Export

+DHIS14_data_export = DHIS 1.4 Data Export

IXF_import = IXF Import

accept_incoming_records = Accept incoming records

include_datavalues = Include data values

@@ -442,4 +443,5 @@

intro_ixf_metadata_export = Do an export of meta-data or dimensional data describing the facts. Indicator Transmission Format (IXF) is a standard developed by the WHO.

intro_DHIS14_metadata_export = Do an export of meta-data or dimensional data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.

intro_DHIS14_detailed_metadata_export = Do an export of an detailed selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.

+intro_DHIS14_data_export = Do an export of data values or facts. DHIS 1.4 is the predecessor of DHIS 2.

intro_pdf_metadata_export = Portable Document Format (PDF) is a file format for document exchange.

=== modified file ‘dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm’

— dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm 2010-01-28 11:51:39 +0000

+++ dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm 2010-02-08 10:56:08 +0000

@@ -2,8 +2,9 @@

$i18n.getString( "export_to_other_systems" )

    • #introListItem( “displayMetaDataExportForm.action?exportFormat=IXF” “ixf_metadata_export” )

      #introListItem( “displayDataValueExportForm.action?exportFormat=IXF” “ixf_data_export” )

    • #introListItem( “displayMetaDataExportForm.action?exportFormat=IXF” “ixf_metadata_export” )

      #introListItem( “displayMetaDataExportForm.action?exportFormat=DHIS14XML” “DHIS14_metadata_export” )

      #introListItem( “displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML” “DHIS14_detailed_metadata_export” )

    • #introListItem( “displayDataValueExportForm.action?exportFormat=DHIS14XML” “DHIS14_data_export” )

      #introListItem( “displayMetaDataExportForm.action?exportFormat=PDF” “pdf_metadata_export” )

    \ No newline at end of file


    Mailing list: https://launchpad.net/~dhis2-devs

    Post to : dhis2-devs@lists.launchpad.net

    Unsubscribe : https://launchpad.net/~dhis2-devs

    More help : https://help.launchpad.net/ListHelp

------------------------------------------------------------
revno: 1404
committer: Lars Helge Oeverland <larshelge@gmail.com>
branch nick: trunk
timestamp: Mon 2010-02-08 11:56:08 +0100
message:
Implemented DHIS 1.4 export of data values
modified:

There is actually still a snag here. DHIS 1.4 only accepts the 7zip/lzma
format currently. I have talked Greg into making 1.4 accept zip/deflate too.

Isn't it better to have gzip/deflate? We are not talking about
compressing an archive of files but rather compressing a single
stream.

Also I think the original "void write( BufferedWriter writer,
ExportParams params )" might be better than "void write(
ZipOutputStream out, ExportParams params )". It seems unnecessary
that the convertor should have to know anything about zip, gzip, 7zip
or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to later.

Cheers
Bob

···

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

--
lp:dhis2
trunk : Code : DHIS

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
2009-03-03 16:46:36 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
2010-02-08 10:56:08 +0000
@@ -28,7 +28,7 @@
*/

import java.io.BufferedReader;
-import java.io.BufferedWriter;
+import java.util.zip.ZipOutputStream;

/**
* @author Lars Helge Overland
@@ -36,7 +36,7 @@
*/
public interface CSVConverter
{
- void write( BufferedWriter writer, ExportParams params );
+ void write( ZipOutputStream out, ExportParams params );

void read\( BufferedReader reader, ImportParams params \);

}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
2009-11-02 15:55:44 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
2010-02-08 10:56:08 +0000
@@ -52,7 +52,8 @@

private List&lt;XMLConverter&gt; xsdConverters = new

ArrayList<XMLConverter>();
private List<XMLConverter> xmlConverters = new
ArrayList<XMLConverter>();
-
+ private List<CSVConverter> csvConverters = new
ArrayList<CSVConverter>();
+
//
-------------------------------------------------------------------------
// Parameters
//
-------------------------------------------------------------------------
@@ -122,6 +123,11 @@
this.xmlConverters.add( converter );
}

+ public void registerCSVConverter ( CSVConverter converter )
+ {
+ this.csvConverters.add( converter );
+ }
+
//
-------------------------------------------------------------------------
// Thread implementation
//
-------------------------------------------------------------------------
@@ -159,9 +165,20 @@
}

        afterXML\( writer \);

-
+
closeDocument( writer );
-
+
+ StreamUtils.closeZipEntry( zipOutputStream );
+
+ //
-----------------------------------------------------------------
+ // CSV
+ //
-----------------------------------------------------------------
+
+ for ( CSVConverter converter : csvConverters )
+ {
+ converter.write( zipOutputStream, params );
+ }
+
log.info( "Export done" );
}
catch ( Exception ex )
@@ -172,12 +189,10 @@
}
finally
{
- StreamUtils.finishZipEntry( zipOutputStream );
+ writer.closeWriter();

        StreamUtils\.closeOutputStream\( zipOutputStream \);

- writer.closeWriter();
-
NameMappingUtil.clearMapping();
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
2010-02-08 10:56:08 +0000
@@ -27,14 +27,17 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

-import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.SortedMap;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;
import org.hisp.dhis.importexport.ExportParams;
@@ -69,27 +72,29 @@
// CSVConverter implementation
//
-------------------------------------------------------------------------

- public void write( BufferedWriter writer, ExportParams params )
+ public void write( ZipOutputStream out, ExportParams params )
{
try
{
- for ( Integer id : params.getReportTables() ) //TODO more
than one?
+ for ( Integer id : params.getReportTables() )
{
+ out.putNextEntry( new ZipEntry( "ReportTable" + id +
CSV_EXTENSION ) );
+
ReportTableData data =
reportTableService.getReportTableData( id, params.getFormat() );

            Iterator&lt;String&gt; columns =

data.getPrettyPrintColumns().iterator();

            while \( columns\.hasNext\(\) \)
            \{

- writer.write( csvEncode( columns.next() ) );
+ out.write( csvEncode( columns.next() ).getBytes() );

                if \( columns\.hasNext\(\) \)
                \{

- writer.write( SEPARATOR );
+ out.write( SEPARATOR_B );
}
}

- writer.newLine();
+ out.write( NEWLINE );

            for \( SortedMap&lt;Integer, String&gt; row : data\.getRows\(\) \)
            \{

@@ -97,15 +102,15 @@

                while \( values\.hasNext\(\) \)
                \{

- writer.write( csvEncode( values.next() ) );
+ out.write( csvEncode( values.next() ).getBytes()
);

                    if \( values\.hasNext\(\) \)
                    \{

- writer.write( SEPARATOR );
+ out.write( SEPARATOR_B );
}
}

- writer.newLine();
+ out.write( NEWLINE );
}
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
2010-02-08 10:56:08 +0000
@@ -27,9 +27,9 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

-import java.io.BufferedWriter;
import java.util.ArrayList;
import java.util.List;
+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -48,13 +48,6 @@
{
private static final Log log = LogFactory.getLog(
CSVExportPipeThread.class );

- private BufferedWriter writer;
-
- public void setWriter( BufferedWriter writer )
- {
- this.writer = writer;
- }
-
private ExportParams params;

public void setParams\( ExportParams params \)

@@ -62,6 +55,13 @@
this.params = params;
}

+ private ZipOutputStream outputStream;
+
+ public void setOutputStream( ZipOutputStream outputStream )
+ {
+ this.outputStream = outputStream;
+ }
+
private List<CSVConverter> converters = new ArrayList<CSVConverter>();

public void registerCSVConverter\( CSVConverter converter \)

@@ -90,14 +90,18 @@

        for \( CSVConverter converter : converters \)
        \{

- converter.write( writer, params );
+ converter.write( outputStream, params );
}

        log\.info\( &quot;Export finished&quot; \);
    \}

+ catch ( Exception ex )
+ {
+ throw new RuntimeException( ex );
+ }
finally
{
- StreamUtils.closeWriter( writer );
+ StreamUtils.closeOutputStream( outputStream );
}
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
2010-02-08 10:56:08 +0000
@@ -28,13 +28,11 @@
*/

import java.io.BufferedInputStream;
-import java.io.BufferedWriter;
+import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStreamWriter;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
-import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;
@@ -50,8 +48,6 @@
public class DefaultCSVExportService
implements ExportService
{
- private static final String ZIP_ENTRY_NAME = "Export.csv";
-
//
-------------------------------------------------------------------------
// Dependencies
//
-------------------------------------------------------------------------
@@ -87,20 +83,18 @@

        PipedInputStream in = new PipedInputStream\( out \);

- ZipOutputStream zipOut = new ZipOutputStream( out );
+ ZipOutputStream zipOut = new ZipOutputStream( new
BufferedOutputStream( out ) );

- zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
+ //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );

- BufferedWriter writer = new BufferedWriter( new
OutputStreamWriter( zipOut ) );
-
//
-----------------------------------------------------------------
// Writes to one end of the pipe
//
-----------------------------------------------------------------

        CSVExportPipeThread thread = new CSVExportPipeThread\(

sessionFactory );

- thread.setWriter( writer );
thread.setParams( params );
+ thread.setOutputStream( zipOut );

        thread\.registerCSVConverter\( new ReportTableDataConverter\(

reportTableService ) );

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
2009-04-16 09:53:17 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
2010-02-08 10:56:08 +0000
@@ -33,15 +33,80 @@
*/
public class CsvUtil
{
- public static final char SEPARATOR = ',';
-
- private static final String ENCLOSURE = "\"";
-
- public static String csvEncode( String string )
- {
- string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
- string = ENCLOSURE + string + ENCLOSURE;
+ public static final String SEPARATOR = ",";
+ public static final byte SEPARATOR_B = SEPARATOR.getBytes();
+ public static final byte NEWLINE = "\n".getBytes();
+
+ public static final String CSV_EXTENSION = ".csv";
+ private static final String ENCLOSURE = "\"";
+ private static final String EMPTY = "";
+
+ /**
+ * Encodes the given value to a CSV acceptable value.
+ *
+ * @param value the value.
+ * @return the CSV encoded value.
+ */
+ public static String csvEncode( int value )
+ {
+ return csvEncode( String.valueOf( value ) );
+ }
+
+ /**
+ * Encodes the given value to a CSV acceptable value.
+ *
+ * @param value the value.
+ * @return the CSV encoded value.
+ */
+ public static String csvEncode( String value )
+ {
+ if ( value == null )
+ {
+ value = EMPTY;
+ }
+ else
+ {
+ value = value.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
+ value = ENCLOSURE + value + ENCLOSURE;
+ }
+
+ return value;
+ }
+
+ /**
+ * Appends a separator to the value and returns the value as a byte
array.
+ *
+ * @param value the value.
+ * @return a byte araray.
+ */
+ public static byte getCsvValue( int value )
+ {
+ return getCsvEndValue( value + SEPARATOR );
+ }
+
+ /**
+ * Appends a separator to the value and returns the value as a byte
array.
+ *
+ * @param value the value.
+ * @return a byte araray.
+ */
+ public static byte getCsvValue( String value )
+ {
+ return getCsvEndValue( value + SEPARATOR );
+ }
+
+ public static byte getCsvEndValue( int value )
+ {
+ return getCsvEndValue( String.valueOf( value ) );
+ }
+
+ public static byte getCsvEndValue( String value )
+ {
+ if ( value == null )
+ {
+ return EMPTY.getBytes();
+ }

- return string;
+ return ( value ).getBytes();
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
2010-02-08 07:04:26 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
2010-02-08 10:56:08 +0000
@@ -27,17 +27,28 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
+
import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.IOException;
+import java.util.Collection;
import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;
+import org.amplecode.quick.StatementManager;
import org.hisp.dhis.dataelement.DataElement;
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
import org.hisp.dhis.dataelement.DataElementCategoryService;
+import org.hisp.dhis.datamart.DataMartService;
import org.hisp.dhis.datavalue.DataValue;
import org.hisp.dhis.datavalue.DataValueService;
+import org.hisp.dhis.datavalue.DeflatedDataValue;
import org.hisp.dhis.importexport.CSVConverter;
import org.hisp.dhis.importexport.ExportParams;
import org.hisp.dhis.importexport.GroupMemberType;
@@ -47,7 +58,10 @@
import org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
import org.hisp.dhis.organisationunit.OrganisationUnit;
import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.system.util.DateUtils;
import org.hisp.dhis.system.util.MimicingHashMap;
+import org.hisp.dhis.system.util.StreamUtils;

/**
* @author Lars Helge Overland
@@ -57,8 +71,11 @@
extends AbstractDataValueConverter implements CSVConverter
{
private static final String SEPARATOR = ",";
+ private static final String FILENAME = "RoutineData.txt";

private DataElementCategoryService categoryService;

+ private PeriodService periodService;
+ private StatementManager statementManager;

//

-------------------------------------------------------------------------
// Properties
@@ -72,6 +89,14 @@
// Constructor
//
-------------------------------------------------------------------------

+ public DataValueConverter( PeriodService periodService,
DataMartService dataMartService,
+ StatementManager statementManager )
+ {
+ this.periodService = periodService;
+ this.dataMartService = dataMartService;
+ this.statementManager = statementManager;
+ }
+
/**
* Constructor for read operations.
*/
@@ -95,9 +120,81 @@
// CSVConverter implementation
//
-------------------------------------------------------------------------

- public void write( BufferedWriter writer, ExportParams params )
+ public void write( ZipOutputStream out, ExportParams params )
{
- // Not implemented
+ try
+ {
+ out.putNextEntry( new ZipEntry( FILENAME ) );
+
+ out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
+ out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
+ out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
+ out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryText" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
+ out.write( getCsvValue( csvEncode( "Check" ) ) );
+ out.write( getCsvValue( csvEncode( "Verified" ) ) );
+ out.write( getCsvValue( csvEncode( "Deleted" ) ) );
+ out.write( getCsvValue( csvEncode( "Comment" ) ) );
+ out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
+ out.write( getCsvEndValue( csvEncode( "LastUpdated" ) ) );
+
+ out.write( NEWLINE );
+
+ if ( params.isIncludeDataValues() )
+ {
+ if ( params.getStartDate() != null && params.getEndDate()
!= null )
+ {
+ Collection<DeflatedDataValue> values = null;
+
+ Collection<Period> periods =
periodService.getIntersectingPeriods( params.getStartDate(),
params.getEndDate() );
+
+ statementManager.initialise();
+
+ for ( final Integer element :
params.getDataElements() )
+ {
+ for ( final Period period : periods )
+ {
+ values =
dataMartService.getDeflatedDataValues( element, period.getId(),
params.getOrganisationUnits() );
+
+ for ( final DeflatedDataValue value : values
)
+ {
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue(
value.getSourceId() ) );
+ out.write( getCsvValue(
value.getDataElementId() ) );
+ out.write( getCsvValue(
value.getPeriodId() ) );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( getCsvValue( csvEncode(
value.getValue() ) ) );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( csvEncode(
value.getComment() ) ) );
+ out.write( getCsvValue( 1 ) );
+ out.write( getCsvEndValue(
DateUtils.getAccessDateString( value.getTimestamp() ) ) );
+
+ out.write( NEWLINE );
+ }
+ }
+ }
+
+ statementManager.destroy();
+ }
+ }
+
+ StreamUtils.closeZipEntry( out );
+ }
+ catch ( IOException ex )
+ {
+ throw new RuntimeException( "Failed to write data", ex );
+ }
}

public void read\( BufferedReader reader, ImportParams params \)

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
2009-11-07 14:09:00 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
2010-02-08 10:56:08 +0000
@@ -35,16 +35,19 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;
import org.amplecode.staxwax.factory.XMLFactory;
import org.amplecode.staxwax.writer.XMLWriter;
import org.hibernate.SessionFactory;
import org.hisp.dhis.dataelement.DataElementService;
+import org.hisp.dhis.datamart.DataMartService;
import org.hisp.dhis.importexport.ExportParams;
import org.hisp.dhis.importexport.ExportPipeThread;
import org.hisp.dhis.importexport.ExportService;
import
org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
import org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
+import
org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
@@ -60,6 +63,7 @@
import
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
import org.hisp.dhis.indicator.IndicatorService;
+import org.hisp.dhis.period.PeriodService;

/**
* @author Lars Helge Overland
@@ -100,6 +104,27 @@
this.indicatorService = indicatorService;
}

+ private PeriodService periodService;
+
+ public void setPeriodService( PeriodService periodService )
+ {
+ this.periodService = periodService;
+ }
+
+ private DataMartService dataMartService;
+
+ public void setDataMartService( DataMartService dataMartService )
+ {
+ this.dataMartService = dataMartService;
+ }
+
+ private StatementManager statementManager;
+
+ public void setStatementManager( StatementManager statementManager )
+ {
+ this.statementManager = statementManager;
+ }
+
//
-------------------------------------------------------------------------
// ExportService implementation
//
-------------------------------------------------------------------------
@@ -122,7 +147,7 @@
zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );

        XMLWriter writer = XMLFactory\.getPlainXMLWriter\( zipOut \);

-
+
//
-------------------------------------------------------------------------
// Writes to one end of the pipe
//
-------------------------------------------------------------------------
@@ -156,6 +181,8 @@
thread.registerXMLConverter( new UserConverter() );
thread.registerXMLConverter( new UserRoleConverter() );

+ thread.registerCSVConverter( new DataValueConverter(
periodService, dataMartService, statementManager ) );
+
thread.start();

        //

-------------------------------------------------------------------------

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
2010-02-02 19:21:58 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
2010-02-08 10:56:08 +0000
@@ -381,6 +381,9 @@
<property name="sessionFactory" ref="sessionFactory" />
<property name="dataElementService"
ref="org.hisp.dhis.dataelement.DataElementService" />
<property name="indicatorService"
ref="org.hisp.dhis.indicator.IndicatorService" />
+ <property name="periodService"
ref="org.hisp.dhis.period.PeriodService" />
+ <property name="dataMartService"
ref="org.hisp.dhis.datamart.DataMartService" />
+ <property name="statementManager" ref="statementManager"
/>
</bean>

   &lt;\!\-\- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \-

-->

=== modified file
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
---
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
2009-11-19 19:16:46 +0000
+++
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
2010-02-08 10:56:08 +0000
@@ -49,6 +49,20 @@
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

/\*\*

+ * Formats a Date to the Access date format.
+ *
+ * @param date the Date to parse.
+ * @return a formatted date string.
+ */
+ public static String getAccessDateString( Date date )
+ {
+ final SimpleDateFormat format = new SimpleDateFormat();
+ format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
+
+ return date != null ? format.format( date ) : null;
+ }
+
+ /**
* Formats a Date to the IXF date format which is
YYYY-MM-DD'T'HH:MM:SS.
*
* @param date the Date to parse.

=== modified file
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
---
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
2009-12-19 15:20:41 +0000
+++
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
2010-02-08 10:56:08 +0000
@@ -422,9 +422,26 @@
}

/\*\*

+ * Closes the current ZipEntry and positions the stream for writing
the next entry.
+ *
+ * @param out the ZipOutputStream.
+ */
+ public static void closeZipEntry( ZipOutputStream out )
+ {
+ try
+ {
+ out.closeEntry();
+ }
+ catch ( Exception ex )
+ {
+ throw new RuntimeException( "Failed to close the current
ZipEntry", ex );
+ }
+ }
+
+ /**
* Finishes writing the contents of the ZIP output stream without
closing the underlying stream.
*
- * @param out the ZipOutputStream to write to.
+ * @param out the ZipOutputStream.
*/
public static void finishZipEntry( ZipOutputStream out )
{
@@ -434,7 +451,7 @@
}
catch ( Exception ex )
{
- throw new RuntimeException( "Failed to finish
ZipOutputStream", ex );
+ throw new RuntimeException( "Failed to finish the content of
the ZipOutputStream", ex );
}
}

=== modified file
'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
---
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
2010-01-27 21:45:11 +0000
+++
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
2010-02-08 10:56:08 +0000
@@ -146,6 +146,7 @@
import_from_other_systems = Import from other systems
DHIS14_import = DHIS 1.4 Import
DHIS14_metadata_export = DHIS 1.4 Metadata Export
+DHIS14_data_export = DHIS 1.4 Data Export
IXF_import = IXF Import
accept_incoming_records = Accept incoming records
include_datavalues = Include data values
@@ -442,4 +443,5 @@
intro_ixf_metadata_export = Do an export of meta-data or dimensional data
describing the facts. Indicator Transmission Format (IXF) is a standard
developed by the WHO.
intro_DHIS14_metadata_export = Do an export of meta-data or dimensional
data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
intro_DHIS14_detailed_metadata_export = Do an export of an detailed
selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
+intro_DHIS14_data_export = Do an export of data values or facts. DHIS 1.4
is the predecessor of DHIS 2.
intro_pdf_metadata_export = Portable Document Format (PDF) is a file
format for document exchange.

=== modified file
'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
---
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
2010-01-28 11:51:39 +0000
+++
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
2010-02-08 10:56:08 +0000
@@ -2,8 +2,9 @@
<h3>$i18n.getString( "export_to_other_systems" )</h3>

<ul class="introList">
+ #introListItem( "displayMetaDataExportForm.action?exportFormat=IXF"
"ixf_metadata_export" )
#introListItem( "displayDataValueExportForm.action?exportFormat=IXF"
"ixf_data_export" )
- #introListItem( "displayMetaDataExportForm.action?exportFormat=IXF"
"ixf_metadata_export" )
#introListItem(
"displayMetaDataExportForm.action?exportFormat=DHIS14XML"
"DHIS14_metadata_export" )
#introListItem(
"displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
"DHIS14_detailed_metadata_export" )
+ #introListItem(
"displayDataValueExportForm.action?exportFormat=DHIS14XML"
"DHIS14_data_export" )
#introListItem( "displayMetaDataExportForm.action?exportFormat=PDF"
"pdf_metadata_export" )
\ No newline at end of file

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp


revno: 1404

committer: Lars Helge Oeverland larshelge@gmail.com

branch nick: trunk

timestamp: Mon 2010-02-08 11:56:08 +0100

message:

Implemented DHIS 1.4 export of data values

modified:

There is actually still a snag here. DHIS 1.4 only accepts the 7zip/lzma

format currently. I have talked Greg into making 1.4 accept zip/deflate too.

Isn’t it better to have gzip/deflate? We are not talking about

compressing an archive of files but rather compressing a single

stream.

Also I think the original "void write( BufferedWriter writer,

ExportParams params )" might be better than "void write(

ZipOutputStream out, ExportParams params )". It seems unnecessary

that the convertor should have to know anything about zip, gzip, 7zip

or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for meta-data and keeps both inside the archive… I was was not able to have multiple zip entries while using the Writer…

···

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

On Mon, Feb 8, 2010 at 11:59 AM, noreply@launchpad.net wrote:

Cheers

Bob

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

lp:dhis2

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.

To unsubscribe from this branch go to

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2009-03-03 16:46:36 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2010-02-08 10:56:08 +0000

@@ -28,7 +28,7 @@

*/

import java.io.BufferedReader;

-import java.io.BufferedWriter;

+import java.util.zip.ZipOutputStream;

/**

  • @author Lars Helge Overland

@@ -36,7 +36,7 @@

*/

public interface CSVConverter

{

  • void write( BufferedWriter writer, ExportParams params );
  • void write( ZipOutputStream out, ExportParams params );
void read( BufferedReader reader, ImportParams params );

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2009-11-02 15:55:44 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -52,7 +52,8 @@

private List<XMLConverter> xsdConverters = new

ArrayList();

private List<XMLConverter> xmlConverters = new

ArrayList();

  • private List csvConverters = new

ArrayList();

//

// Parameters
//

@@ -122,6 +123,11 @@

    this.xmlConverters.add( converter );
}
  • public void registerCSVConverter ( CSVConverter converter )
  • {
  •    this.csvConverters.add( converter );
    
  • }
//

// Thread implementation
//

@@ -159,9 +165,20 @@

        }
        afterXML( writer );
        closeDocument( writer );
  •        StreamUtils.closeZipEntry( zipOutputStream );
    
  •        //
    

  •        // CSV
    
  •        //
    

  •        for ( CSVConverter converter : csvConverters )
    
  •        {
    
  •            converter.write( zipOutputStream, params );
    
  •        }
    
        [log.info](http://log.info)( "Export done" );
    }
    catch ( Exception ex )

@@ -172,12 +189,10 @@

    }
    finally
    {
  •        StreamUtils.finishZipEntry( zipOutputStream );
    
  •        writer.closeWriter();
    
        StreamUtils.closeOutputStream( zipOutputStream );
  •        writer.closeWriter();
    
        NameMappingUtil.clearMapping();
    }
}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2010-02-08 10:56:08 +0000

@@ -27,14 +27,17 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

import java.util.Iterator;

import java.util.SortedMap;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

@@ -69,27 +72,29 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )
{
    try
    {
  •        for ( Integer id : params.getReportTables() ) //TODO more
    

than one?

  •        for ( Integer id : params.getReportTables() )
    
        {
  •            out.putNextEntry( new ZipEntry( "ReportTable" + id +
    

CSV_EXTENSION ) );

            ReportTableData data =

reportTableService.getReportTableData( id, params.getFormat() );

            Iterator<String> columns =

data.getPrettyPrintColumns().iterator();

            while ( columns.hasNext() )
            {
  •                writer.write( csvEncode( columns.next() ) );
    
  •                out.write( csvEncode( columns.next() ).getBytes() );
    
                if ( columns.hasNext() )
                {
  •                    writer.write( SEPARATOR );
    
  •                    out.write( SEPARATOR_B );
    
                }
            }
  •            writer.newLine();
    
  •            out.write( NEWLINE );
    
            for ( SortedMap<Integer, String> row : data.getRows() )
            {

@@ -97,15 +102,15 @@

                while ( values.hasNext() )
                {
  •                    writer.write( csvEncode( values.next() ) );
    
  •                    out.write( csvEncode( values.next() ).getBytes()
    

);

                    if ( values.hasNext() )
                    {
  •                        writer.write( SEPARATOR );
    
  •                        out.write( SEPARATOR_B );
    
                    }
                }
  •                writer.newLine();
    
  •                out.write( NEWLINE );
    
            }
        }
    }

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -27,9 +27,9 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import java.io.BufferedWriter;

import java.util.ArrayList;

import java.util.List;

+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

@@ -48,13 +48,6 @@

{

private static final Log log = LogFactory.getLog(

CSVExportPipeThread.class );

  • private BufferedWriter writer;
  • public void setWriter( BufferedWriter writer )
  • {
  •    this.writer = writer;
    
  • }
private ExportParams params;
public void setParams( ExportParams params )

@@ -62,6 +55,13 @@

    this.params = params;
}
  • private ZipOutputStream outputStream;
  • public void setOutputStream( ZipOutputStream outputStream )
  • {
  •    this.outputStream = outputStream;
    
  • }
private List<CSVConverter> converters = new ArrayList<CSVConverter>();
public void registerCSVConverter( CSVConverter converter )

@@ -90,14 +90,18 @@

        for ( CSVConverter converter : converters )
        {
  •            converter.write( writer, params );
    
  •            converter.write( outputStream, params );
    
        }
        [log.info](http://log.info)( "Export finished" );
    }
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( ex );
    
  •    }
    
    finally
    {
  •        StreamUtils.closeWriter( writer );
    
  •        StreamUtils.closeOutputStream( outputStream );
    
    }
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2010-02-08 10:56:08 +0000

@@ -28,13 +28,11 @@

*/

import java.io.BufferedInputStream;

-import java.io.BufferedWriter;

+import java.io.BufferedOutputStream;

import java.io.IOException;

import java.io.InputStream;

-import java.io.OutputStreamWriter;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

-import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;

@@ -50,8 +48,6 @@

public class DefaultCSVExportService

implements ExportService

{

  • private static final String ZIP_ENTRY_NAME = “Export.csv”;
//

// Dependencies
//

@@ -87,20 +83,18 @@

        PipedInputStream in = new PipedInputStream( out );
  •        ZipOutputStream zipOut = new ZipOutputStream( out );
    
  •        ZipOutputStream zipOut = new ZipOutputStream( new
    

BufferedOutputStream( out ) );

  •        zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        BufferedWriter writer = new BufferedWriter( new
    

OutputStreamWriter( zipOut ) );

        //

        // Writes to one end of the pipe
        //

        CSVExportPipeThread thread = new CSVExportPipeThread(

sessionFactory );

  •        thread.setWriter( writer );
    
        thread.setParams( params );
  •        thread.setOutputStream( zipOut );
    
        thread.registerCSVConverter( new ReportTableDataConverter(

reportTableService ) );

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2009-04-16 09:53:17 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2010-02-08 10:56:08 +0000

@@ -33,15 +33,80 @@

*/

public class CsvUtil

{

  • public static final char SEPARATOR = ‘,’;
  • private static final String ENCLOSURE = “"”;
  • public static String csvEncode( String string )
  • {
  •    string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
    
  •    string = ENCLOSURE + string + ENCLOSURE;
    
  • public static final String SEPARATOR = “,”;
  • public static final byte SEPARATOR_B = SEPARATOR.getBytes();
  • public static final byte NEWLINE = “\n”.getBytes();
  • public static final String CSV_EXTENSION = “.csv”;
  • private static final String ENCLOSURE = “"”;
  • private static final String EMPTY = “”;
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( int value )
  • {
  •    return csvEncode( String.valueOf( value ) );
    
  • }
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        value = EMPTY;
    
  •    }
    
  •    else
    
  •    {
    
  •        value = value.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
    
  •        value = ENCLOSURE + value + ENCLOSURE;
    
  •    }
    
  •    return value;
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as a byte
    

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( int value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as a byte
    

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( String value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • public static byte getCsvEndValue( int value )
  • {
  •    return getCsvEndValue( String.valueOf( value ) );
    
  • }
  • public static byte getCsvEndValue( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        return EMPTY.getBytes();
    
  •    }
    
  •    return string;
    
  •    return ( value ).getBytes();
    
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 07:04:26 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 10:56:08 +0000

@@ -27,17 +27,28 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

+import java.util.Collection;

import java.util.Map;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;

+import org.amplecode.quick.StatementManager;

import org.hisp.dhis.dataelement.DataElement;

import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;

import org.hisp.dhis.dataelement.DataElementCategoryService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.datavalue.DataValue;

import org.hisp.dhis.datavalue.DataValueService;

+import org.hisp.dhis.datavalue.DeflatedDataValue;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.GroupMemberType;

@@ -47,7 +58,10 @@

import org.hisp.dhis.importexport.converter.AbstractDataValueConverter;

import org.hisp.dhis.organisationunit.OrganisationUnit;

import org.hisp.dhis.period.Period;

+import org.hisp.dhis.period.PeriodService;

+import org.hisp.dhis.system.util.DateUtils;

import org.hisp.dhis.system.util.MimicingHashMap;

+import org.hisp.dhis.system.util.StreamUtils;

/**

  • @author Lars Helge Overland

@@ -57,8 +71,11 @@

extends AbstractDataValueConverter implements CSVConverter

{

private static final String SEPARATOR = ",";
  • private static final String FILENAME = “RoutineData.txt”;
private DataElementCategoryService categoryService;
  • private PeriodService periodService;
  • private StatementManager statementManager;
//

// Properties

@@ -72,6 +89,14 @@

// Constructor
//

  • public DataValueConverter( PeriodService periodService,

DataMartService dataMartService,

  •    StatementManager statementManager )
    
  • {
  •    this.periodService = periodService;
    
  •    this.dataMartService = dataMartService;
    
  •    this.statementManager = statementManager;
    
  • }
/**
 * Constructor for read operations.
 */

@@ -95,9 +120,81 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )
{
  •    // Not implemented
    
  •    try
    
  •    {
    
  •        out.putNextEntry( new ZipEntry( FILENAME ) );
    
  •        out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryText" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Check" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Verified" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Deleted" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Comment" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
    
  •        out.write( getCsvEndValue( csvEncode( "LastUpdated" ) ) );
    
  •        out.write( NEWLINE );
    
  •        if ( params.isIncludeDataValues() )
    
  •        {
    
  •            if ( params.getStartDate() != null && params.getEndDate()
    

!= null )

  •            {
    
  •                Collection<DeflatedDataValue> values = null;
    
  •                Collection<Period> periods =
    

periodService.getIntersectingPeriods( params.getStartDate(),

params.getEndDate() );

  •                statementManager.initialise();
    
  •                for ( final Integer element :
    

params.getDataElements() )

  •                {
    
  •                    for ( final Period period : periods )
    
  •                    {
    
  •                        values =
    

dataMartService.getDeflatedDataValues( element, period.getId(),

params.getOrganisationUnits() );

  •                        for ( final DeflatedDataValue value : values
    

)

  •                        {
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue(
    

value.getSourceId() ) );

  •                            out.write( getCsvValue(
    

value.getDataElementId() ) );

  •                            out.write( getCsvValue(
    

value.getPeriodId() ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( csvEncode(
    

value.getValue() ) ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( csvEncode(
    

value.getComment() ) ) );

  •                            out.write( getCsvValue( 1 ) );
    
  •                            out.write( getCsvEndValue(
    

DateUtils.getAccessDateString( value.getTimestamp() ) ) );

  •                            out.write( NEWLINE );
    
  •                        }
    
  •                    }
    
  •                }
    
  •                statementManager.destroy();
    
  •            }
    
  •        }
    
  •        StreamUtils.closeZipEntry( out );
    
  •    }
    
  •    catch ( IOException ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to write data", ex );
    
  •    }
    
}
public void read( BufferedReader reader, ImportParams params )

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2009-11-07 14:09:00 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2010-02-08 10:56:08 +0000

@@ -35,16 +35,19 @@

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;

import org.amplecode.staxwax.factory.XMLFactory;

import org.amplecode.staxwax.writer.XMLWriter;

import org.hibernate.SessionFactory;

import org.hisp.dhis.dataelement.DataElementService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.ExportPipeThread;

import org.hisp.dhis.importexport.ExportService;

import

org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;

import org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;

+import

org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;

@@ -60,6 +63,7 @@

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;

import org.hisp.dhis.indicator.IndicatorService;

+import org.hisp.dhis.period.PeriodService;

/**

  • @author Lars Helge Overland

@@ -100,6 +104,27 @@

    this.indicatorService = indicatorService;
}
  • private PeriodService periodService;
  • public void setPeriodService( PeriodService periodService )
  • {
  •    this.periodService = periodService;
    
  • }
  • private DataMartService dataMartService;
  • public void setDataMartService( DataMartService dataMartService )
  • {
  •    this.dataMartService = dataMartService;
    
  • }
  • private StatementManager statementManager;
  • public void setStatementManager( StatementManager statementManager )
  • {
  •    this.statementManager = statementManager;
    
  • }
//

// ExportService implementation
//

@@ -122,7 +147,7 @@

        zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
        XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
        //

        // Writes to one end of the pipe
        //

@@ -156,6 +181,8 @@

        thread.registerXMLConverter( new UserConverter() );
        thread.registerXMLConverter( new UserRoleConverter() );
  •        thread.registerCSVConverter( new DataValueConverter(
    

periodService, dataMartService, statementManager ) );

        thread.start();
        //

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml’


dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-02 19:21:58 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-08 10:56:08 +0000

@@ -381,6 +381,9 @@

           <property name="sessionFactory" ref="sessionFactory" />
           <property name="dataElementService"

ref=“org.hisp.dhis.dataelement.DataElementService” />

           <property name="indicatorService"

ref=“org.hisp.dhis.indicator.IndicatorService” />

  •           <property name="periodService"
    

ref=“org.hisp.dhis.period.PeriodService” />

  •           <property name="dataMartService"
    

ref=“org.hisp.dhis.datamart.DataMartService” />

  •           <property name="statementManager" ref="statementManager"
    

/>

   </bean>
   <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2009-11-19 19:16:46 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2010-02-08 10:56:08 +0000

@@ -49,6 +49,20 @@

public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/**
  • * Formats a Date to the Access date format.
    
  • *
    
  • * @param date the Date to parse.
    
  • * @return a formatted date string.
    
  • */
    
  • public static String getAccessDateString( Date date )
  • {
  •    final SimpleDateFormat format = new SimpleDateFormat();
    
  •    format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
    
  •    return date != null ? format.format( date ) : null;
    
  • }
  • /**
 * Formats a Date to the IXF date format which is

YYYY-MM-DD’T’HH:MM:SS.

 *
 * @param date the Date to parse.

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2009-12-19 15:20:41 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2010-02-08 10:56:08 +0000

@@ -422,9 +422,26 @@

}
/**
  • * Closes the current ZipEntry and positions the stream for writing
    

the next entry.

  • *
    
  • * @param out the ZipOutputStream.
    
  • */
    
  • public static void closeZipEntry( ZipOutputStream out )
  • {
  •    try
    
  •    {
    
  •        out.closeEntry();
    
  •    }
    
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to close the current
    

ZipEntry", ex );

  •    }
    
  • }
  • /**
 * Finishes writing the contents of the ZIP output stream without

closing the underlying stream.

 *
  • * @param out the ZipOutputStream to write to.
    
  • * @param out the ZipOutputStream.
    
 */
public static void finishZipEntry( ZipOutputStream out )
{

@@ -434,7 +451,7 @@

    }
    catch ( Exception ex )
    {
  •        throw new RuntimeException( "Failed to finish
    

ZipOutputStream", ex );

  •        throw new RuntimeException( "Failed to finish the content of
    

the ZipOutputStream", ex );

    }
}

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties’


dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-01-27 21:45:11 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-02-08 10:56:08 +0000

@@ -146,6 +146,7 @@

import_from_other_systems = Import from other systems

DHIS14_import = DHIS 1.4 Import

DHIS14_metadata_export = DHIS 1.4 Metadata Export

+DHIS14_data_export = DHIS 1.4 Data Export

IXF_import = IXF Import

accept_incoming_records = Accept incoming records

include_datavalues = Include data values

@@ -442,4 +443,5 @@

intro_ixf_metadata_export = Do an export of meta-data or dimensional data

describing the facts. Indicator Transmission Format (IXF) is a standard

developed by the WHO.

intro_DHIS14_metadata_export = Do an export of meta-data or dimensional

data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.

intro_DHIS14_detailed_metadata_export = Do an export of an detailed

selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.

+intro_DHIS14_data_export = Do an export of data values or facts. DHIS 1.4

is the predecessor of DHIS 2.

intro_pdf_metadata_export = Portable Document Format (PDF) is a file

format for document exchange.

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm’


dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-01-28 11:51:39 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-02-08 10:56:08 +0000

@@ -2,8 +2,9 @@

$i18n.getString( "export_to_other_systems" )

  • #introListItem( “displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem( "displayDataValueExportForm.action?exportFormat=IXF"

“ixf_data_export” )

  • #introListItem( “displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_metadata_export” )

#introListItem(

“displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_detailed_metadata_export” )

  • #introListItem(

“displayDataValueExportForm.action?exportFormat=DHIS14XML”

“DHIS14_data_export” )

#introListItem( "displayMetaDataExportForm.action?exportFormat=PDF"

“pdf_metadata_export” )

\ No newline at end of file


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

>
>
>>
>> ------------------------------------------------------------
>> revno: 1404
>> committer: Lars Helge Oeverland <larshelge@gmail.com>
>> branch nick: trunk
>> timestamp: Mon 2010-02-08 11:56:08 +0100
>> message:
>> Implemented DHIS 1.4 export of data values
>> modified:
>
>
> There is actually still a snag here. DHIS 1.4 only accepts the 7zip/lzma
> format currently. I have talked Greg into making 1.4 accept zip/deflate
> too.

Isn't it better to have gzip/deflate? We are not talking about
compressing an archive of files but rather compressing a single
stream.

Also I think the original "void write( BufferedWriter writer,
ExportParams params )" might be better than "void write(
ZipOutputStream out, ExportParams params )". It seems unnecessary
that the convertor should have to know anything about zip, gzip, 7zip
or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to
later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for
meta-data and keeps both inside the archive... I was was not able to have
multiple zip entries while using the Writer..

Ah. Ok. I do remember. Then you would need an archive (zip or the
seven thing) rather a gzipped stream.

But does your CSV writer need to know that? Surely it just has an
interest in churning out csv datavalues. Some other component should
put the csv stream together with the xml stream into the zip.

···

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
> On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:

Cheers
Bob

>
>>
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>
>>
>> --
>> lp:dhis2
>> trunk : Code : DHIS
>>
>> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
>> To unsubscribe from this branch go to
>>
>> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> 2009-03-03 16:46:36 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -28,7 +28,7 @@
>> */
>>
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> +import java.util.zip.ZipOutputStream;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -36,7 +36,7 @@
>> */
>> public interface CSVConverter
>> {
>> - void write( BufferedWriter writer, ExportParams params );
>> + void write( ZipOutputStream out, ExportParams params );
>>
>> void read( BufferedReader reader, ImportParams params );
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> 2009-11-02 15:55:44 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> 2010-02-08 10:56:08 +0000
>> @@ -52,7 +52,8 @@
>>
>> private List<XMLConverter> xsdConverters = new
>> ArrayList<XMLConverter>();
>> private List<XMLConverter> xmlConverters = new
>> ArrayList<XMLConverter>();
>> -
>> + private List<CSVConverter> csvConverters = new
>> ArrayList<CSVConverter>();
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Parameters
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -122,6 +123,11 @@
>> this.xmlConverters.add( converter );
>> }
>>
>> + public void registerCSVConverter ( CSVConverter converter )
>> + {
>> + this.csvConverters.add( converter );
>> + }
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Thread implementation
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -159,9 +165,20 @@
>> }
>>
>> afterXML( writer );
>> -
>> +
>> closeDocument( writer );
>> -
>> +
>> + StreamUtils.closeZipEntry( zipOutputStream );
>> +
>> + //
>> -----------------------------------------------------------------
>> + // CSV
>> + //
>> -----------------------------------------------------------------
>> +
>> + for ( CSVConverter converter : csvConverters )
>> + {
>> + converter.write( zipOutputStream, params );
>> + }
>> +
>> log.info( "Export done" );
>> }
>> catch ( Exception ex )
>> @@ -172,12 +189,10 @@
>> }
>> finally
>> {
>> - StreamUtils.finishZipEntry( zipOutputStream );
>> + writer.closeWriter();
>>
>> StreamUtils.closeOutputStream( zipOutputStream );
>>
>> - writer.closeWriter();
>> -
>> NameMappingUtil.clearMapping();
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,14 +27,17 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> -import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>>
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> import java.io.IOException;
>> import java.util.Iterator;
>> import java.util.SortedMap;
>> +import java.util.zip.ZipEntry;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.hisp.dhis.importexport.CSVConverter;
>> import org.hisp.dhis.importexport.ExportParams;
>> @@ -69,27 +72,29 @@
>> // CSVConverter implementation
>> //
>>
>> -------------------------------------------------------------------------
>>
>> - public void write( BufferedWriter writer, ExportParams params )
>> + public void write( ZipOutputStream out, ExportParams params )
>> {
>> try
>> {
>> - for ( Integer id : params.getReportTables() ) //TODO more
>> than one?
>> + for ( Integer id : params.getReportTables() )
>> {
>> + out.putNextEntry( new ZipEntry( "ReportTable" + id +
>> CSV_EXTENSION ) );
>> +
>> ReportTableData data =
>> reportTableService.getReportTableData( id, params.getFormat() );
>>
>> Iterator<String> columns =
>> data.getPrettyPrintColumns().iterator();
>>
>> while ( columns.hasNext() )
>> {
>> - writer.write( csvEncode( columns.next() ) );
>> + out.write( csvEncode( columns.next() ).getBytes()
>> );
>>
>> if ( columns.hasNext() )
>> {
>> - writer.write( SEPARATOR );
>> + out.write( SEPARATOR_B );
>> }
>> }
>>
>> - writer.newLine();
>> + out.write( NEWLINE );
>>
>> for ( SortedMap<Integer, String> row : data.getRows() )
>> {
>> @@ -97,15 +102,15 @@
>>
>> while ( values.hasNext() )
>> {
>> - writer.write( csvEncode( values.next() ) );
>> + out.write( csvEncode( values.next()
>> ).getBytes()
>> );
>>
>> if ( values.hasNext() )
>> {
>> - writer.write( SEPARATOR );
>> + out.write( SEPARATOR_B );
>> }
>> }
>>
>> - writer.newLine();
>> + out.write( NEWLINE );
>> }
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,9 +27,9 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> -import java.io.BufferedWriter;
>> import java.util.ArrayList;
>> import java.util.List;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>> @@ -48,13 +48,6 @@
>> {
>> private static final Log log = LogFactory.getLog(
>> CSVExportPipeThread.class );
>>
>> - private BufferedWriter writer;
>> -
>> - public void setWriter( BufferedWriter writer )
>> - {
>> - this.writer = writer;
>> - }
>> -
>> private ExportParams params;
>>
>> public void setParams( ExportParams params )
>> @@ -62,6 +55,13 @@
>> this.params = params;
>> }
>>
>> + private ZipOutputStream outputStream;
>> +
>> + public void setOutputStream( ZipOutputStream outputStream )
>> + {
>> + this.outputStream = outputStream;
>> + }
>> +
>> private List<CSVConverter> converters = new
>> ArrayList<CSVConverter>();
>>
>> public void registerCSVConverter( CSVConverter converter )
>> @@ -90,14 +90,18 @@
>>
>> for ( CSVConverter converter : converters )
>> {
>> - converter.write( writer, params );
>> + converter.write( outputStream, params );
>> }
>>
>> log.info( "Export finished" );
>> }
>> + catch ( Exception ex )
>> + {
>> + throw new RuntimeException( ex );
>> + }
>> finally
>> {
>> - StreamUtils.closeWriter( writer );
>> + StreamUtils.closeOutputStream( outputStream );
>> }
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> 2010-02-08 10:56:08 +0000
>> @@ -28,13 +28,11 @@
>> */
>>
>> import java.io.BufferedInputStream;
>> -import java.io.BufferedWriter;
>> +import java.io.BufferedOutputStream;
>> import java.io.IOException;
>> import java.io.InputStream;
>> -import java.io.OutputStreamWriter;
>> import java.io.PipedInputStream;
>> import java.io.PipedOutputStream;
>> -import java.util.zip.ZipEntry;
>> import java.util.zip.ZipOutputStream;
>>
>> import org.hibernate.SessionFactory;
>> @@ -50,8 +48,6 @@
>> public class DefaultCSVExportService
>> implements ExportService
>> {
>> - private static final String ZIP_ENTRY_NAME = "Export.csv";
>> -
>> //
>>
>> -------------------------------------------------------------------------
>> // Dependencies
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -87,20 +83,18 @@
>>
>> PipedInputStream in = new PipedInputStream( out );
>>
>> - ZipOutputStream zipOut = new ZipOutputStream( out );
>> + ZipOutputStream zipOut = new ZipOutputStream( new
>> BufferedOutputStream( out ) );
>>
>> - zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
>> + //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
>>
>> - BufferedWriter writer = new BufferedWriter( new
>> OutputStreamWriter( zipOut ) );
>> -
>> //
>> -----------------------------------------------------------------
>> // Writes to one end of the pipe
>> //
>> -----------------------------------------------------------------
>>
>> CSVExportPipeThread thread = new CSVExportPipeThread(
>> sessionFactory );
>>
>> - thread.setWriter( writer );
>> thread.setParams( params );
>> + thread.setOutputStream( zipOut );
>>
>> thread.registerCSVConverter( new ReportTableDataConverter(
>> reportTableService ) );
>>
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> 2009-04-16 09:53:17 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> 2010-02-08 10:56:08 +0000
>> @@ -33,15 +33,80 @@
>> */
>> public class CsvUtil
>> {
>> - public static final char SEPARATOR = ',';
>> -
>> - private static final String ENCLOSURE = "\"";
>> -
>> - public static String csvEncode( String string )
>> - {
>> - string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE
>> );
>> - string = ENCLOSURE + string + ENCLOSURE;
>> + public static final String SEPARATOR = ",";
>> + public static final byte SEPARATOR_B = SEPARATOR.getBytes();
>> + public static final byte NEWLINE = "\n".getBytes();
>> +
>> + public static final String CSV_EXTENSION = ".csv";
>> + private static final String ENCLOSURE = "\"";
>> + private static final String EMPTY = "";
>> +
>> + /**
>> + * Encodes the given value to a CSV acceptable value.
>> + *
>> + * @param value the value.
>> + * @return the CSV encoded value.
>> + */
>> + public static String csvEncode( int value )
>> + {
>> + return csvEncode( String.valueOf( value ) );
>> + }
>> +
>> + /**
>> + * Encodes the given value to a CSV acceptable value.
>> + *
>> + * @param value the value.
>> + * @return the CSV encoded value.
>> + */
>> + public static String csvEncode( String value )
>> + {
>> + if ( value == null )
>> + {
>> + value = EMPTY;
>> + }
>> + else
>> + {
>> + value = value.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE
>> );
>> + value = ENCLOSURE + value + ENCLOSURE;
>> + }
>> +
>> + return value;
>> + }
>> +
>> + /**
>> + * Appends a separator to the value and returns the value as a
>> byte
>> array.
>> + *
>> + * @param value the value.
>> + * @return a byte araray.
>> + */
>> + public static byte getCsvValue( int value )
>> + {
>> + return getCsvEndValue( value + SEPARATOR );
>> + }
>> +
>> + /**
>> + * Appends a separator to the value and returns the value as a
>> byte
>> array.
>> + *
>> + * @param value the value.
>> + * @return a byte araray.
>> + */
>> + public static byte getCsvValue( String value )
>> + {
>> + return getCsvEndValue( value + SEPARATOR );
>> + }
>> +
>> + public static byte getCsvEndValue( int value )
>> + {
>> + return getCsvEndValue( String.valueOf( value ) );
>> + }
>> +
>> + public static byte getCsvEndValue( String value )
>> + {
>> + if ( value == null )
>> + {
>> + return EMPTY.getBytes();
>> + }
>>
>> - return string;
>> + return ( value ).getBytes();
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> 2010-02-08 07:04:26 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,17 +27,28 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
>> +
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> import java.io.IOException;
>> +import java.util.Collection;
>> import java.util.Map;
>> +import java.util.zip.ZipEntry;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.amplecode.quick.BatchHandler;
>> +import org.amplecode.quick.StatementManager;
>> import org.hisp.dhis.dataelement.DataElement;
>> import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
>> import org.hisp.dhis.dataelement.DataElementCategoryService;
>> +import org.hisp.dhis.datamart.DataMartService;
>> import org.hisp.dhis.datavalue.DataValue;
>> import org.hisp.dhis.datavalue.DataValueService;
>> +import org.hisp.dhis.datavalue.DeflatedDataValue;
>> import org.hisp.dhis.importexport.CSVConverter;
>> import org.hisp.dhis.importexport.ExportParams;
>> import org.hisp.dhis.importexport.GroupMemberType;
>> @@ -47,7 +58,10 @@
>> import
>> org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
>> import org.hisp.dhis.organisationunit.OrganisationUnit;
>> import org.hisp.dhis.period.Period;
>> +import org.hisp.dhis.period.PeriodService;
>> +import org.hisp.dhis.system.util.DateUtils;
>> import org.hisp.dhis.system.util.MimicingHashMap;
>> +import org.hisp.dhis.system.util.StreamUtils;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -57,8 +71,11 @@
>> extends AbstractDataValueConverter implements CSVConverter
>> {
>> private static final String SEPARATOR = ",";
>> + private static final String FILENAME = "RoutineData.txt";
>>
>> private DataElementCategoryService categoryService;
>> + private PeriodService periodService;
>> + private StatementManager statementManager;
>>
>> //
>>
>> -------------------------------------------------------------------------
>> // Properties
>> @@ -72,6 +89,14 @@
>> // Constructor
>> //
>>
>> -------------------------------------------------------------------------
>>
>> + public DataValueConverter( PeriodService periodService,
>> DataMartService dataMartService,
>> + StatementManager statementManager )
>> + {
>> + this.periodService = periodService;
>> + this.dataMartService = dataMartService;
>> + this.statementManager = statementManager;
>> + }
>> +
>> /**
>> * Constructor for read operations.
>> */
>> @@ -95,9 +120,81 @@
>> // CSVConverter implementation
>> //
>>
>> -------------------------------------------------------------------------
>>
>> - public void write( BufferedWriter writer, ExportParams params )
>> + public void write( ZipOutputStream out, ExportParams params )
>> {
>> - // Not implemented
>> + try
>> + {
>> + out.putNextEntry( new ZipEntry( FILENAME ) );
>> +
>> + out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
>> + out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
>> + out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
>> + out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryText" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
>> + out.write( getCsvValue( csvEncode( "Check" ) ) );
>> + out.write( getCsvValue( csvEncode( "Verified" ) ) );
>> + out.write( getCsvValue( csvEncode( "Deleted" ) ) );
>> + out.write( getCsvValue( csvEncode( "Comment" ) ) );
>> + out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
>> + out.write( getCsvEndValue( csvEncode( "LastUpdated" ) ) );
>> +
>> + out.write( NEWLINE );
>> +
>> + if ( params.isIncludeDataValues() )
>> + {
>> + if ( params.getStartDate() != null &&
>> params.getEndDate()
>> != null )
>> + {
>> + Collection<DeflatedDataValue> values = null;
>> +
>> + Collection<Period> periods =
>> periodService.getIntersectingPeriods( params.getStartDate(),
>> params.getEndDate() );
>> +
>> + statementManager.initialise();
>> +
>> + for ( final Integer element :
>> params.getDataElements() )
>> + {
>> + for ( final Period period : periods )
>> + {
>> + values =
>> dataMartService.getDeflatedDataValues( element, period.getId(),
>> params.getOrganisationUnits() );
>> +
>> + for ( final DeflatedDataValue value :
>> values
>> )
>> + {
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue(
>> value.getSourceId() ) );
>> + out.write( getCsvValue(
>> value.getDataElementId() ) );
>> + out.write( getCsvValue(
>> value.getPeriodId() ) );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( getCsvValue( csvEncode(
>> value.getValue() ) ) );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( csvEncode(
>> value.getComment() ) ) );
>> + out.write( getCsvValue( 1 ) );
>> + out.write( getCsvEndValue(
>> DateUtils.getAccessDateString( value.getTimestamp() ) ) );
>> +
>> + out.write( NEWLINE );
>> + }
>> + }
>> + }
>> +
>> + statementManager.destroy();
>> + }
>> + }
>> +
>> + StreamUtils.closeZipEntry( out );
>> + }
>> + catch ( IOException ex )
>> + {
>> + throw new RuntimeException( "Failed to write data", ex );
>> + }
>> }
>>
>> public void read( BufferedReader reader, ImportParams params )
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> 2009-11-07 14:09:00 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> 2010-02-08 10:56:08 +0000
>> @@ -35,16 +35,19 @@
>> import java.util.zip.ZipEntry;
>> import java.util.zip.ZipOutputStream;
>>
>> +import org.amplecode.quick.StatementManager;
>> import org.amplecode.staxwax.factory.XMLFactory;
>> import org.amplecode.staxwax.writer.XMLWriter;
>> import org.hibernate.SessionFactory;
>> import org.hisp.dhis.dataelement.DataElementService;
>> +import org.hisp.dhis.datamart.DataMartService;
>> import org.hisp.dhis.importexport.ExportParams;
>> import org.hisp.dhis.importexport.ExportPipeThread;
>> import org.hisp.dhis.importexport.ExportService;
>> import
>>
>> org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
>> +import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
>> @@ -60,6 +63,7 @@
>> import
>>
>> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
>> import org.hisp.dhis.indicator.IndicatorService;
>> +import org.hisp.dhis.period.PeriodService;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -100,6 +104,27 @@
>> this.indicatorService = indicatorService;
>> }
>>
>> + private PeriodService periodService;
>> +
>> + public void setPeriodService( PeriodService periodService )
>> + {
>> + this.periodService = periodService;
>> + }
>> +
>> + private DataMartService dataMartService;
>> +
>> + public void setDataMartService( DataMartService dataMartService )
>> + {
>> + this.dataMartService = dataMartService;
>> + }
>> +
>> + private StatementManager statementManager;
>> +
>> + public void setStatementManager( StatementManager statementManager
>> )
>> + {
>> + this.statementManager = statementManager;
>> + }
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // ExportService implementation
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -122,7 +147,7 @@
>> zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
>>
>> XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
>> -
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Writes to one end of the pipe
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -156,6 +181,8 @@
>> thread.registerXMLConverter( new UserConverter() );
>> thread.registerXMLConverter( new UserRoleConverter() );
>>
>> + thread.registerCSVConverter( new DataValueConverter(
>> periodService, dataMartService, statementManager ) );
>> +
>> thread.start();
>>
>> //
>>
>> -------------------------------------------------------------------------
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> 2010-02-02 19:21:58 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> 2010-02-08 10:56:08 +0000
>> @@ -381,6 +381,9 @@
>> <property name="sessionFactory" ref="sessionFactory" />
>> <property name="dataElementService"
>> ref="org.hisp.dhis.dataelement.DataElementService" />
>> <property name="indicatorService"
>> ref="org.hisp.dhis.indicator.IndicatorService" />
>> + <property name="periodService"
>> ref="org.hisp.dhis.period.PeriodService" />
>> + <property name="dataMartService"
>> ref="org.hisp.dhis.datamart.DataMartService" />
>> + <property name="statementManager"
>> ref="statementManager"
>> />
>> </bean>
>>
>> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> -
>> -->
>>
>> === modified file
>>
>> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
>> ---
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> 2009-11-19 19:16:46 +0000
>> +++
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> 2010-02-08 10:56:08 +0000
>> @@ -49,6 +49,20 @@
>> public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
>>
>> /**
>> + * Formats a Date to the Access date format.
>> + *
>> + * @param date the Date to parse.
>> + * @return a formatted date string.
>> + */
>> + public static String getAccessDateString( Date date )
>> + {
>> + final SimpleDateFormat format = new SimpleDateFormat();
>> + format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
>> +
>> + return date != null ? format.format( date ) : null;
>> + }
>> +
>> + /**
>> * Formats a Date to the IXF date format which is
>> YYYY-MM-DD'T'HH:MM:SS.
>> *
>> * @param date the Date to parse.
>>
>> === modified file
>>
>> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
>> ---
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> 2009-12-19 15:20:41 +0000
>> +++
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> 2010-02-08 10:56:08 +0000
>> @@ -422,9 +422,26 @@
>> }
>>
>> /**
>> + * Closes the current ZipEntry and positions the stream for
>> writing
>> the next entry.
>> + *
>> + * @param out the ZipOutputStream.
>> + */
>> + public static void closeZipEntry( ZipOutputStream out )
>> + {
>> + try
>> + {
>> + out.closeEntry();
>> + }
>> + catch ( Exception ex )
>> + {
>> + throw new RuntimeException( "Failed to close the current
>> ZipEntry", ex );
>> + }
>> + }
>> +
>> + /**
>> * Finishes writing the contents of the ZIP output stream without
>> closing the underlying stream.
>> *
>> - * @param out the ZipOutputStream to write to.
>> + * @param out the ZipOutputStream.
>> */
>> public static void finishZipEntry( ZipOutputStream out )
>> {
>> @@ -434,7 +451,7 @@
>> }
>> catch ( Exception ex )
>> {
>> - throw new RuntimeException( "Failed to finish
>> ZipOutputStream", ex );
>> + throw new RuntimeException( "Failed to finish the content
>> of
>> the ZipOutputStream", ex );
>> }
>> }
>>
>>
>> === modified file
>>
>> 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
>> ---
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> 2010-01-27 21:45:11 +0000
>> +++
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> 2010-02-08 10:56:08 +0000
>> @@ -146,6 +146,7 @@
>> import_from_other_systems = Import from other systems
>> DHIS14_import = DHIS 1.4 Import
>> DHIS14_metadata_export = DHIS 1.4 Metadata Export
>> +DHIS14_data_export = DHIS 1.4 Data Export
>> IXF_import = IXF Import
>> accept_incoming_records = Accept incoming records
>> include_datavalues = Include data values
>> @@ -442,4 +443,5 @@
>> intro_ixf_metadata_export = Do an export of meta-data or dimensional
>> data
>> describing the facts. Indicator Transmission Format (IXF) is a standard
>> developed by the WHO.
>> intro_DHIS14_metadata_export = Do an export of meta-data or
>> dimensional
>> data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
>> intro_DHIS14_detailed_metadata_export = Do an export of an detailed
>> selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
>> +intro_DHIS14_data_export = Do an export of data values or facts. DHIS
>> 1.4
>> is the predecessor of DHIS 2.
>> intro_pdf_metadata_export = Portable Document Format (PDF) is a file
>> format for document exchange.
>>
>> === modified file
>>
>> 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
>> ---
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> 2010-01-28 11:51:39 +0000
>> +++
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> 2010-02-08 10:56:08 +0000
>> @@ -2,8 +2,9 @@
>> <h3>$i18n.getString( "export_to_other_systems" )</h3>
>>
>> <ul class="introList">
>> + #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=IXF"
>> "ixf_metadata_export" )
>> #introListItem(
>> "displayDataValueExportForm.action?exportFormat=IXF"
>> "ixf_data_export" )
>> - #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=IXF"
>> "ixf_metadata_export" )
>> #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_metadata_export" )
>> #introListItem(
>> "displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_detailed_metadata_export" )
>> + #introListItem(
>> "displayDataValueExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_data_export" )
>> #introListItem( "displayMetaDataExportForm.action?exportFormat=PDF"
>> "pdf_metadata_export" )
>> \ No newline at end of file
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs
>> Post to : dhis2-devs@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help : https://help.launchpad.net/ListHelp
>>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to : dhis2-devs@lists.launchpad.net
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help : https://help.launchpad.net/ListHelp
>
>

Yup agree with that just could not make it write the appropriate zip
entries that way.. Open for being enlighted here..

···

2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>
>
> On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:
>>
>> ------------------------------------------------------------
>> revno: 1404
>> committer: Lars Helge Oeverland <larshelge@gmail.com>
>> branch nick: trunk
>> timestamp: Mon 2010-02-08 11:56:08 +0100
>> message:
>> Implemented DHIS 1.4 export of data values
>> modified:
>
>
> There is actually still a snag here. DHIS 1.4 only accepts the
> 7zip/lzma
> format currently. I have talked Greg into making 1.4 accept zip/deflate
> too.

Isn't it better to have gzip/deflate? We are not talking about
compressing an archive of files but rather compressing a single
stream.

Also I think the original "void write( BufferedWriter writer,
ExportParams params )" might be better than "void write(
ZipOutputStream out, ExportParams params )". It seems unnecessary
that the convertor should have to know anything about zip, gzip, 7zip
or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to
later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for
meta-data and keeps both inside the archive... I was was not able to have
multiple zip entries while using the Writer..

Ah. Ok. I do remember. Then you would need an archive (zip or the
seven thing) rather a gzipped stream.

But does your CSV writer need to know that? Surely it just has an
interest in churning out csv datavalues. Some other component should
put the csv stream together with the xml stream into the zip.

Cheers
Bob

>
>>
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>
>>
>> --
>> lp:dhis2
>> trunk : Code : DHIS
>>
>> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
>> To unsubscribe from this branch go to
>>
>> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> 2009-03-03 16:46:36 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -28,7 +28,7 @@
>> */
>>
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> +import java.util.zip.ZipOutputStream;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -36,7 +36,7 @@
>> */
>> public interface CSVConverter
>> {
>> - void write( BufferedWriter writer, ExportParams params );
>> + void write( ZipOutputStream out, ExportParams params );
>>
>> void read( BufferedReader reader, ImportParams params );
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> 2009-11-02 15:55:44 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> 2010-02-08 10:56:08 +0000
>> @@ -52,7 +52,8 @@
>>
>> private List<XMLConverter> xsdConverters = new
>> ArrayList<XMLConverter>();
>> private List<XMLConverter> xmlConverters = new
>> ArrayList<XMLConverter>();
>> -
>> + private List<CSVConverter> csvConverters = new
>> ArrayList<CSVConverter>();
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Parameters
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -122,6 +123,11 @@
>> this.xmlConverters.add( converter );
>> }
>>
>> + public void registerCSVConverter ( CSVConverter converter )
>> + {
>> + this.csvConverters.add( converter );
>> + }
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Thread implementation
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -159,9 +165,20 @@
>> }
>>
>> afterXML( writer );
>> -
>> +
>> closeDocument( writer );
>> -
>> +
>> + StreamUtils.closeZipEntry( zipOutputStream );
>> +
>> + //
>> -----------------------------------------------------------------
>> + // CSV
>> + //
>> -----------------------------------------------------------------
>> +
>> + for ( CSVConverter converter : csvConverters )
>> + {
>> + converter.write( zipOutputStream, params );
>> + }
>> +
>> log.info( "Export done" );
>> }
>> catch ( Exception ex )
>> @@ -172,12 +189,10 @@
>> }
>> finally
>> {
>> - StreamUtils.finishZipEntry( zipOutputStream );
>> + writer.closeWriter();
>>
>> StreamUtils.closeOutputStream( zipOutputStream );
>>
>> - writer.closeWriter();
>> -
>> NameMappingUtil.clearMapping();
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,14 +27,17 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> -import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>>
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> import java.io.IOException;
>> import java.util.Iterator;
>> import java.util.SortedMap;
>> +import java.util.zip.ZipEntry;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.hisp.dhis.importexport.CSVConverter;
>> import org.hisp.dhis.importexport.ExportParams;
>> @@ -69,27 +72,29 @@
>> // CSVConverter implementation
>> //
>>
>> -------------------------------------------------------------------------
>>
>> - public void write( BufferedWriter writer, ExportParams params )
>> + public void write( ZipOutputStream out, ExportParams params )
>> {
>> try
>> {
>> - for ( Integer id : params.getReportTables() ) //TODO more
>> than one?
>> + for ( Integer id : params.getReportTables() )
>> {
>> + out.putNextEntry( new ZipEntry( "ReportTable" + id +
>> CSV_EXTENSION ) );
>> +
>> ReportTableData data =
>> reportTableService.getReportTableData( id, params.getFormat() );
>>
>> Iterator<String> columns =
>> data.getPrettyPrintColumns().iterator();
>>
>> while ( columns.hasNext() )
>> {
>> - writer.write( csvEncode( columns.next() ) );
>> + out.write( csvEncode( columns.next() ).getBytes()
>> );
>>
>> if ( columns.hasNext() )
>> {
>> - writer.write( SEPARATOR );
>> + out.write( SEPARATOR_B );
>> }
>> }
>>
>> - writer.newLine();
>> + out.write( NEWLINE );
>>
>> for ( SortedMap<Integer, String> row : data.getRows()
>> )
>> {
>> @@ -97,15 +102,15 @@
>>
>> while ( values.hasNext() )
>> {
>> - writer.write( csvEncode( values.next() ) );
>> + out.write( csvEncode( values.next()
>> ).getBytes()
>> );
>>
>> if ( values.hasNext() )
>> {
>> - writer.write( SEPARATOR );
>> + out.write( SEPARATOR_B );
>> }
>> }
>>
>> - writer.newLine();
>> + out.write( NEWLINE );
>> }
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,9 +27,9 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> -import java.io.BufferedWriter;
>> import java.util.ArrayList;
>> import java.util.List;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>> @@ -48,13 +48,6 @@
>> {
>> private static final Log log = LogFactory.getLog(
>> CSVExportPipeThread.class );
>>
>> - private BufferedWriter writer;
>> -
>> - public void setWriter( BufferedWriter writer )
>> - {
>> - this.writer = writer;
>> - }
>> -
>> private ExportParams params;
>>
>> public void setParams( ExportParams params )
>> @@ -62,6 +55,13 @@
>> this.params = params;
>> }
>>
>> + private ZipOutputStream outputStream;
>> +
>> + public void setOutputStream( ZipOutputStream outputStream )
>> + {
>> + this.outputStream = outputStream;
>> + }
>> +
>> private List<CSVConverter> converters = new
>> ArrayList<CSVConverter>();
>>
>> public void registerCSVConverter( CSVConverter converter )
>> @@ -90,14 +90,18 @@
>>
>> for ( CSVConverter converter : converters )
>> {
>> - converter.write( writer, params );
>> + converter.write( outputStream, params );
>> }
>>
>> log.info( "Export finished" );
>> }
>> + catch ( Exception ex )
>> + {
>> + throw new RuntimeException( ex );
>> + }
>> finally
>> {
>> - StreamUtils.closeWriter( writer );
>> + StreamUtils.closeOutputStream( outputStream );
>> }
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> 2010-02-08 10:56:08 +0000
>> @@ -28,13 +28,11 @@
>> */
>>
>> import java.io.BufferedInputStream;
>> -import java.io.BufferedWriter;
>> +import java.io.BufferedOutputStream;
>> import java.io.IOException;
>> import java.io.InputStream;
>> -import java.io.OutputStreamWriter;
>> import java.io.PipedInputStream;
>> import java.io.PipedOutputStream;
>> -import java.util.zip.ZipEntry;
>> import java.util.zip.ZipOutputStream;
>>
>> import org.hibernate.SessionFactory;
>> @@ -50,8 +48,6 @@
>> public class DefaultCSVExportService
>> implements ExportService
>> {
>> - private static final String ZIP_ENTRY_NAME = "Export.csv";
>> -
>> //
>>
>> -------------------------------------------------------------------------
>> // Dependencies
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -87,20 +83,18 @@
>>
>> PipedInputStream in = new PipedInputStream( out );
>>
>> - ZipOutputStream zipOut = new ZipOutputStream( out );
>> + ZipOutputStream zipOut = new ZipOutputStream( new
>> BufferedOutputStream( out ) );
>>
>> - zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
>> + //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
>>
>> - BufferedWriter writer = new BufferedWriter( new
>> OutputStreamWriter( zipOut ) );
>> -
>> //
>> -----------------------------------------------------------------
>> // Writes to one end of the pipe
>> //
>> -----------------------------------------------------------------
>>
>> CSVExportPipeThread thread = new CSVExportPipeThread(
>> sessionFactory );
>>
>> - thread.setWriter( writer );
>> thread.setParams( params );
>> + thread.setOutputStream( zipOut );
>>
>> thread.registerCSVConverter( new ReportTableDataConverter(
>> reportTableService ) );
>>
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> 2009-04-16 09:53:17 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> 2010-02-08 10:56:08 +0000
>> @@ -33,15 +33,80 @@
>> */
>> public class CsvUtil
>> {
>> - public static final char SEPARATOR = ',';
>> -
>> - private static final String ENCLOSURE = "\"";
>> -
>> - public static String csvEncode( String string )
>> - {
>> - string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE
>> );
>> - string = ENCLOSURE + string + ENCLOSURE;
>> + public static final String SEPARATOR = ",";
>> + public static final byte SEPARATOR_B = SEPARATOR.getBytes();
>> + public static final byte NEWLINE = "\n".getBytes();
>> +
>> + public static final String CSV_EXTENSION = ".csv";
>> + private static final String ENCLOSURE = "\"";
>> + private static final String EMPTY = "";
>> +
>> + /**
>> + * Encodes the given value to a CSV acceptable value.
>> + *
>> + * @param value the value.
>> + * @return the CSV encoded value.
>> + */
>> + public static String csvEncode( int value )
>> + {
>> + return csvEncode( String.valueOf( value ) );
>> + }
>> +
>> + /**
>> + * Encodes the given value to a CSV acceptable value.
>> + *
>> + * @param value the value.
>> + * @return the CSV encoded value.
>> + */
>> + public static String csvEncode( String value )
>> + {
>> + if ( value == null )
>> + {
>> + value = EMPTY;
>> + }
>> + else
>> + {
>> + value = value.replaceAll( ENCLOSURE, ENCLOSURE +
>> ENCLOSURE
>> );
>> + value = ENCLOSURE + value + ENCLOSURE;
>> + }
>> +
>> + return value;
>> + }
>> +
>> + /**
>> + * Appends a separator to the value and returns the value as a
>> byte
>> array.
>> + *
>> + * @param value the value.
>> + * @return a byte araray.
>> + */
>> + public static byte getCsvValue( int value )
>> + {
>> + return getCsvEndValue( value + SEPARATOR );
>> + }
>> +
>> + /**
>> + * Appends a separator to the value and returns the value as a
>> byte
>> array.
>> + *
>> + * @param value the value.
>> + * @return a byte araray.
>> + */
>> + public static byte getCsvValue( String value )
>> + {
>> + return getCsvEndValue( value + SEPARATOR );
>> + }
>> +
>> + public static byte getCsvEndValue( int value )
>> + {
>> + return getCsvEndValue( String.valueOf( value ) );
>> + }
>> +
>> + public static byte getCsvEndValue( String value )
>> + {
>> + if ( value == null )
>> + {
>> + return EMPTY.getBytes();
>> + }
>>
>> - return string;
>> + return ( value ).getBytes();
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> 2010-02-08 07:04:26 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,17 +27,28 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
>> +
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> import java.io.IOException;
>> +import java.util.Collection;
>> import java.util.Map;
>> +import java.util.zip.ZipEntry;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.amplecode.quick.BatchHandler;
>> +import org.amplecode.quick.StatementManager;
>> import org.hisp.dhis.dataelement.DataElement;
>> import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
>> import org.hisp.dhis.dataelement.DataElementCategoryService;
>> +import org.hisp.dhis.datamart.DataMartService;
>> import org.hisp.dhis.datavalue.DataValue;
>> import org.hisp.dhis.datavalue.DataValueService;
>> +import org.hisp.dhis.datavalue.DeflatedDataValue;
>> import org.hisp.dhis.importexport.CSVConverter;
>> import org.hisp.dhis.importexport.ExportParams;
>> import org.hisp.dhis.importexport.GroupMemberType;
>> @@ -47,7 +58,10 @@
>> import
>> org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
>> import org.hisp.dhis.organisationunit.OrganisationUnit;
>> import org.hisp.dhis.period.Period;
>> +import org.hisp.dhis.period.PeriodService;
>> +import org.hisp.dhis.system.util.DateUtils;
>> import org.hisp.dhis.system.util.MimicingHashMap;
>> +import org.hisp.dhis.system.util.StreamUtils;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -57,8 +71,11 @@
>> extends AbstractDataValueConverter implements CSVConverter
>> {
>> private static final String SEPARATOR = ",";
>> + private static final String FILENAME = "RoutineData.txt";
>>
>> private DataElementCategoryService categoryService;
>> + private PeriodService periodService;
>> + private StatementManager statementManager;
>>
>> //
>>
>> -------------------------------------------------------------------------
>> // Properties
>> @@ -72,6 +89,14 @@
>> // Constructor
>> //
>>
>> -------------------------------------------------------------------------
>>
>> + public DataValueConverter( PeriodService periodService,
>> DataMartService dataMartService,
>> + StatementManager statementManager )
>> + {
>> + this.periodService = periodService;
>> + this.dataMartService = dataMartService;
>> + this.statementManager = statementManager;
>> + }
>> +
>> /**
>> * Constructor for read operations.
>> */
>> @@ -95,9 +120,81 @@
>> // CSVConverter implementation
>> //
>>
>> -------------------------------------------------------------------------
>>
>> - public void write( BufferedWriter writer, ExportParams params )
>> + public void write( ZipOutputStream out, ExportParams params )
>> {
>> - // Not implemented
>> + try
>> + {
>> + out.putNextEntry( new ZipEntry( FILENAME ) );
>> +
>> + out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
>> + out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
>> + out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
>> + out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryText" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
>> + out.write( getCsvValue( csvEncode( "Check" ) ) );
>> + out.write( getCsvValue( csvEncode( "Verified" ) ) );
>> + out.write( getCsvValue( csvEncode( "Deleted" ) ) );
>> + out.write( getCsvValue( csvEncode( "Comment" ) ) );
>> + out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
>> + out.write( getCsvEndValue( csvEncode( "LastUpdated" ) )
>> );
>> +
>> + out.write( NEWLINE );
>> +
>> + if ( params.isIncludeDataValues() )
>> + {
>> + if ( params.getStartDate() != null &&
>> params.getEndDate()
>> != null )
>> + {
>> + Collection<DeflatedDataValue> values = null;
>> +
>> + Collection<Period> periods =
>> periodService.getIntersectingPeriods( params.getStartDate(),
>> params.getEndDate() );
>> +
>> + statementManager.initialise();
>> +
>> + for ( final Integer element :
>> params.getDataElements() )
>> + {
>> + for ( final Period period : periods )
>> + {
>> + values =
>> dataMartService.getDeflatedDataValues( element, period.getId(),
>> params.getOrganisationUnits() );
>> +
>> + for ( final DeflatedDataValue value :
>> values
>> )
>> + {
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue(
>> value.getSourceId() ) );
>> + out.write( getCsvValue(
>> value.getDataElementId() ) );
>> + out.write( getCsvValue(
>> value.getPeriodId() ) );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( getCsvValue( csvEncode(
>> value.getValue() ) ) );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( csvEncode(
>> value.getComment() ) ) );
>> + out.write( getCsvValue( 1 ) );
>> + out.write( getCsvEndValue(
>> DateUtils.getAccessDateString( value.getTimestamp() ) ) );
>> +
>> + out.write( NEWLINE );
>> + }
>> + }
>> + }
>> +
>> + statementManager.destroy();
>> + }
>> + }
>> +
>> + StreamUtils.closeZipEntry( out );
>> + }
>> + catch ( IOException ex )
>> + {
>> + throw new RuntimeException( "Failed to write data", ex );
>> + }
>> }
>>
>> public void read( BufferedReader reader, ImportParams params )
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> 2009-11-07 14:09:00 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> 2010-02-08 10:56:08 +0000
>> @@ -35,16 +35,19 @@
>> import java.util.zip.ZipEntry;
>> import java.util.zip.ZipOutputStream;
>>
>> +import org.amplecode.quick.StatementManager;
>> import org.amplecode.staxwax.factory.XMLFactory;
>> import org.amplecode.staxwax.writer.XMLWriter;
>> import org.hibernate.SessionFactory;
>> import org.hisp.dhis.dataelement.DataElementService;
>> +import org.hisp.dhis.datamart.DataMartService;
>> import org.hisp.dhis.importexport.ExportParams;
>> import org.hisp.dhis.importexport.ExportPipeThread;
>> import org.hisp.dhis.importexport.ExportService;
>> import
>>
>> org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
>> +import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
>> @@ -60,6 +63,7 @@
>> import
>>
>> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
>> import org.hisp.dhis.indicator.IndicatorService;
>> +import org.hisp.dhis.period.PeriodService;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -100,6 +104,27 @@
>> this.indicatorService = indicatorService;
>> }
>>
>> + private PeriodService periodService;
>> +
>> + public void setPeriodService( PeriodService periodService )
>> + {
>> + this.periodService = periodService;
>> + }
>> +
>> + private DataMartService dataMartService;
>> +
>> + public void setDataMartService( DataMartService dataMartService )
>> + {
>> + this.dataMartService = dataMartService;
>> + }
>> +
>> + private StatementManager statementManager;
>> +
>> + public void setStatementManager( StatementManager
>> statementManager
>> )
>> + {
>> + this.statementManager = statementManager;
>> + }
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // ExportService implementation
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -122,7 +147,7 @@
>> zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
>>
>> XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
>> -
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Writes to one end of the pipe
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -156,6 +181,8 @@
>> thread.registerXMLConverter( new UserConverter() );
>> thread.registerXMLConverter( new UserRoleConverter() );
>>
>> + thread.registerCSVConverter( new DataValueConverter(
>> periodService, dataMartService, statementManager ) );
>> +
>> thread.start();
>>
>> //
>>
>> -------------------------------------------------------------------------
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> 2010-02-02 19:21:58 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> 2010-02-08 10:56:08 +0000
>> @@ -381,6 +381,9 @@
>> <property name="sessionFactory" ref="sessionFactory" />
>> <property name="dataElementService"
>> ref="org.hisp.dhis.dataelement.DataElementService" />
>> <property name="indicatorService"
>> ref="org.hisp.dhis.indicator.IndicatorService" />
>> + <property name="periodService"
>> ref="org.hisp.dhis.period.PeriodService" />
>> + <property name="dataMartService"
>> ref="org.hisp.dhis.datamart.DataMartService" />
>> + <property name="statementManager"
>> ref="statementManager"
>> />
>> </bean>
>>
>> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> -
>> -
>> -->
>>
>> === modified file
>>
>> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
>> ---
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> 2009-11-19 19:16:46 +0000
>> +++
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> 2010-02-08 10:56:08 +0000
>> @@ -49,6 +49,20 @@
>> public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
>>
>> /**
>> + * Formats a Date to the Access date format.
>> + *
>> + * @param date the Date to parse.
>> + * @return a formatted date string.
>> + */
>> + public static String getAccessDateString( Date date )
>> + {
>> + final SimpleDateFormat format = new SimpleDateFormat();
>> + format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
>> +
>> + return date != null ? format.format( date ) : null;
>> + }
>> +
>> + /**
>> * Formats a Date to the IXF date format which is
>> YYYY-MM-DD'T'HH:MM:SS.
>> *
>> * @param date the Date to parse.
>>
>> === modified file
>>
>> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
>> ---
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> 2009-12-19 15:20:41 +0000
>> +++
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> 2010-02-08 10:56:08 +0000
>> @@ -422,9 +422,26 @@
>> }
>>
>> /**
>> + * Closes the current ZipEntry and positions the stream for
>> writing
>> the next entry.
>> + *
>> + * @param out the ZipOutputStream.
>> + */
>> + public static void closeZipEntry( ZipOutputStream out )
>> + {
>> + try
>> + {
>> + out.closeEntry();
>> + }
>> + catch ( Exception ex )
>> + {
>> + throw new RuntimeException( "Failed to close the current
>> ZipEntry", ex );
>> + }
>> + }
>> +
>> + /**
>> * Finishes writing the contents of the ZIP output stream without
>> closing the underlying stream.
>> *
>> - * @param out the ZipOutputStream to write to.
>> + * @param out the ZipOutputStream.
>> */
>> public static void finishZipEntry( ZipOutputStream out )
>> {
>> @@ -434,7 +451,7 @@
>> }
>> catch ( Exception ex )
>> {
>> - throw new RuntimeException( "Failed to finish
>> ZipOutputStream", ex );
>> + throw new RuntimeException( "Failed to finish the content
>> of
>> the ZipOutputStream", ex );
>> }
>> }
>>
>>
>> === modified file
>>
>> 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
>> ---
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> 2010-01-27 21:45:11 +0000
>> +++
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> 2010-02-08 10:56:08 +0000
>> @@ -146,6 +146,7 @@
>> import_from_other_systems = Import from other systems
>> DHIS14_import = DHIS 1.4 Import
>> DHIS14_metadata_export = DHIS 1.4 Metadata Export
>> +DHIS14_data_export = DHIS 1.4 Data Export
>> IXF_import = IXF Import
>> accept_incoming_records = Accept incoming records
>> include_datavalues = Include data values
>> @@ -442,4 +443,5 @@
>> intro_ixf_metadata_export = Do an export of meta-data or dimensional
>> data
>> describing the facts. Indicator Transmission Format (IXF) is a
>> standard
>> developed by the WHO.
>> intro_DHIS14_metadata_export = Do an export of meta-data or
>> dimensional
>> data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
>> intro_DHIS14_detailed_metadata_export = Do an export of an detailed
>> selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
>> +intro_DHIS14_data_export = Do an export of data values or facts. DHIS
>> 1.4
>> is the predecessor of DHIS 2.
>> intro_pdf_metadata_export = Portable Document Format (PDF) is a file
>> format for document exchange.
>>
>> === modified file
>>
>> 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
>> ---
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> 2010-01-28 11:51:39 +0000
>> +++
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> 2010-02-08 10:56:08 +0000
>> @@ -2,8 +2,9 @@
>> <h3>$i18n.getString( "export_to_other_systems" )</h3>
>>
>> <ul class="introList">
>> + #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=IXF"
>> "ixf_metadata_export" )
>> #introListItem(
>> "displayDataValueExportForm.action?exportFormat=IXF"
>> "ixf_data_export" )
>> - #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=IXF"
>> "ixf_metadata_export" )
>> #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_metadata_export" )
>> #introListItem(
>> "displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_detailed_metadata_export" )
>> + #introListItem(
>> "displayDataValueExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_data_export" )
>> #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=PDF"
>> "pdf_metadata_export" )
>> \ No newline at end of file
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs
>> Post to : dhis2-devs@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help : https://help.launchpad.net/ListHelp
>>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to : dhis2-devs@lists.launchpad.net
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help : https://help.launchpad.net/ListHelp
>
>

--
Sendt fra min mobile enhet

Hmm, what does this mean? We would have to convert from zip to 7z? Any
reason why DHIS 2 cannot export to 7z format?

···

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:

------------------------------------------------------------
revno: 1404
committer: Lars Helge Oeverland <larshelge@gmail.com>
branch nick: trunk
timestamp: Mon 2010-02-08 11:56:08 +0100
message:
Implemented DHIS 1.4 export of data values
modified:

There is actually still a snag here. DHIS 1.4 only accepts the 7zip/lzma
format currently. I have talked Greg into making 1.4 accept zip/deflate too.

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
2009-03-03 16:46:36 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
2010-02-08 10:56:08 +0000
@@ -28,7 +28,7 @@
*/

import java.io.BufferedReader;
-import java.io.BufferedWriter;
+import java.util.zip.ZipOutputStream;

/**
* @author Lars Helge Overland
@@ -36,7 +36,7 @@
*/
public interface CSVConverter
{
- void write( BufferedWriter writer, ExportParams params );
+ void write( ZipOutputStream out, ExportParams params );

void read\( BufferedReader reader, ImportParams params \);

}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
2009-11-02 15:55:44 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
2010-02-08 10:56:08 +0000
@@ -52,7 +52,8 @@

private List&lt;XMLConverter&gt; xsdConverters = new

ArrayList<XMLConverter>();
private List<XMLConverter> xmlConverters = new
ArrayList<XMLConverter>();
-
+ private List<CSVConverter> csvConverters = new
ArrayList<CSVConverter>();
+
//
-------------------------------------------------------------------------
// Parameters
//
-------------------------------------------------------------------------
@@ -122,6 +123,11 @@
this.xmlConverters.add( converter );
}

+ public void registerCSVConverter ( CSVConverter converter )
+ {
+ this.csvConverters.add( converter );
+ }
+
//
-------------------------------------------------------------------------
// Thread implementation
//
-------------------------------------------------------------------------
@@ -159,9 +165,20 @@
}

        afterXML\( writer \);

-
+
closeDocument( writer );
-
+
+ StreamUtils.closeZipEntry( zipOutputStream );
+
+ //
-----------------------------------------------------------------
+ // CSV
+ //
-----------------------------------------------------------------
+
+ for ( CSVConverter converter : csvConverters )
+ {
+ converter.write( zipOutputStream, params );
+ }
+
log.info( "Export done" );
}
catch ( Exception ex )
@@ -172,12 +189,10 @@
}
finally
{
- StreamUtils.finishZipEntry( zipOutputStream );
+ writer.closeWriter();

        StreamUtils\.closeOutputStream\( zipOutputStream \);

- writer.closeWriter();
-
NameMappingUtil.clearMapping();
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
2010-02-08 10:56:08 +0000
@@ -27,14 +27,17 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

-import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.SortedMap;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;
import org.hisp.dhis.importexport.ExportParams;
@@ -69,27 +72,29 @@
// CSVConverter implementation
//
-------------------------------------------------------------------------

- public void write( BufferedWriter writer, ExportParams params )
+ public void write( ZipOutputStream out, ExportParams params )
{
try
{
- for ( Integer id : params.getReportTables() ) //TODO more
than one?
+ for ( Integer id : params.getReportTables() )
{
+ out.putNextEntry( new ZipEntry( "ReportTable" + id +
CSV_EXTENSION ) );
+
ReportTableData data =
reportTableService.getReportTableData( id, params.getFormat() );

            Iterator&lt;String&gt; columns =

data.getPrettyPrintColumns().iterator();

            while \( columns\.hasNext\(\) \)
            \{

- writer.write( csvEncode( columns.next() ) );
+ out.write( csvEncode( columns.next() ).getBytes() );

                if \( columns\.hasNext\(\) \)
                \{

- writer.write( SEPARATOR );
+ out.write( SEPARATOR_B );
}
}

- writer.newLine();
+ out.write( NEWLINE );

            for \( SortedMap&lt;Integer, String&gt; row : data\.getRows\(\) \)
            \{

@@ -97,15 +102,15 @@

                while \( values\.hasNext\(\) \)
                \{

- writer.write( csvEncode( values.next() ) );
+ out.write( csvEncode( values.next() ).getBytes()
);

                    if \( values\.hasNext\(\) \)
                    \{

- writer.write( SEPARATOR );
+ out.write( SEPARATOR_B );
}
}

- writer.newLine();
+ out.write( NEWLINE );
}
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
2010-02-08 10:56:08 +0000
@@ -27,9 +27,9 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

-import java.io.BufferedWriter;
import java.util.ArrayList;
import java.util.List;
+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -48,13 +48,6 @@
{
private static final Log log = LogFactory.getLog(
CSVExportPipeThread.class );

- private BufferedWriter writer;
-
- public void setWriter( BufferedWriter writer )
- {
- this.writer = writer;
- }
-
private ExportParams params;

public void setParams\( ExportParams params \)

@@ -62,6 +55,13 @@
this.params = params;
}

+ private ZipOutputStream outputStream;
+
+ public void setOutputStream( ZipOutputStream outputStream )
+ {
+ this.outputStream = outputStream;
+ }
+
private List<CSVConverter> converters = new ArrayList<CSVConverter>();

public void registerCSVConverter\( CSVConverter converter \)

@@ -90,14 +90,18 @@

        for \( CSVConverter converter : converters \)
        \{

- converter.write( writer, params );
+ converter.write( outputStream, params );
}

        log\.info\( &quot;Export finished&quot; \);
    \}

+ catch ( Exception ex )
+ {
+ throw new RuntimeException( ex );
+ }
finally
{
- StreamUtils.closeWriter( writer );
+ StreamUtils.closeOutputStream( outputStream );
}
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
2010-02-08 10:56:08 +0000
@@ -28,13 +28,11 @@
*/

import java.io.BufferedInputStream;
-import java.io.BufferedWriter;
+import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStreamWriter;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
-import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;
@@ -50,8 +48,6 @@
public class DefaultCSVExportService
implements ExportService
{
- private static final String ZIP_ENTRY_NAME = "Export.csv";
-
//
-------------------------------------------------------------------------
// Dependencies
//
-------------------------------------------------------------------------
@@ -87,20 +83,18 @@

        PipedInputStream in = new PipedInputStream\( out \);

- ZipOutputStream zipOut = new ZipOutputStream( out );
+ ZipOutputStream zipOut = new ZipOutputStream( new
BufferedOutputStream( out ) );

- zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
+ //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );

- BufferedWriter writer = new BufferedWriter( new
OutputStreamWriter( zipOut ) );
-
//
-----------------------------------------------------------------
// Writes to one end of the pipe
//
-----------------------------------------------------------------

        CSVExportPipeThread thread = new CSVExportPipeThread\(

sessionFactory );

- thread.setWriter( writer );
thread.setParams( params );
+ thread.setOutputStream( zipOut );

        thread\.registerCSVConverter\( new ReportTableDataConverter\(

reportTableService ) );

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
2009-04-16 09:53:17 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
2010-02-08 10:56:08 +0000
@@ -33,15 +33,80 @@
*/
public class CsvUtil
{
- public static final char SEPARATOR = ',';
-
- private static final String ENCLOSURE = "\"";
-
- public static String csvEncode( String string )
- {
- string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
- string = ENCLOSURE + string + ENCLOSURE;
+ public static final String SEPARATOR = ",";
+ public static final byte SEPARATOR_B = SEPARATOR.getBytes();
+ public static final byte NEWLINE = "\n".getBytes();
+
+ public static final String CSV_EXTENSION = ".csv";
+ private static final String ENCLOSURE = "\"";
+ private static final String EMPTY = "";
+
+ /**
+ * Encodes the given value to a CSV acceptable value.
+ *
+ * @param value the value.
+ * @return the CSV encoded value.
+ */
+ public static String csvEncode( int value )
+ {
+ return csvEncode( String.valueOf( value ) );
+ }
+
+ /**
+ * Encodes the given value to a CSV acceptable value.
+ *
+ * @param value the value.
+ * @return the CSV encoded value.
+ */
+ public static String csvEncode( String value )
+ {
+ if ( value == null )
+ {
+ value = EMPTY;
+ }
+ else
+ {
+ value = value.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
+ value = ENCLOSURE + value + ENCLOSURE;
+ }
+
+ return value;
+ }
+
+ /**
+ * Appends a separator to the value and returns the value as a byte
array.
+ *
+ * @param value the value.
+ * @return a byte araray.
+ */
+ public static byte getCsvValue( int value )
+ {
+ return getCsvEndValue( value + SEPARATOR );
+ }
+
+ /**
+ * Appends a separator to the value and returns the value as a byte
array.
+ *
+ * @param value the value.
+ * @return a byte araray.
+ */
+ public static byte getCsvValue( String value )
+ {
+ return getCsvEndValue( value + SEPARATOR );
+ }
+
+ public static byte getCsvEndValue( int value )
+ {
+ return getCsvEndValue( String.valueOf( value ) );
+ }
+
+ public static byte getCsvEndValue( String value )
+ {
+ if ( value == null )
+ {
+ return EMPTY.getBytes();
+ }

- return string;
+ return ( value ).getBytes();
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
2010-02-08 07:04:26 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
2010-02-08 10:56:08 +0000
@@ -27,17 +27,28 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
+
import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.IOException;
+import java.util.Collection;
import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;
+import org.amplecode.quick.StatementManager;
import org.hisp.dhis.dataelement.DataElement;
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
import org.hisp.dhis.dataelement.DataElementCategoryService;
+import org.hisp.dhis.datamart.DataMartService;
import org.hisp.dhis.datavalue.DataValue;
import org.hisp.dhis.datavalue.DataValueService;
+import org.hisp.dhis.datavalue.DeflatedDataValue;
import org.hisp.dhis.importexport.CSVConverter;
import org.hisp.dhis.importexport.ExportParams;
import org.hisp.dhis.importexport.GroupMemberType;
@@ -47,7 +58,10 @@
import org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
import org.hisp.dhis.organisationunit.OrganisationUnit;
import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.system.util.DateUtils;
import org.hisp.dhis.system.util.MimicingHashMap;
+import org.hisp.dhis.system.util.StreamUtils;

/**
* @author Lars Helge Overland
@@ -57,8 +71,11 @@
extends AbstractDataValueConverter implements CSVConverter
{
private static final String SEPARATOR = ",";
+ private static final String FILENAME = "RoutineData.txt";

private DataElementCategoryService categoryService;

+ private PeriodService periodService;
+ private StatementManager statementManager;

//

-------------------------------------------------------------------------
// Properties
@@ -72,6 +89,14 @@
// Constructor
//
-------------------------------------------------------------------------

+ public DataValueConverter( PeriodService periodService,
DataMartService dataMartService,
+ StatementManager statementManager )
+ {
+ this.periodService = periodService;
+ this.dataMartService = dataMartService;
+ this.statementManager = statementManager;
+ }
+
/**
* Constructor for read operations.
*/
@@ -95,9 +120,81 @@
// CSVConverter implementation
//
-------------------------------------------------------------------------

- public void write( BufferedWriter writer, ExportParams params )
+ public void write( ZipOutputStream out, ExportParams params )
{
- // Not implemented
+ try
+ {
+ out.putNextEntry( new ZipEntry( FILENAME ) );
+
+ out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
+ out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
+ out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
+ out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryText" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
+ out.write( getCsvValue( csvEncode( "Check" ) ) );
+ out.write( getCsvValue( csvEncode( "Verified" ) ) );
+ out.write( getCsvValue( csvEncode( "Deleted" ) ) );
+ out.write( getCsvValue( csvEncode( "Comment" ) ) );
+ out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
+ out.write( getCsvEndValue( csvEncode( "LastUpdated" ) ) );
+
+ out.write( NEWLINE );
+
+ if ( params.isIncludeDataValues() )
+ {
+ if ( params.getStartDate() != null && params.getEndDate()
!= null )
+ {
+ Collection<DeflatedDataValue> values = null;
+
+ Collection<Period> periods =
periodService.getIntersectingPeriods( params.getStartDate(),
params.getEndDate() );
+
+ statementManager.initialise();
+
+ for ( final Integer element :
params.getDataElements() )
+ {
+ for ( final Period period : periods )
+ {
+ values =
dataMartService.getDeflatedDataValues( element, period.getId(),
params.getOrganisationUnits() );
+
+ for ( final DeflatedDataValue value : values
)
+ {
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue(
value.getSourceId() ) );
+ out.write( getCsvValue(
value.getDataElementId() ) );
+ out.write( getCsvValue(
value.getPeriodId() ) );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( getCsvValue( csvEncode(
value.getValue() ) ) );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( csvEncode(
value.getComment() ) ) );
+ out.write( getCsvValue( 1 ) );
+ out.write( getCsvEndValue(
DateUtils.getAccessDateString( value.getTimestamp() ) ) );
+
+ out.write( NEWLINE );
+ }
+ }
+ }
+
+ statementManager.destroy();
+ }
+ }
+
+ StreamUtils.closeZipEntry( out );
+ }
+ catch ( IOException ex )
+ {
+ throw new RuntimeException( "Failed to write data", ex );
+ }
}

public void read\( BufferedReader reader, ImportParams params \)

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
2009-11-07 14:09:00 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
2010-02-08 10:56:08 +0000
@@ -35,16 +35,19 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;
import org.amplecode.staxwax.factory.XMLFactory;
import org.amplecode.staxwax.writer.XMLWriter;
import org.hibernate.SessionFactory;
import org.hisp.dhis.dataelement.DataElementService;
+import org.hisp.dhis.datamart.DataMartService;
import org.hisp.dhis.importexport.ExportParams;
import org.hisp.dhis.importexport.ExportPipeThread;
import org.hisp.dhis.importexport.ExportService;
import
org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
import org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
+import
org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
@@ -60,6 +63,7 @@
import
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
import org.hisp.dhis.indicator.IndicatorService;
+import org.hisp.dhis.period.PeriodService;

/**
* @author Lars Helge Overland
@@ -100,6 +104,27 @@
this.indicatorService = indicatorService;
}

+ private PeriodService periodService;
+
+ public void setPeriodService( PeriodService periodService )
+ {
+ this.periodService = periodService;
+ }
+
+ private DataMartService dataMartService;
+
+ public void setDataMartService( DataMartService dataMartService )
+ {
+ this.dataMartService = dataMartService;
+ }
+
+ private StatementManager statementManager;
+
+ public void setStatementManager( StatementManager statementManager )
+ {
+ this.statementManager = statementManager;
+ }
+
//
-------------------------------------------------------------------------
// ExportService implementation
//
-------------------------------------------------------------------------
@@ -122,7 +147,7 @@
zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );

        XMLWriter writer = XMLFactory\.getPlainXMLWriter\( zipOut \);

-
+
//
-------------------------------------------------------------------------
// Writes to one end of the pipe
//
-------------------------------------------------------------------------
@@ -156,6 +181,8 @@
thread.registerXMLConverter( new UserConverter() );
thread.registerXMLConverter( new UserRoleConverter() );

+ thread.registerCSVConverter( new DataValueConverter(
periodService, dataMartService, statementManager ) );
+
thread.start();

        //

-------------------------------------------------------------------------

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
2010-02-02 19:21:58 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
2010-02-08 10:56:08 +0000
@@ -381,6 +381,9 @@
<property name="sessionFactory" ref="sessionFactory" />
<property name="dataElementService"
ref="org.hisp.dhis.dataelement.DataElementService" />
<property name="indicatorService"
ref="org.hisp.dhis.indicator.IndicatorService" />
+ <property name="periodService"
ref="org.hisp.dhis.period.PeriodService" />
+ <property name="dataMartService"
ref="org.hisp.dhis.datamart.DataMartService" />
+ <property name="statementManager" ref="statementManager"
/>
</bean>

   &lt;\!\-\- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \-

-->

=== modified file
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
---
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
2009-11-19 19:16:46 +0000
+++
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
2010-02-08 10:56:08 +0000
@@ -49,6 +49,20 @@
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

/\*\*

+ * Formats a Date to the Access date format.
+ *
+ * @param date the Date to parse.
+ * @return a formatted date string.
+ */
+ public static String getAccessDateString( Date date )
+ {
+ final SimpleDateFormat format = new SimpleDateFormat();
+ format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
+
+ return date != null ? format.format( date ) : null;
+ }
+
+ /**
* Formats a Date to the IXF date format which is
YYYY-MM-DD'T'HH:MM:SS.
*
* @param date the Date to parse.

=== modified file
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
---
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
2009-12-19 15:20:41 +0000
+++
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
2010-02-08 10:56:08 +0000
@@ -422,9 +422,26 @@
}

/\*\*

+ * Closes the current ZipEntry and positions the stream for writing
the next entry.
+ *
+ * @param out the ZipOutputStream.
+ */
+ public static void closeZipEntry( ZipOutputStream out )
+ {
+ try
+ {
+ out.closeEntry();
+ }
+ catch ( Exception ex )
+ {
+ throw new RuntimeException( "Failed to close the current
ZipEntry", ex );
+ }
+ }
+
+ /**
* Finishes writing the contents of the ZIP output stream without
closing the underlying stream.
*
- * @param out the ZipOutputStream to write to.
+ * @param out the ZipOutputStream.
*/
public static void finishZipEntry( ZipOutputStream out )
{
@@ -434,7 +451,7 @@
}
catch ( Exception ex )
{
- throw new RuntimeException( "Failed to finish
ZipOutputStream", ex );
+ throw new RuntimeException( "Failed to finish the content of
the ZipOutputStream", ex );
}
}

=== modified file
'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
---
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
2010-01-27 21:45:11 +0000
+++
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
2010-02-08 10:56:08 +0000
@@ -146,6 +146,7 @@
import_from_other_systems = Import from other systems
DHIS14_import = DHIS 1.4 Import
DHIS14_metadata_export = DHIS 1.4 Metadata Export
+DHIS14_data_export = DHIS 1.4 Data Export
IXF_import = IXF Import
accept_incoming_records = Accept incoming records
include_datavalues = Include data values
@@ -442,4 +443,5 @@
intro_ixf_metadata_export = Do an export of meta-data or dimensional data
describing the facts. Indicator Transmission Format (IXF) is a standard
developed by the WHO.
intro_DHIS14_metadata_export = Do an export of meta-data or dimensional
data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
intro_DHIS14_detailed_metadata_export = Do an export of an detailed
selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
+intro_DHIS14_data_export = Do an export of data values or facts. DHIS 1.4
is the predecessor of DHIS 2.
intro_pdf_metadata_export = Portable Document Format (PDF) is a file
format for document exchange.

=== modified file
'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
---
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
2010-01-28 11:51:39 +0000
+++
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
2010-02-08 10:56:08 +0000
@@ -2,8 +2,9 @@
<h3>$i18n.getString( "export_to_other_systems" )</h3>

<ul class="introList">
+ #introListItem( "displayMetaDataExportForm.action?exportFormat=IXF"
"ixf_metadata_export" )
#introListItem( "displayDataValueExportForm.action?exportFormat=IXF"
"ixf_data_export" )
- #introListItem( "displayMetaDataExportForm.action?exportFormat=IXF"
"ixf_metadata_export" )
#introListItem(
"displayMetaDataExportForm.action?exportFormat=DHIS14XML"
"DHIS14_metadata_export" )
#introListItem(
"displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
"DHIS14_detailed_metadata_export" )
+ #introListItem(
"displayDataValueExportForm.action?exportFormat=DHIS14XML"
"DHIS14_data_export" )
#introListItem( "displayMetaDataExportForm.action?exportFormat=PDF"
"pdf_metadata_export" )
\ No newline at end of file

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp

Hi Jason

Trawl back through the lists. This one has long history. But in
short it is indeed difficult to write to 7z format. There is (or
certainly wasn't) any good java lib for this.

Bob

···

2010/2/8 Jason Pickering <jason.p.pickering@gmail.com>:

Hmm, what does this mean? We would have to convert from zip to 7z? Any
reason why DHIS 2 cannot export to 7z format?

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:

------------------------------------------------------------
revno: 1404
committer: Lars Helge Oeverland <larshelge@gmail.com>
branch nick: trunk
timestamp: Mon 2010-02-08 11:56:08 +0100
message:
Implemented DHIS 1.4 export of data values
modified:

There is actually still a snag here. DHIS 1.4 only accepts the 7zip/lzma
format currently. I have talked Greg into making 1.4 accept zip/deflate too.

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

--
lp:dhis2
trunk : Code : DHIS

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
2009-03-03 16:46:36 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
2010-02-08 10:56:08 +0000
@@ -28,7 +28,7 @@
*/

import java.io.BufferedReader;
-import java.io.BufferedWriter;
+import java.util.zip.ZipOutputStream;

/**
* @author Lars Helge Overland
@@ -36,7 +36,7 @@
*/
public interface CSVConverter
{
- void write( BufferedWriter writer, ExportParams params );
+ void write( ZipOutputStream out, ExportParams params );

void read\( BufferedReader reader, ImportParams params \);

}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
2009-11-02 15:55:44 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
2010-02-08 10:56:08 +0000
@@ -52,7 +52,8 @@

private List&lt;XMLConverter&gt; xsdConverters = new

ArrayList<XMLConverter>();
private List<XMLConverter> xmlConverters = new
ArrayList<XMLConverter>();
-
+ private List<CSVConverter> csvConverters = new
ArrayList<CSVConverter>();
+
//
-------------------------------------------------------------------------
// Parameters
//
-------------------------------------------------------------------------
@@ -122,6 +123,11 @@
this.xmlConverters.add( converter );
}

+ public void registerCSVConverter ( CSVConverter converter )
+ {
+ this.csvConverters.add( converter );
+ }
+
//
-------------------------------------------------------------------------
// Thread implementation
//
-------------------------------------------------------------------------
@@ -159,9 +165,20 @@
}

        afterXML\( writer \);

-
+
closeDocument( writer );
-
+
+ StreamUtils.closeZipEntry( zipOutputStream );
+
+ //
-----------------------------------------------------------------
+ // CSV
+ //
-----------------------------------------------------------------
+
+ for ( CSVConverter converter : csvConverters )
+ {
+ converter.write( zipOutputStream, params );
+ }
+
log.info( "Export done" );
}
catch ( Exception ex )
@@ -172,12 +189,10 @@
}
finally
{
- StreamUtils.finishZipEntry( zipOutputStream );
+ writer.closeWriter();

        StreamUtils\.closeOutputStream\( zipOutputStream \);

- writer.closeWriter();
-
NameMappingUtil.clearMapping();
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
2010-02-08 10:56:08 +0000
@@ -27,14 +27,17 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

-import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.SortedMap;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;
import org.hisp.dhis.importexport.ExportParams;
@@ -69,27 +72,29 @@
// CSVConverter implementation
//
-------------------------------------------------------------------------

- public void write( BufferedWriter writer, ExportParams params )
+ public void write( ZipOutputStream out, ExportParams params )
{
try
{
- for ( Integer id : params.getReportTables() ) //TODO more
than one?
+ for ( Integer id : params.getReportTables() )
{
+ out.putNextEntry( new ZipEntry( "ReportTable" + id +
CSV_EXTENSION ) );
+
ReportTableData data =
reportTableService.getReportTableData( id, params.getFormat() );

            Iterator&lt;String&gt; columns =

data.getPrettyPrintColumns().iterator();

            while \( columns\.hasNext\(\) \)
            \{

- writer.write( csvEncode( columns.next() ) );
+ out.write( csvEncode( columns.next() ).getBytes() );

                if \( columns\.hasNext\(\) \)
                \{

- writer.write( SEPARATOR );
+ out.write( SEPARATOR_B );
}
}

- writer.newLine();
+ out.write( NEWLINE );

            for \( SortedMap&lt;Integer, String&gt; row : data\.getRows\(\) \)
            \{

@@ -97,15 +102,15 @@

                while \( values\.hasNext\(\) \)
                \{

- writer.write( csvEncode( values.next() ) );
+ out.write( csvEncode( values.next() ).getBytes()
);

                    if \( values\.hasNext\(\) \)
                    \{

- writer.write( SEPARATOR );
+ out.write( SEPARATOR_B );
}
}

- writer.newLine();
+ out.write( NEWLINE );
}
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
2010-02-08 10:56:08 +0000
@@ -27,9 +27,9 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

-import java.io.BufferedWriter;
import java.util.ArrayList;
import java.util.List;
+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -48,13 +48,6 @@
{
private static final Log log = LogFactory.getLog(
CSVExportPipeThread.class );

- private BufferedWriter writer;
-
- public void setWriter( BufferedWriter writer )
- {
- this.writer = writer;
- }
-
private ExportParams params;

public void setParams\( ExportParams params \)

@@ -62,6 +55,13 @@
this.params = params;
}

+ private ZipOutputStream outputStream;
+
+ public void setOutputStream( ZipOutputStream outputStream )
+ {
+ this.outputStream = outputStream;
+ }
+
private List<CSVConverter> converters = new ArrayList<CSVConverter>();

public void registerCSVConverter\( CSVConverter converter \)

@@ -90,14 +90,18 @@

        for \( CSVConverter converter : converters \)
        \{

- converter.write( writer, params );
+ converter.write( outputStream, params );
}

        log\.info\( &quot;Export finished&quot; \);
    \}

+ catch ( Exception ex )
+ {
+ throw new RuntimeException( ex );
+ }
finally
{
- StreamUtils.closeWriter( writer );
+ StreamUtils.closeOutputStream( outputStream );
}
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
2009-06-10 22:25:07 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
2010-02-08 10:56:08 +0000
@@ -28,13 +28,11 @@
*/

import java.io.BufferedInputStream;
-import java.io.BufferedWriter;
+import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStreamWriter;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
-import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;
@@ -50,8 +48,6 @@
public class DefaultCSVExportService
implements ExportService
{
- private static final String ZIP_ENTRY_NAME = "Export.csv";
-
//
-------------------------------------------------------------------------
// Dependencies
//
-------------------------------------------------------------------------
@@ -87,20 +83,18 @@

        PipedInputStream in = new PipedInputStream\( out \);

- ZipOutputStream zipOut = new ZipOutputStream( out );
+ ZipOutputStream zipOut = new ZipOutputStream( new
BufferedOutputStream( out ) );

- zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
+ //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );

- BufferedWriter writer = new BufferedWriter( new
OutputStreamWriter( zipOut ) );
-
//
-----------------------------------------------------------------
// Writes to one end of the pipe
//
-----------------------------------------------------------------

        CSVExportPipeThread thread = new CSVExportPipeThread\(

sessionFactory );

- thread.setWriter( writer );
thread.setParams( params );
+ thread.setOutputStream( zipOut );

        thread\.registerCSVConverter\( new ReportTableDataConverter\(

reportTableService ) );

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
2009-04-16 09:53:17 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
2010-02-08 10:56:08 +0000
@@ -33,15 +33,80 @@
*/
public class CsvUtil
{
- public static final char SEPARATOR = ',';
-
- private static final String ENCLOSURE = "\"";
-
- public static String csvEncode( String string )
- {
- string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
- string = ENCLOSURE + string + ENCLOSURE;
+ public static final String SEPARATOR = ",";
+ public static final byte SEPARATOR_B = SEPARATOR.getBytes();
+ public static final byte NEWLINE = "\n".getBytes();
+
+ public static final String CSV_EXTENSION = ".csv";
+ private static final String ENCLOSURE = "\"";
+ private static final String EMPTY = "";
+
+ /**
+ * Encodes the given value to a CSV acceptable value.
+ *
+ * @param value the value.
+ * @return the CSV encoded value.
+ */
+ public static String csvEncode( int value )
+ {
+ return csvEncode( String.valueOf( value ) );
+ }
+
+ /**
+ * Encodes the given value to a CSV acceptable value.
+ *
+ * @param value the value.
+ * @return the CSV encoded value.
+ */
+ public static String csvEncode( String value )
+ {
+ if ( value == null )
+ {
+ value = EMPTY;
+ }
+ else
+ {
+ value = value.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE );
+ value = ENCLOSURE + value + ENCLOSURE;
+ }
+
+ return value;
+ }
+
+ /**
+ * Appends a separator to the value and returns the value as a byte
array.
+ *
+ * @param value the value.
+ * @return a byte araray.
+ */
+ public static byte getCsvValue( int value )
+ {
+ return getCsvEndValue( value + SEPARATOR );
+ }
+
+ /**
+ * Appends a separator to the value and returns the value as a byte
array.
+ *
+ * @param value the value.
+ * @return a byte araray.
+ */
+ public static byte getCsvValue( String value )
+ {
+ return getCsvEndValue( value + SEPARATOR );
+ }
+
+ public static byte getCsvEndValue( int value )
+ {
+ return getCsvEndValue( String.valueOf( value ) );
+ }
+
+ public static byte getCsvEndValue( String value )
+ {
+ if ( value == null )
+ {
+ return EMPTY.getBytes();
+ }

- return string;
+ return ( value ).getBytes();
}
}

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
2010-02-08 07:04:26 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
2010-02-08 10:56:08 +0000
@@ -27,17 +27,28 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
+import static org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
+
import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.IOException;
+import java.util.Collection;
import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;
+import org.amplecode.quick.StatementManager;
import org.hisp.dhis.dataelement.DataElement;
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
import org.hisp.dhis.dataelement.DataElementCategoryService;
+import org.hisp.dhis.datamart.DataMartService;
import org.hisp.dhis.datavalue.DataValue;
import org.hisp.dhis.datavalue.DataValueService;
+import org.hisp.dhis.datavalue.DeflatedDataValue;
import org.hisp.dhis.importexport.CSVConverter;
import org.hisp.dhis.importexport.ExportParams;
import org.hisp.dhis.importexport.GroupMemberType;
@@ -47,7 +58,10 @@
import org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
import org.hisp.dhis.organisationunit.OrganisationUnit;
import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+import org.hisp.dhis.system.util.DateUtils;
import org.hisp.dhis.system.util.MimicingHashMap;
+import org.hisp.dhis.system.util.StreamUtils;

/**
* @author Lars Helge Overland
@@ -57,8 +71,11 @@
extends AbstractDataValueConverter implements CSVConverter
{
private static final String SEPARATOR = ",";
+ private static final String FILENAME = "RoutineData.txt";

private DataElementCategoryService categoryService;

+ private PeriodService periodService;
+ private StatementManager statementManager;

//

-------------------------------------------------------------------------
// Properties
@@ -72,6 +89,14 @@
// Constructor
//
-------------------------------------------------------------------------

+ public DataValueConverter( PeriodService periodService,
DataMartService dataMartService,
+ StatementManager statementManager )
+ {
+ this.periodService = periodService;
+ this.dataMartService = dataMartService;
+ this.statementManager = statementManager;
+ }
+
/**
* Constructor for read operations.
*/
@@ -95,9 +120,81 @@
// CSVConverter implementation
//
-------------------------------------------------------------------------

- public void write( BufferedWriter writer, ExportParams params )
+ public void write( ZipOutputStream out, ExportParams params )
{
- // Not implemented
+ try
+ {
+ out.putNextEntry( new ZipEntry( FILENAME ) );
+
+ out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
+ out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
+ out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
+ out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryText" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
+ out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
+ out.write( getCsvValue( csvEncode( "Check" ) ) );
+ out.write( getCsvValue( csvEncode( "Verified" ) ) );
+ out.write( getCsvValue( csvEncode( "Deleted" ) ) );
+ out.write( getCsvValue( csvEncode( "Comment" ) ) );
+ out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
+ out.write( getCsvEndValue( csvEncode( "LastUpdated" ) ) );
+
+ out.write( NEWLINE );
+
+ if ( params.isIncludeDataValues() )
+ {
+ if ( params.getStartDate() != null && params.getEndDate()
!= null )
+ {
+ Collection<DeflatedDataValue> values = null;
+
+ Collection<Period> periods =
periodService.getIntersectingPeriods( params.getStartDate(),
params.getEndDate() );
+
+ statementManager.initialise();
+
+ for ( final Integer element :
params.getDataElements() )
+ {
+ for ( final Period period : periods )
+ {
+ values =
dataMartService.getDeflatedDataValues( element, period.getId(),
params.getOrganisationUnits() );
+
+ for ( final DeflatedDataValue value : values
)
+ {
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue(
value.getSourceId() ) );
+ out.write( getCsvValue(
value.getDataElementId() ) );
+ out.write( getCsvValue(
value.getPeriodId() ) );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( getCsvValue( csvEncode(
value.getValue() ) ) );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( SEPARATOR_B );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( 0 ) );
+ out.write( getCsvValue( csvEncode(
value.getComment() ) ) );
+ out.write( getCsvValue( 1 ) );
+ out.write( getCsvEndValue(
DateUtils.getAccessDateString( value.getTimestamp() ) ) );
+
+ out.write( NEWLINE );
+ }
+ }
+ }
+
+ statementManager.destroy();
+ }
+ }
+
+ StreamUtils.closeZipEntry( out );
+ }
+ catch ( IOException ex )
+ {
+ throw new RuntimeException( "Failed to write data", ex );
+ }
}

public void read\( BufferedReader reader, ImportParams params \)

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
2009-11-07 14:09:00 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
2010-02-08 10:56:08 +0000
@@ -35,16 +35,19 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;
import org.amplecode.staxwax.factory.XMLFactory;
import org.amplecode.staxwax.writer.XMLWriter;
import org.hibernate.SessionFactory;
import org.hisp.dhis.dataelement.DataElementService;
+import org.hisp.dhis.datamart.DataMartService;
import org.hisp.dhis.importexport.ExportParams;
import org.hisp.dhis.importexport.ExportPipeThread;
import org.hisp.dhis.importexport.ExportService;
import
org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
import org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
+import
org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
@@ -60,6 +63,7 @@
import
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
import
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
import org.hisp.dhis.indicator.IndicatorService;
+import org.hisp.dhis.period.PeriodService;

/**
* @author Lars Helge Overland
@@ -100,6 +104,27 @@
this.indicatorService = indicatorService;
}

+ private PeriodService periodService;
+
+ public void setPeriodService( PeriodService periodService )
+ {
+ this.periodService = periodService;
+ }
+
+ private DataMartService dataMartService;
+
+ public void setDataMartService( DataMartService dataMartService )
+ {
+ this.dataMartService = dataMartService;
+ }
+
+ private StatementManager statementManager;
+
+ public void setStatementManager( StatementManager statementManager )
+ {
+ this.statementManager = statementManager;
+ }
+
//
-------------------------------------------------------------------------
// ExportService implementation
//
-------------------------------------------------------------------------
@@ -122,7 +147,7 @@
zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );

        XMLWriter writer = XMLFactory\.getPlainXMLWriter\( zipOut \);

-
+
//
-------------------------------------------------------------------------
// Writes to one end of the pipe
//
-------------------------------------------------------------------------
@@ -156,6 +181,8 @@
thread.registerXMLConverter( new UserConverter() );
thread.registerXMLConverter( new UserRoleConverter() );

+ thread.registerCSVConverter( new DataValueConverter(
periodService, dataMartService, statementManager ) );
+
thread.start();

        //

-------------------------------------------------------------------------

=== modified file
'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
---
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
2010-02-02 19:21:58 +0000
+++
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
2010-02-08 10:56:08 +0000
@@ -381,6 +381,9 @@
<property name="sessionFactory" ref="sessionFactory" />
<property name="dataElementService"
ref="org.hisp.dhis.dataelement.DataElementService" />
<property name="indicatorService"
ref="org.hisp.dhis.indicator.IndicatorService" />
+ <property name="periodService"
ref="org.hisp.dhis.period.PeriodService" />
+ <property name="dataMartService"
ref="org.hisp.dhis.datamart.DataMartService" />
+ <property name="statementManager" ref="statementManager"
/>
</bean>

   &lt;\!\-\- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \- \-

-->

=== modified file
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
---
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
2009-11-19 19:16:46 +0000
+++
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
2010-02-08 10:56:08 +0000
@@ -49,6 +49,20 @@
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

/\*\*

+ * Formats a Date to the Access date format.
+ *
+ * @param date the Date to parse.
+ * @return a formatted date string.
+ */
+ public static String getAccessDateString( Date date )
+ {
+ final SimpleDateFormat format = new SimpleDateFormat();
+ format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
+
+ return date != null ? format.format( date ) : null;
+ }
+
+ /**
* Formats a Date to the IXF date format which is
YYYY-MM-DD'T'HH:MM:SS.
*
* @param date the Date to parse.

=== modified file
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
---
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
2009-12-19 15:20:41 +0000
+++
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
2010-02-08 10:56:08 +0000
@@ -422,9 +422,26 @@
}

/\*\*

+ * Closes the current ZipEntry and positions the stream for writing
the next entry.
+ *
+ * @param out the ZipOutputStream.
+ */
+ public static void closeZipEntry( ZipOutputStream out )
+ {
+ try
+ {
+ out.closeEntry();
+ }
+ catch ( Exception ex )
+ {
+ throw new RuntimeException( "Failed to close the current
ZipEntry", ex );
+ }
+ }
+
+ /**
* Finishes writing the contents of the ZIP output stream without
closing the underlying stream.
*
- * @param out the ZipOutputStream to write to.
+ * @param out the ZipOutputStream.
*/
public static void finishZipEntry( ZipOutputStream out )
{
@@ -434,7 +451,7 @@
}
catch ( Exception ex )
{
- throw new RuntimeException( "Failed to finish
ZipOutputStream", ex );
+ throw new RuntimeException( "Failed to finish the content of
the ZipOutputStream", ex );
}
}

=== modified file
'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
---
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
2010-01-27 21:45:11 +0000
+++
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
2010-02-08 10:56:08 +0000
@@ -146,6 +146,7 @@
import_from_other_systems = Import from other systems
DHIS14_import = DHIS 1.4 Import
DHIS14_metadata_export = DHIS 1.4 Metadata Export
+DHIS14_data_export = DHIS 1.4 Data Export
IXF_import = IXF Import
accept_incoming_records = Accept incoming records
include_datavalues = Include data values
@@ -442,4 +443,5 @@
intro_ixf_metadata_export = Do an export of meta-data or dimensional data
describing the facts. Indicator Transmission Format (IXF) is a standard
developed by the WHO.
intro_DHIS14_metadata_export = Do an export of meta-data or dimensional
data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
intro_DHIS14_detailed_metadata_export = Do an export of an detailed
selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
+intro_DHIS14_data_export = Do an export of data values or facts. DHIS 1.4
is the predecessor of DHIS 2.
intro_pdf_metadata_export = Portable Document Format (PDF) is a file
format for document exchange.

=== modified file
'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
---
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
2010-01-28 11:51:39 +0000
+++
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
2010-02-08 10:56:08 +0000
@@ -2,8 +2,9 @@
<h3>$i18n.getString( "export_to_other_systems" )</h3>

<ul class="introList">
+ #introListItem( "displayMetaDataExportForm.action?exportFormat=IXF"
"ixf_metadata_export" )
#introListItem( "displayDataValueExportForm.action?exportFormat=IXF"
"ixf_data_export" )
- #introListItem( "displayMetaDataExportForm.action?exportFormat=IXF"
"ixf_metadata_export" )
#introListItem(
"displayMetaDataExportForm.action?exportFormat=DHIS14XML"
"DHIS14_metadata_export" )
#introListItem(
"displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
"DHIS14_detailed_metadata_export" )
+ #introListItem(
"displayDataValueExportForm.action?exportFormat=DHIS14XML"
"DHIS14_data_export" )
#introListItem( "displayMetaDataExportForm.action?exportFormat=PDF"
"pdf_metadata_export" )
\ No newline at end of file

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp

Yup agree with that just could not make it write the appropriate zip
entries that way.. Open for being enlighted here..

OK. Can't really look now but I guess it must be tricky :slight_smile: Will
maybe look later in the week. If the day comes (and I don't see it
soon) that you had an option to write to either 7z or zip format I'm
just thinking you would want the packaging decoupled from the
production of the streams.

Bob

···

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>
>
> On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:
>>
>> ------------------------------------------------------------
>> revno: 1404
>> committer: Lars Helge Oeverland <larshelge@gmail.com>
>> branch nick: trunk
>> timestamp: Mon 2010-02-08 11:56:08 +0100
>> message:
>> Implemented DHIS 1.4 export of data values
>> modified:
>
>
> There is actually still a snag here. DHIS 1.4 only accepts the
> 7zip/lzma
> format currently. I have talked Greg into making 1.4 accept zip/deflate
> too.

Isn't it better to have gzip/deflate? We are not talking about
compressing an archive of files but rather compressing a single
stream.

Also I think the original "void write( BufferedWriter writer,
ExportParams params )" might be better than "void write(
ZipOutputStream out, ExportParams params )". It seems unnecessary
that the convertor should have to know anything about zip, gzip, 7zip
or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to
later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for
meta-data and keeps both inside the archive... I was was not able to have
multiple zip entries while using the Writer..

Ah. Ok. I do remember. Then you would need an archive (zip or the
seven thing) rather a gzipped stream.

But does your CSV writer need to know that? Surely it just has an
interest in churning out csv datavalues. Some other component should
put the csv stream together with the xml stream into the zip.

Cheers
Bob

>
>>
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>
>>
>> --
>> lp:dhis2
>> trunk : Code : DHIS
>>
>> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
>> To unsubscribe from this branch go to
>>
>> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> 2009-03-03 16:46:36 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -28,7 +28,7 @@
>> */
>>
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> +import java.util.zip.ZipOutputStream;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -36,7 +36,7 @@
>> */
>> public interface CSVConverter
>> {
>> - void write( BufferedWriter writer, ExportParams params );
>> + void write( ZipOutputStream out, ExportParams params );
>>
>> void read( BufferedReader reader, ImportParams params );
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> 2009-11-02 15:55:44 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> 2010-02-08 10:56:08 +0000
>> @@ -52,7 +52,8 @@
>>
>> private List<XMLConverter> xsdConverters = new
>> ArrayList<XMLConverter>();
>> private List<XMLConverter> xmlConverters = new
>> ArrayList<XMLConverter>();
>> -
>> + private List<CSVConverter> csvConverters = new
>> ArrayList<CSVConverter>();
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Parameters
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -122,6 +123,11 @@
>> this.xmlConverters.add( converter );
>> }
>>
>> + public void registerCSVConverter ( CSVConverter converter )
>> + {
>> + this.csvConverters.add( converter );
>> + }
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Thread implementation
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -159,9 +165,20 @@
>> }
>>
>> afterXML( writer );
>> -
>> +
>> closeDocument( writer );
>> -
>> +
>> + StreamUtils.closeZipEntry( zipOutputStream );
>> +
>> + //
>> -----------------------------------------------------------------
>> + // CSV
>> + //
>> -----------------------------------------------------------------
>> +
>> + for ( CSVConverter converter : csvConverters )
>> + {
>> + converter.write( zipOutputStream, params );
>> + }
>> +
>> log.info( "Export done" );
>> }
>> catch ( Exception ex )
>> @@ -172,12 +189,10 @@
>> }
>> finally
>> {
>> - StreamUtils.finishZipEntry( zipOutputStream );
>> + writer.closeWriter();
>>
>> StreamUtils.closeOutputStream( zipOutputStream );
>>
>> - writer.closeWriter();
>> -
>> NameMappingUtil.clearMapping();
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,14 +27,17 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> -import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>>
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> import java.io.IOException;
>> import java.util.Iterator;
>> import java.util.SortedMap;
>> +import java.util.zip.ZipEntry;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.hisp.dhis.importexport.CSVConverter;
>> import org.hisp.dhis.importexport.ExportParams;
>> @@ -69,27 +72,29 @@
>> // CSVConverter implementation
>> //
>>
>> -------------------------------------------------------------------------
>>
>> - public void write( BufferedWriter writer, ExportParams params )
>> + public void write( ZipOutputStream out, ExportParams params )
>> {
>> try
>> {
>> - for ( Integer id : params.getReportTables() ) //TODO more
>> than one?
>> + for ( Integer id : params.getReportTables() )
>> {
>> + out.putNextEntry( new ZipEntry( "ReportTable" + id +
>> CSV_EXTENSION ) );
>> +
>> ReportTableData data =
>> reportTableService.getReportTableData( id, params.getFormat() );
>>
>> Iterator<String> columns =
>> data.getPrettyPrintColumns().iterator();
>>
>> while ( columns.hasNext() )
>> {
>> - writer.write( csvEncode( columns.next() ) );
>> + out.write( csvEncode( columns.next() ).getBytes()
>> );
>>
>> if ( columns.hasNext() )
>> {
>> - writer.write( SEPARATOR );
>> + out.write( SEPARATOR_B );
>> }
>> }
>>
>> - writer.newLine();
>> + out.write( NEWLINE );
>>
>> for ( SortedMap<Integer, String> row : data.getRows()
>> )
>> {
>> @@ -97,15 +102,15 @@
>>
>> while ( values.hasNext() )
>> {
>> - writer.write( csvEncode( values.next() ) );
>> + out.write( csvEncode( values.next()
>> ).getBytes()
>> );
>>
>> if ( values.hasNext() )
>> {
>> - writer.write( SEPARATOR );
>> + out.write( SEPARATOR_B );
>> }
>> }
>>
>> - writer.newLine();
>> + out.write( NEWLINE );
>> }
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,9 +27,9 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> -import java.io.BufferedWriter;
>> import java.util.ArrayList;
>> import java.util.List;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>> @@ -48,13 +48,6 @@
>> {
>> private static final Log log = LogFactory.getLog(
>> CSVExportPipeThread.class );
>>
>> - private BufferedWriter writer;
>> -
>> - public void setWriter( BufferedWriter writer )
>> - {
>> - this.writer = writer;
>> - }
>> -
>> private ExportParams params;
>>
>> public void setParams( ExportParams params )
>> @@ -62,6 +55,13 @@
>> this.params = params;
>> }
>>
>> + private ZipOutputStream outputStream;
>> +
>> + public void setOutputStream( ZipOutputStream outputStream )
>> + {
>> + this.outputStream = outputStream;
>> + }
>> +
>> private List<CSVConverter> converters = new
>> ArrayList<CSVConverter>();
>>
>> public void registerCSVConverter( CSVConverter converter )
>> @@ -90,14 +90,18 @@
>>
>> for ( CSVConverter converter : converters )
>> {
>> - converter.write( writer, params );
>> + converter.write( outputStream, params );
>> }
>>
>> log.info( "Export finished" );
>> }
>> + catch ( Exception ex )
>> + {
>> + throw new RuntimeException( ex );
>> + }
>> finally
>> {
>> - StreamUtils.closeWriter( writer );
>> + StreamUtils.closeOutputStream( outputStream );
>> }
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> 2010-02-08 10:56:08 +0000
>> @@ -28,13 +28,11 @@
>> */
>>
>> import java.io.BufferedInputStream;
>> -import java.io.BufferedWriter;
>> +import java.io.BufferedOutputStream;
>> import java.io.IOException;
>> import java.io.InputStream;
>> -import java.io.OutputStreamWriter;
>> import java.io.PipedInputStream;
>> import java.io.PipedOutputStream;
>> -import java.util.zip.ZipEntry;
>> import java.util.zip.ZipOutputStream;
>>
>> import org.hibernate.SessionFactory;
>> @@ -50,8 +48,6 @@
>> public class DefaultCSVExportService
>> implements ExportService
>> {
>> - private static final String ZIP_ENTRY_NAME = "Export.csv";
>> -
>> //
>>
>> -------------------------------------------------------------------------
>> // Dependencies
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -87,20 +83,18 @@
>>
>> PipedInputStream in = new PipedInputStream( out );
>>
>> - ZipOutputStream zipOut = new ZipOutputStream( out );
>> + ZipOutputStream zipOut = new ZipOutputStream( new
>> BufferedOutputStream( out ) );
>>
>> - zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
>> + //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
>>
>> - BufferedWriter writer = new BufferedWriter( new
>> OutputStreamWriter( zipOut ) );
>> -
>> //
>> -----------------------------------------------------------------
>> // Writes to one end of the pipe
>> //
>> -----------------------------------------------------------------
>>
>> CSVExportPipeThread thread = new CSVExportPipeThread(
>> sessionFactory );
>>
>> - thread.setWriter( writer );
>> thread.setParams( params );
>> + thread.setOutputStream( zipOut );
>>
>> thread.registerCSVConverter( new ReportTableDataConverter(
>> reportTableService ) );
>>
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> 2009-04-16 09:53:17 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> 2010-02-08 10:56:08 +0000
>> @@ -33,15 +33,80 @@
>> */
>> public class CsvUtil
>> {
>> - public static final char SEPARATOR = ',';
>> -
>> - private static final String ENCLOSURE = "\"";
>> -
>> - public static String csvEncode( String string )
>> - {
>> - string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE
>> );
>> - string = ENCLOSURE + string + ENCLOSURE;
>> + public static final String SEPARATOR = ",";
>> + public static final byte SEPARATOR_B = SEPARATOR.getBytes();
>> + public static final byte NEWLINE = "\n".getBytes();
>> +
>> + public static final String CSV_EXTENSION = ".csv";
>> + private static final String ENCLOSURE = "\"";
>> + private static final String EMPTY = "";
>> +
>> + /**
>> + * Encodes the given value to a CSV acceptable value.
>> + *
>> + * @param value the value.
>> + * @return the CSV encoded value.
>> + */
>> + public static String csvEncode( int value )
>> + {
>> + return csvEncode( String.valueOf( value ) );
>> + }
>> +
>> + /**
>> + * Encodes the given value to a CSV acceptable value.
>> + *
>> + * @param value the value.
>> + * @return the CSV encoded value.
>> + */
>> + public static String csvEncode( String value )
>> + {
>> + if ( value == null )
>> + {
>> + value = EMPTY;
>> + }
>> + else
>> + {
>> + value = value.replaceAll( ENCLOSURE, ENCLOSURE +
>> ENCLOSURE
>> );
>> + value = ENCLOSURE + value + ENCLOSURE;
>> + }
>> +
>> + return value;
>> + }
>> +
>> + /**
>> + * Appends a separator to the value and returns the value as a
>> byte
>> array.
>> + *
>> + * @param value the value.
>> + * @return a byte araray.
>> + */
>> + public static byte getCsvValue( int value )
>> + {
>> + return getCsvEndValue( value + SEPARATOR );
>> + }
>> +
>> + /**
>> + * Appends a separator to the value and returns the value as a
>> byte
>> array.
>> + *
>> + * @param value the value.
>> + * @return a byte araray.
>> + */
>> + public static byte getCsvValue( String value )
>> + {
>> + return getCsvEndValue( value + SEPARATOR );
>> + }
>> +
>> + public static byte getCsvEndValue( int value )
>> + {
>> + return getCsvEndValue( String.valueOf( value ) );
>> + }
>> +
>> + public static byte getCsvEndValue( String value )
>> + {
>> + if ( value == null )
>> + {
>> + return EMPTY.getBytes();
>> + }
>>
>> - return string;
>> + return ( value ).getBytes();
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> 2010-02-08 07:04:26 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,17 +27,28 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
>> +
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> import java.io.IOException;
>> +import java.util.Collection;
>> import java.util.Map;
>> +import java.util.zip.ZipEntry;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.amplecode.quick.BatchHandler;
>> +import org.amplecode.quick.StatementManager;
>> import org.hisp.dhis.dataelement.DataElement;
>> import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
>> import org.hisp.dhis.dataelement.DataElementCategoryService;
>> +import org.hisp.dhis.datamart.DataMartService;
>> import org.hisp.dhis.datavalue.DataValue;
>> import org.hisp.dhis.datavalue.DataValueService;
>> +import org.hisp.dhis.datavalue.DeflatedDataValue;
>> import org.hisp.dhis.importexport.CSVConverter;
>> import org.hisp.dhis.importexport.ExportParams;
>> import org.hisp.dhis.importexport.GroupMemberType;
>> @@ -47,7 +58,10 @@
>> import
>> org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
>> import org.hisp.dhis.organisationunit.OrganisationUnit;
>> import org.hisp.dhis.period.Period;
>> +import org.hisp.dhis.period.PeriodService;
>> +import org.hisp.dhis.system.util.DateUtils;
>> import org.hisp.dhis.system.util.MimicingHashMap;
>> +import org.hisp.dhis.system.util.StreamUtils;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -57,8 +71,11 @@
>> extends AbstractDataValueConverter implements CSVConverter
>> {
>> private static final String SEPARATOR = ",";
>> + private static final String FILENAME = "RoutineData.txt";
>>
>> private DataElementCategoryService categoryService;
>> + private PeriodService periodService;
>> + private StatementManager statementManager;
>>
>> //
>>
>> -------------------------------------------------------------------------
>> // Properties
>> @@ -72,6 +89,14 @@
>> // Constructor
>> //
>>
>> -------------------------------------------------------------------------
>>
>> + public DataValueConverter( PeriodService periodService,
>> DataMartService dataMartService,
>> + StatementManager statementManager )
>> + {
>> + this.periodService = periodService;
>> + this.dataMartService = dataMartService;
>> + this.statementManager = statementManager;
>> + }
>> +
>> /**
>> * Constructor for read operations.
>> */
>> @@ -95,9 +120,81 @@
>> // CSVConverter implementation
>> //
>>
>> -------------------------------------------------------------------------
>>
>> - public void write( BufferedWriter writer, ExportParams params )
>> + public void write( ZipOutputStream out, ExportParams params )
>> {
>> - // Not implemented
>> + try
>> + {
>> + out.putNextEntry( new ZipEntry( FILENAME ) );
>> +
>> + out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
>> + out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
>> + out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
>> + out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryText" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
>> + out.write( getCsvValue( csvEncode( "Check" ) ) );
>> + out.write( getCsvValue( csvEncode( "Verified" ) ) );
>> + out.write( getCsvValue( csvEncode( "Deleted" ) ) );
>> + out.write( getCsvValue( csvEncode( "Comment" ) ) );
>> + out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
>> + out.write( getCsvEndValue( csvEncode( "LastUpdated" ) )
>> );
>> +
>> + out.write( NEWLINE );
>> +
>> + if ( params.isIncludeDataValues() )
>> + {
>> + if ( params.getStartDate() != null &&
>> params.getEndDate()
>> != null )
>> + {
>> + Collection<DeflatedDataValue> values = null;
>> +
>> + Collection<Period> periods =
>> periodService.getIntersectingPeriods( params.getStartDate(),
>> params.getEndDate() );
>> +
>> + statementManager.initialise();
>> +
>> + for ( final Integer element :
>> params.getDataElements() )
>> + {
>> + for ( final Period period : periods )
>> + {
>> + values =
>> dataMartService.getDeflatedDataValues( element, period.getId(),
>> params.getOrganisationUnits() );
>> +
>> + for ( final DeflatedDataValue value :
>> values
>> )
>> + {
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue(
>> value.getSourceId() ) );
>> + out.write( getCsvValue(
>> value.getDataElementId() ) );
>> + out.write( getCsvValue(
>> value.getPeriodId() ) );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( getCsvValue( csvEncode(
>> value.getValue() ) ) );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( csvEncode(
>> value.getComment() ) ) );
>> + out.write( getCsvValue( 1 ) );
>> + out.write( getCsvEndValue(
>> DateUtils.getAccessDateString( value.getTimestamp() ) ) );
>> +
>> + out.write( NEWLINE );
>> + }
>> + }
>> + }
>> +
>> + statementManager.destroy();
>> + }
>> + }
>> +
>> + StreamUtils.closeZipEntry( out );
>> + }
>> + catch ( IOException ex )
>> + {
>> + throw new RuntimeException( "Failed to write data", ex );
>> + }
>> }
>>
>> public void read( BufferedReader reader, ImportParams params )
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> 2009-11-07 14:09:00 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> 2010-02-08 10:56:08 +0000
>> @@ -35,16 +35,19 @@
>> import java.util.zip.ZipEntry;
>> import java.util.zip.ZipOutputStream;
>>
>> +import org.amplecode.quick.StatementManager;
>> import org.amplecode.staxwax.factory.XMLFactory;
>> import org.amplecode.staxwax.writer.XMLWriter;
>> import org.hibernate.SessionFactory;
>> import org.hisp.dhis.dataelement.DataElementService;
>> +import org.hisp.dhis.datamart.DataMartService;
>> import org.hisp.dhis.importexport.ExportParams;
>> import org.hisp.dhis.importexport.ExportPipeThread;
>> import org.hisp.dhis.importexport.ExportService;
>> import
>>
>> org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
>> +import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
>> @@ -60,6 +63,7 @@
>> import
>>
>> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
>> import org.hisp.dhis.indicator.IndicatorService;
>> +import org.hisp.dhis.period.PeriodService;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -100,6 +104,27 @@
>> this.indicatorService = indicatorService;
>> }
>>
>> + private PeriodService periodService;
>> +
>> + public void setPeriodService( PeriodService periodService )
>> + {
>> + this.periodService = periodService;
>> + }
>> +
>> + private DataMartService dataMartService;
>> +
>> + public void setDataMartService( DataMartService dataMartService )
>> + {
>> + this.dataMartService = dataMartService;
>> + }
>> +
>> + private StatementManager statementManager;
>> +
>> + public void setStatementManager( StatementManager
>> statementManager
>> )
>> + {
>> + this.statementManager = statementManager;
>> + }
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // ExportService implementation
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -122,7 +147,7 @@
>> zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
>>
>> XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
>> -
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Writes to one end of the pipe
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -156,6 +181,8 @@
>> thread.registerXMLConverter( new UserConverter() );
>> thread.registerXMLConverter( new UserRoleConverter() );
>>
>> + thread.registerCSVConverter( new DataValueConverter(
>> periodService, dataMartService, statementManager ) );
>> +
>> thread.start();
>>
>> //
>>
>> -------------------------------------------------------------------------
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> 2010-02-02 19:21:58 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> 2010-02-08 10:56:08 +0000
>> @@ -381,6 +381,9 @@
>> <property name="sessionFactory" ref="sessionFactory" />
>> <property name="dataElementService"
>> ref="org.hisp.dhis.dataelement.DataElementService" />
>> <property name="indicatorService"
>> ref="org.hisp.dhis.indicator.IndicatorService" />
>> + <property name="periodService"
>> ref="org.hisp.dhis.period.PeriodService" />
>> + <property name="dataMartService"
>> ref="org.hisp.dhis.datamart.DataMartService" />
>> + <property name="statementManager"
>> ref="statementManager"
>> />
>> </bean>
>>
>> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> -
>> -
>> -->
>>
>> === modified file
>>
>> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
>> ---
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> 2009-11-19 19:16:46 +0000
>> +++
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> 2010-02-08 10:56:08 +0000
>> @@ -49,6 +49,20 @@
>> public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
>>
>> /**
>> + * Formats a Date to the Access date format.
>> + *
>> + * @param date the Date to parse.
>> + * @return a formatted date string.
>> + */
>> + public static String getAccessDateString( Date date )
>> + {
>> + final SimpleDateFormat format = new SimpleDateFormat();
>> + format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
>> +
>> + return date != null ? format.format( date ) : null;
>> + }
>> +
>> + /**
>> * Formats a Date to the IXF date format which is
>> YYYY-MM-DD'T'HH:MM:SS.
>> *
>> * @param date the Date to parse.
>>
>> === modified file
>>
>> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
>> ---
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> 2009-12-19 15:20:41 +0000
>> +++
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> 2010-02-08 10:56:08 +0000
>> @@ -422,9 +422,26 @@
>> }
>>
>> /**
>> + * Closes the current ZipEntry and positions the stream for
>> writing
>> the next entry.
>> + *
>> + * @param out the ZipOutputStream.
>> + */
>> + public static void closeZipEntry( ZipOutputStream out )
>> + {
>> + try
>> + {
>> + out.closeEntry();
>> + }
>> + catch ( Exception ex )
>> + {
>> + throw new RuntimeException( "Failed to close the current
>> ZipEntry", ex );
>> + }
>> + }
>> +
>> + /**
>> * Finishes writing the contents of the ZIP output stream without
>> closing the underlying stream.
>> *
>> - * @param out the ZipOutputStream to write to.
>> + * @param out the ZipOutputStream.
>> */
>> public static void finishZipEntry( ZipOutputStream out )
>> {
>> @@ -434,7 +451,7 @@
>> }
>> catch ( Exception ex )
>> {
>> - throw new RuntimeException( "Failed to finish
>> ZipOutputStream", ex );
>> + throw new RuntimeException( "Failed to finish the content
>> of
>> the ZipOutputStream", ex );
>> }
>> }
>>
>>
>> === modified file
>>
>> 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
>> ---
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> 2010-01-27 21:45:11 +0000
>> +++
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> 2010-02-08 10:56:08 +0000
>> @@ -146,6 +146,7 @@
>> import_from_other_systems = Import from other systems
>> DHIS14_import = DHIS 1.4 Import
>> DHIS14_metadata_export = DHIS 1.4 Metadata Export
>> +DHIS14_data_export = DHIS 1.4 Data Export
>> IXF_import = IXF Import
>> accept_incoming_records = Accept incoming records
>> include_datavalues = Include data values
>> @@ -442,4 +443,5 @@
>> intro_ixf_metadata_export = Do an export of meta-data or dimensional
>> data
>> describing the facts. Indicator Transmission Format (IXF) is a
>> standard
>> developed by the WHO.
>> intro_DHIS14_metadata_export = Do an export of meta-data or
>> dimensional
>> data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
>> intro_DHIS14_detailed_metadata_export = Do an export of an detailed
>> selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
>> +intro_DHIS14_data_export = Do an export of data values or facts. DHIS
>> 1.4
>> is the predecessor of DHIS 2.
>> intro_pdf_metadata_export = Portable Document Format (PDF) is a file
>> format for document exchange.
>>
>> === modified file
>>
>> 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
>> ---
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> 2010-01-28 11:51:39 +0000
>> +++
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> 2010-02-08 10:56:08 +0000
>> @@ -2,8 +2,9 @@
>> <h3>$i18n.getString( "export_to_other_systems" )</h3>
>>
>> <ul class="introList">
>> + #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=IXF"
>> "ixf_metadata_export" )
>> #introListItem(
>> "displayDataValueExportForm.action?exportFormat=IXF"
>> "ixf_data_export" )
>> - #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=IXF"
>> "ixf_metadata_export" )
>> #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_metadata_export" )
>> #introListItem(
>> "displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_detailed_metadata_export" )
>> + #introListItem(
>> "displayDataValueExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_data_export" )
>> #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=PDF"
>> "pdf_metadata_export" )
>> \ No newline at end of file
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs
>> Post to : dhis2-devs@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help : https://help.launchpad.net/ListHelp
>>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to : dhis2-devs@lists.launchpad.net
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help : https://help.launchpad.net/ListHelp
>
>

--
Sendt fra min mobile enhet

No clue if this is possible, but if the user was to provide a path to
a native OS executable, could DHIS push the job off to this?

···

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>:

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

Yup agree with that just could not make it write the appropriate zip
entries that way.. Open for being enlighted here..

OK. Can't really look now but I guess it must be tricky :slight_smile: Will
maybe look later in the week. If the day comes (and I don't see it
soon) that you had an option to write to either 7z or zip format I'm
just thinking you would want the packaging decoupled from the
production of the streams.

Bob

2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>

2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>
>
> On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:
>>
>> ------------------------------------------------------------
>> revno: 1404
>> committer: Lars Helge Oeverland <larshelge@gmail.com>
>> branch nick: trunk
>> timestamp: Mon 2010-02-08 11:56:08 +0100
>> message:
>> Implemented DHIS 1.4 export of data values
>> modified:
>
>
> There is actually still a snag here. DHIS 1.4 only accepts the
> 7zip/lzma
> format currently. I have talked Greg into making 1.4 accept zip/deflate
> too.

Isn't it better to have gzip/deflate? We are not talking about
compressing an archive of files but rather compressing a single
stream.

Also I think the original "void write( BufferedWriter writer,
ExportParams params )" might be better than "void write(
ZipOutputStream out, ExportParams params )". It seems unnecessary
that the convertor should have to know anything about zip, gzip, 7zip
or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to
later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for
meta-data and keeps both inside the archive... I was was not able to have
multiple zip entries while using the Writer..

Ah. Ok. I do remember. Then you would need an archive (zip or the
seven thing) rather a gzipped stream.

But does your CSV writer need to know that? Surely it just has an
interest in churning out csv datavalues. Some other component should
put the csv stream together with the xml stream into the zip.

Cheers
Bob

>
>>
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>
>>
>> --
>> lp:dhis2
>> trunk : Code : DHIS
>>
>> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
>> To unsubscribe from this branch go to
>>
>> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> 2009-03-03 16:46:36 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -28,7 +28,7 @@
>> */
>>
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> +import java.util.zip.ZipOutputStream;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -36,7 +36,7 @@
>> */
>> public interface CSVConverter
>> {
>> - void write( BufferedWriter writer, ExportParams params );
>> + void write( ZipOutputStream out, ExportParams params );
>>
>> void read( BufferedReader reader, ImportParams params );
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> 2009-11-02 15:55:44 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> 2010-02-08 10:56:08 +0000
>> @@ -52,7 +52,8 @@
>>
>> private List<XMLConverter> xsdConverters = new
>> ArrayList<XMLConverter>();
>> private List<XMLConverter> xmlConverters = new
>> ArrayList<XMLConverter>();
>> -
>> + private List<CSVConverter> csvConverters = new
>> ArrayList<CSVConverter>();
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Parameters
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -122,6 +123,11 @@
>> this.xmlConverters.add( converter );
>> }
>>
>> + public void registerCSVConverter ( CSVConverter converter )
>> + {
>> + this.csvConverters.add( converter );
>> + }
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Thread implementation
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -159,9 +165,20 @@
>> }
>>
>> afterXML( writer );
>> -
>> +
>> closeDocument( writer );
>> -
>> +
>> + StreamUtils.closeZipEntry( zipOutputStream );
>> +
>> + //
>> -----------------------------------------------------------------
>> + // CSV
>> + //
>> -----------------------------------------------------------------
>> +
>> + for ( CSVConverter converter : csvConverters )
>> + {
>> + converter.write( zipOutputStream, params );
>> + }
>> +
>> log.info( "Export done" );
>> }
>> catch ( Exception ex )
>> @@ -172,12 +189,10 @@
>> }
>> finally
>> {
>> - StreamUtils.finishZipEntry( zipOutputStream );
>> + writer.closeWriter();
>>
>> StreamUtils.closeOutputStream( zipOutputStream );
>>
>> - writer.closeWriter();
>> -
>> NameMappingUtil.clearMapping();
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,14 +27,17 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> -import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>>
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> import java.io.IOException;
>> import java.util.Iterator;
>> import java.util.SortedMap;
>> +import java.util.zip.ZipEntry;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.hisp.dhis.importexport.CSVConverter;
>> import org.hisp.dhis.importexport.ExportParams;
>> @@ -69,27 +72,29 @@
>> // CSVConverter implementation
>> //
>>
>> -------------------------------------------------------------------------
>>
>> - public void write( BufferedWriter writer, ExportParams params )
>> + public void write( ZipOutputStream out, ExportParams params )
>> {
>> try
>> {
>> - for ( Integer id : params.getReportTables() ) //TODO more
>> than one?
>> + for ( Integer id : params.getReportTables() )
>> {
>> + out.putNextEntry( new ZipEntry( "ReportTable" + id +
>> CSV_EXTENSION ) );
>> +
>> ReportTableData data =
>> reportTableService.getReportTableData( id, params.getFormat() );
>>
>> Iterator<String> columns =
>> data.getPrettyPrintColumns().iterator();
>>
>> while ( columns.hasNext() )
>> {
>> - writer.write( csvEncode( columns.next() ) );
>> + out.write( csvEncode( columns.next() ).getBytes()
>> );
>>
>> if ( columns.hasNext() )
>> {
>> - writer.write( SEPARATOR );
>> + out.write( SEPARATOR_B );
>> }
>> }
>>
>> - writer.newLine();
>> + out.write( NEWLINE );
>>
>> for ( SortedMap<Integer, String> row : data.getRows()
>> )
>> {
>> @@ -97,15 +102,15 @@
>>
>> while ( values.hasNext() )
>> {
>> - writer.write( csvEncode( values.next() ) );
>> + out.write( csvEncode( values.next()
>> ).getBytes()
>> );
>>
>> if ( values.hasNext() )
>> {
>> - writer.write( SEPARATOR );
>> + out.write( SEPARATOR_B );
>> }
>> }
>>
>> - writer.newLine();
>> + out.write( NEWLINE );
>> }
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,9 +27,9 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> -import java.io.BufferedWriter;
>> import java.util.ArrayList;
>> import java.util.List;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.apache.commons.logging.Log;
>> import org.apache.commons.logging.LogFactory;
>> @@ -48,13 +48,6 @@
>> {
>> private static final Log log = LogFactory.getLog(
>> CSVExportPipeThread.class );
>>
>> - private BufferedWriter writer;
>> -
>> - public void setWriter( BufferedWriter writer )
>> - {
>> - this.writer = writer;
>> - }
>> -
>> private ExportParams params;
>>
>> public void setParams( ExportParams params )
>> @@ -62,6 +55,13 @@
>> this.params = params;
>> }
>>
>> + private ZipOutputStream outputStream;
>> +
>> + public void setOutputStream( ZipOutputStream outputStream )
>> + {
>> + this.outputStream = outputStream;
>> + }
>> +
>> private List<CSVConverter> converters = new
>> ArrayList<CSVConverter>();
>>
>> public void registerCSVConverter( CSVConverter converter )
>> @@ -90,14 +90,18 @@
>>
>> for ( CSVConverter converter : converters )
>> {
>> - converter.write( writer, params );
>> + converter.write( outputStream, params );
>> }
>>
>> log.info( "Export finished" );
>> }
>> + catch ( Exception ex )
>> + {
>> + throw new RuntimeException( ex );
>> + }
>> finally
>> {
>> - StreamUtils.closeWriter( writer );
>> + StreamUtils.closeOutputStream( outputStream );
>> }
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> 2009-06-10 22:25:07 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> 2010-02-08 10:56:08 +0000
>> @@ -28,13 +28,11 @@
>> */
>>
>> import java.io.BufferedInputStream;
>> -import java.io.BufferedWriter;
>> +import java.io.BufferedOutputStream;
>> import java.io.IOException;
>> import java.io.InputStream;
>> -import java.io.OutputStreamWriter;
>> import java.io.PipedInputStream;
>> import java.io.PipedOutputStream;
>> -import java.util.zip.ZipEntry;
>> import java.util.zip.ZipOutputStream;
>>
>> import org.hibernate.SessionFactory;
>> @@ -50,8 +48,6 @@
>> public class DefaultCSVExportService
>> implements ExportService
>> {
>> - private static final String ZIP_ENTRY_NAME = "Export.csv";
>> -
>> //
>>
>> -------------------------------------------------------------------------
>> // Dependencies
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -87,20 +83,18 @@
>>
>> PipedInputStream in = new PipedInputStream( out );
>>
>> - ZipOutputStream zipOut = new ZipOutputStream( out );
>> + ZipOutputStream zipOut = new ZipOutputStream( new
>> BufferedOutputStream( out ) );
>>
>> - zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
>> + //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
>>
>> - BufferedWriter writer = new BufferedWriter( new
>> OutputStreamWriter( zipOut ) );
>> -
>> //
>> -----------------------------------------------------------------
>> // Writes to one end of the pipe
>> //
>> -----------------------------------------------------------------
>>
>> CSVExportPipeThread thread = new CSVExportPipeThread(
>> sessionFactory );
>>
>> - thread.setWriter( writer );
>> thread.setParams( params );
>> + thread.setOutputStream( zipOut );
>>
>> thread.registerCSVConverter( new ReportTableDataConverter(
>> reportTableService ) );
>>
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> 2009-04-16 09:53:17 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> 2010-02-08 10:56:08 +0000
>> @@ -33,15 +33,80 @@
>> */
>> public class CsvUtil
>> {
>> - public static final char SEPARATOR = ',';
>> -
>> - private static final String ENCLOSURE = "\"";
>> -
>> - public static String csvEncode( String string )
>> - {
>> - string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE
>> );
>> - string = ENCLOSURE + string + ENCLOSURE;
>> + public static final String SEPARATOR = ",";
>> + public static final byte SEPARATOR_B = SEPARATOR.getBytes();
>> + public static final byte NEWLINE = "\n".getBytes();
>> +
>> + public static final String CSV_EXTENSION = ".csv";
>> + private static final String ENCLOSURE = "\"";
>> + private static final String EMPTY = "";
>> +
>> + /**
>> + * Encodes the given value to a CSV acceptable value.
>> + *
>> + * @param value the value.
>> + * @return the CSV encoded value.
>> + */
>> + public static String csvEncode( int value )
>> + {
>> + return csvEncode( String.valueOf( value ) );
>> + }
>> +
>> + /**
>> + * Encodes the given value to a CSV acceptable value.
>> + *
>> + * @param value the value.
>> + * @return the CSV encoded value.
>> + */
>> + public static String csvEncode( String value )
>> + {
>> + if ( value == null )
>> + {
>> + value = EMPTY;
>> + }
>> + else
>> + {
>> + value = value.replaceAll( ENCLOSURE, ENCLOSURE +
>> ENCLOSURE
>> );
>> + value = ENCLOSURE + value + ENCLOSURE;
>> + }
>> +
>> + return value;
>> + }
>> +
>> + /**
>> + * Appends a separator to the value and returns the value as a
>> byte
>> array.
>> + *
>> + * @param value the value.
>> + * @return a byte araray.
>> + */
>> + public static byte getCsvValue( int value )
>> + {
>> + return getCsvEndValue( value + SEPARATOR );
>> + }
>> +
>> + /**
>> + * Appends a separator to the value and returns the value as a
>> byte
>> array.
>> + *
>> + * @param value the value.
>> + * @return a byte araray.
>> + */
>> + public static byte getCsvValue( String value )
>> + {
>> + return getCsvEndValue( value + SEPARATOR );
>> + }
>> +
>> + public static byte getCsvEndValue( int value )
>> + {
>> + return getCsvEndValue( String.valueOf( value ) );
>> + }
>> +
>> + public static byte getCsvEndValue( String value )
>> + {
>> + if ( value == null )
>> + {
>> + return EMPTY.getBytes();
>> + }
>>
>> - return string;
>> + return ( value ).getBytes();
>> }
>> }
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> 2010-02-08 07:04:26 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> 2010-02-08 10:56:08 +0000
>> @@ -27,17 +27,28 @@
>> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>> */
>>
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> +import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
>> +import static
>> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
>> +
>> import java.io.BufferedReader;
>> -import java.io.BufferedWriter;
>> import java.io.IOException;
>> +import java.util.Collection;
>> import java.util.Map;
>> +import java.util.zip.ZipEntry;
>> +import java.util.zip.ZipOutputStream;
>>
>> import org.amplecode.quick.BatchHandler;
>> +import org.amplecode.quick.StatementManager;
>> import org.hisp.dhis.dataelement.DataElement;
>> import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
>> import org.hisp.dhis.dataelement.DataElementCategoryService;
>> +import org.hisp.dhis.datamart.DataMartService;
>> import org.hisp.dhis.datavalue.DataValue;
>> import org.hisp.dhis.datavalue.DataValueService;
>> +import org.hisp.dhis.datavalue.DeflatedDataValue;
>> import org.hisp.dhis.importexport.CSVConverter;
>> import org.hisp.dhis.importexport.ExportParams;
>> import org.hisp.dhis.importexport.GroupMemberType;
>> @@ -47,7 +58,10 @@
>> import
>> org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
>> import org.hisp.dhis.organisationunit.OrganisationUnit;
>> import org.hisp.dhis.period.Period;
>> +import org.hisp.dhis.period.PeriodService;
>> +import org.hisp.dhis.system.util.DateUtils;
>> import org.hisp.dhis.system.util.MimicingHashMap;
>> +import org.hisp.dhis.system.util.StreamUtils;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -57,8 +71,11 @@
>> extends AbstractDataValueConverter implements CSVConverter
>> {
>> private static final String SEPARATOR = ",";
>> + private static final String FILENAME = "RoutineData.txt";
>>
>> private DataElementCategoryService categoryService;
>> + private PeriodService periodService;
>> + private StatementManager statementManager;
>>
>> //
>>
>> -------------------------------------------------------------------------
>> // Properties
>> @@ -72,6 +89,14 @@
>> // Constructor
>> //
>>
>> -------------------------------------------------------------------------
>>
>> + public DataValueConverter( PeriodService periodService,
>> DataMartService dataMartService,
>> + StatementManager statementManager )
>> + {
>> + this.periodService = periodService;
>> + this.dataMartService = dataMartService;
>> + this.statementManager = statementManager;
>> + }
>> +
>> /**
>> * Constructor for read operations.
>> */
>> @@ -95,9 +120,81 @@
>> // CSVConverter implementation
>> //
>>
>> -------------------------------------------------------------------------
>>
>> - public void write( BufferedWriter writer, ExportParams params )
>> + public void write( ZipOutputStream out, ExportParams params )
>> {
>> - // Not implemented
>> + try
>> + {
>> + out.putNextEntry( new ZipEntry( FILENAME ) );
>> +
>> + out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
>> + out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
>> + out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
>> + out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryText" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
>> + out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
>> + out.write( getCsvValue( csvEncode( "Check" ) ) );
>> + out.write( getCsvValue( csvEncode( "Verified" ) ) );
>> + out.write( getCsvValue( csvEncode( "Deleted" ) ) );
>> + out.write( getCsvValue( csvEncode( "Comment" ) ) );
>> + out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
>> + out.write( getCsvEndValue( csvEncode( "LastUpdated" ) )
>> );
>> +
>> + out.write( NEWLINE );
>> +
>> + if ( params.isIncludeDataValues() )
>> + {
>> + if ( params.getStartDate() != null &&
>> params.getEndDate()
>> != null )
>> + {
>> + Collection<DeflatedDataValue> values = null;
>> +
>> + Collection<Period> periods =
>> periodService.getIntersectingPeriods( params.getStartDate(),
>> params.getEndDate() );
>> +
>> + statementManager.initialise();
>> +
>> + for ( final Integer element :
>> params.getDataElements() )
>> + {
>> + for ( final Period period : periods )
>> + {
>> + values =
>> dataMartService.getDeflatedDataValues( element, period.getId(),
>> params.getOrganisationUnits() );
>> +
>> + for ( final DeflatedDataValue value :
>> values
>> )
>> + {
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue(
>> value.getSourceId() ) );
>> + out.write( getCsvValue(
>> value.getDataElementId() ) );
>> + out.write( getCsvValue(
>> value.getPeriodId() ) );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( getCsvValue( csvEncode(
>> value.getValue() ) ) );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( SEPARATOR_B );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( 0 ) );
>> + out.write( getCsvValue( csvEncode(
>> value.getComment() ) ) );
>> + out.write( getCsvValue( 1 ) );
>> + out.write( getCsvEndValue(
>> DateUtils.getAccessDateString( value.getTimestamp() ) ) );
>> +
>> + out.write( NEWLINE );
>> + }
>> + }
>> + }
>> +
>> + statementManager.destroy();
>> + }
>> + }
>> +
>> + StreamUtils.closeZipEntry( out );
>> + }
>> + catch ( IOException ex )
>> + {
>> + throw new RuntimeException( "Failed to write data", ex );
>> + }
>> }
>>
>> public void read( BufferedReader reader, ImportParams params )
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> 2009-11-07 14:09:00 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> 2010-02-08 10:56:08 +0000
>> @@ -35,16 +35,19 @@
>> import java.util.zip.ZipEntry;
>> import java.util.zip.ZipOutputStream;
>>
>> +import org.amplecode.quick.StatementManager;
>> import org.amplecode.staxwax.factory.XMLFactory;
>> import org.amplecode.staxwax.writer.XMLWriter;
>> import org.hibernate.SessionFactory;
>> import org.hisp.dhis.dataelement.DataElementService;
>> +import org.hisp.dhis.datamart.DataMartService;
>> import org.hisp.dhis.importexport.ExportParams;
>> import org.hisp.dhis.importexport.ExportPipeThread;
>> import org.hisp.dhis.importexport.ExportService;
>> import
>>
>> org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
>> +import
>> org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
>> @@ -60,6 +63,7 @@
>> import
>>
>> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
>> import
>> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
>> import org.hisp.dhis.indicator.IndicatorService;
>> +import org.hisp.dhis.period.PeriodService;
>>
>> /**
>> * @author Lars Helge Overland
>> @@ -100,6 +104,27 @@
>> this.indicatorService = indicatorService;
>> }
>>
>> + private PeriodService periodService;
>> +
>> + public void setPeriodService( PeriodService periodService )
>> + {
>> + this.periodService = periodService;
>> + }
>> +
>> + private DataMartService dataMartService;
>> +
>> + public void setDataMartService( DataMartService dataMartService )
>> + {
>> + this.dataMartService = dataMartService;
>> + }
>> +
>> + private StatementManager statementManager;
>> +
>> + public void setStatementManager( StatementManager
>> statementManager
>> )
>> + {
>> + this.statementManager = statementManager;
>> + }
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // ExportService implementation
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -122,7 +147,7 @@
>> zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
>>
>> XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
>> -
>> +
>> //
>>
>> -------------------------------------------------------------------------
>> // Writes to one end of the pipe
>> //
>>
>> -------------------------------------------------------------------------
>> @@ -156,6 +181,8 @@
>> thread.registerXMLConverter( new UserConverter() );
>> thread.registerXMLConverter( new UserRoleConverter() );
>>
>> + thread.registerCSVConverter( new DataValueConverter(
>> periodService, dataMartService, statementManager ) );
>> +
>> thread.start();
>>
>> //
>>
>> -------------------------------------------------------------------------
>>
>> === modified file
>>
>> 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
>> ---
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> 2010-02-02 19:21:58 +0000
>> +++
>>
>> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> 2010-02-08 10:56:08 +0000
>> @@ -381,6 +381,9 @@
>> <property name="sessionFactory" ref="sessionFactory" />
>> <property name="dataElementService"
>> ref="org.hisp.dhis.dataelement.DataElementService" />
>> <property name="indicatorService"
>> ref="org.hisp.dhis.indicator.IndicatorService" />
>> + <property name="periodService"
>> ref="org.hisp.dhis.period.PeriodService" />
>> + <property name="dataMartService"
>> ref="org.hisp.dhis.datamart.DataMartService" />
>> + <property name="statementManager"
>> ref="statementManager"
>> />
>> </bean>
>>
>> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>> -
>> -
>> -->
>>
>> === modified file
>>
>> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
>> ---
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> 2009-11-19 19:16:46 +0000
>> +++
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> 2010-02-08 10:56:08 +0000
>> @@ -49,6 +49,20 @@
>> public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
>>
>> /**
>> + * Formats a Date to the Access date format.
>> + *
>> + * @param date the Date to parse.
>> + * @return a formatted date string.
>> + */
>> + public static String getAccessDateString( Date date )
>> + {
>> + final SimpleDateFormat format = new SimpleDateFormat();
>> + format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
>> +
>> + return date != null ? format.format( date ) : null;
>> + }
>> +
>> + /**
>> * Formats a Date to the IXF date format which is
>> YYYY-MM-DD'T'HH:MM:SS.
>> *
>> * @param date the Date to parse.
>>
>> === modified file
>>
>> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
>> ---
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> 2009-12-19 15:20:41 +0000
>> +++
>>
>> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> 2010-02-08 10:56:08 +0000
>> @@ -422,9 +422,26 @@
>> }
>>
>> /**
>> + * Closes the current ZipEntry and positions the stream for
>> writing
>> the next entry.
>> + *
>> + * @param out the ZipOutputStream.
>> + */
>> + public static void closeZipEntry( ZipOutputStream out )
>> + {
>> + try
>> + {
>> + out.closeEntry();
>> + }
>> + catch ( Exception ex )
>> + {
>> + throw new RuntimeException( "Failed to close the current
>> ZipEntry", ex );
>> + }
>> + }
>> +
>> + /**
>> * Finishes writing the contents of the ZIP output stream without
>> closing the underlying stream.
>> *
>> - * @param out the ZipOutputStream to write to.
>> + * @param out the ZipOutputStream.
>> */
>> public static void finishZipEntry( ZipOutputStream out )
>> {
>> @@ -434,7 +451,7 @@
>> }
>> catch ( Exception ex )
>> {
>> - throw new RuntimeException( "Failed to finish
>> ZipOutputStream", ex );
>> + throw new RuntimeException( "Failed to finish the content
>> of
>> the ZipOutputStream", ex );
>> }
>> }
>>
>>
>> === modified file
>>
>> 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
>> ---
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> 2010-01-27 21:45:11 +0000
>> +++
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> 2010-02-08 10:56:08 +0000
>> @@ -146,6 +146,7 @@
>> import_from_other_systems = Import from other systems
>> DHIS14_import = DHIS 1.4 Import
>> DHIS14_metadata_export = DHIS 1.4 Metadata Export
>> +DHIS14_data_export = DHIS 1.4 Data Export
>> IXF_import = IXF Import
>> accept_incoming_records = Accept incoming records
>> include_datavalues = Include data values
>> @@ -442,4 +443,5 @@
>> intro_ixf_metadata_export = Do an export of meta-data or dimensional
>> data
>> describing the facts. Indicator Transmission Format (IXF) is a
>> standard
>> developed by the WHO.
>> intro_DHIS14_metadata_export = Do an export of meta-data or
>> dimensional
>> data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
>> intro_DHIS14_detailed_metadata_export = Do an export of an detailed
>> selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
>> +intro_DHIS14_data_export = Do an export of data values or facts. DHIS
>> 1.4
>> is the predecessor of DHIS 2.
>> intro_pdf_metadata_export = Portable Document Format (PDF) is a file
>> format for document exchange.
>>
>> === modified file
>>
>> 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
>> ---
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> 2010-01-28 11:51:39 +0000
>> +++
>>
>> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> 2010-02-08 10:56:08 +0000
>> @@ -2,8 +2,9 @@
>> <h3>$i18n.getString( "export_to_other_systems" )</h3>
>>
>> <ul class="introList">
>> + #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=IXF"
>> "ixf_metadata_export" )
>> #introListItem(
>> "displayDataValueExportForm.action?exportFormat=IXF"
>> "ixf_data_export" )
>> - #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=IXF"
>> "ixf_metadata_export" )
>> #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_metadata_export" )
>> #introListItem(
>> "displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_detailed_metadata_export" )
>> + #introListItem(
>> "displayDataValueExportForm.action?exportFormat=DHIS14XML"
>> "DHIS14_data_export" )
>> #introListItem(
>> "displayMetaDataExportForm.action?exportFormat=PDF"
>> "pdf_metadata_export" )
>> \ No newline at end of file
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs
>> Post to : dhis2-devs@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help : https://help.launchpad.net/ListHelp
>>
>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to : dhis2-devs@lists.launchpad.net
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help : https://help.launchpad.net/ListHelp
>
>

--
Sendt fra min mobile enhet

By 7z does one mean LZMA?? There are some FOSS ways to write LZMA for sure

···

Regards,
Saptarshi PURKAYASTHA
Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com

You Live by CHOICE, Not by CHANCE

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

Yup agree with that just could not make it write the appropriate zip

entries that way… Open for being enlighted here…

OK. Can’t really look now but I guess it must be tricky :slight_smile: Will

maybe look later in the week. If the day comes (and I don’t see it

soon) that you had an option to write to either 7z or zip format I’m

just thinking you would want the packaging decoupled from the

production of the streams.

Bob

2010/2/8, Bob Jolliffe bobjolliffe@gmail.com:

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

On Mon, Feb 8, 2010 at 11:59 AM, noreply@launchpad.net wrote:


revno: 1404

committer: Lars Helge Oeverland larshelge@gmail.com

branch nick: trunk

timestamp: Mon 2010-02-08 11:56:08 +0100

message:

Implemented DHIS 1.4 export of data values

modified:

There is actually still a snag here. DHIS 1.4 only accepts the

7zip/lzma

format currently. I have talked Greg into making 1.4 accept zip/deflate

too.

Isn’t it better to have gzip/deflate? We are not talking about

compressing an archive of files but rather compressing a single

stream.

Also I think the original "void write( BufferedWriter writer,

ExportParams params )" might be better than "void write(

ZipOutputStream out, ExportParams params )". It seems unnecessary

that the convertor should have to know anything about zip, gzip, 7zip

or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to

later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for

meta-data and keeps both inside the archive… I was was not able to have

multiple zip entries while using the Writer…

Ah. Ok. I do remember. Then you would need an archive (zip or the

seven thing) rather a gzipped stream.

But does your CSV writer need to know that? Surely it just has an

interest in churning out csv datavalues. Some other component should

put the csv stream together with the xml stream into the zip.

Cheers

Bob

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

lp:dhis2

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.

To unsubscribe from this branch go to

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2009-03-03 16:46:36 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2010-02-08 10:56:08 +0000

@@ -28,7 +28,7 @@

*/

import java.io.BufferedReader;

-import java.io.BufferedWriter;

+import java.util.zip.ZipOutputStream;

/**

  • @author Lars Helge Overland

@@ -36,7 +36,7 @@

*/

public interface CSVConverter

{

  • void write( BufferedWriter writer, ExportParams params );
  • void write( ZipOutputStream out, ExportParams params );
void read( BufferedReader reader, ImportParams params );

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2009-11-02 15:55:44 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -52,7 +52,8 @@

private List<XMLConverter> xsdConverters = new

ArrayList();

private List<XMLConverter> xmlConverters = new

ArrayList();

  • private List csvConverters = new

ArrayList();

//

// Parameters
//

@@ -122,6 +123,11 @@

    this.xmlConverters.add( converter );
}
  • public void registerCSVConverter ( CSVConverter converter )
  • {
  •    this.csvConverters.add( converter );
    
  • }
//

// Thread implementation
//

@@ -159,9 +165,20 @@

        }
        afterXML( writer );
        closeDocument( writer );
  •        StreamUtils.closeZipEntry( zipOutputStream );
    
  •        //
    

  •        // CSV
    
  •        //
    

  •        for ( CSVConverter converter : csvConverters )
    
  •        {
    
  •            converter.write( zipOutputStream, params );
    
  •        }
    
        [log.info](http://log.info)( "Export done" );
    }
    catch ( Exception ex )

@@ -172,12 +189,10 @@

    }
    finally
    {
  •        StreamUtils.finishZipEntry( zipOutputStream );
    
  •        writer.closeWriter();
    
        StreamUtils.closeOutputStream( zipOutputStream );
  •        writer.closeWriter();
    
        NameMappingUtil.clearMapping();
    }
}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2010-02-08 10:56:08 +0000

@@ -27,14 +27,17 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

import java.util.Iterator;

import java.util.SortedMap;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

@@ -69,27 +72,29 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )
{
    try
    {
  •        for ( Integer id : params.getReportTables() ) //TODO more
    

than one?

  •        for ( Integer id : params.getReportTables() )
    
        {
  •            out.putNextEntry( new ZipEntry( "ReportTable" + id +
    

CSV_EXTENSION ) );

            ReportTableData data =

reportTableService.getReportTableData( id, params.getFormat() );

            Iterator<String> columns =

data.getPrettyPrintColumns().iterator();

            while ( columns.hasNext() )
            {
  •                writer.write( csvEncode( columns.next() ) );
    
  •                out.write( csvEncode( columns.next() ).getBytes()
    

);

                if ( columns.hasNext() )
                {
  •                    writer.write( SEPARATOR );
    
  •                    out.write( SEPARATOR_B );
    
                }
            }
  •            writer.newLine();
    
  •            out.write( NEWLINE );
    
            for ( SortedMap<Integer, String> row : data.getRows()

)

            {

@@ -97,15 +102,15 @@

                while ( values.hasNext() )
                {
  •                    writer.write( csvEncode( values.next() ) );
    
  •                    out.write( csvEncode( values.next()
    

).getBytes()

);

                    if ( values.hasNext() )
                    {
  •                        writer.write( SEPARATOR );
    
  •                        out.write( SEPARATOR_B );
    
                    }
                }
  •                writer.newLine();
    
  •                out.write( NEWLINE );
    
            }
        }
    }

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -27,9 +27,9 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import java.io.BufferedWriter;

import java.util.ArrayList;

import java.util.List;

+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

@@ -48,13 +48,6 @@

{

private static final Log log = LogFactory.getLog(

CSVExportPipeThread.class );

  • private BufferedWriter writer;
  • public void setWriter( BufferedWriter writer )
  • {
  •    this.writer = writer;
    
  • }
private ExportParams params;
public void setParams( ExportParams params )

@@ -62,6 +55,13 @@

    this.params = params;
}
  • private ZipOutputStream outputStream;
  • public void setOutputStream( ZipOutputStream outputStream )
  • {
  •    this.outputStream = outputStream;
    
  • }
private List<CSVConverter> converters = new

ArrayList();

public void registerCSVConverter( CSVConverter converter )

@@ -90,14 +90,18 @@

        for ( CSVConverter converter : converters )
        {
  •            converter.write( writer, params );
    
  •            converter.write( outputStream, params );
    
        }
        [log.info](http://log.info)( "Export finished" );
    }
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( ex );
    
  •    }
    
    finally
    {
  •        StreamUtils.closeWriter( writer );
    
  •        StreamUtils.closeOutputStream( outputStream );
    
    }
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2010-02-08 10:56:08 +0000

@@ -28,13 +28,11 @@

*/

import java.io.BufferedInputStream;

-import java.io.BufferedWriter;

+import java.io.BufferedOutputStream;

import java.io.IOException;

import java.io.InputStream;

-import java.io.OutputStreamWriter;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

-import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;

@@ -50,8 +48,6 @@

public class DefaultCSVExportService

implements ExportService

{

  • private static final String ZIP_ENTRY_NAME = “Export.csv”;
//

// Dependencies
//

@@ -87,20 +83,18 @@

        PipedInputStream in = new PipedInputStream( out );
  •        ZipOutputStream zipOut = new ZipOutputStream( out );
    
  •        ZipOutputStream zipOut = new ZipOutputStream( new
    

BufferedOutputStream( out ) );

  •        zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        BufferedWriter writer = new BufferedWriter( new
    

OutputStreamWriter( zipOut ) );

        //

        // Writes to one end of the pipe
        //

        CSVExportPipeThread thread = new CSVExportPipeThread(

sessionFactory );

  •        thread.setWriter( writer );
    
        thread.setParams( params );
  •        thread.setOutputStream( zipOut );
    
        thread.registerCSVConverter( new ReportTableDataConverter(

reportTableService ) );

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2009-04-16 09:53:17 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2010-02-08 10:56:08 +0000

@@ -33,15 +33,80 @@

*/

public class CsvUtil

{

  • public static final char SEPARATOR = ‘,’;
  • private static final String ENCLOSURE = “"”;
  • public static String csvEncode( String string )
  • {
  •    string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE
    

);

  •    string = ENCLOSURE + string + ENCLOSURE;
    
  • public static final String SEPARATOR = “,”;
  • public static final byte SEPARATOR_B = SEPARATOR.getBytes();
  • public static final byte NEWLINE = “\n”.getBytes();
  • public static final String CSV_EXTENSION = “.csv”;
  • private static final String ENCLOSURE = “"”;
  • private static final String EMPTY = “”;
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( int value )
  • {
  •    return csvEncode( String.valueOf( value ) );
    
  • }
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        value = EMPTY;
    
  •    }
    
  •    else
    
  •    {
    
  •        value = value.replaceAll( ENCLOSURE, ENCLOSURE +
    

ENCLOSURE

);

  •        value = ENCLOSURE + value + ENCLOSURE;
    
  •    }
    
  •    return value;
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as a
    

byte

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( int value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as a
    

byte

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( String value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • public static byte getCsvEndValue( int value )
  • {
  •    return getCsvEndValue( String.valueOf( value ) );
    
  • }
  • public static byte getCsvEndValue( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        return EMPTY.getBytes();
    
  •    }
    
  •    return string;
    
  •    return ( value ).getBytes();
    
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 07:04:26 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 10:56:08 +0000

@@ -27,17 +27,28 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

+import java.util.Collection;

import java.util.Map;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;

+import org.amplecode.quick.StatementManager;

import org.hisp.dhis.dataelement.DataElement;

import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;

import org.hisp.dhis.dataelement.DataElementCategoryService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.datavalue.DataValue;

import org.hisp.dhis.datavalue.DataValueService;

+import org.hisp.dhis.datavalue.DeflatedDataValue;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.GroupMemberType;

@@ -47,7 +58,10 @@

import

org.hisp.dhis.importexport.converter.AbstractDataValueConverter;

import org.hisp.dhis.organisationunit.OrganisationUnit;

import org.hisp.dhis.period.Period;

+import org.hisp.dhis.period.PeriodService;

+import org.hisp.dhis.system.util.DateUtils;

import org.hisp.dhis.system.util.MimicingHashMap;

+import org.hisp.dhis.system.util.StreamUtils;

/**

  • @author Lars Helge Overland

@@ -57,8 +71,11 @@

extends AbstractDataValueConverter implements CSVConverter

{

private static final String SEPARATOR = ",";
  • private static final String FILENAME = “RoutineData.txt”;
private DataElementCategoryService categoryService;
  • private PeriodService periodService;
  • private StatementManager statementManager;
//

// Properties

@@ -72,6 +89,14 @@

// Constructor
//

  • public DataValueConverter( PeriodService periodService,

DataMartService dataMartService,

  •    StatementManager statementManager )
    
  • {
  •    this.periodService = periodService;
    
  •    this.dataMartService = dataMartService;
    
  •    this.statementManager = statementManager;
    
  • }
/**
 * Constructor for read operations.
 */

@@ -95,9 +120,81 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )
{
  •    // Not implemented
    
  •    try
    
  •    {
    
  •        out.putNextEntry( new ZipEntry( FILENAME ) );
    
  •        out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryText" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Check" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Verified" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Deleted" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Comment" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
    
  •        out.write( getCsvEndValue( csvEncode( "LastUpdated" ) )
    

);

  •        out.write( NEWLINE );
    
  •        if ( params.isIncludeDataValues() )
    
  •        {
    
  •            if ( params.getStartDate() != null &&
    

params.getEndDate()

!= null )

  •            {
    
  •                Collection<DeflatedDataValue> values = null;
    
  •                Collection<Period> periods =
    

periodService.getIntersectingPeriods( params.getStartDate(),

params.getEndDate() );

  •                statementManager.initialise();
    
  •                for ( final Integer element :
    

params.getDataElements() )

  •                {
    
  •                    for ( final Period period : periods )
    
  •                    {
    
  •                        values =
    

dataMartService.getDeflatedDataValues( element, period.getId(),

params.getOrganisationUnits() );

  •                        for ( final DeflatedDataValue value :
    

values

)

  •                        {
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue(
    

value.getSourceId() ) );

  •                            out.write( getCsvValue(
    

value.getDataElementId() ) );

  •                            out.write( getCsvValue(
    

value.getPeriodId() ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( csvEncode(
    

value.getValue() ) ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( csvEncode(
    

value.getComment() ) ) );

  •                            out.write( getCsvValue( 1 ) );
    
  •                            out.write( getCsvEndValue(
    

DateUtils.getAccessDateString( value.getTimestamp() ) ) );

  •                            out.write( NEWLINE );
    
  •                        }
    
  •                    }
    
  •                }
    
  •                statementManager.destroy();
    
  •            }
    
  •        }
    
  •        StreamUtils.closeZipEntry( out );
    
  •    }
    
  •    catch ( IOException ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to write data", ex );
    
  •    }
    
}
public void read( BufferedReader reader, ImportParams params )

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2009-11-07 14:09:00 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2010-02-08 10:56:08 +0000

@@ -35,16 +35,19 @@

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;

import org.amplecode.staxwax.factory.XMLFactory;

import org.amplecode.staxwax.writer.XMLWriter;

import org.hibernate.SessionFactory;

import org.hisp.dhis.dataelement.DataElementService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.ExportPipeThread;

import org.hisp.dhis.importexport.ExportService;

import

org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;

+import

org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;

@@ -60,6 +63,7 @@

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;

import org.hisp.dhis.indicator.IndicatorService;

+import org.hisp.dhis.period.PeriodService;

/**

  • @author Lars Helge Overland

@@ -100,6 +104,27 @@

    this.indicatorService = indicatorService;
}
  • private PeriodService periodService;
  • public void setPeriodService( PeriodService periodService )
  • {
  •    this.periodService = periodService;
    
  • }
  • private DataMartService dataMartService;
  • public void setDataMartService( DataMartService dataMartService )
  • {
  •    this.dataMartService = dataMartService;
    
  • }
  • private StatementManager statementManager;
  • public void setStatementManager( StatementManager

statementManager

)

  • {
  •    this.statementManager = statementManager;
    
  • }
//

// ExportService implementation
//

@@ -122,7 +147,7 @@

        zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
        XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
        //

        // Writes to one end of the pipe
        //

@@ -156,6 +181,8 @@

        thread.registerXMLConverter( new UserConverter() );
        thread.registerXMLConverter( new UserRoleConverter() );
  •        thread.registerCSVConverter( new DataValueConverter(
    

periodService, dataMartService, statementManager ) );

        thread.start();
        //

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml’


dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-02 19:21:58 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-08 10:56:08 +0000

@@ -381,6 +381,9 @@

           <property name="sessionFactory" ref="sessionFactory" />
           <property name="dataElementService"

ref=“org.hisp.dhis.dataelement.DataElementService” />

           <property name="indicatorService"

ref=“org.hisp.dhis.indicator.IndicatorService” />

  •           <property name="periodService"
    

ref=“org.hisp.dhis.period.PeriodService” />

  •           <property name="dataMartService"
    

ref=“org.hisp.dhis.datamart.DataMartService” />

  •           <property name="statementManager"
    

ref=“statementManager”

/>

   </bean>
   <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2009-11-19 19:16:46 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2010-02-08 10:56:08 +0000

@@ -49,6 +49,20 @@

public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/**
  • * Formats a Date to the Access date format.
    
  • *
    
  • * @param date the Date to parse.
    
  • * @return a formatted date string.
    
  • */
    
  • public static String getAccessDateString( Date date )
  • {
  •    final SimpleDateFormat format = new SimpleDateFormat();
    
  •    format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
    
  •    return date != null ? format.format( date ) : null;
    
  • }
  • /**
 * Formats a Date to the IXF date format which is

YYYY-MM-DD’T’HH:MM:SS.

 *
 * @param date the Date to parse.

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2009-12-19 15:20:41 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2010-02-08 10:56:08 +0000

@@ -422,9 +422,26 @@

}
/**
  • * Closes the current ZipEntry and positions the stream for
    

writing

the next entry.

  • *
    
  • * @param out the ZipOutputStream.
    
  • */
    
  • public static void closeZipEntry( ZipOutputStream out )
  • {
  •    try
    
  •    {
    
  •        out.closeEntry();
    
  •    }
    
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to close the current
    

ZipEntry", ex );

  •    }
    
  • }
  • /**
 * Finishes writing the contents of the ZIP output stream without

closing the underlying stream.

 *
  • * @param out the ZipOutputStream to write to.
    
  • * @param out the ZipOutputStream.
    
 */
public static void finishZipEntry( ZipOutputStream out )
{

@@ -434,7 +451,7 @@

    }
    catch ( Exception ex )
    {
  •        throw new RuntimeException( "Failed to finish
    

ZipOutputStream", ex );

  •        throw new RuntimeException( "Failed to finish the content
    

of

the ZipOutputStream", ex );

    }
}

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties’


dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-01-27 21:45:11 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-02-08 10:56:08 +0000

@@ -146,6 +146,7 @@

import_from_other_systems = Import from other systems

DHIS14_import = DHIS 1.4 Import

DHIS14_metadata_export = DHIS 1.4 Metadata Export

+DHIS14_data_export = DHIS 1.4 Data Export

IXF_import = IXF Import

accept_incoming_records = Accept incoming records

include_datavalues = Include data values

@@ -442,4 +443,5 @@

intro_ixf_metadata_export = Do an export of meta-data or dimensional

data

describing the facts. Indicator Transmission Format (IXF) is a

standard

developed by the WHO.

intro_DHIS14_metadata_export = Do an export of meta-data or

dimensional

data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.

intro_DHIS14_detailed_metadata_export = Do an export of an detailed

selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.

+intro_DHIS14_data_export = Do an export of data values or facts. DHIS

1.4

is the predecessor of DHIS 2.

intro_pdf_metadata_export = Portable Document Format (PDF) is a file

format for document exchange.

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm’


dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-01-28 11:51:39 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-02-08 10:56:08 +0000

@@ -2,8 +2,9 @@

$i18n.getString( "export_to_other_systems" )

  • #introListItem(

“displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayDataValueExportForm.action?exportFormat=IXF”

“ixf_data_export” )

  • #introListItem(

“displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_metadata_export” )

#introListItem(

“displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_detailed_metadata_export” )

  • #introListItem(

“displayDataValueExportForm.action?exportFormat=DHIS14XML”

“DHIS14_data_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=PDF”

“pdf_metadata_export” )

\ No newline at end of file


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

Sendt fra min mobile enhet


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

Looks like it:

"Java source code for LZMA compression and decompression"

http://www.7-zip.org/sdk.html

···

On Mon, Feb 8, 2010 at 6:18 PM, Saptarshi Purkayastha sunbiz@gmail.com wrote:

By 7z does one mean LZMA?? There are some FOSS ways to write LZMA for sure


Regards,
Saptarshi PURKAYASTHA
Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com

You Live by CHOICE, Not by CHANCE

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

Yup agree with that just could not make it write the appropriate zip

entries that way… Open for being enlighted here…

OK. Can’t really look now but I guess it must be tricky :slight_smile: Will

maybe look later in the week. If the day comes (and I don’t see it

soon) that you had an option to write to either 7z or zip format I’m

just thinking you would want the packaging decoupled from the

production of the streams.

Bob

2010/2/8, Bob Jolliffe bobjolliffe@gmail.com:

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

On Mon, Feb 8, 2010 at 11:59 AM, noreply@launchpad.net wrote:


revno: 1404

committer: Lars Helge Oeverland larshelge@gmail.com

branch nick: trunk

timestamp: Mon 2010-02-08 11:56:08 +0100

message:

Implemented DHIS 1.4 export of data values

modified:

There is actually still a snag here. DHIS 1.4 only accepts the

7zip/lzma

format currently. I have talked Greg into making 1.4 accept zip/deflate

too.

Isn’t it better to have gzip/deflate? We are not talking about

compressing an archive of files but rather compressing a single

stream.

Also I think the original "void write( BufferedWriter writer,

ExportParams params )" might be better than "void write(

ZipOutputStream out, ExportParams params )". It seems unnecessary

that the convertor should have to know anything about zip, gzip, 7zip

or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to

later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for

meta-data and keeps both inside the archive… I was was not able to have

multiple zip entries while using the Writer…

Ah. Ok. I do remember. Then you would need an archive (zip or the

seven thing) rather a gzipped stream.

But does your CSV writer need to know that? Surely it just has an

interest in churning out csv datavalues. Some other component should

put the csv stream together with the xml stream into the zip.

Cheers

Bob

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

lp:dhis2

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.

To unsubscribe from this branch go to

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2009-03-03 16:46:36 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2010-02-08 10:56:08 +0000

@@ -28,7 +28,7 @@

*/

import java.io.BufferedReader;

-import java.io.BufferedWriter;

+import java.util.zip.ZipOutputStream;

/**

  • @author Lars Helge Overland

@@ -36,7 +36,7 @@

*/

public interface CSVConverter

{

  • void write( BufferedWriter writer, ExportParams params );
  • void write( ZipOutputStream out, ExportParams params );
void read( BufferedReader reader, ImportParams params );

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2009-11-02 15:55:44 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -52,7 +52,8 @@

private List<XMLConverter> xsdConverters = new

ArrayList();

private List<XMLConverter> xmlConverters = new

ArrayList();

  • private List csvConverters = new

ArrayList();

//

// Parameters
//

@@ -122,6 +123,11 @@

    this.xmlConverters.add( converter );
}
  • public void registerCSVConverter ( CSVConverter converter )
  • {
  •    this.csvConverters.add( converter );
    
  • }
//

// Thread implementation
//

@@ -159,9 +165,20 @@

        }
        afterXML( writer );
        closeDocument( writer );
  •        StreamUtils.closeZipEntry( zipOutputStream );
    
  •        //
    

  •        // CSV
    
  •        //
    

  •        for ( CSVConverter converter : csvConverters )
    
  •        {
    
  •            converter.write( zipOutputStream, params );
    
  •        }
    
        [log.info](http://log.info)( "Export done" );
    }
    catch ( Exception ex )

@@ -172,12 +189,10 @@

    }
    finally
    {
  •        StreamUtils.finishZipEntry( zipOutputStream );
    
  •        writer.closeWriter();
    
        StreamUtils.closeOutputStream( zipOutputStream );
  •        writer.closeWriter();
    
        NameMappingUtil.clearMapping();
    }
}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2010-02-08 10:56:08 +0000

@@ -27,14 +27,17 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

import java.util.Iterator;

import java.util.SortedMap;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

@@ -69,27 +72,29 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )
{
    try
    {
  •        for ( Integer id : params.getReportTables() ) //TODO more
    

than one?

  •        for ( Integer id : params.getReportTables() )
    
        {
  •            out.putNextEntry( new ZipEntry( "ReportTable" + id +
    

CSV_EXTENSION ) );

            ReportTableData data =

reportTableService.getReportTableData( id, params.getFormat() );

            Iterator<String> columns =

data.getPrettyPrintColumns().iterator();

            while ( columns.hasNext() )
            {
  •                writer.write( csvEncode( columns.next() ) );
    
  •                out.write( csvEncode( columns.next() ).getBytes()
    

);

                if ( columns.hasNext() )
                {
  •                    writer.write( SEPARATOR );
    
  •                    out.write( SEPARATOR_B );
    
                }
            }
  •            writer.newLine();
    
  •            out.write( NEWLINE );
    
            for ( SortedMap<Integer, String> row : data.getRows()

)

            {

@@ -97,15 +102,15 @@

                while ( values.hasNext() )
                {
  •                    writer.write( csvEncode( values.next() ) );
    
  •                    out.write( csvEncode( values.next()
    

).getBytes()

);

                    if ( values.hasNext() )
                    {
  •                        writer.write( SEPARATOR );
    
  •                        out.write( SEPARATOR_B );
    
                    }
                }
  •                writer.newLine();
    
  •                out.write( NEWLINE );
    
            }
        }
    }

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -27,9 +27,9 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import java.io.BufferedWriter;

import java.util.ArrayList;

import java.util.List;

+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

@@ -48,13 +48,6 @@

{

private static final Log log = LogFactory.getLog(

CSVExportPipeThread.class );

  • private BufferedWriter writer;
  • public void setWriter( BufferedWriter writer )
  • {
  •    this.writer = writer;
    
  • }
private ExportParams params;
public void setParams( ExportParams params )

@@ -62,6 +55,13 @@

    this.params = params;
}
  • private ZipOutputStream outputStream;
  • public void setOutputStream( ZipOutputStream outputStream )
  • {
  •    this.outputStream = outputStream;
    
  • }
private List<CSVConverter> converters = new

ArrayList();

public void registerCSVConverter( CSVConverter converter )

@@ -90,14 +90,18 @@

        for ( CSVConverter converter : converters )
        {
  •            converter.write( writer, params );
    
  •            converter.write( outputStream, params );
    
        }
        [log.info](http://log.info)( "Export finished" );
    }
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( ex );
    
  •    }
    
    finally
    {
  •        StreamUtils.closeWriter( writer );
    
  •        StreamUtils.closeOutputStream( outputStream );
    
    }
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2010-02-08 10:56:08 +0000

@@ -28,13 +28,11 @@

*/

import java.io.BufferedInputStream;

-import java.io.BufferedWriter;

+import java.io.BufferedOutputStream;

import java.io.IOException;

import java.io.InputStream;

-import java.io.OutputStreamWriter;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

-import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;

@@ -50,8 +48,6 @@

public class DefaultCSVExportService

implements ExportService

{

  • private static final String ZIP_ENTRY_NAME = “Export.csv”;
//

// Dependencies
//

@@ -87,20 +83,18 @@

        PipedInputStream in = new PipedInputStream( out );
  •        ZipOutputStream zipOut = new ZipOutputStream( out );
    
  •        ZipOutputStream zipOut = new ZipOutputStream( new
    

BufferedOutputStream( out ) );

  •        zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        BufferedWriter writer = new BufferedWriter( new
    

OutputStreamWriter( zipOut ) );

        //

        // Writes to one end of the pipe
        //

        CSVExportPipeThread thread = new CSVExportPipeThread(

sessionFactory );

  •        thread.setWriter( writer );
    
        thread.setParams( params );
  •        thread.setOutputStream( zipOut );
    
        thread.registerCSVConverter( new ReportTableDataConverter(

reportTableService ) );

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2009-04-16 09:53:17 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2010-02-08 10:56:08 +0000

@@ -33,15 +33,80 @@

*/

public class CsvUtil

{

  • public static final char SEPARATOR = ‘,’;
  • private static final String ENCLOSURE = “"”;
  • public static String csvEncode( String string )
  • {
  •    string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE
    

);

  •    string = ENCLOSURE + string + ENCLOSURE;
    
  • public static final String SEPARATOR = “,”;
  • public static final byte SEPARATOR_B = SEPARATOR.getBytes();
  • public static final byte NEWLINE = “\n”.getBytes();
  • public static final String CSV_EXTENSION = “.csv”;
  • private static final String ENCLOSURE = “"”;
  • private static final String EMPTY = “”;
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( int value )
  • {
  •    return csvEncode( String.valueOf( value ) );
    
  • }
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        value = EMPTY;
    
  •    }
    
  •    else
    
  •    {
    
  •        value = value.replaceAll( ENCLOSURE, ENCLOSURE +
    

ENCLOSURE

);

  •        value = ENCLOSURE + value + ENCLOSURE;
    
  •    }
    
  •    return value;
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as a
    

byte

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( int value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as a
    

byte

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( String value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • public static byte getCsvEndValue( int value )
  • {
  •    return getCsvEndValue( String.valueOf( value ) );
    
  • }
  • public static byte getCsvEndValue( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        return EMPTY.getBytes();
    
  •    }
    
  •    return string;
    
  •    return ( value ).getBytes();
    
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 07:04:26 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 10:56:08 +0000

@@ -27,17 +27,28 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

+import java.util.Collection;

import java.util.Map;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;

+import org.amplecode.quick.StatementManager;

import org.hisp.dhis.dataelement.DataElement;

import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;

import org.hisp.dhis.dataelement.DataElementCategoryService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.datavalue.DataValue;

import org.hisp.dhis.datavalue.DataValueService;

+import org.hisp.dhis.datavalue.DeflatedDataValue;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.GroupMemberType;

@@ -47,7 +58,10 @@

import

org.hisp.dhis.importexport.converter.AbstractDataValueConverter;

import org.hisp.dhis.organisationunit.OrganisationUnit;

import org.hisp.dhis.period.Period;

+import org.hisp.dhis.period.PeriodService;

+import org.hisp.dhis.system.util.DateUtils;

import org.hisp.dhis.system.util.MimicingHashMap;

+import org.hisp.dhis.system.util.StreamUtils;

/**

  • @author Lars Helge Overland

@@ -57,8 +71,11 @@

extends AbstractDataValueConverter implements CSVConverter

{

private static final String SEPARATOR = ",";
  • private static final String FILENAME = “RoutineData.txt”;
private DataElementCategoryService categoryService;
  • private PeriodService periodService;
  • private StatementManager statementManager;
//

// Properties

@@ -72,6 +89,14 @@

// Constructor
//

  • public DataValueConverter( PeriodService periodService,

DataMartService dataMartService,

  •    StatementManager statementManager )
    
  • {
  •    this.periodService = periodService;
    
  •    this.dataMartService = dataMartService;
    
  •    this.statementManager = statementManager;
    
  • }
/**
 * Constructor for read operations.
 */

@@ -95,9 +120,81 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )
{
  •    // Not implemented
    
  •    try
    
  •    {
    
  •        out.putNextEntry( new ZipEntry( FILENAME ) );
    
  •        out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryText" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Check" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Verified" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Deleted" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Comment" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
    
  •        out.write( getCsvEndValue( csvEncode( "LastUpdated" ) )
    

);

  •        out.write( NEWLINE );
    
  •        if ( params.isIncludeDataValues() )
    
  •        {
    
  •            if ( params.getStartDate() != null &&
    

params.getEndDate()

!= null )

  •            {
    
  •                Collection<DeflatedDataValue> values = null;
    
  •                Collection<Period> periods =
    

periodService.getIntersectingPeriods( params.getStartDate(),

params.getEndDate() );

  •                statementManager.initialise();
    
  •                for ( final Integer element :
    

params.getDataElements() )

  •                {
    
  •                    for ( final Period period : periods )
    
  •                    {
    
  •                        values =
    

dataMartService.getDeflatedDataValues( element, period.getId(),

params.getOrganisationUnits() );

  •                        for ( final DeflatedDataValue value :
    

values

)

  •                        {
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue(
    

value.getSourceId() ) );

  •                            out.write( getCsvValue(
    

value.getDataElementId() ) );

  •                            out.write( getCsvValue(
    

value.getPeriodId() ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( csvEncode(
    

value.getValue() ) ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( csvEncode(
    

value.getComment() ) ) );

  •                            out.write( getCsvValue( 1 ) );
    
  •                            out.write( getCsvEndValue(
    

DateUtils.getAccessDateString( value.getTimestamp() ) ) );

  •                            out.write( NEWLINE );
    
  •                        }
    
  •                    }
    
  •                }
    
  •                statementManager.destroy();
    
  •            }
    
  •        }
    
  •        StreamUtils.closeZipEntry( out );
    
  •    }
    
  •    catch ( IOException ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to write data", ex );
    
  •    }
    
}
public void read( BufferedReader reader, ImportParams params )

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2009-11-07 14:09:00 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2010-02-08 10:56:08 +0000

@@ -35,16 +35,19 @@

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;

import org.amplecode.staxwax.factory.XMLFactory;

import org.amplecode.staxwax.writer.XMLWriter;

import org.hibernate.SessionFactory;

import org.hisp.dhis.dataelement.DataElementService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.ExportPipeThread;

import org.hisp.dhis.importexport.ExportService;

import

org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;

+import

org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;

@@ -60,6 +63,7 @@

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;

import org.hisp.dhis.indicator.IndicatorService;

+import org.hisp.dhis.period.PeriodService;

/**

  • @author Lars Helge Overland

@@ -100,6 +104,27 @@

    this.indicatorService = indicatorService;
}
  • private PeriodService periodService;
  • public void setPeriodService( PeriodService periodService )
  • {
  •    this.periodService = periodService;
    
  • }
  • private DataMartService dataMartService;
  • public void setDataMartService( DataMartService dataMartService )
  • {
  •    this.dataMartService = dataMartService;
    
  • }
  • private StatementManager statementManager;
  • public void setStatementManager( StatementManager

statementManager

)

  • {
  •    this.statementManager = statementManager;
    
  • }
//

// ExportService implementation
//

@@ -122,7 +147,7 @@

        zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
        XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
        //

        // Writes to one end of the pipe
        //

@@ -156,6 +181,8 @@

        thread.registerXMLConverter( new UserConverter() );
        thread.registerXMLConverter( new UserRoleConverter() );
  •        thread.registerCSVConverter( new DataValueConverter(
    

periodService, dataMartService, statementManager ) );

        thread.start();
        //

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml’


dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-02 19:21:58 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-08 10:56:08 +0000

@@ -381,6 +381,9 @@

           <property name="sessionFactory" ref="sessionFactory" />
           <property name="dataElementService"

ref=“org.hisp.dhis.dataelement.DataElementService” />

           <property name="indicatorService"

ref=“org.hisp.dhis.indicator.IndicatorService” />

  •           <property name="periodService"
    

ref=“org.hisp.dhis.period.PeriodService” />

  •           <property name="dataMartService"
    

ref=“org.hisp.dhis.datamart.DataMartService” />

  •           <property name="statementManager"
    

ref=“statementManager”

/>

   </bean>
   <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2009-11-19 19:16:46 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2010-02-08 10:56:08 +0000

@@ -49,6 +49,20 @@

public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/**
  • * Formats a Date to the Access date format.
    
  • *
    
  • * @param date the Date to parse.
    
  • * @return a formatted date string.
    
  • */
    
  • public static String getAccessDateString( Date date )
  • {
  •    final SimpleDateFormat format = new SimpleDateFormat();
    
  •    format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
    
  •    return date != null ? format.format( date ) : null;
    
  • }
  • /**
 * Formats a Date to the IXF date format which is

YYYY-MM-DD’T’HH:MM:SS.

 *
 * @param date the Date to parse.

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2009-12-19 15:20:41 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2010-02-08 10:56:08 +0000

@@ -422,9 +422,26 @@

}
/**
  • * Closes the current ZipEntry and positions the stream for
    

writing

the next entry.

  • *
    
  • * @param out the ZipOutputStream.
    
  • */
    
  • public static void closeZipEntry( ZipOutputStream out )
  • {
  •    try
    
  •    {
    
  •        out.closeEntry();
    
  •    }
    
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to close the current
    

ZipEntry", ex );

  •    }
    
  • }
  • /**
 * Finishes writing the contents of the ZIP output stream without

closing the underlying stream.

 *
  • * @param out the ZipOutputStream to write to.
    
  • * @param out the ZipOutputStream.
    
 */
public static void finishZipEntry( ZipOutputStream out )
{

@@ -434,7 +451,7 @@

    }
    catch ( Exception ex )
    {
  •        throw new RuntimeException( "Failed to finish
    

ZipOutputStream", ex );

  •        throw new RuntimeException( "Failed to finish the content
    

of

the ZipOutputStream", ex );

    }
}

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties’


dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-01-27 21:45:11 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-02-08 10:56:08 +0000

@@ -146,6 +146,7 @@

import_from_other_systems = Import from other systems

DHIS14_import = DHIS 1.4 Import

DHIS14_metadata_export = DHIS 1.4 Metadata Export

+DHIS14_data_export = DHIS 1.4 Data Export

IXF_import = IXF Import

accept_incoming_records = Accept incoming records

include_datavalues = Include data values

@@ -442,4 +443,5 @@

intro_ixf_metadata_export = Do an export of meta-data or dimensional

data

describing the facts. Indicator Transmission Format (IXF) is a

standard

developed by the WHO.

intro_DHIS14_metadata_export = Do an export of meta-data or

dimensional

data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.

intro_DHIS14_detailed_metadata_export = Do an export of an detailed

selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.

+intro_DHIS14_data_export = Do an export of data values or facts. DHIS

1.4

is the predecessor of DHIS 2.

intro_pdf_metadata_export = Portable Document Format (PDF) is a file

format for document exchange.

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm’


dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-01-28 11:51:39 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-02-08 10:56:08 +0000

@@ -2,8 +2,9 @@

$i18n.getString( "export_to_other_systems" )

  • #introListItem(

“displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayDataValueExportForm.action?exportFormat=IXF”

“ixf_data_export” )

  • #introListItem(

“displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_metadata_export” )

#introListItem(

“displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_detailed_metadata_export” )

  • #introListItem(

“displayDataValueExportForm.action?exportFormat=DHIS14XML”

“DHIS14_data_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=PDF”

“pdf_metadata_export” )

\ No newline at end of file


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

Sendt fra min mobile enhet


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Cheers,
Knut Staring

Isn’t LZMA SDK providing the JAVA library?? and comparisons are here

···

Regards,
Saptarshi PURKAYASTHA

Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:17, Jason Pickering jason.p.pickering@gmail.com wrote:

No clue if this is possible, but if the user was to provide a path to

a native OS executable, could DHIS push the job off to this?

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com:

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

Yup agree with that just could not make it write the appropriate zip

entries that way… Open for being enlighted here…

OK. Can’t really look now but I guess it must be tricky :slight_smile: Will

maybe look later in the week. If the day comes (and I don’t see it

soon) that you had an option to write to either 7z or zip format I’m

just thinking you would want the packaging decoupled from the

production of the streams.

Bob

2010/2/8, Bob Jolliffe bobjolliffe@gmail.com:

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

On Mon, Feb 8, 2010 at 11:59 AM, noreply@launchpad.net wrote:


revno: 1404

committer: Lars Helge Oeverland larshelge@gmail.com

branch nick: trunk

timestamp: Mon 2010-02-08 11:56:08 +0100

message:

Implemented DHIS 1.4 export of data values

modified:

There is actually still a snag here. DHIS 1.4 only accepts the

7zip/lzma

format currently. I have talked Greg into making 1.4 accept zip/deflate

too.

Isn’t it better to have gzip/deflate? We are not talking about

compressing an archive of files but rather compressing a single

stream.

Also I think the original "void write( BufferedWriter writer,

ExportParams params )" might be better than "void write(

ZipOutputStream out, ExportParams params )". It seems unnecessary

that the convertor should have to know anything about zip, gzip, 7zip

or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred to

later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for

meta-data and keeps both inside the archive… I was was not able to have

multiple zip entries while using the Writer…

Ah. Ok. I do remember. Then you would need an archive (zip or the

seven thing) rather a gzipped stream.

But does your CSV writer need to know that? Surely it just has an

interest in churning out csv datavalues. Some other component should

put the csv stream together with the xml stream into the zip.

Cheers

Bob

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

lp:dhis2

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.

To unsubscribe from this branch go to

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2009-03-03 16:46:36 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2010-02-08 10:56:08 +0000

@@ -28,7 +28,7 @@

*/

import java.io.BufferedReader;

-import java.io.BufferedWriter;

+import java.util.zip.ZipOutputStream;

/**

  • @author Lars Helge Overland

@@ -36,7 +36,7 @@

*/

public interface CSVConverter

{

  • void write( BufferedWriter writer, ExportParams params );
  • void write( ZipOutputStream out, ExportParams params );
void read( BufferedReader reader, ImportParams params );

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2009-11-02 15:55:44 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -52,7 +52,8 @@

private List<XMLConverter> xsdConverters = new

ArrayList();

private List<XMLConverter> xmlConverters = new

ArrayList();

  • private List csvConverters = new

ArrayList();

//

// Parameters
//

@@ -122,6 +123,11 @@

    this.xmlConverters.add( converter );
}
  • public void registerCSVConverter ( CSVConverter converter )
  • {
  •    this.csvConverters.add( converter );
    
  • }
//

// Thread implementation
//

@@ -159,9 +165,20 @@

        }
        afterXML( writer );
        closeDocument( writer );
  •        StreamUtils.closeZipEntry( zipOutputStream );
    
  •        //
    

  •        // CSV
    
  •        //
    

  •        for ( CSVConverter converter : csvConverters )
    
  •        {
    
  •            converter.write( zipOutputStream, params );
    
  •        }
    
        [log.info](http://log.info)( "Export done" );
    }
    catch ( Exception ex )

@@ -172,12 +189,10 @@

    }
    finally
    {
  •        StreamUtils.finishZipEntry( zipOutputStream );
    
  •        writer.closeWriter();
    
        StreamUtils.closeOutputStream( zipOutputStream );
  •        writer.closeWriter();
    
        NameMappingUtil.clearMapping();
    }
}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2010-02-08 10:56:08 +0000

@@ -27,14 +27,17 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import static org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

import java.util.Iterator;

import java.util.SortedMap;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

@@ -69,27 +72,29 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )
{
    try
    {
  •        for ( Integer id : params.getReportTables() ) //TODO more
    

than one?

  •        for ( Integer id : params.getReportTables() )
    
        {
  •            out.putNextEntry( new ZipEntry( "ReportTable" + id +
    

CSV_EXTENSION ) );

            ReportTableData data =

reportTableService.getReportTableData( id, params.getFormat() );

            Iterator<String> columns =

data.getPrettyPrintColumns().iterator();

            while ( columns.hasNext() )
            {
  •                writer.write( csvEncode( columns.next() ) );
    
  •                out.write( csvEncode( columns.next() ).getBytes()
    

);

                if ( columns.hasNext() )
                {
  •                    writer.write( SEPARATOR );
    
  •                    out.write( SEPARATOR_B );
    
                }
            }
  •            writer.newLine();
    
  •            out.write( NEWLINE );
    
            for ( SortedMap<Integer, String> row : data.getRows()

)

            {

@@ -97,15 +102,15 @@

                while ( values.hasNext() )
                {
  •                    writer.write( csvEncode( values.next() ) );
    
  •                    out.write( csvEncode( values.next()
    

).getBytes()

);

                    if ( values.hasNext() )
                    {
  •                        writer.write( SEPARATOR );
    
  •                        out.write( SEPARATOR_B );
    
                    }
                }
  •                writer.newLine();
    
  •                out.write( NEWLINE );
    
            }
        }
    }

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -27,9 +27,9 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import java.io.BufferedWriter;

import java.util.ArrayList;

import java.util.List;

+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

@@ -48,13 +48,6 @@

{

private static final Log log = LogFactory.getLog(

CSVExportPipeThread.class );

  • private BufferedWriter writer;
  • public void setWriter( BufferedWriter writer )
  • {
  •    this.writer = writer;
    
  • }
private ExportParams params;
public void setParams( ExportParams params )

@@ -62,6 +55,13 @@

    this.params = params;
}
  • private ZipOutputStream outputStream;
  • public void setOutputStream( ZipOutputStream outputStream )
  • {
  •    this.outputStream = outputStream;
    
  • }
private List<CSVConverter> converters = new

ArrayList();

public void registerCSVConverter( CSVConverter converter )

@@ -90,14 +90,18 @@

        for ( CSVConverter converter : converters )
        {
  •            converter.write( writer, params );
    
  •            converter.write( outputStream, params );
    
        }
        [log.info](http://log.info)( "Export finished" );
    }
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( ex );
    
  •    }
    
    finally
    {
  •        StreamUtils.closeWriter( writer );
    
  •        StreamUtils.closeOutputStream( outputStream );
    
    }
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2010-02-08 10:56:08 +0000

@@ -28,13 +28,11 @@

*/

import java.io.BufferedInputStream;

-import java.io.BufferedWriter;

+import java.io.BufferedOutputStream;

import java.io.IOException;

import java.io.InputStream;

-import java.io.OutputStreamWriter;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

-import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;

@@ -50,8 +48,6 @@

public class DefaultCSVExportService

implements ExportService

{

  • private static final String ZIP_ENTRY_NAME = “Export.csv”;
//

// Dependencies
//

@@ -87,20 +83,18 @@

        PipedInputStream in = new PipedInputStream( out );
  •        ZipOutputStream zipOut = new ZipOutputStream( out );
    
  •        ZipOutputStream zipOut = new ZipOutputStream( new
    

BufferedOutputStream( out ) );

  •        zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );
    
  •        BufferedWriter writer = new BufferedWriter( new
    

OutputStreamWriter( zipOut ) );

        //

        // Writes to one end of the pipe
        //

        CSVExportPipeThread thread = new CSVExportPipeThread(

sessionFactory );

  •        thread.setWriter( writer );
    
        thread.setParams( params );
  •        thread.setOutputStream( zipOut );
    
        thread.registerCSVConverter( new ReportTableDataConverter(

reportTableService ) );

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2009-04-16 09:53:17 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2010-02-08 10:56:08 +0000

@@ -33,15 +33,80 @@

*/

public class CsvUtil

{

  • public static final char SEPARATOR = ‘,’;
  • private static final String ENCLOSURE = “"”;
  • public static String csvEncode( String string )
  • {
  •    string = string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE
    

);

  •    string = ENCLOSURE + string + ENCLOSURE;
    
  • public static final String SEPARATOR = “,”;
  • public static final byte SEPARATOR_B = SEPARATOR.getBytes();
  • public static final byte NEWLINE = “\n”.getBytes();
  • public static final String CSV_EXTENSION = “.csv”;
  • private static final String ENCLOSURE = “"”;
  • private static final String EMPTY = “”;
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( int value )
  • {
  •    return csvEncode( String.valueOf( value ) );
    
  • }
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        value = EMPTY;
    
  •    }
    
  •    else
    
  •    {
    
  •        value = value.replaceAll( ENCLOSURE, ENCLOSURE +
    

ENCLOSURE

);

  •        value = ENCLOSURE + value + ENCLOSURE;
    
  •    }
    
  •    return value;
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as a
    

byte

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( int value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as a
    

byte

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( String value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • public static byte getCsvEndValue( int value )
  • {
  •    return getCsvEndValue( String.valueOf( value ) );
    
  • }
  • public static byte getCsvEndValue( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        return EMPTY.getBytes();
    
  •    }
    
  •    return string;
    
  •    return ( value ).getBytes();
    
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 07:04:26 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 10:56:08 +0000

@@ -27,17 +27,28 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

+import static org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

+import java.util.Collection;

import java.util.Map;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;

+import org.amplecode.quick.StatementManager;

import org.hisp.dhis.dataelement.DataElement;

import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;

import org.hisp.dhis.dataelement.DataElementCategoryService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.datavalue.DataValue;

import org.hisp.dhis.datavalue.DataValueService;

+import org.hisp.dhis.datavalue.DeflatedDataValue;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.GroupMemberType;

@@ -47,7 +58,10 @@

import

org.hisp.dhis.importexport.converter.AbstractDataValueConverter;

import org.hisp.dhis.organisationunit.OrganisationUnit;

import org.hisp.dhis.period.Period;

+import org.hisp.dhis.period.PeriodService;

+import org.hisp.dhis.system.util.DateUtils;

import org.hisp.dhis.system.util.MimicingHashMap;

+import org.hisp.dhis.system.util.StreamUtils;

/**

  • @author Lars Helge Overland

@@ -57,8 +71,11 @@

extends AbstractDataValueConverter implements CSVConverter

{

private static final String SEPARATOR = ",";
  • private static final String FILENAME = “RoutineData.txt”;
private DataElementCategoryService categoryService;
  • private PeriodService periodService;
  • private StatementManager statementManager;
//

// Properties

@@ -72,6 +89,14 @@

// Constructor
//

  • public DataValueConverter( PeriodService periodService,

DataMartService dataMartService,

  •    StatementManager statementManager )
    
  • {
  •    this.periodService = periodService;
    
  •    this.dataMartService = dataMartService;
    
  •    this.statementManager = statementManager;
    
  • }
/**
 * Constructor for read operations.
 */

@@ -95,9 +120,81 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams params )
  • public void write( ZipOutputStream out, ExportParams params )
{
  •    // Not implemented
    
  •    try
    
  •    {
    
  •        out.putNextEntry( new ZipEntry( FILENAME ) );
    
  •        out.write( getCsvValue( csvEncode( "RoutineDataID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "OrgUnitID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataElementID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "DataPeriodID" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryText" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryYesNo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryNumber" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryDate" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryMemo" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "EntryObject" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Check" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Verified" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Deleted" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Comment" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "LastUserID" ) ) );
    
  •        out.write( getCsvEndValue( csvEncode( "LastUpdated" ) )
    

);

  •        out.write( NEWLINE );
    
  •        if ( params.isIncludeDataValues() )
    
  •        {
    
  •            if ( params.getStartDate() != null &&
    

params.getEndDate()

!= null )

  •            {
    
  •                Collection<DeflatedDataValue> values = null;
    
  •                Collection<Period> periods =
    

periodService.getIntersectingPeriods( params.getStartDate(),

params.getEndDate() );

  •                statementManager.initialise();
    
  •                for ( final Integer element :
    

params.getDataElements() )

  •                {
    
  •                    for ( final Period period : periods )
    
  •                    {
    
  •                        values =
    

dataMartService.getDeflatedDataValues( element, period.getId(),

params.getOrganisationUnits() );

  •                        for ( final DeflatedDataValue value :
    

values

)

  •                        {
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue(
    

value.getSourceId() ) );

  •                            out.write( getCsvValue(
    

value.getDataElementId() ) );

  •                            out.write( getCsvValue(
    

value.getPeriodId() ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( csvEncode(
    

value.getValue() ) ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( csvEncode(
    

value.getComment() ) ) );

  •                            out.write( getCsvValue( 1 ) );
    
  •                            out.write( getCsvEndValue(
    

DateUtils.getAccessDateString( value.getTimestamp() ) ) );

  •                            out.write( NEWLINE );
    
  •                        }
    
  •                    }
    
  •                }
    
  •                statementManager.destroy();
    
  •            }
    
  •        }
    
  •        StreamUtils.closeZipEntry( out );
    
  •    }
    
  •    catch ( IOException ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to write data", ex );
    
  •    }
    
}
public void read( BufferedReader reader, ImportParams params )

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2009-11-07 14:09:00 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2010-02-08 10:56:08 +0000

@@ -35,16 +35,19 @@

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;

import org.amplecode.staxwax.factory.XMLFactory;

import org.amplecode.staxwax.writer.XMLWriter;

import org.hibernate.SessionFactory;

import org.hisp.dhis.dataelement.DataElementService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.ExportPipeThread;

import org.hisp.dhis.importexport.ExportService;

import

org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;

+import

org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;

@@ -60,6 +63,7 @@

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;

import org.hisp.dhis.indicator.IndicatorService;

+import org.hisp.dhis.period.PeriodService;

/**

  • @author Lars Helge Overland

@@ -100,6 +104,27 @@

    this.indicatorService = indicatorService;
}
  • private PeriodService periodService;
  • public void setPeriodService( PeriodService periodService )
  • {
  •    this.periodService = periodService;
    
  • }
  • private DataMartService dataMartService;
  • public void setDataMartService( DataMartService dataMartService )
  • {
  •    this.dataMartService = dataMartService;
    
  • }
  • private StatementManager statementManager;
  • public void setStatementManager( StatementManager

statementManager

)

  • {
  •    this.statementManager = statementManager;
    
  • }
//

// ExportService implementation
//

@@ -122,7 +147,7 @@

        zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
        XMLWriter writer = XMLFactory.getPlainXMLWriter( zipOut );
        //

        // Writes to one end of the pipe
        //

@@ -156,6 +181,8 @@

        thread.registerXMLConverter( new UserConverter() );
        thread.registerXMLConverter( new UserRoleConverter() );
  •        thread.registerCSVConverter( new DataValueConverter(
    

periodService, dataMartService, statementManager ) );

        thread.start();
        //

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml’


dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-02 19:21:58 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-08 10:56:08 +0000

@@ -381,6 +381,9 @@

           <property name="sessionFactory" ref="sessionFactory" />
           <property name="dataElementService"

ref=“org.hisp.dhis.dataelement.DataElementService” />

           <property name="indicatorService"

ref=“org.hisp.dhis.indicator.IndicatorService” />

  •           <property name="periodService"
    

ref=“org.hisp.dhis.period.PeriodService” />

  •           <property name="dataMartService"
    

ref=“org.hisp.dhis.datamart.DataMartService” />

  •           <property name="statementManager"
    

ref=“statementManager”

/>

   </bean>
   <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2009-11-19 19:16:46 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2010-02-08 10:56:08 +0000

@@ -49,6 +49,20 @@

public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
/**
  • * Formats a Date to the Access date format.
    
  • *
    
  • * @param date the Date to parse.
    
  • * @return a formatted date string.
    
  • */
    
  • public static String getAccessDateString( Date date )
  • {
  •    final SimpleDateFormat format = new SimpleDateFormat();
    
  •    format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
    
  •    return date != null ? format.format( date ) : null;
    
  • }
  • /**
 * Formats a Date to the IXF date format which is

YYYY-MM-DD’T’HH:MM:SS.

 *
 * @param date the Date to parse.

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2009-12-19 15:20:41 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2010-02-08 10:56:08 +0000

@@ -422,9 +422,26 @@

}
/**
  • * Closes the current ZipEntry and positions the stream for
    

writing

the next entry.

  • *
    
  • * @param out the ZipOutputStream.
    
  • */
    
  • public static void closeZipEntry( ZipOutputStream out )
  • {
  •    try
    
  •    {
    
  •        out.closeEntry();
    
  •    }
    
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to close the current
    

ZipEntry", ex );

  •    }
    
  • }
  • /**
 * Finishes writing the contents of the ZIP output stream without

closing the underlying stream.

 *
  • * @param out the ZipOutputStream to write to.
    
  • * @param out the ZipOutputStream.
    
 */
public static void finishZipEntry( ZipOutputStream out )
{

@@ -434,7 +451,7 @@

    }
    catch ( Exception ex )
    {
  •        throw new RuntimeException( "Failed to finish
    

ZipOutputStream", ex );

  •        throw new RuntimeException( "Failed to finish the content
    

of

the ZipOutputStream", ex );

    }
}

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties’


dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-01-27 21:45:11 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-02-08 10:56:08 +0000

@@ -146,6 +146,7 @@

import_from_other_systems = Import from other systems

DHIS14_import = DHIS 1.4 Import

DHIS14_metadata_export = DHIS 1.4 Metadata Export

+DHIS14_data_export = DHIS 1.4 Data Export

IXF_import = IXF Import

accept_incoming_records = Accept incoming records

include_datavalues = Include data values

@@ -442,4 +443,5 @@

intro_ixf_metadata_export = Do an export of meta-data or dimensional

data

describing the facts. Indicator Transmission Format (IXF) is a

standard

developed by the WHO.

intro_DHIS14_metadata_export = Do an export of meta-data or

dimensional

data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.

intro_DHIS14_detailed_metadata_export = Do an export of an detailed

selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.

+intro_DHIS14_data_export = Do an export of data values or facts. DHIS

1.4

is the predecessor of DHIS 2.

intro_pdf_metadata_export = Portable Document Format (PDF) is a file

format for document exchange.

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm’


dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-01-28 11:51:39 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-02-08 10:56:08 +0000

@@ -2,8 +2,9 @@

$i18n.getString( "export_to_other_systems" )

  • #introListItem(

“displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayDataValueExportForm.action?exportFormat=IXF”

“ixf_data_export” )

  • #introListItem(

“displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_metadata_export” )

#introListItem(

“displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_detailed_metadata_export” )

  • #introListItem(

“displayDataValueExportForm.action?exportFormat=DHIS14XML”

“DHIS14_data_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=PDF”

“pdf_metadata_export” )

\ No newline at end of file


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

Sendt fra min mobile enhet


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

http://freenet.googlecode.com/svn/trunk/contrib/java/net/contrapunctus/lzma/

Does this do it?

···

On Mon, Feb 8, 2010 at 7:23 PM, Saptarshi Purkayastha <sunbiz@gmail.com> wrote:

Isn't LZMA SDK providing the JAVA library?? and comparisons are here
---
Regards,
Saptarshi PURKAYASTHA
Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:17, Jason Pickering <jason.p.pickering@gmail.com> > wrote:

No clue if this is possible, but if the user was to provide a path to
a native OS executable, could DHIS push the job off to this?

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>:
> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>> Yup agree with that just could not make it write the appropriate zip
>> entries that way.. Open for being enlighted here..
>
> OK. Can't really look now but I guess it must be tricky :slight_smile: Will
> maybe look later in the week. If the day comes (and I don't see it
> soon) that you had an option to write to either 7z or zip format I'm
> just thinking you would want the packaging decoupled from the
> production of the streams.
>
> Bob
>
>>
>> 2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:
>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>>>>
>>>>
>>>> 2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>
>>>>>
>>>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>>>>> >
>>>>> >
>>>>> > On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:
>>>>> >>
>>>>> >> ------------------------------------------------------------
>>>>> >> revno: 1404
>>>>> >> committer: Lars Helge Oeverland <larshelge@gmail.com>
>>>>> >> branch nick: trunk
>>>>> >> timestamp: Mon 2010-02-08 11:56:08 +0100
>>>>> >> message:
>>>>> >> Implemented DHIS 1.4 export of data values
>>>>> >> modified:
>>>>> >
>>>>> >
>>>>> > There is actually still a snag here. DHIS 1.4 only accepts the
>>>>> > 7zip/lzma
>>>>> > format currently. I have talked Greg into making 1.4 accept
>>>>> > zip/deflate
>>>>> > too.
>>>>>
>>>>> Isn't it better to have gzip/deflate? We are not talking about
>>>>> compressing an archive of files but rather compressing a single
>>>>> stream.
>>>>>
>>>>> Also I think the original "void write( BufferedWriter writer,
>>>>> ExportParams params )" might be better than "void write(
>>>>> ZipOutputStream out, ExportParams params )". It seems unnecessary
>>>>> that the convertor should have to know anything about zip, gzip,
>>>>> 7zip
>>>>> or what have you. It should know how to write csv to a stream.
>>>>>
>>>>> I suspect that how the stream is later compressed is better deferred
>>>>> to
>>>>> later.
>>>>
>>>> Problem is that DHIS 1.4 uses a CSV file for data and an XML file for
>>>> meta-data and keeps both inside the archive... I was was not able to
>>>> have
>>>> multiple zip entries while using the Writer..
>>>
>>> Ah. Ok. I do remember. Then you would need an archive (zip or the
>>> seven thing) rather a gzipped stream.
>>>
>>> But does your CSV writer need to know that? Surely it just has an
>>> interest in churning out csv datavalues. Some other component should
>>> put the csv stream together with the xml stream into the zip.
>>>
>>>>
>>>>>
>>>>> Cheers
>>>>> Bob
>>>>>
>>>>> >
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>>>> >>
>>>>> >>
>>>>> >> --
>>>>> >> lp:dhis2
>>>>> >> trunk : Code : DHIS
>>>>> >>
>>>>> >> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
>>>>> >> To unsubscribe from this branch go to
>>>>> >>
>>>>> >>
>>>>> >> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>>>> >> 2009-03-03 16:46:36 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -28,7 +28,7 @@
>>>>> >> */
>>>>> >>
>>>>> >> import java.io.BufferedReader;
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> +import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> /**
>>>>> >> * @author Lars Helge Overland
>>>>> >> @@ -36,7 +36,7 @@
>>>>> >> */
>>>>> >> public interface CSVConverter
>>>>> >> {
>>>>> >> - void write( BufferedWriter writer, ExportParams params );
>>>>> >> + void write( ZipOutputStream out, ExportParams params );
>>>>> >>
>>>>> >> void read( BufferedReader reader, ImportParams params );
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>>>> >> 2009-11-02 15:55:44 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -52,7 +52,8 @@
>>>>> >>
>>>>> >> private List<XMLConverter> xsdConverters = new
>>>>> >> ArrayList<XMLConverter>();
>>>>> >> private List<XMLConverter> xmlConverters = new
>>>>> >> ArrayList<XMLConverter>();
>>>>> >> -
>>>>> >> + private List<CSVConverter> csvConverters = new
>>>>> >> ArrayList<CSVConverter>();
>>>>> >> +
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Parameters
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -122,6 +123,11 @@
>>>>> >> this.xmlConverters.add( converter );
>>>>> >> }
>>>>> >>
>>>>> >> + public void registerCSVConverter ( CSVConverter converter )
>>>>> >> + {
>>>>> >> + this.csvConverters.add( converter );
>>>>> >> + }
>>>>> >> +
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Thread implementation
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -159,9 +165,20 @@
>>>>> >> }
>>>>> >>
>>>>> >> afterXML( writer );
>>>>> >> -
>>>>> >> +
>>>>> >> closeDocument( writer );
>>>>> >> -
>>>>> >> +
>>>>> >> + StreamUtils.closeZipEntry( zipOutputStream );
>>>>> >> +
>>>>> >> + //
>>>>> >> -----------------------------------------------------------------
>>>>> >> + // CSV
>>>>> >> + //
>>>>> >> -----------------------------------------------------------------
>>>>> >> +
>>>>> >> + for ( CSVConverter converter : csvConverters )
>>>>> >> + {
>>>>> >> + converter.write( zipOutputStream, params );
>>>>> >> + }
>>>>> >> +
>>>>> >> log.info( "Export done" );
>>>>> >> }
>>>>> >> catch ( Exception ex )
>>>>> >> @@ -172,12 +189,10 @@
>>>>> >> }
>>>>> >> finally
>>>>> >> {
>>>>> >> - StreamUtils.finishZipEntry( zipOutputStream );
>>>>> >> + writer.closeWriter();
>>>>> >>
>>>>> >> StreamUtils.closeOutputStream( zipOutputStream );
>>>>> >>
>>>>> >> - writer.closeWriter();
>>>>> >> -
>>>>> >> NameMappingUtil.clearMapping();
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>>>> >> 2009-06-10 22:25:07 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -27,14 +27,17 @@
>>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>>>>> >> */
>>>>> >>
>>>>> >> -import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>>>>> >> import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>>>>> >>
>>>>> >> import java.io.BufferedReader;
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> import java.io.IOException;
>>>>> >> import java.util.Iterator;
>>>>> >> import java.util.SortedMap;
>>>>> >> +import java.util.zip.ZipEntry;
>>>>> >> +import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> import org.hisp.dhis.importexport.CSVConverter;
>>>>> >> import org.hisp.dhis.importexport.ExportParams;
>>>>> >> @@ -69,27 +72,29 @@
>>>>> >> // CSVConverter implementation
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >>
>>>>> >> - public void write( BufferedWriter writer, ExportParams
>>>>> >> params )
>>>>> >> + public void write( ZipOutputStream out, ExportParams params
>>>>> >> )
>>>>> >> {
>>>>> >> try
>>>>> >> {
>>>>> >> - for ( Integer id : params.getReportTables() ) //TODO
>>>>> >> more
>>>>> >> than one?
>>>>> >> + for ( Integer id : params.getReportTables() )
>>>>> >> {
>>>>> >> + out.putNextEntry( new ZipEntry( "ReportTable" +
>>>>> >> id +
>>>>> >> CSV_EXTENSION ) );
>>>>> >> +
>>>>> >> ReportTableData data =
>>>>> >> reportTableService.getReportTableData( id, params.getFormat() );
>>>>> >>
>>>>> >> Iterator<String> columns =
>>>>> >> data.getPrettyPrintColumns().iterator();
>>>>> >>
>>>>> >> while ( columns.hasNext() )
>>>>> >> {
>>>>> >> - writer.write( csvEncode( columns.next() ) );
>>>>> >> + out.write( csvEncode( columns.next()
>>>>> >> ).getBytes()
>>>>> >> );
>>>>> >>
>>>>> >> if ( columns.hasNext() )
>>>>> >> {
>>>>> >> - writer.write( SEPARATOR );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> - writer.newLine();
>>>>> >> + out.write( NEWLINE );
>>>>> >>
>>>>> >> for ( SortedMap<Integer, String> row :
>>>>> >> data.getRows()
>>>>> >> )
>>>>> >> {
>>>>> >> @@ -97,15 +102,15 @@
>>>>> >>
>>>>> >> while ( values.hasNext() )
>>>>> >> {
>>>>> >> - writer.write( csvEncode( values.next() )
>>>>> >> );
>>>>> >> + out.write( csvEncode( values.next()
>>>>> >> ).getBytes()
>>>>> >> );
>>>>> >>
>>>>> >> if ( values.hasNext() )
>>>>> >> {
>>>>> >> - writer.write( SEPARATOR );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> - writer.newLine();
>>>>> >> + out.write( NEWLINE );
>>>>> >> }
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>>>> >> 2009-06-10 22:25:07 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -27,9 +27,9 @@
>>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>>>>> >> */
>>>>> >>
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> import java.util.ArrayList;
>>>>> >> import java.util.List;
>>>>> >> +import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> import org.apache.commons.logging.Log;
>>>>> >> import org.apache.commons.logging.LogFactory;
>>>>> >> @@ -48,13 +48,6 @@
>>>>> >> {
>>>>> >> private static final Log log = LogFactory.getLog(
>>>>> >> CSVExportPipeThread.class );
>>>>> >>
>>>>> >> - private BufferedWriter writer;
>>>>> >> -
>>>>> >> - public void setWriter( BufferedWriter writer )
>>>>> >> - {
>>>>> >> - this.writer = writer;
>>>>> >> - }
>>>>> >> -
>>>>> >> private ExportParams params;
>>>>> >>
>>>>> >> public void setParams( ExportParams params )
>>>>> >> @@ -62,6 +55,13 @@
>>>>> >> this.params = params;
>>>>> >> }
>>>>> >>
>>>>> >> + private ZipOutputStream outputStream;
>>>>> >> +
>>>>> >> + public void setOutputStream( ZipOutputStream outputStream )
>>>>> >> + {
>>>>> >> + this.outputStream = outputStream;
>>>>> >> + }
>>>>> >> +
>>>>> >> private List<CSVConverter> converters = new
>>>>> >> ArrayList<CSVConverter>();
>>>>> >>
>>>>> >> public void registerCSVConverter( CSVConverter converter )
>>>>> >> @@ -90,14 +90,18 @@
>>>>> >>
>>>>> >> for ( CSVConverter converter : converters )
>>>>> >> {
>>>>> >> - converter.write( writer, params );
>>>>> >> + converter.write( outputStream, params );
>>>>> >> }
>>>>> >>
>>>>> >> log.info( "Export finished" );
>>>>> >> }
>>>>> >> + catch ( Exception ex )
>>>>> >> + {
>>>>> >> + throw new RuntimeException( ex );
>>>>> >> + }
>>>>> >> finally
>>>>> >> {
>>>>> >> - StreamUtils.closeWriter( writer );
>>>>> >> + StreamUtils.closeOutputStream( outputStream );
>>>>> >> }
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>>>> >> 2009-06-10 22:25:07 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -28,13 +28,11 @@
>>>>> >> */
>>>>> >>
>>>>> >> import java.io.BufferedInputStream;
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> +import java.io.BufferedOutputStream;
>>>>> >> import java.io.IOException;
>>>>> >> import java.io.InputStream;
>>>>> >> -import java.io.OutputStreamWriter;
>>>>> >> import java.io.PipedInputStream;
>>>>> >> import java.io.PipedOutputStream;
>>>>> >> -import java.util.zip.ZipEntry;
>>>>> >> import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> import org.hibernate.SessionFactory;
>>>>> >> @@ -50,8 +48,6 @@
>>>>> >> public class DefaultCSVExportService
>>>>> >> implements ExportService
>>>>> >> {
>>>>> >> - private static final String ZIP_ENTRY_NAME = "Export.csv";
>>>>> >> -
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Dependencies
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -87,20 +83,18 @@
>>>>> >>
>>>>> >> PipedInputStream in = new PipedInputStream( out );
>>>>> >>
>>>>> >> - ZipOutputStream zipOut = new ZipOutputStream( out );
>>>>> >> + ZipOutputStream zipOut = new ZipOutputStream( new
>>>>> >> BufferedOutputStream( out ) );
>>>>> >>
>>>>> >> - zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME )
>>>>> >> );
>>>>> >> + //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME
>>>>> >> ) );
>>>>> >>
>>>>> >> - BufferedWriter writer = new BufferedWriter( new
>>>>> >> OutputStreamWriter( zipOut ) );
>>>>> >> -
>>>>> >> //
>>>>> >> -----------------------------------------------------------------
>>>>> >> // Writes to one end of the pipe
>>>>> >> //
>>>>> >> -----------------------------------------------------------------
>>>>> >>
>>>>> >> CSVExportPipeThread thread = new CSVExportPipeThread(
>>>>> >> sessionFactory );
>>>>> >>
>>>>> >> - thread.setWriter( writer );
>>>>> >> thread.setParams( params );
>>>>> >> + thread.setOutputStream( zipOut );
>>>>> >>
>>>>> >> thread.registerCSVConverter( new
>>>>> >> ReportTableDataConverter(
>>>>> >> reportTableService ) );
>>>>> >>
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>>>> >> 2009-04-16 09:53:17 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -33,15 +33,80 @@
>>>>> >> */
>>>>> >> public class CsvUtil
>>>>> >> {
>>>>> >> - public static final char SEPARATOR = ',';
>>>>> >> -
>>>>> >> - private static final String ENCLOSURE = "\"";
>>>>> >> -
>>>>> >> - public static String csvEncode( String string )
>>>>> >> - {
>>>>> >> - string = string.replaceAll( ENCLOSURE, ENCLOSURE +
>>>>> >> ENCLOSURE
>>>>> >> );
>>>>> >> - string = ENCLOSURE + string + ENCLOSURE;
>>>>> >> + public static final String SEPARATOR = ",";
>>>>> >> + public static final byte SEPARATOR_B =
>>>>> >> SEPARATOR.getBytes();
>>>>> >> + public static final byte NEWLINE = "\n".getBytes();
>>>>> >> +
>>>>> >> + public static final String CSV_EXTENSION = ".csv";
>>>>> >> + private static final String ENCLOSURE = "\"";
>>>>> >> + private static final String EMPTY = "";
>>>>> >> +
>>>>> >> + /**
>>>>> >> + * Encodes the given value to a CSV acceptable value.
>>>>> >> + *
>>>>> >> + * @param value the value.
>>>>> >> + * @return the CSV encoded value.
>>>>> >> + */
>>>>> >> + public static String csvEncode( int value )
>>>>> >> + {
>>>>> >> + return csvEncode( String.valueOf( value ) );
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> + * Encodes the given value to a CSV acceptable value.
>>>>> >> + *
>>>>> >> + * @param value the value.
>>>>> >> + * @return the CSV encoded value.
>>>>> >> + */
>>>>> >> + public static String csvEncode( String value )
>>>>> >> + {
>>>>> >> + if ( value == null )
>>>>> >> + {
>>>>> >> + value = EMPTY;
>>>>> >> + }
>>>>> >> + else
>>>>> >> + {
>>>>> >> + value = value.replaceAll( ENCLOSURE, ENCLOSURE +
>>>>> >> ENCLOSURE
>>>>> >> );
>>>>> >> + value = ENCLOSURE + value + ENCLOSURE;
>>>>> >> + }
>>>>> >> +
>>>>> >> + return value;
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> + * Appends a separator to the value and returns the value as
>>>>> >> a
>>>>> >> byte
>>>>> >> array.
>>>>> >> + *
>>>>> >> + * @param value the value.
>>>>> >> + * @return a byte araray.
>>>>> >> + */
>>>>> >> + public static byte getCsvValue( int value )
>>>>> >> + {
>>>>> >> + return getCsvEndValue( value + SEPARATOR );
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> + * Appends a separator to the value and returns the value as
>>>>> >> a
>>>>> >> byte
>>>>> >> array.
>>>>> >> + *
>>>>> >> + * @param value the value.
>>>>> >> + * @return a byte araray.
>>>>> >> + */
>>>>> >> + public static byte getCsvValue( String value )
>>>>> >> + {
>>>>> >> + return getCsvEndValue( value + SEPARATOR );
>>>>> >> + }
>>>>> >> +
>>>>> >> + public static byte getCsvEndValue( int value )
>>>>> >> + {
>>>>> >> + return getCsvEndValue( String.valueOf( value ) );
>>>>> >> + }
>>>>> >> +
>>>>> >> + public static byte getCsvEndValue( String value )
>>>>> >> + {
>>>>> >> + if ( value == null )
>>>>> >> + {
>>>>> >> + return EMPTY.getBytes();
>>>>> >> + }
>>>>> >>
>>>>> >> - return string;
>>>>> >> + return ( value ).getBytes();
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>>>> >> 2010-02-08 07:04:26 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -27,17 +27,28 @@
>>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>>>>> >> */
>>>>> >>
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
>>>>> >> +
>>>>> >> import java.io.BufferedReader;
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> import java.io.IOException;
>>>>> >> +import java.util.Collection;
>>>>> >> import java.util.Map;
>>>>> >> +import java.util.zip.ZipEntry;
>>>>> >> +import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> import org.amplecode.quick.BatchHandler;
>>>>> >> +import org.amplecode.quick.StatementManager;
>>>>> >> import org.hisp.dhis.dataelement.DataElement;
>>>>> >> import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
>>>>> >> import org.hisp.dhis.dataelement.DataElementCategoryService;
>>>>> >> +import org.hisp.dhis.datamart.DataMartService;
>>>>> >> import org.hisp.dhis.datavalue.DataValue;
>>>>> >> import org.hisp.dhis.datavalue.DataValueService;
>>>>> >> +import org.hisp.dhis.datavalue.DeflatedDataValue;
>>>>> >> import org.hisp.dhis.importexport.CSVConverter;
>>>>> >> import org.hisp.dhis.importexport.ExportParams;
>>>>> >> import org.hisp.dhis.importexport.GroupMemberType;
>>>>> >> @@ -47,7 +58,10 @@
>>>>> >> import
>>>>> >> org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
>>>>> >> import org.hisp.dhis.organisationunit.OrganisationUnit;
>>>>> >> import org.hisp.dhis.period.Period;
>>>>> >> +import org.hisp.dhis.period.PeriodService;
>>>>> >> +import org.hisp.dhis.system.util.DateUtils;
>>>>> >> import org.hisp.dhis.system.util.MimicingHashMap;
>>>>> >> +import org.hisp.dhis.system.util.StreamUtils;
>>>>> >>
>>>>> >> /**
>>>>> >> * @author Lars Helge Overland
>>>>> >> @@ -57,8 +71,11 @@
>>>>> >> extends AbstractDataValueConverter implements CSVConverter
>>>>> >> {
>>>>> >> private static final String SEPARATOR = ",";
>>>>> >> + private static final String FILENAME = "RoutineData.txt";
>>>>> >>
>>>>> >> private DataElementCategoryService categoryService;
>>>>> >> + private PeriodService periodService;
>>>>> >> + private StatementManager statementManager;
>>>>> >>
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Properties
>>>>> >> @@ -72,6 +89,14 @@
>>>>> >> // Constructor
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >>
>>>>> >> + public DataValueConverter( PeriodService periodService,
>>>>> >> DataMartService dataMartService,
>>>>> >> + StatementManager statementManager )
>>>>> >> + {
>>>>> >> + this.periodService = periodService;
>>>>> >> + this.dataMartService = dataMartService;
>>>>> >> + this.statementManager = statementManager;
>>>>> >> + }
>>>>> >> +
>>>>> >> /**
>>>>> >> * Constructor for read operations.
>>>>> >> */
>>>>> >> @@ -95,9 +120,81 @@
>>>>> >> // CSVConverter implementation
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >>
>>>>> >> - public void write( BufferedWriter writer, ExportParams
>>>>> >> params )
>>>>> >> + public void write( ZipOutputStream out, ExportParams params
>>>>> >> )
>>>>> >> {
>>>>> >> - // Not implemented
>>>>> >> + try
>>>>> >> + {
>>>>> >> + out.putNextEntry( new ZipEntry( FILENAME ) );
>>>>> >> +
>>>>> >> + out.write( getCsvValue( csvEncode( "RoutineDataID" )
>>>>> >> ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "OrgUnitID" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "DataElementID" )
>>>>> >> ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "DataPeriodID" )
>>>>> >> ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryText" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryYesNo" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryNumber" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryDate" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryMemo" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryObject" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "Check" ) ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "Verified" ) ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "Deleted" ) ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "Comment" ) ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "LastUserID" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvEndValue( csvEncode( "LastUpdated"
>>>>> >> ) )
>>>>> >> );
>>>>> >> +
>>>>> >> + out.write( NEWLINE );
>>>>> >> +
>>>>> >> + if ( params.isIncludeDataValues() )
>>>>> >> + {
>>>>> >> + if ( params.getStartDate() != null &&
>>>>> >> params.getEndDate()
>>>>> >> != null )
>>>>> >> + {
>>>>> >> + Collection<DeflatedDataValue> values = null;
>>>>> >> +
>>>>> >> + Collection<Period> periods =
>>>>> >> periodService.getIntersectingPeriods( params.getStartDate(),
>>>>> >> params.getEndDate() );
>>>>> >> +
>>>>> >> + statementManager.initialise();
>>>>> >> +
>>>>> >> + for ( final Integer element :
>>>>> >> params.getDataElements() )
>>>>> >> + {
>>>>> >> + for ( final Period period : periods )
>>>>> >> + {
>>>>> >> + values =
>>>>> >> dataMartService.getDeflatedDataValues( element, period.getId(),
>>>>> >> params.getOrganisationUnits() );
>>>>> >> +
>>>>> >> + for ( final DeflatedDataValue value
>>>>> >> :
>>>>> >> values
>>>>> >> )
>>>>> >> + {
>>>>> >> + out.write( getCsvValue( 0 ) );
>>>>> >> + out.write( getCsvValue(
>>>>> >> value.getSourceId() ) );
>>>>> >> + out.write( getCsvValue(
>>>>> >> value.getDataElementId() ) );
>>>>> >> + out.write( getCsvValue(
>>>>> >> value.getPeriodId() ) );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( getCsvValue(
>>>>> >> csvEncode(
>>>>> >> value.getValue() ) ) );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( getCsvValue( 0 ) );
>>>>> >> + out.write( getCsvValue( 0 ) );
>>>>> >> + out.write( getCsvValue( 0 ) );
>>>>> >> + out.write( getCsvValue(
>>>>> >> csvEncode(
>>>>> >> value.getComment() ) ) );
>>>>> >> + out.write( getCsvValue( 1 ) );
>>>>> >> + out.write( getCsvEndValue(
>>>>> >> DateUtils.getAccessDateString( value.getTimestamp() ) ) );
>>>>> >> +
>>>>> >> + out.write( NEWLINE );
>>>>> >> + }
>>>>> >> + }
>>>>> >> + }
>>>>> >> +
>>>>> >> + statementManager.destroy();
>>>>> >> + }
>>>>> >> + }
>>>>> >> +
>>>>> >> + StreamUtils.closeZipEntry( out );
>>>>> >> + }
>>>>> >> + catch ( IOException ex )
>>>>> >> + {
>>>>> >> + throw new RuntimeException( "Failed to write data",
>>>>> >> ex );
>>>>> >> + }
>>>>> >> }
>>>>> >>
>>>>> >> public void read( BufferedReader reader, ImportParams params
>>>>> >> )
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>>>> >> 2009-11-07 14:09:00 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -35,16 +35,19 @@
>>>>> >> import java.util.zip.ZipEntry;
>>>>> >> import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> +import org.amplecode.quick.StatementManager;
>>>>> >> import org.amplecode.staxwax.factory.XMLFactory;
>>>>> >> import org.amplecode.staxwax.writer.XMLWriter;
>>>>> >> import org.hibernate.SessionFactory;
>>>>> >> import org.hisp.dhis.dataelement.DataElementService;
>>>>> >> +import org.hisp.dhis.datamart.DataMartService;
>>>>> >> import org.hisp.dhis.importexport.ExportParams;
>>>>> >> import org.hisp.dhis.importexport.ExportPipeThread;
>>>>> >> import org.hisp.dhis.importexport.ExportService;
>>>>> >> import
>>>>> >>
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
>>>>> >> +import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
>>>>> >> @@ -60,6 +63,7 @@
>>>>> >> import
>>>>> >>
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
>>>>> >> import org.hisp.dhis.indicator.IndicatorService;
>>>>> >> +import org.hisp.dhis.period.PeriodService;
>>>>> >>
>>>>> >> /**
>>>>> >> * @author Lars Helge Overland
>>>>> >> @@ -100,6 +104,27 @@
>>>>> >> this.indicatorService = indicatorService;
>>>>> >> }
>>>>> >>
>>>>> >> + private PeriodService periodService;
>>>>> >> +
>>>>> >> + public void setPeriodService( PeriodService periodService )
>>>>> >> + {
>>>>> >> + this.periodService = periodService;
>>>>> >> + }
>>>>> >> +
>>>>> >> + private DataMartService dataMartService;
>>>>> >> +
>>>>> >> + public void setDataMartService( DataMartService
>>>>> >> dataMartService )
>>>>> >> + {
>>>>> >> + this.dataMartService = dataMartService;
>>>>> >> + }
>>>>> >> +
>>>>> >> + private StatementManager statementManager;
>>>>> >> +
>>>>> >> + public void setStatementManager( StatementManager
>>>>> >> statementManager
>>>>> >> )
>>>>> >> + {
>>>>> >> + this.statementManager = statementManager;
>>>>> >> + }
>>>>> >> +
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // ExportService implementation
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -122,7 +147,7 @@
>>>>> >> zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
>>>>> >>
>>>>> >> XMLWriter writer = XMLFactory.getPlainXMLWriter(
>>>>> >> zipOut );
>>>>> >> -
>>>>> >> +
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Writes to one end of the pipe
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -156,6 +181,8 @@
>>>>> >> thread.registerXMLConverter( new UserConverter() );
>>>>> >> thread.registerXMLConverter( new UserRoleConverter()
>>>>> >> );
>>>>> >>
>>>>> >> + thread.registerCSVConverter( new DataValueConverter(
>>>>> >> periodService, dataMartService, statementManager ) );
>>>>> >> +
>>>>> >> thread.start();
>>>>> >>
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>>>> >> 2010-02-02 19:21:58 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -381,6 +381,9 @@
>>>>> >> <property name="sessionFactory"
>>>>> >> ref="sessionFactory" />
>>>>> >> <property name="dataElementService"
>>>>> >> ref="org.hisp.dhis.dataelement.DataElementService" />
>>>>> >> <property name="indicatorService"
>>>>> >> ref="org.hisp.dhis.indicator.IndicatorService" />
>>>>> >> + <property name="periodService"
>>>>> >> ref="org.hisp.dhis.period.PeriodService" />
>>>>> >> + <property name="dataMartService"
>>>>> >> ref="org.hisp.dhis.datamart.DataMartService" />
>>>>> >> + <property name="statementManager"
>>>>> >> ref="statementManager"
>>>>> >> />
>>>>> >> </bean>
>>>>> >>
>>>>> >> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>> >> - -
>>>>> >> -
>>>>> >> -
>>>>> >> -->
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>>>> >> 2009-11-19 19:16:46 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -49,6 +49,20 @@
>>>>> >> public static final String DEFAULT_DATE_FORMAT =
>>>>> >> "yyyy-MM-dd";
>>>>> >>
>>>>> >> /**
>>>>> >> + * Formats a Date to the Access date format.
>>>>> >> + *
>>>>> >> + * @param date the Date to parse.
>>>>> >> + * @return a formatted date string.
>>>>> >> + */
>>>>> >> + public static String getAccessDateString( Date date )
>>>>> >> + {
>>>>> >> + final SimpleDateFormat format = new SimpleDateFormat();
>>>>> >> + format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
>>>>> >> +
>>>>> >> + return date != null ? format.format( date ) : null;
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> * Formats a Date to the IXF date format which is
>>>>> >> YYYY-MM-DD'T'HH:MM:SS.
>>>>> >> *
>>>>> >> * @param date the Date to parse.
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>>>> >> 2009-12-19 15:20:41 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -422,9 +422,26 @@
>>>>> >> }
>>>>> >>
>>>>> >> /**
>>>>> >> + * Closes the current ZipEntry and positions the stream for
>>>>> >> writing
>>>>> >> the next entry.
>>>>> >> + *
>>>>> >> + * @param out the ZipOutputStream.
>>>>> >> + */
>>>>> >> + public static void closeZipEntry( ZipOutputStream out )
>>>>> >> + {
>>>>> >> + try
>>>>> >> + {
>>>>> >> + out.closeEntry();
>>>>> >> + }
>>>>> >> + catch ( Exception ex )
>>>>> >> + {
>>>>> >> + throw new RuntimeException( "Failed to close the
>>>>> >> current
>>>>> >> ZipEntry", ex );
>>>>> >> + }
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> * Finishes writing the contents of the ZIP output stream
>>>>> >> without
>>>>> >> closing the underlying stream.
>>>>> >> *
>>>>> >> - * @param out the ZipOutputStream to write to.
>>>>> >> + * @param out the ZipOutputStream.
>>>>> >> */
>>>>> >> public static void finishZipEntry( ZipOutputStream out )
>>>>> >> {
>>>>> >> @@ -434,7 +451,7 @@
>>>>> >> }
>>>>> >> catch ( Exception ex )
>>>>> >> {
>>>>> >> - throw new RuntimeException( "Failed to finish
>>>>> >> ZipOutputStream", ex );
>>>>> >> + throw new RuntimeException( "Failed to finish the
>>>>> >> content
>>>>> >> of
>>>>> >> the ZipOutputStream", ex );
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>>>> >> 2010-01-27 21:45:11 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -146,6 +146,7 @@
>>>>> >> import_from_other_systems = Import from other systems
>>>>> >> DHIS14_import = DHIS 1.4 Import
>>>>> >> DHIS14_metadata_export = DHIS 1.4 Metadata Export
>>>>> >> +DHIS14_data_export = DHIS 1.4 Data Export
>>>>> >> IXF_import = IXF Import
>>>>> >> accept_incoming_records = Accept incoming records
>>>>> >> include_datavalues = Include data values
>>>>> >> @@ -442,4 +443,5 @@
>>>>> >> intro_ixf_metadata_export = Do an export of meta-data or
>>>>> >> dimensional
>>>>> >> data
>>>>> >> describing the facts. Indicator Transmission Format (IXF) is a
>>>>> >> standard
>>>>> >> developed by the WHO.
>>>>> >> intro_DHIS14_metadata_export = Do an export of meta-data or
>>>>> >> dimensional
>>>>> >> data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
>>>>> >> intro_DHIS14_detailed_metadata_export = Do an export of an
>>>>> >> detailed
>>>>> >> selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
>>>>> >> +intro_DHIS14_data_export = Do an export of data values or facts.
>>>>> >> DHIS
>>>>> >> 1.4
>>>>> >> is the predecessor of DHIS 2.
>>>>> >> intro_pdf_metadata_export = Portable Document Format (PDF) is a
>>>>> >> file
>>>>> >> format for document exchange.
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>>>> >> 2010-01-28 11:51:39 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -2,8 +2,9 @@
>>>>> >> <h3>$i18n.getString( "export_to_other_systems" )</h3>
>>>>> >>
>>>>> >> <ul class="introList">
>>>>> >> + #introListItem(
>>>>> >> "displayMetaDataExportForm.action?exportFormat=IXF"
>>>>> >> "ixf_metadata_export" )
>>>>> >> #introListItem(
>>>>> >> "displayDataValueExportForm.action?exportFormat=IXF"
>>>>> >> "ixf_data_export" )
>>>>> >> - #introListItem(
>>>>> >> "displayMetaDataExportForm.action?exportFormat=IXF"
>>>>> >> "ixf_metadata_export" )
>>>>> >> #introListItem(
>>>>> >> "displayMetaDataExportForm.action?exportFormat=DHIS14XML"
>>>>> >> "DHIS14_metadata_export" )
>>>>> >> #introListItem(
>>>>> >> "displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
>>>>> >> "DHIS14_detailed_metadata_export" )
>>>>> >> + #introListItem(
>>>>> >> "displayDataValueExportForm.action?exportFormat=DHIS14XML"
>>>>> >> "DHIS14_data_export" )
>>>>> >> #introListItem(
>>>>> >> "displayMetaDataExportForm.action?exportFormat=PDF"
>>>>> >> "pdf_metadata_export" )
>>>>> >> \ No newline at end of file
>>>>> >>
>>>>> >>
>>>>> >> _______________________________________________
>>>>> >> Mailing list: https://launchpad.net/~dhis2-devs
>>>>> >> Post to : dhis2-devs@lists.launchpad.net
>>>>> >> Unsubscribe : https://launchpad.net/~dhis2-devs
>>>>> >> More help : https://help.launchpad.net/ListHelp
>>>>> >>
>>>>> >
>>>>> >
>>>>> > _______________________________________________
>>>>> > Mailing list: https://launchpad.net/~dhis2-devs
>>>>> > Post to : dhis2-devs@lists.launchpad.net
>>>>> > Unsubscribe : https://launchpad.net/~dhis2-devs
>>>>> > More help : https://help.launchpad.net/ListHelp
>>>>> >
>>>>> >
>>>>
>>>>
>>>
>>
>> --
>> Sendt fra min mobile enhet
>>
>

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp

Hi Saptarshi

When I looked at this briefly last year I saw that this library
provides the lzma compression algorithm. As you say the algorithm is
implementable in java,

But 7z doesn't just do compression/decompression. It also archives
collections of files - like zip. The layout of these archives is not
in this sdk and I'm not sure if its documented anywhere. Now I'm sure
it could be reverse engineered from the c/c++ code but to the best of
my knowledge nobody has done it. So you can certainly lzma compress
individual streams (like you can gzip them), but that doesn't complete
the picture of creating a 7z archive.

Probably Jason's exec approach could work.

Cheers
Bob

···

On 8 February 2010 17:23, Saptarshi Purkayastha <sunbiz@gmail.com> wrote:

Isn't LZMA SDK providing the JAVA library?? and comparisons are here
---
Regards,
Saptarshi PURKAYASTHA
Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:17, Jason Pickering <jason.p.pickering@gmail.com> > wrote:

No clue if this is possible, but if the user was to provide a path to
a native OS executable, could DHIS push the job off to this?

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>:
> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>> Yup agree with that just could not make it write the appropriate zip
>> entries that way.. Open for being enlighted here..
>
> OK. Can't really look now but I guess it must be tricky :slight_smile: Will
> maybe look later in the week. If the day comes (and I don't see it
> soon) that you had an option to write to either 7z or zip format I'm
> just thinking you would want the packaging decoupled from the
> production of the streams.
>
> Bob
>
>>
>> 2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:
>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>>>>
>>>>
>>>> 2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>
>>>>>
>>>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>>>>> >
>>>>> >
>>>>> > On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:
>>>>> >>
>>>>> >> ------------------------------------------------------------
>>>>> >> revno: 1404
>>>>> >> committer: Lars Helge Oeverland <larshelge@gmail.com>
>>>>> >> branch nick: trunk
>>>>> >> timestamp: Mon 2010-02-08 11:56:08 +0100
>>>>> >> message:
>>>>> >> Implemented DHIS 1.4 export of data values
>>>>> >> modified:
>>>>> >
>>>>> >
>>>>> > There is actually still a snag here. DHIS 1.4 only accepts the
>>>>> > 7zip/lzma
>>>>> > format currently. I have talked Greg into making 1.4 accept
>>>>> > zip/deflate
>>>>> > too.
>>>>>
>>>>> Isn't it better to have gzip/deflate? We are not talking about
>>>>> compressing an archive of files but rather compressing a single
>>>>> stream.
>>>>>
>>>>> Also I think the original "void write( BufferedWriter writer,
>>>>> ExportParams params )" might be better than "void write(
>>>>> ZipOutputStream out, ExportParams params )". It seems unnecessary
>>>>> that the convertor should have to know anything about zip, gzip,
>>>>> 7zip
>>>>> or what have you. It should know how to write csv to a stream.
>>>>>
>>>>> I suspect that how the stream is later compressed is better deferred
>>>>> to
>>>>> later.
>>>>
>>>> Problem is that DHIS 1.4 uses a CSV file for data and an XML file for
>>>> meta-data and keeps both inside the archive... I was was not able to
>>>> have
>>>> multiple zip entries while using the Writer..
>>>
>>> Ah. Ok. I do remember. Then you would need an archive (zip or the
>>> seven thing) rather a gzipped stream.
>>>
>>> But does your CSV writer need to know that? Surely it just has an
>>> interest in churning out csv datavalues. Some other component should
>>> put the csv stream together with the xml stream into the zip.
>>>
>>>>
>>>>>
>>>>> Cheers
>>>>> Bob
>>>>>
>>>>> >
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>>>> >>
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>>>> >>
>>>>> >>
>>>>> >> --
>>>>> >> lp:dhis2
>>>>> >> trunk : Code : DHIS
>>>>> >>
>>>>> >> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
>>>>> >> To unsubscribe from this branch go to
>>>>> >>
>>>>> >>
>>>>> >> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>>>> >> 2009-03-03 16:46:36 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -28,7 +28,7 @@
>>>>> >> */
>>>>> >>
>>>>> >> import java.io.BufferedReader;
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> +import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> /**
>>>>> >> * @author Lars Helge Overland
>>>>> >> @@ -36,7 +36,7 @@
>>>>> >> */
>>>>> >> public interface CSVConverter
>>>>> >> {
>>>>> >> - void write( BufferedWriter writer, ExportParams params );
>>>>> >> + void write( ZipOutputStream out, ExportParams params );
>>>>> >>
>>>>> >> void read( BufferedReader reader, ImportParams params );
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>>>> >> 2009-11-02 15:55:44 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -52,7 +52,8 @@
>>>>> >>
>>>>> >> private List<XMLConverter> xsdConverters = new
>>>>> >> ArrayList<XMLConverter>();
>>>>> >> private List<XMLConverter> xmlConverters = new
>>>>> >> ArrayList<XMLConverter>();
>>>>> >> -
>>>>> >> + private List<CSVConverter> csvConverters = new
>>>>> >> ArrayList<CSVConverter>();
>>>>> >> +
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Parameters
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -122,6 +123,11 @@
>>>>> >> this.xmlConverters.add( converter );
>>>>> >> }
>>>>> >>
>>>>> >> + public void registerCSVConverter ( CSVConverter converter )
>>>>> >> + {
>>>>> >> + this.csvConverters.add( converter );
>>>>> >> + }
>>>>> >> +
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Thread implementation
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -159,9 +165,20 @@
>>>>> >> }
>>>>> >>
>>>>> >> afterXML( writer );
>>>>> >> -
>>>>> >> +
>>>>> >> closeDocument( writer );
>>>>> >> -
>>>>> >> +
>>>>> >> + StreamUtils.closeZipEntry( zipOutputStream );
>>>>> >> +
>>>>> >> + //
>>>>> >> -----------------------------------------------------------------
>>>>> >> + // CSV
>>>>> >> + //
>>>>> >> -----------------------------------------------------------------
>>>>> >> +
>>>>> >> + for ( CSVConverter converter : csvConverters )
>>>>> >> + {
>>>>> >> + converter.write( zipOutputStream, params );
>>>>> >> + }
>>>>> >> +
>>>>> >> log.info( "Export done" );
>>>>> >> }
>>>>> >> catch ( Exception ex )
>>>>> >> @@ -172,12 +189,10 @@
>>>>> >> }
>>>>> >> finally
>>>>> >> {
>>>>> >> - StreamUtils.finishZipEntry( zipOutputStream );
>>>>> >> + writer.closeWriter();
>>>>> >>
>>>>> >> StreamUtils.closeOutputStream( zipOutputStream );
>>>>> >>
>>>>> >> - writer.closeWriter();
>>>>> >> -
>>>>> >> NameMappingUtil.clearMapping();
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>>>> >> 2009-06-10 22:25:07 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -27,14 +27,17 @@
>>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>>>>> >> */
>>>>> >>
>>>>> >> -import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>>>>> >> import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>>>>> >>
>>>>> >> import java.io.BufferedReader;
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> import java.io.IOException;
>>>>> >> import java.util.Iterator;
>>>>> >> import java.util.SortedMap;
>>>>> >> +import java.util.zip.ZipEntry;
>>>>> >> +import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> import org.hisp.dhis.importexport.CSVConverter;
>>>>> >> import org.hisp.dhis.importexport.ExportParams;
>>>>> >> @@ -69,27 +72,29 @@
>>>>> >> // CSVConverter implementation
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >>
>>>>> >> - public void write( BufferedWriter writer, ExportParams
>>>>> >> params )
>>>>> >> + public void write( ZipOutputStream out, ExportParams params
>>>>> >> )
>>>>> >> {
>>>>> >> try
>>>>> >> {
>>>>> >> - for ( Integer id : params.getReportTables() ) //TODO
>>>>> >> more
>>>>> >> than one?
>>>>> >> + for ( Integer id : params.getReportTables() )
>>>>> >> {
>>>>> >> + out.putNextEntry( new ZipEntry( "ReportTable" +
>>>>> >> id +
>>>>> >> CSV_EXTENSION ) );
>>>>> >> +
>>>>> >> ReportTableData data =
>>>>> >> reportTableService.getReportTableData( id, params.getFormat() );
>>>>> >>
>>>>> >> Iterator<String> columns =
>>>>> >> data.getPrettyPrintColumns().iterator();
>>>>> >>
>>>>> >> while ( columns.hasNext() )
>>>>> >> {
>>>>> >> - writer.write( csvEncode( columns.next() ) );
>>>>> >> + out.write( csvEncode( columns.next()
>>>>> >> ).getBytes()
>>>>> >> );
>>>>> >>
>>>>> >> if ( columns.hasNext() )
>>>>> >> {
>>>>> >> - writer.write( SEPARATOR );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> - writer.newLine();
>>>>> >> + out.write( NEWLINE );
>>>>> >>
>>>>> >> for ( SortedMap<Integer, String> row :
>>>>> >> data.getRows()
>>>>> >> )
>>>>> >> {
>>>>> >> @@ -97,15 +102,15 @@
>>>>> >>
>>>>> >> while ( values.hasNext() )
>>>>> >> {
>>>>> >> - writer.write( csvEncode( values.next() )
>>>>> >> );
>>>>> >> + out.write( csvEncode( values.next()
>>>>> >> ).getBytes()
>>>>> >> );
>>>>> >>
>>>>> >> if ( values.hasNext() )
>>>>> >> {
>>>>> >> - writer.write( SEPARATOR );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> - writer.newLine();
>>>>> >> + out.write( NEWLINE );
>>>>> >> }
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>>>> >> 2009-06-10 22:25:07 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -27,9 +27,9 @@
>>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>>>>> >> */
>>>>> >>
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> import java.util.ArrayList;
>>>>> >> import java.util.List;
>>>>> >> +import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> import org.apache.commons.logging.Log;
>>>>> >> import org.apache.commons.logging.LogFactory;
>>>>> >> @@ -48,13 +48,6 @@
>>>>> >> {
>>>>> >> private static final Log log = LogFactory.getLog(
>>>>> >> CSVExportPipeThread.class );
>>>>> >>
>>>>> >> - private BufferedWriter writer;
>>>>> >> -
>>>>> >> - public void setWriter( BufferedWriter writer )
>>>>> >> - {
>>>>> >> - this.writer = writer;
>>>>> >> - }
>>>>> >> -
>>>>> >> private ExportParams params;
>>>>> >>
>>>>> >> public void setParams( ExportParams params )
>>>>> >> @@ -62,6 +55,13 @@
>>>>> >> this.params = params;
>>>>> >> }
>>>>> >>
>>>>> >> + private ZipOutputStream outputStream;
>>>>> >> +
>>>>> >> + public void setOutputStream( ZipOutputStream outputStream )
>>>>> >> + {
>>>>> >> + this.outputStream = outputStream;
>>>>> >> + }
>>>>> >> +
>>>>> >> private List<CSVConverter> converters = new
>>>>> >> ArrayList<CSVConverter>();
>>>>> >>
>>>>> >> public void registerCSVConverter( CSVConverter converter )
>>>>> >> @@ -90,14 +90,18 @@
>>>>> >>
>>>>> >> for ( CSVConverter converter : converters )
>>>>> >> {
>>>>> >> - converter.write( writer, params );
>>>>> >> + converter.write( outputStream, params );
>>>>> >> }
>>>>> >>
>>>>> >> log.info( "Export finished" );
>>>>> >> }
>>>>> >> + catch ( Exception ex )
>>>>> >> + {
>>>>> >> + throw new RuntimeException( ex );
>>>>> >> + }
>>>>> >> finally
>>>>> >> {
>>>>> >> - StreamUtils.closeWriter( writer );
>>>>> >> + StreamUtils.closeOutputStream( outputStream );
>>>>> >> }
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>>>> >> 2009-06-10 22:25:07 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -28,13 +28,11 @@
>>>>> >> */
>>>>> >>
>>>>> >> import java.io.BufferedInputStream;
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> +import java.io.BufferedOutputStream;
>>>>> >> import java.io.IOException;
>>>>> >> import java.io.InputStream;
>>>>> >> -import java.io.OutputStreamWriter;
>>>>> >> import java.io.PipedInputStream;
>>>>> >> import java.io.PipedOutputStream;
>>>>> >> -import java.util.zip.ZipEntry;
>>>>> >> import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> import org.hibernate.SessionFactory;
>>>>> >> @@ -50,8 +48,6 @@
>>>>> >> public class DefaultCSVExportService
>>>>> >> implements ExportService
>>>>> >> {
>>>>> >> - private static final String ZIP_ENTRY_NAME = "Export.csv";
>>>>> >> -
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Dependencies
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -87,20 +83,18 @@
>>>>> >>
>>>>> >> PipedInputStream in = new PipedInputStream( out );
>>>>> >>
>>>>> >> - ZipOutputStream zipOut = new ZipOutputStream( out );
>>>>> >> + ZipOutputStream zipOut = new ZipOutputStream( new
>>>>> >> BufferedOutputStream( out ) );
>>>>> >>
>>>>> >> - zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME )
>>>>> >> );
>>>>> >> + //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME
>>>>> >> ) );
>>>>> >>
>>>>> >> - BufferedWriter writer = new BufferedWriter( new
>>>>> >> OutputStreamWriter( zipOut ) );
>>>>> >> -
>>>>> >> //
>>>>> >> -----------------------------------------------------------------
>>>>> >> // Writes to one end of the pipe
>>>>> >> //
>>>>> >> -----------------------------------------------------------------
>>>>> >>
>>>>> >> CSVExportPipeThread thread = new CSVExportPipeThread(
>>>>> >> sessionFactory );
>>>>> >>
>>>>> >> - thread.setWriter( writer );
>>>>> >> thread.setParams( params );
>>>>> >> + thread.setOutputStream( zipOut );
>>>>> >>
>>>>> >> thread.registerCSVConverter( new
>>>>> >> ReportTableDataConverter(
>>>>> >> reportTableService ) );
>>>>> >>
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>>>> >> 2009-04-16 09:53:17 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -33,15 +33,80 @@
>>>>> >> */
>>>>> >> public class CsvUtil
>>>>> >> {
>>>>> >> - public static final char SEPARATOR = ',';
>>>>> >> -
>>>>> >> - private static final String ENCLOSURE = "\"";
>>>>> >> -
>>>>> >> - public static String csvEncode( String string )
>>>>> >> - {
>>>>> >> - string = string.replaceAll( ENCLOSURE, ENCLOSURE +
>>>>> >> ENCLOSURE
>>>>> >> );
>>>>> >> - string = ENCLOSURE + string + ENCLOSURE;
>>>>> >> + public static final String SEPARATOR = ",";
>>>>> >> + public static final byte SEPARATOR_B =
>>>>> >> SEPARATOR.getBytes();
>>>>> >> + public static final byte NEWLINE = "\n".getBytes();
>>>>> >> +
>>>>> >> + public static final String CSV_EXTENSION = ".csv";
>>>>> >> + private static final String ENCLOSURE = "\"";
>>>>> >> + private static final String EMPTY = "";
>>>>> >> +
>>>>> >> + /**
>>>>> >> + * Encodes the given value to a CSV acceptable value.
>>>>> >> + *
>>>>> >> + * @param value the value.
>>>>> >> + * @return the CSV encoded value.
>>>>> >> + */
>>>>> >> + public static String csvEncode( int value )
>>>>> >> + {
>>>>> >> + return csvEncode( String.valueOf( value ) );
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> + * Encodes the given value to a CSV acceptable value.
>>>>> >> + *
>>>>> >> + * @param value the value.
>>>>> >> + * @return the CSV encoded value.
>>>>> >> + */
>>>>> >> + public static String csvEncode( String value )
>>>>> >> + {
>>>>> >> + if ( value == null )
>>>>> >> + {
>>>>> >> + value = EMPTY;
>>>>> >> + }
>>>>> >> + else
>>>>> >> + {
>>>>> >> + value = value.replaceAll( ENCLOSURE, ENCLOSURE +
>>>>> >> ENCLOSURE
>>>>> >> );
>>>>> >> + value = ENCLOSURE + value + ENCLOSURE;
>>>>> >> + }
>>>>> >> +
>>>>> >> + return value;
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> + * Appends a separator to the value and returns the value as
>>>>> >> a
>>>>> >> byte
>>>>> >> array.
>>>>> >> + *
>>>>> >> + * @param value the value.
>>>>> >> + * @return a byte araray.
>>>>> >> + */
>>>>> >> + public static byte getCsvValue( int value )
>>>>> >> + {
>>>>> >> + return getCsvEndValue( value + SEPARATOR );
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> + * Appends a separator to the value and returns the value as
>>>>> >> a
>>>>> >> byte
>>>>> >> array.
>>>>> >> + *
>>>>> >> + * @param value the value.
>>>>> >> + * @return a byte araray.
>>>>> >> + */
>>>>> >> + public static byte getCsvValue( String value )
>>>>> >> + {
>>>>> >> + return getCsvEndValue( value + SEPARATOR );
>>>>> >> + }
>>>>> >> +
>>>>> >> + public static byte getCsvEndValue( int value )
>>>>> >> + {
>>>>> >> + return getCsvEndValue( String.valueOf( value ) );
>>>>> >> + }
>>>>> >> +
>>>>> >> + public static byte getCsvEndValue( String value )
>>>>> >> + {
>>>>> >> + if ( value == null )
>>>>> >> + {
>>>>> >> + return EMPTY.getBytes();
>>>>> >> + }
>>>>> >>
>>>>> >> - return string;
>>>>> >> + return ( value ).getBytes();
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>>>> >> 2010-02-08 07:04:26 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -27,17 +27,28 @@
>>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
>>>>> >> */
>>>>> >>
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
>>>>> >> +import static
>>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
>>>>> >> +
>>>>> >> import java.io.BufferedReader;
>>>>> >> -import java.io.BufferedWriter;
>>>>> >> import java.io.IOException;
>>>>> >> +import java.util.Collection;
>>>>> >> import java.util.Map;
>>>>> >> +import java.util.zip.ZipEntry;
>>>>> >> +import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> import org.amplecode.quick.BatchHandler;
>>>>> >> +import org.amplecode.quick.StatementManager;
>>>>> >> import org.hisp.dhis.dataelement.DataElement;
>>>>> >> import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
>>>>> >> import org.hisp.dhis.dataelement.DataElementCategoryService;
>>>>> >> +import org.hisp.dhis.datamart.DataMartService;
>>>>> >> import org.hisp.dhis.datavalue.DataValue;
>>>>> >> import org.hisp.dhis.datavalue.DataValueService;
>>>>> >> +import org.hisp.dhis.datavalue.DeflatedDataValue;
>>>>> >> import org.hisp.dhis.importexport.CSVConverter;
>>>>> >> import org.hisp.dhis.importexport.ExportParams;
>>>>> >> import org.hisp.dhis.importexport.GroupMemberType;
>>>>> >> @@ -47,7 +58,10 @@
>>>>> >> import
>>>>> >> org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
>>>>> >> import org.hisp.dhis.organisationunit.OrganisationUnit;
>>>>> >> import org.hisp.dhis.period.Period;
>>>>> >> +import org.hisp.dhis.period.PeriodService;
>>>>> >> +import org.hisp.dhis.system.util.DateUtils;
>>>>> >> import org.hisp.dhis.system.util.MimicingHashMap;
>>>>> >> +import org.hisp.dhis.system.util.StreamUtils;
>>>>> >>
>>>>> >> /**
>>>>> >> * @author Lars Helge Overland
>>>>> >> @@ -57,8 +71,11 @@
>>>>> >> extends AbstractDataValueConverter implements CSVConverter
>>>>> >> {
>>>>> >> private static final String SEPARATOR = ",";
>>>>> >> + private static final String FILENAME = "RoutineData.txt";
>>>>> >>
>>>>> >> private DataElementCategoryService categoryService;
>>>>> >> + private PeriodService periodService;
>>>>> >> + private StatementManager statementManager;
>>>>> >>
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Properties
>>>>> >> @@ -72,6 +89,14 @@
>>>>> >> // Constructor
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >>
>>>>> >> + public DataValueConverter( PeriodService periodService,
>>>>> >> DataMartService dataMartService,
>>>>> >> + StatementManager statementManager )
>>>>> >> + {
>>>>> >> + this.periodService = periodService;
>>>>> >> + this.dataMartService = dataMartService;
>>>>> >> + this.statementManager = statementManager;
>>>>> >> + }
>>>>> >> +
>>>>> >> /**
>>>>> >> * Constructor for read operations.
>>>>> >> */
>>>>> >> @@ -95,9 +120,81 @@
>>>>> >> // CSVConverter implementation
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >>
>>>>> >> - public void write( BufferedWriter writer, ExportParams
>>>>> >> params )
>>>>> >> + public void write( ZipOutputStream out, ExportParams params
>>>>> >> )
>>>>> >> {
>>>>> >> - // Not implemented
>>>>> >> + try
>>>>> >> + {
>>>>> >> + out.putNextEntry( new ZipEntry( FILENAME ) );
>>>>> >> +
>>>>> >> + out.write( getCsvValue( csvEncode( "RoutineDataID" )
>>>>> >> ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "OrgUnitID" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "DataElementID" )
>>>>> >> ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "DataPeriodID" )
>>>>> >> ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryText" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryYesNo" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryNumber" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryDate" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryMemo" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "EntryObject" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvValue( csvEncode( "Check" ) ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "Verified" ) ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "Deleted" ) ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "Comment" ) ) );
>>>>> >> + out.write( getCsvValue( csvEncode( "LastUserID" ) )
>>>>> >> );
>>>>> >> + out.write( getCsvEndValue( csvEncode( "LastUpdated"
>>>>> >> ) )
>>>>> >> );
>>>>> >> +
>>>>> >> + out.write( NEWLINE );
>>>>> >> +
>>>>> >> + if ( params.isIncludeDataValues() )
>>>>> >> + {
>>>>> >> + if ( params.getStartDate() != null &&
>>>>> >> params.getEndDate()
>>>>> >> != null )
>>>>> >> + {
>>>>> >> + Collection<DeflatedDataValue> values = null;
>>>>> >> +
>>>>> >> + Collection<Period> periods =
>>>>> >> periodService.getIntersectingPeriods( params.getStartDate(),
>>>>> >> params.getEndDate() );
>>>>> >> +
>>>>> >> + statementManager.initialise();
>>>>> >> +
>>>>> >> + for ( final Integer element :
>>>>> >> params.getDataElements() )
>>>>> >> + {
>>>>> >> + for ( final Period period : periods )
>>>>> >> + {
>>>>> >> + values =
>>>>> >> dataMartService.getDeflatedDataValues( element, period.getId(),
>>>>> >> params.getOrganisationUnits() );
>>>>> >> +
>>>>> >> + for ( final DeflatedDataValue value
>>>>> >> :
>>>>> >> values
>>>>> >> )
>>>>> >> + {
>>>>> >> + out.write( getCsvValue( 0 ) );
>>>>> >> + out.write( getCsvValue(
>>>>> >> value.getSourceId() ) );
>>>>> >> + out.write( getCsvValue(
>>>>> >> value.getDataElementId() ) );
>>>>> >> + out.write( getCsvValue(
>>>>> >> value.getPeriodId() ) );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( getCsvValue(
>>>>> >> csvEncode(
>>>>> >> value.getValue() ) ) );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( SEPARATOR_B );
>>>>> >> + out.write( getCsvValue( 0 ) );
>>>>> >> + out.write( getCsvValue( 0 ) );
>>>>> >> + out.write( getCsvValue( 0 ) );
>>>>> >> + out.write( getCsvValue(
>>>>> >> csvEncode(
>>>>> >> value.getComment() ) ) );
>>>>> >> + out.write( getCsvValue( 1 ) );
>>>>> >> + out.write( getCsvEndValue(
>>>>> >> DateUtils.getAccessDateString( value.getTimestamp() ) ) );
>>>>> >> +
>>>>> >> + out.write( NEWLINE );
>>>>> >> + }
>>>>> >> + }
>>>>> >> + }
>>>>> >> +
>>>>> >> + statementManager.destroy();
>>>>> >> + }
>>>>> >> + }
>>>>> >> +
>>>>> >> + StreamUtils.closeZipEntry( out );
>>>>> >> + }
>>>>> >> + catch ( IOException ex )
>>>>> >> + {
>>>>> >> + throw new RuntimeException( "Failed to write data",
>>>>> >> ex );
>>>>> >> + }
>>>>> >> }
>>>>> >>
>>>>> >> public void read( BufferedReader reader, ImportParams params
>>>>> >> )
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>>>> >> 2009-11-07 14:09:00 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -35,16 +35,19 @@
>>>>> >> import java.util.zip.ZipEntry;
>>>>> >> import java.util.zip.ZipOutputStream;
>>>>> >>
>>>>> >> +import org.amplecode.quick.StatementManager;
>>>>> >> import org.amplecode.staxwax.factory.XMLFactory;
>>>>> >> import org.amplecode.staxwax.writer.XMLWriter;
>>>>> >> import org.hibernate.SessionFactory;
>>>>> >> import org.hisp.dhis.dataelement.DataElementService;
>>>>> >> +import org.hisp.dhis.datamart.DataMartService;
>>>>> >> import org.hisp.dhis.importexport.ExportParams;
>>>>> >> import org.hisp.dhis.importexport.ExportPipeThread;
>>>>> >> import org.hisp.dhis.importexport.ExportService;
>>>>> >> import
>>>>> >>
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
>>>>> >> +import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
>>>>> >> @@ -60,6 +63,7 @@
>>>>> >> import
>>>>> >>
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
>>>>> >> import
>>>>> >>
>>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
>>>>> >> import org.hisp.dhis.indicator.IndicatorService;
>>>>> >> +import org.hisp.dhis.period.PeriodService;
>>>>> >>
>>>>> >> /**
>>>>> >> * @author Lars Helge Overland
>>>>> >> @@ -100,6 +104,27 @@
>>>>> >> this.indicatorService = indicatorService;
>>>>> >> }
>>>>> >>
>>>>> >> + private PeriodService periodService;
>>>>> >> +
>>>>> >> + public void setPeriodService( PeriodService periodService )
>>>>> >> + {
>>>>> >> + this.periodService = periodService;
>>>>> >> + }
>>>>> >> +
>>>>> >> + private DataMartService dataMartService;
>>>>> >> +
>>>>> >> + public void setDataMartService( DataMartService
>>>>> >> dataMartService )
>>>>> >> + {
>>>>> >> + this.dataMartService = dataMartService;
>>>>> >> + }
>>>>> >> +
>>>>> >> + private StatementManager statementManager;
>>>>> >> +
>>>>> >> + public void setStatementManager( StatementManager
>>>>> >> statementManager
>>>>> >> )
>>>>> >> + {
>>>>> >> + this.statementManager = statementManager;
>>>>> >> + }
>>>>> >> +
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // ExportService implementation
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -122,7 +147,7 @@
>>>>> >> zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
>>>>> >>
>>>>> >> XMLWriter writer = XMLFactory.getPlainXMLWriter(
>>>>> >> zipOut );
>>>>> >> -
>>>>> >> +
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> // Writes to one end of the pipe
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >> @@ -156,6 +181,8 @@
>>>>> >> thread.registerXMLConverter( new UserConverter() );
>>>>> >> thread.registerXMLConverter( new UserRoleConverter()
>>>>> >> );
>>>>> >>
>>>>> >> + thread.registerCSVConverter( new DataValueConverter(
>>>>> >> periodService, dataMartService, statementManager ) );
>>>>> >> +
>>>>> >> thread.start();
>>>>> >>
>>>>> >> //
>>>>> >>
>>>>> >>
>>>>> >> -------------------------------------------------------------------------
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>>>> >> 2010-02-02 19:21:58 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -381,6 +381,9 @@
>>>>> >> <property name="sessionFactory"
>>>>> >> ref="sessionFactory" />
>>>>> >> <property name="dataElementService"
>>>>> >> ref="org.hisp.dhis.dataelement.DataElementService" />
>>>>> >> <property name="indicatorService"
>>>>> >> ref="org.hisp.dhis.indicator.IndicatorService" />
>>>>> >> + <property name="periodService"
>>>>> >> ref="org.hisp.dhis.period.PeriodService" />
>>>>> >> + <property name="dataMartService"
>>>>> >> ref="org.hisp.dhis.datamart.DataMartService" />
>>>>> >> + <property name="statementManager"
>>>>> >> ref="statementManager"
>>>>> >> />
>>>>> >> </bean>
>>>>> >>
>>>>> >> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - -
>>>>> >> - -
>>>>> >> -
>>>>> >> -
>>>>> >> -->
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>>>> >> 2009-11-19 19:16:46 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -49,6 +49,20 @@
>>>>> >> public static final String DEFAULT_DATE_FORMAT =
>>>>> >> "yyyy-MM-dd";
>>>>> >>
>>>>> >> /**
>>>>> >> + * Formats a Date to the Access date format.
>>>>> >> + *
>>>>> >> + * @param date the Date to parse.
>>>>> >> + * @return a formatted date string.
>>>>> >> + */
>>>>> >> + public static String getAccessDateString( Date date )
>>>>> >> + {
>>>>> >> + final SimpleDateFormat format = new SimpleDateFormat();
>>>>> >> + format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
>>>>> >> +
>>>>> >> + return date != null ? format.format( date ) : null;
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> * Formats a Date to the IXF date format which is
>>>>> >> YYYY-MM-DD'T'HH:MM:SS.
>>>>> >> *
>>>>> >> * @param date the Date to parse.
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>>>> >> 2009-12-19 15:20:41 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -422,9 +422,26 @@
>>>>> >> }
>>>>> >>
>>>>> >> /**
>>>>> >> + * Closes the current ZipEntry and positions the stream for
>>>>> >> writing
>>>>> >> the next entry.
>>>>> >> + *
>>>>> >> + * @param out the ZipOutputStream.
>>>>> >> + */
>>>>> >> + public static void closeZipEntry( ZipOutputStream out )
>>>>> >> + {
>>>>> >> + try
>>>>> >> + {
>>>>> >> + out.closeEntry();
>>>>> >> + }
>>>>> >> + catch ( Exception ex )
>>>>> >> + {
>>>>> >> + throw new RuntimeException( "Failed to close the
>>>>> >> current
>>>>> >> ZipEntry", ex );
>>>>> >> + }
>>>>> >> + }
>>>>> >> +
>>>>> >> + /**
>>>>> >> * Finishes writing the contents of the ZIP output stream
>>>>> >> without
>>>>> >> closing the underlying stream.
>>>>> >> *
>>>>> >> - * @param out the ZipOutputStream to write to.
>>>>> >> + * @param out the ZipOutputStream.
>>>>> >> */
>>>>> >> public static void finishZipEntry( ZipOutputStream out )
>>>>> >> {
>>>>> >> @@ -434,7 +451,7 @@
>>>>> >> }
>>>>> >> catch ( Exception ex )
>>>>> >> {
>>>>> >> - throw new RuntimeException( "Failed to finish
>>>>> >> ZipOutputStream", ex );
>>>>> >> + throw new RuntimeException( "Failed to finish the
>>>>> >> content
>>>>> >> of
>>>>> >> the ZipOutputStream", ex );
>>>>> >> }
>>>>> >> }
>>>>> >>
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>>>> >> 2010-01-27 21:45:11 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -146,6 +146,7 @@
>>>>> >> import_from_other_systems = Import from other systems
>>>>> >> DHIS14_import = DHIS 1.4 Import
>>>>> >> DHIS14_metadata_export = DHIS 1.4 Metadata Export
>>>>> >> +DHIS14_data_export = DHIS 1.4 Data Export
>>>>> >> IXF_import = IXF Import
>>>>> >> accept_incoming_records = Accept incoming records
>>>>> >> include_datavalues = Include data values
>>>>> >> @@ -442,4 +443,5 @@
>>>>> >> intro_ixf_metadata_export = Do an export of meta-data or
>>>>> >> dimensional
>>>>> >> data
>>>>> >> describing the facts. Indicator Transmission Format (IXF) is a
>>>>> >> standard
>>>>> >> developed by the WHO.
>>>>> >> intro_DHIS14_metadata_export = Do an export of meta-data or
>>>>> >> dimensional
>>>>> >> data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.
>>>>> >> intro_DHIS14_detailed_metadata_export = Do an export of an
>>>>> >> detailed
>>>>> >> selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
>>>>> >> +intro_DHIS14_data_export = Do an export of data values or facts.
>>>>> >> DHIS
>>>>> >> 1.4
>>>>> >> is the predecessor of DHIS 2.
>>>>> >> intro_pdf_metadata_export = Portable Document Format (PDF) is a
>>>>> >> file
>>>>> >> format for document exchange.
>>>>> >>
>>>>> >> === modified file
>>>>> >>
>>>>> >>
>>>>> >> 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
>>>>> >> ---
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>>>> >> 2010-01-28 11:51:39 +0000
>>>>> >> +++
>>>>> >>
>>>>> >>
>>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>>>>> >> 2010-02-08 10:56:08 +0000
>>>>> >> @@ -2,8 +2,9 @@
>>>>> >> <h3>$i18n.getString( "export_to_other_systems" )</h3>
>>>>> >>
>>>>> >> <ul class="introList">
>>>>> >> + #introListItem(
>>>>> >> "displayMetaDataExportForm.action?exportFormat=IXF"
>>>>> >> "ixf_metadata_export" )
>>>>> >> #introListItem(
>>>>> >> "displayDataValueExportForm.action?exportFormat=IXF"
>>>>> >> "ixf_data_export" )
>>>>> >> - #introListItem(
>>>>> >> "displayMetaDataExportForm.action?exportFormat=IXF"
>>>>> >> "ixf_metadata_export" )
>>>>> >> #introListItem(
>>>>> >> "displayMetaDataExportForm.action?exportFormat=DHIS14XML"
>>>>> >> "DHIS14_metadata_export" )
>>>>> >> #introListItem(
>>>>> >> "displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
>>>>> >> "DHIS14_detailed_metadata_export" )
>>>>> >> + #introListItem(
>>>>> >> "displayDataValueExportForm.action?exportFormat=DHIS14XML"
>>>>> >> "DHIS14_data_export" )
>>>>> >> #introListItem(
>>>>> >> "displayMetaDataExportForm.action?exportFormat=PDF"
>>>>> >> "pdf_metadata_export" )
>>>>> >> \ No newline at end of file
>>>>> >>
>>>>> >>
>>>>> >> _______________________________________________
>>>>> >> Mailing list: https://launchpad.net/~dhis2-devs
>>>>> >> Post to : dhis2-devs@lists.launchpad.net
>>>>> >> Unsubscribe : https://launchpad.net/~dhis2-devs
>>>>> >> More help : https://help.launchpad.net/ListHelp
>>>>> >>
>>>>> >
>>>>> >
>>>>> > _______________________________________________
>>>>> > Mailing list: https://launchpad.net/~dhis2-devs
>>>>> > Post to : dhis2-devs@lists.launchpad.net
>>>>> > Unsubscribe : https://launchpad.net/~dhis2-devs
>>>>> > More help : https://help.launchpad.net/ListHelp
>>>>> >
>>>>> >
>>>>
>>>>
>>>
>>
>> --
>> Sendt fra min mobile enhet
>>
>

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp

Thanks Bob,… that makes the need more clear…

We should use this then if we have to deal with 7z archives

···

Regards,
Saptarshi PURKAYASTHA
Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com

You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:44, Bob Jolliffe bobjolliffe@gmail.com wrote:

Hi Saptarshi

When I looked at this briefly last year I saw that this library

provides the lzma compression algorithm. As you say the algorithm is

implementable in java,

But 7z doesn’t just do compression/decompression. It also archives

collections of files - like zip. The layout of these archives is not

in this sdk and I’m not sure if its documented anywhere. Now I’m sure

it could be reverse engineered from the c/c++ code but to the best of

my knowledge nobody has done it. So you can certainly lzma compress

individual streams (like you can gzip them), but that doesn’t complete

the picture of creating a 7z archive.

Probably Jason’s exec approach could work.

Cheers

Bob

On 8 February 2010 17:23, Saptarshi Purkayastha sunbiz@gmail.com wrote:

Isn’t LZMA SDK providing the JAVA library?? and comparisons are here


Regards,

Saptarshi PURKAYASTHA

Director R & D, HISP India

Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com

You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:17, Jason Pickering jason.p.pickering@gmail.com > > > wrote:

No clue if this is possible, but if the user was to provide a path to

a native OS executable, could DHIS push the job off to this?

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com:

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

Yup agree with that just could not make it write the appropriate zip

entries that way… Open for being enlighted here…

OK. Can’t really look now but I guess it must be tricky :slight_smile: Will

maybe look later in the week. If the day comes (and I don’t see it

soon) that you had an option to write to either 7z or zip format I’m

just thinking you would want the packaging decoupled from the

production of the streams.

Bob

2010/2/8, Bob Jolliffe bobjolliffe@gmail.com:

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

2010/2/8 Bob Jolliffe bobjolliffe@gmail.com

2010/2/8 Lars Helge Øverland larshelge@gmail.com:

On Mon, Feb 8, 2010 at 11:59 AM, noreply@launchpad.net wrote:


revno: 1404

committer: Lars Helge Oeverland larshelge@gmail.com

branch nick: trunk

timestamp: Mon 2010-02-08 11:56:08 +0100

message:

Implemented DHIS 1.4 export of data values

modified:

There is actually still a snag here. DHIS 1.4 only accepts the

7zip/lzma

format currently. I have talked Greg into making 1.4 accept

zip/deflate

too.

Isn’t it better to have gzip/deflate? We are not talking about

compressing an archive of files but rather compressing a single

stream.

Also I think the original "void write( BufferedWriter writer,

ExportParams params )" might be better than "void write(

ZipOutputStream out, ExportParams params )". It seems unnecessary

that the convertor should have to know anything about zip, gzip,

7zip

or what have you. It should know how to write csv to a stream.

I suspect that how the stream is later compressed is better deferred

to

later.

Problem is that DHIS 1.4 uses a CSV file for data and an XML file for

meta-data and keeps both inside the archive… I was was not able to

have

multiple zip entries while using the Writer…

Ah. Ok. I do remember. Then you would need an archive (zip or the

seven thing) rather a gzipped stream.

But does your CSV writer need to know that? Surely it just has an

interest in churning out csv datavalues. Some other component should

put the csv stream together with the xml stream into the zip.

Cheers

Bob

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

lp:dhis2

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.

To unsubscribe from this branch go to

https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2009-03-03 16:46:36 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

2010-02-08 10:56:08 +0000

@@ -28,7 +28,7 @@

*/

import java.io.BufferedReader;

-import java.io.BufferedWriter;

+import java.util.zip.ZipOutputStream;

/**

  • @author Lars Helge Overland

@@ -36,7 +36,7 @@

*/

public interface CSVConverter

{

  • void write( BufferedWriter writer, ExportParams params );
  • void write( ZipOutputStream out, ExportParams params );
void read( BufferedReader reader, ImportParams params );

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2009-11-02 15:55:44 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -52,7 +52,8 @@

private List<XMLConverter> xsdConverters = new

ArrayList();

private List<XMLConverter> xmlConverters = new

ArrayList();

  • private List csvConverters = new

ArrayList();

//

// Parameters
//

@@ -122,6 +123,11 @@

    this.xmlConverters.add( converter );
}
  • public void registerCSVConverter ( CSVConverter converter )
  • {
  •    this.csvConverters.add( converter );
    
  • }
//

// Thread implementation
//

@@ -159,9 +165,20 @@

        }
        afterXML( writer );
        closeDocument( writer );
  •        StreamUtils.closeZipEntry( zipOutputStream );
    
  •        //
    

  •        // CSV
    
  •        //
    

  •        for ( CSVConverter converter : csvConverters )
    
  •        {
    
  •            converter.write( zipOutputStream, params );
    
  •        }
    
        [log.info](http://log.info)( "Export done" );
    }
    catch ( Exception ex )

@@ -172,12 +189,10 @@

    }
    finally
    {
  •        StreamUtils.finishZipEntry( zipOutputStream );
    
  •        writer.closeWriter();
    
        StreamUtils.closeOutputStream( zipOutputStream );
  •        writer.closeWriter();
    
        NameMappingUtil.clearMapping();
    }
}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

2010-02-08 10:56:08 +0000

@@ -27,14 +27,17 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

import static

org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

import java.util.Iterator;

import java.util.SortedMap;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

@@ -69,27 +72,29 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams

params )

  • public void write( ZipOutputStream out, ExportParams params

)

{
    try
    {
  •        for ( Integer id : params.getReportTables() ) //TODO
    

more

than one?

  •        for ( Integer id : params.getReportTables() )
    
        {
  •            out.putNextEntry( new ZipEntry( "ReportTable" +
    

id +

CSV_EXTENSION ) );

            ReportTableData data =

reportTableService.getReportTableData( id, params.getFormat() );

            Iterator<String> columns =

data.getPrettyPrintColumns().iterator();

            while ( columns.hasNext() )
            {
  •                writer.write( csvEncode( columns.next() ) );
    
  •                out.write( csvEncode( columns.next()
    

).getBytes()

);

                if ( columns.hasNext() )
                {
  •                    writer.write( SEPARATOR );
    
  •                    out.write( SEPARATOR_B );
    
                }
            }
  •            writer.newLine();
    
  •            out.write( NEWLINE );
    
            for ( SortedMap<Integer, String> row :

data.getRows()

)

            {

@@ -97,15 +102,15 @@

                while ( values.hasNext() )
                {
  •                    writer.write( csvEncode( values.next() )
    

);

  •                    out.write( csvEncode( values.next()
    

).getBytes()

);

                    if ( values.hasNext() )
                    {
  •                        writer.write( SEPARATOR );
    
  •                        out.write( SEPARATOR_B );
    
                    }
                }
  •                writer.newLine();
    
  •                out.write( NEWLINE );
    
            }
        }
    }

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

  2010-02-08 10:56:08 +0000

@@ -27,9 +27,9 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

-import java.io.BufferedWriter;

import java.util.ArrayList;

import java.util.List;

+import java.util.zip.ZipOutputStream;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

@@ -48,13 +48,6 @@

{

private static final Log log = LogFactory.getLog(

CSVExportPipeThread.class );

  • private BufferedWriter writer;
  • public void setWriter( BufferedWriter writer )
  • {
  •    this.writer = writer;
    
  • }
private ExportParams params;
public void setParams( ExportParams params )

@@ -62,6 +55,13 @@

    this.params = params;
}
  • private ZipOutputStream outputStream;
  • public void setOutputStream( ZipOutputStream outputStream )
  • {
  •    this.outputStream = outputStream;
    
  • }
private List<CSVConverter> converters = new

ArrayList();

public void registerCSVConverter( CSVConverter converter )

@@ -90,14 +90,18 @@

        for ( CSVConverter converter : converters )
        {
  •            converter.write( writer, params );
    
  •            converter.write( outputStream, params );
    
        }
        [log.info](http://log.info)( "Export finished" );
    }
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( ex );
    
  •    }
    
    finally
    {
  •        StreamUtils.closeWriter( writer );
    
  •        StreamUtils.closeOutputStream( outputStream );
    
    }
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2009-06-10 22:25:07 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

2010-02-08 10:56:08 +0000

@@ -28,13 +28,11 @@

*/

import java.io.BufferedInputStream;

-import java.io.BufferedWriter;

+import java.io.BufferedOutputStream;

import java.io.IOException;

import java.io.InputStream;

-import java.io.OutputStreamWriter;

import java.io.PipedInputStream;

import java.io.PipedOutputStream;

-import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import org.hibernate.SessionFactory;

@@ -50,8 +48,6 @@

public class DefaultCSVExportService

implements ExportService

{

  • private static final String ZIP_ENTRY_NAME = “Export.csv”;
//

// Dependencies
//

@@ -87,20 +83,18 @@

        PipedInputStream in = new PipedInputStream( out );
  •        ZipOutputStream zipOut = new ZipOutputStream( out );
    
  •        ZipOutputStream zipOut = new ZipOutputStream( new
    

BufferedOutputStream( out ) );

  •        zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME )
    

);

  •        //zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME
    

) );

  •        BufferedWriter writer = new BufferedWriter( new
    

OutputStreamWriter( zipOut ) );

        //

        // Writes to one end of the pipe
        //

        CSVExportPipeThread thread = new CSVExportPipeThread(

sessionFactory );

  •        thread.setWriter( writer );
    
        thread.setParams( params );
  •        thread.setOutputStream( zipOut );
    
        thread.registerCSVConverter( new

ReportTableDataConverter(

reportTableService ) );

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2009-04-16 09:53:17 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

  2010-02-08 10:56:08 +0000

@@ -33,15 +33,80 @@

*/

public class CsvUtil

{

  • public static final char SEPARATOR = ‘,’;
  • private static final String ENCLOSURE = “"”;
  • public static String csvEncode( String string )
  • {
  •    string = string.replaceAll( ENCLOSURE, ENCLOSURE +
    

ENCLOSURE

);

  •    string = ENCLOSURE + string + ENCLOSURE;
    
  • public static final String SEPARATOR = “,”;
  • public static final byte SEPARATOR_B =

SEPARATOR.getBytes();

  • public static final byte NEWLINE = “\n”.getBytes();
  • public static final String CSV_EXTENSION = “.csv”;
  • private static final String ENCLOSURE = “"”;
  • private static final String EMPTY = “”;
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( int value )
  • {
  •    return csvEncode( String.valueOf( value ) );
    
  • }
  • /**
  • * Encodes the given value to a CSV acceptable value.
    
  • *
    
  • * @param value the value.
    
  • * @return the CSV encoded value.
    
  • */
    
  • public static String csvEncode( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        value = EMPTY;
    
  •    }
    
  •    else
    
  •    {
    
  •        value = value.replaceAll( ENCLOSURE, ENCLOSURE +
    

ENCLOSURE

);

  •        value = ENCLOSURE + value + ENCLOSURE;
    
  •    }
    
  •    return value;
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as
    

a

byte

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( int value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • /**
  • * Appends a separator to the value and returns the value as
    

a

byte

array.

  • *
    
  • * @param value the value.
    
  • * @return a byte araray.
    
  • */
    
  • public static byte getCsvValue( String value )
  • {
  •    return getCsvEndValue( value + SEPARATOR );
    
  • }
  • public static byte getCsvEndValue( int value )
  • {
  •    return getCsvEndValue( String.valueOf( value ) );
    
  • }
  • public static byte getCsvEndValue( String value )
  • {
  •    if ( value == null )
    
  •    {
    
  •        return EMPTY.getBytes();
    
  •    }
    
  •    return string;
    
  •    return ( value ).getBytes();
    
}

}

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 07:04:26 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

   2010-02-08 10:56:08 +0000

@@ -27,17 +27,28 @@

  • SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;

+import static

org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;

import java.io.BufferedReader;

-import java.io.BufferedWriter;

import java.io.IOException;

+import java.util.Collection;

import java.util.Map;

+import java.util.zip.ZipEntry;

+import java.util.zip.ZipOutputStream;

import org.amplecode.quick.BatchHandler;

+import org.amplecode.quick.StatementManager;

import org.hisp.dhis.dataelement.DataElement;

import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;

import org.hisp.dhis.dataelement.DataElementCategoryService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.datavalue.DataValue;

import org.hisp.dhis.datavalue.DataValueService;

+import org.hisp.dhis.datavalue.DeflatedDataValue;

import org.hisp.dhis.importexport.CSVConverter;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.GroupMemberType;

@@ -47,7 +58,10 @@

import

org.hisp.dhis.importexport.converter.AbstractDataValueConverter;

import org.hisp.dhis.organisationunit.OrganisationUnit;

import org.hisp.dhis.period.Period;

+import org.hisp.dhis.period.PeriodService;

+import org.hisp.dhis.system.util.DateUtils;

import org.hisp.dhis.system.util.MimicingHashMap;

+import org.hisp.dhis.system.util.StreamUtils;

/**

  • @author Lars Helge Overland

@@ -57,8 +71,11 @@

extends AbstractDataValueConverter implements CSVConverter

{

private static final String SEPARATOR = ",";
  • private static final String FILENAME = “RoutineData.txt”;
private DataElementCategoryService categoryService;
  • private PeriodService periodService;
  • private StatementManager statementManager;
//

// Properties

@@ -72,6 +89,14 @@

// Constructor
//

  • public DataValueConverter( PeriodService periodService,

DataMartService dataMartService,

  •    StatementManager statementManager )
    
  • {
  •    this.periodService = periodService;
    
  •    this.dataMartService = dataMartService;
    
  •    this.statementManager = statementManager;
    
  • }
/**
 * Constructor for read operations.
 */

@@ -95,9 +120,81 @@

// CSVConverter implementation
//

  • public void write( BufferedWriter writer, ExportParams

params )

  • public void write( ZipOutputStream out, ExportParams params

)

{
  •    // Not implemented
    
  •    try
    
  •    {
    
  •        out.putNextEntry( new ZipEntry( FILENAME ) );
    
  •        out.write( getCsvValue( csvEncode( "RoutineDataID" )
    

) );

  •        out.write( getCsvValue( csvEncode( "OrgUnitID" ) )
    

);

  •        out.write( getCsvValue( csvEncode( "DataElementID" )
    

) );

  •        out.write( getCsvValue( csvEncode( "DataPeriodID" )
    

) );

  •        out.write( getCsvValue( csvEncode( "EntryText" ) )
    

);

  •        out.write( getCsvValue( csvEncode( "EntryYesNo" ) )
    

);

  •        out.write( getCsvValue( csvEncode( "EntryNumber" ) )
    

);

  •        out.write( getCsvValue( csvEncode( "EntryDate" ) )
    

);

  •        out.write( getCsvValue( csvEncode( "EntryMemo" ) )
    

);

  •        out.write( getCsvValue( csvEncode( "EntryObject" ) )
    

);

  •        out.write( getCsvValue( csvEncode( "Check" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Verified" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Deleted" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "Comment" ) ) );
    
  •        out.write( getCsvValue( csvEncode( "LastUserID" ) )
    

);

  •        out.write( getCsvEndValue( csvEncode( "LastUpdated"
    

) )

);

  •        out.write( NEWLINE );
    
  •        if ( params.isIncludeDataValues() )
    
  •        {
    
  •            if ( params.getStartDate() != null &&
    

params.getEndDate()

!= null )

  •            {
    
  •                Collection<DeflatedDataValue> values = null;
    
  •                Collection<Period> periods =
    

periodService.getIntersectingPeriods( params.getStartDate(),

params.getEndDate() );

  •                statementManager.initialise();
    
  •                for ( final Integer element :
    

params.getDataElements() )

  •                {
    
  •                    for ( final Period period : periods )
    
  •                    {
    
  •                        values =
    

dataMartService.getDeflatedDataValues( element, period.getId(),

params.getOrganisationUnits() );

  •                        for ( final DeflatedDataValue value
    

:

values

)

  •                        {
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue(
    

value.getSourceId() ) );

  •                            out.write( getCsvValue(
    

value.getDataElementId() ) );

  •                            out.write( getCsvValue(
    

value.getPeriodId() ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue(
    

csvEncode(

value.getValue() ) ) );

  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( SEPARATOR_B );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue( 0 ) );
    
  •                            out.write( getCsvValue(
    

csvEncode(

value.getComment() ) ) );

  •                            out.write( getCsvValue( 1 ) );
    
  •                            out.write( getCsvEndValue(
    

DateUtils.getAccessDateString( value.getTimestamp() ) ) );

  •                            out.write( NEWLINE );
    
  •                        }
    
  •                    }
    
  •                }
    
  •                statementManager.destroy();
    
  •            }
    
  •        }
    
  •        StreamUtils.closeZipEntry( out );
    
  •    }
    
  •    catch ( IOException ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to write data",
    

ex );

  •    }
    
}
public void read( BufferedReader reader, ImportParams params

)

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java’


dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2009-11-07 14:09:00 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

 2010-02-08 10:56:08 +0000

@@ -35,16 +35,19 @@

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

+import org.amplecode.quick.StatementManager;

import org.amplecode.staxwax.factory.XMLFactory;

import org.amplecode.staxwax.writer.XMLWriter;

import org.hibernate.SessionFactory;

import org.hisp.dhis.dataelement.DataElementService;

+import org.hisp.dhis.datamart.DataMartService;

import org.hisp.dhis.importexport.ExportParams;

import org.hisp.dhis.importexport.ExportPipeThread;

import org.hisp.dhis.importexport.ExportService;

import

org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;

+import

org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;

@@ -60,6 +63,7 @@

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;

import

org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;

import org.hisp.dhis.indicator.IndicatorService;

+import org.hisp.dhis.period.PeriodService;

/**

  • @author Lars Helge Overland

@@ -100,6 +104,27 @@

    this.indicatorService = indicatorService;
}
  • private PeriodService periodService;
  • public void setPeriodService( PeriodService periodService )
  • {
  •    this.periodService = periodService;
    
  • }
  • private DataMartService dataMartService;
  • public void setDataMartService( DataMartService

dataMartService )

  • {
  •    this.dataMartService = dataMartService;
    
  • }
  • private StatementManager statementManager;
  • public void setStatementManager( StatementManager

statementManager

)

  • {
  •    this.statementManager = statementManager;
    
  • }
//

// ExportService implementation
//

@@ -122,7 +147,7 @@

        zipOut.putNextEntry( new ZipEntry( "Export.xml" ) );
        XMLWriter writer = XMLFactory.getPlainXMLWriter(

zipOut );

        //

        // Writes to one end of the pipe
        //

@@ -156,6 +181,8 @@

        thread.registerXMLConverter( new UserConverter() );
        thread.registerXMLConverter( new UserRoleConverter()

);

  •        thread.registerCSVConverter( new DataValueConverter(
    

periodService, dataMartService, statementManager ) );

        thread.start();
        //

=== modified file

‘dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml’


dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-02 19:21:58 +0000

+++

dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

2010-02-08 10:56:08 +0000

@@ -381,6 +381,9 @@

           <property name="sessionFactory"

ref=“sessionFactory” />

           <property name="dataElementService"

ref=“org.hisp.dhis.dataelement.DataElementService” />

           <property name="indicatorService"

ref=“org.hisp.dhis.indicator.IndicatorService” />

  •           <property name="periodService"
    

ref=“org.hisp.dhis.period.PeriodService” />

  •           <property name="dataMartService"
    

ref=“org.hisp.dhis.datamart.DataMartService” />

  •           <property name="statementManager"
    

ref=“statementManager”

/>

   </bean>
   <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - -

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2009-11-19 19:16:46 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

 2010-02-08 10:56:08 +0000

@@ -49,6 +49,20 @@

public static final String DEFAULT_DATE_FORMAT =

“yyyy-MM-dd”;

/**
  • * Formats a Date to the Access date format.
    
  • *
    
  • * @param date the Date to parse.
    
  • * @return a formatted date string.
    
  • */
    
  • public static String getAccessDateString( Date date )
  • {
  •    final SimpleDateFormat format = new SimpleDateFormat();
    
  •    format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
    
  •    return date != null ? format.format( date ) : null;
    
  • }
  • /**
 * Formats a Date to the IXF date format which is

YYYY-MM-DD’T’HH:MM:SS.

 *
 * @param date the Date to parse.

=== modified file

‘dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java’


dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2009-12-19 15:20:41 +0000

+++

dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

2010-02-08 10:56:08 +0000

@@ -422,9 +422,26 @@

}
/**
  • * Closes the current ZipEntry and positions the stream for
    

writing

the next entry.

  • *
    
  • * @param out the ZipOutputStream.
    
  • */
    
  • public static void closeZipEntry( ZipOutputStream out )
  • {
  •    try
    
  •    {
    
  •        out.closeEntry();
    
  •    }
    
  •    catch ( Exception ex )
    
  •    {
    
  •        throw new RuntimeException( "Failed to close the
    

current

ZipEntry", ex );

  •    }
    
  • }
  • /**
 * Finishes writing the contents of the ZIP output stream

without

closing the underlying stream.

 *
  • * @param out the ZipOutputStream to write to.
    
  • * @param out the ZipOutputStream.
    
 */
public static void finishZipEntry( ZipOutputStream out )
{

@@ -434,7 +451,7 @@

    }
    catch ( Exception ex )
    {
  •        throw new RuntimeException( "Failed to finish
    

ZipOutputStream", ex );

  •        throw new RuntimeException( "Failed to finish the
    

content

of

the ZipOutputStream", ex );

    }
}

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties’


dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-01-27 21:45:11 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

2010-02-08 10:56:08 +0000

@@ -146,6 +146,7 @@

import_from_other_systems = Import from other systems

DHIS14_import = DHIS 1.4 Import

DHIS14_metadata_export = DHIS 1.4 Metadata Export

+DHIS14_data_export = DHIS 1.4 Data Export

IXF_import = IXF Import

accept_incoming_records = Accept incoming records

include_datavalues = Include data values

@@ -442,4 +443,5 @@

intro_ixf_metadata_export = Do an export of meta-data or

dimensional

data

describing the facts. Indicator Transmission Format (IXF) is a

standard

developed by the WHO.

intro_DHIS14_metadata_export = Do an export of meta-data or

dimensional

data describing the facts. DHIS 1.4 is the predecessor of DHIS 2.

intro_DHIS14_detailed_metadata_export = Do an export of an

detailed

selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.

+intro_DHIS14_data_export = Do an export of data values or facts.

DHIS

1.4

is the predecessor of DHIS 2.

intro_pdf_metadata_export = Portable Document Format (PDF) is a

file

format for document exchange.

=== modified file

‘dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm’


dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-01-28 11:51:39 +0000

+++

dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

2010-02-08 10:56:08 +0000

@@ -2,8 +2,9 @@

$i18n.getString( "export_to_other_systems" )

  • #introListItem(

“displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayDataValueExportForm.action?exportFormat=IXF”

“ixf_data_export” )

  • #introListItem(

“displayMetaDataExportForm.action?exportFormat=IXF”

“ixf_metadata_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_metadata_export” )

#introListItem(

“displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML”

“DHIS14_detailed_metadata_export” )

  • #introListItem(

“displayDataValueExportForm.action?exportFormat=DHIS14XML”

“DHIS14_data_export” )

#introListItem(

“displayMetaDataExportForm.action?exportFormat=PDF”

“pdf_metadata_export” )

\ No newline at end of file


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

Sendt fra min mobile enhet


Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

Hi Saptarshi

This alpha project from what looks like feb 2007 certainly goes part
of the way, but it seems only to be un-archiving. So I guess the good
thing is the archive format is exposed and implemented in java code.
But it seems not yet to be producing 7zip archives. Comment in the
TODO list in readme.txt: "1) support creation of 7-zip archives" :frowning:

So it seems there has not a great community need out there. If we
really need this thing we would have to make it ourselves, which seems
like overkill when we do already have zip which is much more widely
supported even if the compression algorithm is not as great. If we
were to write our own archiving code to archive and compress two text
files using lzma, gzip, bzip or whatever, I think I'd look to do
something simpler.

Cheers
Bob

···

On 8 February 2010 17:51, Saptarshi Purkayastha <sunbiz@gmail.com> wrote:

Thanks Bob,... that makes the need more clear...
We should use this then if we have to deal with 7z archives
---
Regards,
Saptarshi PURKAYASTHA
Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:44, Bob Jolliffe <bobjolliffe@gmail.com> wrote:

Hi Saptarshi

When I looked at this briefly last year I saw that this library
provides the lzma compression algorithm. As you say the algorithm is
implementable in java,

But 7z doesn't just do compression/decompression. It also archives
collections of files - like zip. The layout of these archives is not
in this sdk and I'm not sure if its documented anywhere. Now I'm sure
it could be reverse engineered from the c/c++ code but to the best of
my knowledge nobody has done it. So you can certainly lzma compress
individual streams (like you can gzip them), but that doesn't complete
the picture of creating a 7z archive.

Probably Jason's exec approach could work.

Cheers
Bob

On 8 February 2010 17:23, Saptarshi Purkayastha <sunbiz@gmail.com> wrote:
> Isn't LZMA SDK providing the JAVA library?? and comparisons are here
> ---
> Regards,
> Saptarshi PURKAYASTHA
> Director R & D, HISP India
> Health Information Systems Programme
>
> My Tech Blog: http://sunnytalkstech.blogspot.com
> You Live by CHOICE, Not by CHANCE
>
>
> On 8 February 2010 18:17, Jason Pickering <jason.p.pickering@gmail.com> >> > wrote:
>>
>> No clue if this is possible, but if the user was to provide a path to
>> a native OS executable, could DHIS push the job off to this?
>>
>>
>>
>>
>> 2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>:
>> > 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>> >> Yup agree with that just could not make it write the appropriate zip
>> >> entries that way.. Open for being enlighted here..
>> >
>> > OK. Can't really look now but I guess it must be tricky :slight_smile: Will
>> > maybe look later in the week. If the day comes (and I don't see it
>> > soon) that you had an option to write to either 7z or zip format I'm
>> > just thinking you would want the packaging decoupled from the
>> > production of the streams.
>> >
>> > Bob
>> >
>> >>
>> >> 2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:
>> >>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>> >>>>
>> >>>>
>> >>>> 2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>
>> >>>>>
>> >>>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>> >>>>> >
>> >>>>> >
>> >>>>> > On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:
>> >>>>> >>
>> >>>>> >> ------------------------------------------------------------
>> >>>>> >> revno: 1404
>> >>>>> >> committer: Lars Helge Oeverland <larshelge@gmail.com>
>> >>>>> >> branch nick: trunk
>> >>>>> >> timestamp: Mon 2010-02-08 11:56:08 +0100
>> >>>>> >> message:
>> >>>>> >> Implemented DHIS 1.4 export of data values
>> >>>>> >> modified:
>> >>>>> >
>> >>>>> >
>> >>>>> > There is actually still a snag here. DHIS 1.4 only accepts the
>> >>>>> > 7zip/lzma
>> >>>>> > format currently. I have talked Greg into making 1.4 accept
>> >>>>> > zip/deflate
>> >>>>> > too.
>> >>>>>
>> >>>>> Isn't it better to have gzip/deflate? We are not talking about
>> >>>>> compressing an archive of files but rather compressing a single
>> >>>>> stream.
>> >>>>>
>> >>>>> Also I think the original "void write( BufferedWriter writer,
>> >>>>> ExportParams params )" might be better than "void write(
>> >>>>> ZipOutputStream out, ExportParams params )". It seems
>> >>>>> unnecessary
>> >>>>> that the convertor should have to know anything about zip, gzip,
>> >>>>> 7zip
>> >>>>> or what have you. It should know how to write csv to a stream.
>> >>>>>
>> >>>>> I suspect that how the stream is later compressed is better
>> >>>>> deferred
>> >>>>> to
>> >>>>> later.
>> >>>>
>> >>>> Problem is that DHIS 1.4 uses a CSV file for data and an XML file
>> >>>> for
>> >>>> meta-data and keeps both inside the archive... I was was not able
>> >>>> to
>> >>>> have
>> >>>> multiple zip entries while using the Writer..
>> >>>
>> >>> Ah. Ok. I do remember. Then you would need an archive (zip or the
>> >>> seven thing) rather a gzipped stream.
>> >>>
>> >>> But does your CSV writer need to know that? Surely it just has an
>> >>> interest in churning out csv datavalues. Some other component
>> >>> should
>> >>> put the csv stream together with the xml stream into the zip.
>> >>>
>> >>>>
>> >>>>>
>> >>>>> Cheers
>> >>>>> Bob
>> >>>>>
>> >>>>> >
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> --
>> >>>>> >> lp:dhis2
>> >>>>> >> trunk : Code : DHIS
>> >>>>> >>
>> >>>>> >> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
>> >>>>> >> To unsubscribe from this branch go to
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> >>>>> >> 2009-03-03 16:46:36 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -28,7 +28,7 @@
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> import java.io.BufferedReader;
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> +import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> * @author Lars Helge Overland
>> >>>>> >> @@ -36,7 +36,7 @@
>> >>>>> >> */
>> >>>>> >> public interface CSVConverter
>> >>>>> >> {
>> >>>>> >> - void write( BufferedWriter writer, ExportParams params );
>> >>>>> >> + void write( ZipOutputStream out, ExportParams params );
>> >>>>> >>
>> >>>>> >> void read( BufferedReader reader, ImportParams params );
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> >>>>> >> 2009-11-02 15:55:44 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -52,7 +52,8 @@
>> >>>>> >>
>> >>>>> >> private List<XMLConverter> xsdConverters = new
>> >>>>> >> ArrayList<XMLConverter>();
>> >>>>> >> private List<XMLConverter> xmlConverters = new
>> >>>>> >> ArrayList<XMLConverter>();
>> >>>>> >> -
>> >>>>> >> + private List<CSVConverter> csvConverters = new
>> >>>>> >> ArrayList<CSVConverter>();
>> >>>>> >> +
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Parameters
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -122,6 +123,11 @@
>> >>>>> >> this.xmlConverters.add( converter );
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> + public void registerCSVConverter ( CSVConverter converter
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + this.csvConverters.add( converter );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Thread implementation
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -159,9 +165,20 @@
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> afterXML( writer );
>> >>>>> >> -
>> >>>>> >> +
>> >>>>> >> closeDocument( writer );
>> >>>>> >> -
>> >>>>> >> +
>> >>>>> >> + StreamUtils.closeZipEntry( zipOutputStream );
>> >>>>> >> +
>> >>>>> >> + //
>> >>>>> >>
>> >>>>> >> -----------------------------------------------------------------
>> >>>>> >> + // CSV
>> >>>>> >> + //
>> >>>>> >>
>> >>>>> >> -----------------------------------------------------------------
>> >>>>> >> +
>> >>>>> >> + for ( CSVConverter converter : csvConverters )
>> >>>>> >> + {
>> >>>>> >> + converter.write( zipOutputStream, params );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> log.info( "Export done" );
>> >>>>> >> }
>> >>>>> >> catch ( Exception ex )
>> >>>>> >> @@ -172,12 +189,10 @@
>> >>>>> >> }
>> >>>>> >> finally
>> >>>>> >> {
>> >>>>> >> - StreamUtils.finishZipEntry( zipOutputStream );
>> >>>>> >> + writer.closeWriter();
>> >>>>> >>
>> >>>>> >> StreamUtils.closeOutputStream( zipOutputStream );
>> >>>>> >>
>> >>>>> >> - writer.closeWriter();
>> >>>>> >> -
>> >>>>> >> NameMappingUtil.clearMapping();
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> >>>>> >> 2009-06-10 22:25:07 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -27,14 +27,17 @@
>> >>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
>> >>>>> >> DAMAGE.
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> -import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> >>>>> >> import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>> >>>>> >>
>> >>>>> >> import java.io.BufferedReader;
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> import java.io.IOException;
>> >>>>> >> import java.util.Iterator;
>> >>>>> >> import java.util.SortedMap;
>> >>>>> >> +import java.util.zip.ZipEntry;
>> >>>>> >> +import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> import org.hisp.dhis.importexport.CSVConverter;
>> >>>>> >> import org.hisp.dhis.importexport.ExportParams;
>> >>>>> >> @@ -69,27 +72,29 @@
>> >>>>> >> // CSVConverter implementation
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> - public void write( BufferedWriter writer, ExportParams
>> >>>>> >> params )
>> >>>>> >> + public void write( ZipOutputStream out, ExportParams
>> >>>>> >> params
>> >>>>> >> )
>> >>>>> >> {
>> >>>>> >> try
>> >>>>> >> {
>> >>>>> >> - for ( Integer id : params.getReportTables() )
>> >>>>> >> //TODO
>> >>>>> >> more
>> >>>>> >> than one?
>> >>>>> >> + for ( Integer id : params.getReportTables() )
>> >>>>> >> {
>> >>>>> >> + out.putNextEntry( new ZipEntry( "ReportTable"
>> >>>>> >> +
>> >>>>> >> id +
>> >>>>> >> CSV_EXTENSION ) );
>> >>>>> >> +
>> >>>>> >> ReportTableData data =
>> >>>>> >> reportTableService.getReportTableData( id, params.getFormat()
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> Iterator<String> columns =
>> >>>>> >> data.getPrettyPrintColumns().iterator();
>> >>>>> >>
>> >>>>> >> while ( columns.hasNext() )
>> >>>>> >> {
>> >>>>> >> - writer.write( csvEncode( columns.next() )
>> >>>>> >> );
>> >>>>> >> + out.write( csvEncode( columns.next()
>> >>>>> >> ).getBytes()
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> if ( columns.hasNext() )
>> >>>>> >> {
>> >>>>> >> - writer.write( SEPARATOR );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> - writer.newLine();
>> >>>>> >> + out.write( NEWLINE );
>> >>>>> >>
>> >>>>> >> for ( SortedMap<Integer, String> row :
>> >>>>> >> data.getRows()
>> >>>>> >> )
>> >>>>> >> {
>> >>>>> >> @@ -97,15 +102,15 @@
>> >>>>> >>
>> >>>>> >> while ( values.hasNext() )
>> >>>>> >> {
>> >>>>> >> - writer.write( csvEncode(
>> >>>>> >> values.next() )
>> >>>>> >> );
>> >>>>> >> + out.write( csvEncode( values.next()
>> >>>>> >> ).getBytes()
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> if ( values.hasNext() )
>> >>>>> >> {
>> >>>>> >> - writer.write( SEPARATOR );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> - writer.newLine();
>> >>>>> >> + out.write( NEWLINE );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> >>>>> >> 2009-06-10 22:25:07 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -27,9 +27,9 @@
>> >>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
>> >>>>> >> DAMAGE.
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> import java.util.ArrayList;
>> >>>>> >> import java.util.List;
>> >>>>> >> +import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> import org.apache.commons.logging.Log;
>> >>>>> >> import org.apache.commons.logging.LogFactory;
>> >>>>> >> @@ -48,13 +48,6 @@
>> >>>>> >> {
>> >>>>> >> private static final Log log = LogFactory.getLog(
>> >>>>> >> CSVExportPipeThread.class );
>> >>>>> >>
>> >>>>> >> - private BufferedWriter writer;
>> >>>>> >> -
>> >>>>> >> - public void setWriter( BufferedWriter writer )
>> >>>>> >> - {
>> >>>>> >> - this.writer = writer;
>> >>>>> >> - }
>> >>>>> >> -
>> >>>>> >> private ExportParams params;
>> >>>>> >>
>> >>>>> >> public void setParams( ExportParams params )
>> >>>>> >> @@ -62,6 +55,13 @@
>> >>>>> >> this.params = params;
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> + private ZipOutputStream outputStream;
>> >>>>> >> +
>> >>>>> >> + public void setOutputStream( ZipOutputStream outputStream
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + this.outputStream = outputStream;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> private List<CSVConverter> converters = new
>> >>>>> >> ArrayList<CSVConverter>();
>> >>>>> >>
>> >>>>> >> public void registerCSVConverter( CSVConverter converter )
>> >>>>> >> @@ -90,14 +90,18 @@
>> >>>>> >>
>> >>>>> >> for ( CSVConverter converter : converters )
>> >>>>> >> {
>> >>>>> >> - converter.write( writer, params );
>> >>>>> >> + converter.write( outputStream, params );
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> log.info( "Export finished" );
>> >>>>> >> }
>> >>>>> >> + catch ( Exception ex )
>> >>>>> >> + {
>> >>>>> >> + throw new RuntimeException( ex );
>> >>>>> >> + }
>> >>>>> >> finally
>> >>>>> >> {
>> >>>>> >> - StreamUtils.closeWriter( writer );
>> >>>>> >> + StreamUtils.closeOutputStream( outputStream );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> >>>>> >> 2009-06-10 22:25:07 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -28,13 +28,11 @@
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> import java.io.BufferedInputStream;
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> +import java.io.BufferedOutputStream;
>> >>>>> >> import java.io.IOException;
>> >>>>> >> import java.io.InputStream;
>> >>>>> >> -import java.io.OutputStreamWriter;
>> >>>>> >> import java.io.PipedInputStream;
>> >>>>> >> import java.io.PipedOutputStream;
>> >>>>> >> -import java.util.zip.ZipEntry;
>> >>>>> >> import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> import org.hibernate.SessionFactory;
>> >>>>> >> @@ -50,8 +48,6 @@
>> >>>>> >> public class DefaultCSVExportService
>> >>>>> >> implements ExportService
>> >>>>> >> {
>> >>>>> >> - private static final String ZIP_ENTRY_NAME =
>> >>>>> >> "Export.csv";
>> >>>>> >> -
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Dependencies
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -87,20 +83,18 @@
>> >>>>> >>
>> >>>>> >> PipedInputStream in = new PipedInputStream( out );
>> >>>>> >>
>> >>>>> >> - ZipOutputStream zipOut = new ZipOutputStream( out
>> >>>>> >> );
>> >>>>> >> + ZipOutputStream zipOut = new ZipOutputStream( new
>> >>>>> >> BufferedOutputStream( out ) );
>> >>>>> >>
>> >>>>> >> - zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + //zipOut.putNextEntry( new ZipEntry(
>> >>>>> >> ZIP_ENTRY_NAME
>> >>>>> >> ) );
>> >>>>> >>
>> >>>>> >> - BufferedWriter writer = new BufferedWriter( new
>> >>>>> >> OutputStreamWriter( zipOut ) );
>> >>>>> >> -
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >> -----------------------------------------------------------------
>> >>>>> >> // Writes to one end of the pipe
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >> -----------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> CSVExportPipeThread thread = new
>> >>>>> >> CSVExportPipeThread(
>> >>>>> >> sessionFactory );
>> >>>>> >>
>> >>>>> >> - thread.setWriter( writer );
>> >>>>> >> thread.setParams( params );
>> >>>>> >> + thread.setOutputStream( zipOut );
>> >>>>> >>
>> >>>>> >> thread.registerCSVConverter( new
>> >>>>> >> ReportTableDataConverter(
>> >>>>> >> reportTableService ) );
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> >>>>> >> 2009-04-16 09:53:17 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -33,15 +33,80 @@
>> >>>>> >> */
>> >>>>> >> public class CsvUtil
>> >>>>> >> {
>> >>>>> >> - public static final char SEPARATOR = ',';
>> >>>>> >> -
>> >>>>> >> - private static final String ENCLOSURE = "\"";
>> >>>>> >> -
>> >>>>> >> - public static String csvEncode( String string )
>> >>>>> >> - {
>> >>>>> >> - string = string.replaceAll( ENCLOSURE, ENCLOSURE +
>> >>>>> >> ENCLOSURE
>> >>>>> >> );
>> >>>>> >> - string = ENCLOSURE + string + ENCLOSURE;
>> >>>>> >> + public static final String SEPARATOR = ",";
>> >>>>> >> + public static final byte SEPARATOR_B =
>> >>>>> >> SEPARATOR.getBytes();
>> >>>>> >> + public static final byte NEWLINE = "\n".getBytes();
>> >>>>> >> +
>> >>>>> >> + public static final String CSV_EXTENSION = ".csv";
>> >>>>> >> + private static final String ENCLOSURE = "\"";
>> >>>>> >> + private static final String EMPTY = "";
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> + * Encodes the given value to a CSV acceptable value.
>> >>>>> >> + *
>> >>>>> >> + * @param value the value.
>> >>>>> >> + * @return the CSV encoded value.
>> >>>>> >> + */
>> >>>>> >> + public static String csvEncode( int value )
>> >>>>> >> + {
>> >>>>> >> + return csvEncode( String.valueOf( value ) );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> + * Encodes the given value to a CSV acceptable value.
>> >>>>> >> + *
>> >>>>> >> + * @param value the value.
>> >>>>> >> + * @return the CSV encoded value.
>> >>>>> >> + */
>> >>>>> >> + public static String csvEncode( String value )
>> >>>>> >> + {
>> >>>>> >> + if ( value == null )
>> >>>>> >> + {
>> >>>>> >> + value = EMPTY;
>> >>>>> >> + }
>> >>>>> >> + else
>> >>>>> >> + {
>> >>>>> >> + value = value.replaceAll( ENCLOSURE, ENCLOSURE +
>> >>>>> >> ENCLOSURE
>> >>>>> >> );
>> >>>>> >> + value = ENCLOSURE + value + ENCLOSURE;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + return value;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> + * Appends a separator to the value and returns the value
>> >>>>> >> as
>> >>>>> >> a
>> >>>>> >> byte
>> >>>>> >> array.
>> >>>>> >> + *
>> >>>>> >> + * @param value the value.
>> >>>>> >> + * @return a byte araray.
>> >>>>> >> + */
>> >>>>> >> + public static byte getCsvValue( int value )
>> >>>>> >> + {
>> >>>>> >> + return getCsvEndValue( value + SEPARATOR );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> + * Appends a separator to the value and returns the value
>> >>>>> >> as
>> >>>>> >> a
>> >>>>> >> byte
>> >>>>> >> array.
>> >>>>> >> + *
>> >>>>> >> + * @param value the value.
>> >>>>> >> + * @return a byte araray.
>> >>>>> >> + */
>> >>>>> >> + public static byte getCsvValue( String value )
>> >>>>> >> + {
>> >>>>> >> + return getCsvEndValue( value + SEPARATOR );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + public static byte getCsvEndValue( int value )
>> >>>>> >> + {
>> >>>>> >> + return getCsvEndValue( String.valueOf( value ) );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + public static byte getCsvEndValue( String value )
>> >>>>> >> + {
>> >>>>> >> + if ( value == null )
>> >>>>> >> + {
>> >>>>> >> + return EMPTY.getBytes();
>> >>>>> >> + }
>> >>>>> >>
>> >>>>> >> - return string;
>> >>>>> >> + return ( value ).getBytes();
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> >>>>> >> 2010-02-08 07:04:26 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -27,17 +27,28 @@
>> >>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
>> >>>>> >> DAMAGE.
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
>> >>>>> >> +
>> >>>>> >> import java.io.BufferedReader;
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> import java.io.IOException;
>> >>>>> >> +import java.util.Collection;
>> >>>>> >> import java.util.Map;
>> >>>>> >> +import java.util.zip.ZipEntry;
>> >>>>> >> +import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> import org.amplecode.quick.BatchHandler;
>> >>>>> >> +import org.amplecode.quick.StatementManager;
>> >>>>> >> import org.hisp.dhis.dataelement.DataElement;
>> >>>>> >> import
>> >>>>> >> org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
>> >>>>> >> import org.hisp.dhis.dataelement.DataElementCategoryService;
>> >>>>> >> +import org.hisp.dhis.datamart.DataMartService;
>> >>>>> >> import org.hisp.dhis.datavalue.DataValue;
>> >>>>> >> import org.hisp.dhis.datavalue.DataValueService;
>> >>>>> >> +import org.hisp.dhis.datavalue.DeflatedDataValue;
>> >>>>> >> import org.hisp.dhis.importexport.CSVConverter;
>> >>>>> >> import org.hisp.dhis.importexport.ExportParams;
>> >>>>> >> import org.hisp.dhis.importexport.GroupMemberType;
>> >>>>> >> @@ -47,7 +58,10 @@
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
>> >>>>> >> import org.hisp.dhis.organisationunit.OrganisationUnit;
>> >>>>> >> import org.hisp.dhis.period.Period;
>> >>>>> >> +import org.hisp.dhis.period.PeriodService;
>> >>>>> >> +import org.hisp.dhis.system.util.DateUtils;
>> >>>>> >> import org.hisp.dhis.system.util.MimicingHashMap;
>> >>>>> >> +import org.hisp.dhis.system.util.StreamUtils;
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> * @author Lars Helge Overland
>> >>>>> >> @@ -57,8 +71,11 @@
>> >>>>> >> extends AbstractDataValueConverter implements CSVConverter
>> >>>>> >> {
>> >>>>> >> private static final String SEPARATOR = ",";
>> >>>>> >> + private static final String FILENAME = "RoutineData.txt";
>> >>>>> >>
>> >>>>> >> private DataElementCategoryService categoryService;
>> >>>>> >> + private PeriodService periodService;
>> >>>>> >> + private StatementManager statementManager;
>> >>>>> >>
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Properties
>> >>>>> >> @@ -72,6 +89,14 @@
>> >>>>> >> // Constructor
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> + public DataValueConverter( PeriodService periodService,
>> >>>>> >> DataMartService dataMartService,
>> >>>>> >> + StatementManager statementManager )
>> >>>>> >> + {
>> >>>>> >> + this.periodService = periodService;
>> >>>>> >> + this.dataMartService = dataMartService;
>> >>>>> >> + this.statementManager = statementManager;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> /**
>> >>>>> >> * Constructor for read operations.
>> >>>>> >> */
>> >>>>> >> @@ -95,9 +120,81 @@
>> >>>>> >> // CSVConverter implementation
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> - public void write( BufferedWriter writer, ExportParams
>> >>>>> >> params )
>> >>>>> >> + public void write( ZipOutputStream out, ExportParams
>> >>>>> >> params
>> >>>>> >> )
>> >>>>> >> {
>> >>>>> >> - // Not implemented
>> >>>>> >> + try
>> >>>>> >> + {
>> >>>>> >> + out.putNextEntry( new ZipEntry( FILENAME ) );
>> >>>>> >> +
>> >>>>> >> + out.write( getCsvValue( csvEncode(
>> >>>>> >> "RoutineDataID" )
>> >>>>> >> ) );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "OrgUnitID" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode(
>> >>>>> >> "DataElementID" )
>> >>>>> >> ) );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "DataPeriodID"
>> >>>>> >> )
>> >>>>> >> ) );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryText" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryYesNo" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryNumber"
>> >>>>> >> ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryDate" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryMemo" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryObject"
>> >>>>> >> ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "Check" ) ) );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "Verified" ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "Deleted" ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "Comment" ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "LastUserID" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvEndValue( csvEncode(
>> >>>>> >> "LastUpdated"
>> >>>>> >> ) )
>> >>>>> >> );
>> >>>>> >> +
>> >>>>> >> + out.write( NEWLINE );
>> >>>>> >> +
>> >>>>> >> + if ( params.isIncludeDataValues() )
>> >>>>> >> + {
>> >>>>> >> + if ( params.getStartDate() != null &&
>> >>>>> >> params.getEndDate()
>> >>>>> >> != null )
>> >>>>> >> + {
>> >>>>> >> + Collection<DeflatedDataValue> values =
>> >>>>> >> null;
>> >>>>> >> +
>> >>>>> >> + Collection<Period> periods =
>> >>>>> >> periodService.getIntersectingPeriods( params.getStartDate(),
>> >>>>> >> params.getEndDate() );
>> >>>>> >> +
>> >>>>> >> + statementManager.initialise();
>> >>>>> >> +
>> >>>>> >> + for ( final Integer element :
>> >>>>> >> params.getDataElements() )
>> >>>>> >> + {
>> >>>>> >> + for ( final Period period : periods )
>> >>>>> >> + {
>> >>>>> >> + values =
>> >>>>> >> dataMartService.getDeflatedDataValues( element,
>> >>>>> >> period.getId(),
>> >>>>> >> params.getOrganisationUnits() );
>> >>>>> >> +
>> >>>>> >> + for ( final DeflatedDataValue
>> >>>>> >> value
>> >>>>> >> :
>> >>>>> >> values
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + out.write( getCsvValue( 0 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> value.getSourceId() ) );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> value.getDataElementId() ) );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> value.getPeriodId() ) );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> csvEncode(
>> >>>>> >> value.getValue() ) ) );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( getCsvValue( 0 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( 0 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( 0 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> csvEncode(
>> >>>>> >> value.getComment() ) ) );
>> >>>>> >> + out.write( getCsvValue( 1 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvEndValue(
>> >>>>> >> DateUtils.getAccessDateString( value.getTimestamp() ) ) );
>> >>>>> >> +
>> >>>>> >> + out.write( NEWLINE );
>> >>>>> >> + }
>> >>>>> >> + }
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + statementManager.destroy();
>> >>>>> >> + }
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + StreamUtils.closeZipEntry( out );
>> >>>>> >> + }
>> >>>>> >> + catch ( IOException ex )
>> >>>>> >> + {
>> >>>>> >> + throw new RuntimeException( "Failed to write
>> >>>>> >> data",
>> >>>>> >> ex );
>> >>>>> >> + }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> public void read( BufferedReader reader, ImportParams
>> >>>>> >> params
>> >>>>> >> )
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> >>>>> >> 2009-11-07 14:09:00 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -35,16 +35,19 @@
>> >>>>> >> import java.util.zip.ZipEntry;
>> >>>>> >> import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> +import org.amplecode.quick.StatementManager;
>> >>>>> >> import org.amplecode.staxwax.factory.XMLFactory;
>> >>>>> >> import org.amplecode.staxwax.writer.XMLWriter;
>> >>>>> >> import org.hibernate.SessionFactory;
>> >>>>> >> import org.hisp.dhis.dataelement.DataElementService;
>> >>>>> >> +import org.hisp.dhis.datamart.DataMartService;
>> >>>>> >> import org.hisp.dhis.importexport.ExportParams;
>> >>>>> >> import org.hisp.dhis.importexport.ExportPipeThread;
>> >>>>> >> import org.hisp.dhis.importexport.ExportService;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
>> >>>>> >> +import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
>> >>>>> >> @@ -60,6 +63,7 @@
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
>> >>>>> >> import org.hisp.dhis.indicator.IndicatorService;
>> >>>>> >> +import org.hisp.dhis.period.PeriodService;
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> * @author Lars Helge Overland
>> >>>>> >> @@ -100,6 +104,27 @@
>> >>>>> >> this.indicatorService = indicatorService;
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> + private PeriodService periodService;
>> >>>>> >> +
>> >>>>> >> + public void setPeriodService( PeriodService periodService
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + this.periodService = periodService;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + private DataMartService dataMartService;
>> >>>>> >> +
>> >>>>> >> + public void setDataMartService( DataMartService
>> >>>>> >> dataMartService )
>> >>>>> >> + {
>> >>>>> >> + this.dataMartService = dataMartService;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + private StatementManager statementManager;
>> >>>>> >> +
>> >>>>> >> + public void setStatementManager( StatementManager
>> >>>>> >> statementManager
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + this.statementManager = statementManager;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // ExportService implementation
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -122,7 +147,7 @@
>> >>>>> >> zipOut.putNextEntry( new ZipEntry( "Export.xml" )
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> XMLWriter writer = XMLFactory.getPlainXMLWriter(
>> >>>>> >> zipOut );
>> >>>>> >> -
>> >>>>> >> +
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Writes to one end of the pipe
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -156,6 +181,8 @@
>> >>>>> >> thread.registerXMLConverter( new UserConverter()
>> >>>>> >> );
>> >>>>> >> thread.registerXMLConverter( new
>> >>>>> >> UserRoleConverter()
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> + thread.registerCSVConverter( new
>> >>>>> >> DataValueConverter(
>> >>>>> >> periodService, dataMartService, statementManager ) );
>> >>>>> >> +
>> >>>>> >> thread.start();
>> >>>>> >>
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> >>>>> >> 2010-02-02 19:21:58 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -381,6 +381,9 @@
>> >>>>> >> <property name="sessionFactory"
>> >>>>> >> ref="sessionFactory" />
>> >>>>> >> <property name="dataElementService"
>> >>>>> >> ref="org.hisp.dhis.dataelement.DataElementService" />
>> >>>>> >> <property name="indicatorService"
>> >>>>> >> ref="org.hisp.dhis.indicator.IndicatorService" />
>> >>>>> >> + <property name="periodService"
>> >>>>> >> ref="org.hisp.dhis.period.PeriodService" />
>> >>>>> >> + <property name="dataMartService"
>> >>>>> >> ref="org.hisp.dhis.datamart.DataMartService" />
>> >>>>> >> + <property name="statementManager"
>> >>>>> >> ref="statementManager"
>> >>>>> >> />
>> >>>>> >> </bean>
>> >>>>> >>
>> >>>>> >> <!-- - - - - - - - - - - - - - - - - - - - - - - - - -
>> >>>>> >> - -
>> >>>>> >> - -
>> >>>>> >> -
>> >>>>> >> -
>> >>>>> >> -->
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> >>>>> >> 2009-11-19 19:16:46 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -49,6 +49,20 @@
>> >>>>> >> public static final String DEFAULT_DATE_FORMAT =
>> >>>>> >> "yyyy-MM-dd";
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> + * Formats a Date to the Access date format.
>> >>>>> >> + *
>> >>>>> >> + * @param date the Date to parse.
>> >>>>> >> + * @return a formatted date string.
>> >>>>> >> + */
>> >>>>> >> + public static String getAccessDateString( Date date )
>> >>>>> >> + {
>> >>>>> >> + final SimpleDateFormat format = new
>> >>>>> >> SimpleDateFormat();
>> >>>>> >> + format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
>> >>>>> >> +
>> >>>>> >> + return date != null ? format.format( date ) : null;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> * Formats a Date to the IXF date format which is
>> >>>>> >> YYYY-MM-DD'T'HH:MM:SS.
>> >>>>> >> *
>> >>>>> >> * @param date the Date to parse.
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> >>>>> >> 2009-12-19 15:20:41 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -422,9 +422,26 @@
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> + * Closes the current ZipEntry and positions the stream
>> >>>>> >> for
>> >>>>> >> writing
>> >>>>> >> the next entry.
>> >>>>> >> + *
>> >>>>> >> + * @param out the ZipOutputStream.
>> >>>>> >> + */
>> >>>>> >> + public static void closeZipEntry( ZipOutputStream out )
>> >>>>> >> + {
>> >>>>> >> + try
>> >>>>> >> + {
>> >>>>> >> + out.closeEntry();
>> >>>>> >> + }
>> >>>>> >> + catch ( Exception ex )
>> >>>>> >> + {
>> >>>>> >> + throw new RuntimeException( "Failed to close the
>> >>>>> >> current
>> >>>>> >> ZipEntry", ex );
>> >>>>> >> + }
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> * Finishes writing the contents of the ZIP output stream
>> >>>>> >> without
>> >>>>> >> closing the underlying stream.
>> >>>>> >> *
>> >>>>> >> - * @param out the ZipOutputStream to write to.
>> >>>>> >> + * @param out the ZipOutputStream.
>> >>>>> >> */
>> >>>>> >> public static void finishZipEntry( ZipOutputStream out )
>> >>>>> >> {
>> >>>>> >> @@ -434,7 +451,7 @@
>> >>>>> >> }
>> >>>>> >> catch ( Exception ex )
>> >>>>> >> {
>> >>>>> >> - throw new RuntimeException( "Failed to finish
>> >>>>> >> ZipOutputStream", ex );
>> >>>>> >> + throw new RuntimeException( "Failed to finish the
>> >>>>> >> content
>> >>>>> >> of
>> >>>>> >> the ZipOutputStream", ex );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> >>>>> >> 2010-01-27 21:45:11 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -146,6 +146,7 @@
>> >>>>> >> import_from_other_systems = Import from other systems
>> >>>>> >> DHIS14_import = DHIS 1.4 Import
>> >>>>> >> DHIS14_metadata_export = DHIS 1.4 Metadata Export
>> >>>>> >> +DHIS14_data_export = DHIS 1.4 Data Export
>> >>>>> >> IXF_import = IXF Import
>> >>>>> >> accept_incoming_records = Accept incoming records
>> >>>>> >> include_datavalues = Include data values
>> >>>>> >> @@ -442,4 +443,5 @@
>> >>>>> >> intro_ixf_metadata_export = Do an export of meta-data or
>> >>>>> >> dimensional
>> >>>>> >> data
>> >>>>> >> describing the facts. Indicator Transmission Format (IXF) is a
>> >>>>> >> standard
>> >>>>> >> developed by the WHO.
>> >>>>> >> intro_DHIS14_metadata_export = Do an export of meta-data or
>> >>>>> >> dimensional
>> >>>>> >> data describing the facts. DHIS 1.4 is the predecessor of DHIS
>> >>>>> >> 2.
>> >>>>> >> intro_DHIS14_detailed_metadata_export = Do an export of an
>> >>>>> >> detailed
>> >>>>> >> selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
>> >>>>> >> +intro_DHIS14_data_export = Do an export of data values or
>> >>>>> >> facts.
>> >>>>> >> DHIS
>> >>>>> >> 1.4
>> >>>>> >> is the predecessor of DHIS 2.
>> >>>>> >> intro_pdf_metadata_export = Portable Document Format (PDF) is
>> >>>>> >> a
>> >>>>> >> file
>> >>>>> >> format for document exchange.
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> >>>>> >> 2010-01-28 11:51:39 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -2,8 +2,9 @@
>> >>>>> >> <h3>$i18n.getString( "export_to_other_systems" )</h3>
>> >>>>> >>
>> >>>>> >> <ul class="introList">
>> >>>>> >> + #introListItem(
>> >>>>> >> "displayMetaDataExportForm.action?exportFormat=IXF"
>> >>>>> >> "ixf_metadata_export" )
>> >>>>> >> #introListItem(
>> >>>>> >> "displayDataValueExportForm.action?exportFormat=IXF"
>> >>>>> >> "ixf_data_export" )
>> >>>>> >> - #introListItem(
>> >>>>> >> "displayMetaDataExportForm.action?exportFormat=IXF"
>> >>>>> >> "ixf_metadata_export" )
>> >>>>> >> #introListItem(
>> >>>>> >> "displayMetaDataExportForm.action?exportFormat=DHIS14XML"
>> >>>>> >> "DHIS14_metadata_export" )
>> >>>>> >> #introListItem(
>> >>>>> >>
>> >>>>> >> "displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
>> >>>>> >> "DHIS14_detailed_metadata_export" )
>> >>>>> >> + #introListItem(
>> >>>>> >> "displayDataValueExportForm.action?exportFormat=DHIS14XML"
>> >>>>> >> "DHIS14_data_export" )
>> >>>>> >> #introListItem(
>> >>>>> >> "displayMetaDataExportForm.action?exportFormat=PDF"
>> >>>>> >> "pdf_metadata_export" )
>> >>>>> >> \ No newline at end of file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> _______________________________________________
>> >>>>> >> Mailing list: https://launchpad.net/~dhis2-devs
>> >>>>> >> Post to : dhis2-devs@lists.launchpad.net
>> >>>>> >> Unsubscribe : https://launchpad.net/~dhis2-devs
>> >>>>> >> More help : https://help.launchpad.net/ListHelp
>> >>>>> >>
>> >>>>> >
>> >>>>> >
>> >>>>> > _______________________________________________
>> >>>>> > Mailing list: https://launchpad.net/~dhis2-devs
>> >>>>> > Post to : dhis2-devs@lists.launchpad.net
>> >>>>> > Unsubscribe : https://launchpad.net/~dhis2-devs
>> >>>>> > More help : https://help.launchpad.net/ListHelp
>> >>>>> >
>> >>>>> >
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> --
>> >> Sendt fra min mobile enhet
>> >>
>> >
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs
>> Post to : dhis2-devs@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help : https://help.launchpad.net/ListHelp
>
>

Likely, it would be simpler to implement support for ZIP imports in 1.4.

This feature is really key for us here in Zambia, as it looks like we
will run 2.0 at the national level and 1.4 at the districts in a
transition period. Having the ability to export data back to 1.4 from
2.0 is really critical.

I am sure we could work around it somehow, but maybe like I suggested,
pushing the job off to a native binary might be an interim solution if
1.4 cannot be modified for some reason.

···

On Mon, Feb 8, 2010 at 8:04 PM, Bob Jolliffe <bobjolliffe@gmail.com> wrote:

Hi Saptarshi

This alpha project from what looks like feb 2007 certainly goes part
of the way, but it seems only to be un-archiving. So I guess the good
thing is the archive format is exposed and implemented in java code.
But it seems not yet to be producing 7zip archives. Comment in the
TODO list in readme.txt: "1) support creation of 7-zip archives" :frowning:

So it seems there has not a great community need out there. If we
really need this thing we would have to make it ourselves, which seems
like overkill when we do already have zip which is much more widely
supported even if the compression algorithm is not as great. If we
were to write our own archiving code to archive and compress two text
files using lzma, gzip, bzip or whatever, I think I'd look to do
something simpler.

Cheers
Bob

On 8 February 2010 17:51, Saptarshi Purkayastha <sunbiz@gmail.com> wrote:

Thanks Bob,... that makes the need more clear...
We should use this then if we have to deal with 7z archives
---
Regards,
Saptarshi PURKAYASTHA
Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:44, Bob Jolliffe <bobjolliffe@gmail.com> wrote:

Hi Saptarshi

When I looked at this briefly last year I saw that this library
provides the lzma compression algorithm. As you say the algorithm is
implementable in java,

But 7z doesn't just do compression/decompression. It also archives
collections of files - like zip. The layout of these archives is not
in this sdk and I'm not sure if its documented anywhere. Now I'm sure
it could be reverse engineered from the c/c++ code but to the best of
my knowledge nobody has done it. So you can certainly lzma compress
individual streams (like you can gzip them), but that doesn't complete
the picture of creating a 7z archive.

Probably Jason's exec approach could work.

Cheers
Bob

On 8 February 2010 17:23, Saptarshi Purkayastha <sunbiz@gmail.com> wrote:
> Isn't LZMA SDK providing the JAVA library?? and comparisons are here
> ---
> Regards,
> Saptarshi PURKAYASTHA
> Director R & D, HISP India
> Health Information Systems Programme
>
> My Tech Blog: http://sunnytalkstech.blogspot.com
> You Live by CHOICE, Not by CHANCE
>
>
> On 8 February 2010 18:17, Jason Pickering <jason.p.pickering@gmail.com> >>> > wrote:
>>
>> No clue if this is possible, but if the user was to provide a path to
>> a native OS executable, could DHIS push the job off to this?
>>
>>
>>
>>
>> 2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>:
>> > 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>> >> Yup agree with that just could not make it write the appropriate zip
>> >> entries that way.. Open for being enlighted here..
>> >
>> > OK. Can't really look now but I guess it must be tricky :slight_smile: Will
>> > maybe look later in the week. If the day comes (and I don't see it
>> > soon) that you had an option to write to either 7z or zip format I'm
>> > just thinking you would want the packaging decoupled from the
>> > production of the streams.
>> >
>> > Bob
>> >
>> >>
>> >> 2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:
>> >>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>> >>>>
>> >>>>
>> >>>> 2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>
>> >>>>>
>> >>>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:
>> >>>>> >
>> >>>>> >
>> >>>>> > On Mon, Feb 8, 2010 at 11:59 AM, <noreply@launchpad.net> wrote:
>> >>>>> >>
>> >>>>> >> ------------------------------------------------------------
>> >>>>> >> revno: 1404
>> >>>>> >> committer: Lars Helge Oeverland <larshelge@gmail.com>
>> >>>>> >> branch nick: trunk
>> >>>>> >> timestamp: Mon 2010-02-08 11:56:08 +0100
>> >>>>> >> message:
>> >>>>> >> Implemented DHIS 1.4 export of data values
>> >>>>> >> modified:
>> >>>>> >
>> >>>>> >
>> >>>>> > There is actually still a snag here. DHIS 1.4 only accepts the
>> >>>>> > 7zip/lzma
>> >>>>> > format currently. I have talked Greg into making 1.4 accept
>> >>>>> > zip/deflate
>> >>>>> > too.
>> >>>>>
>> >>>>> Isn't it better to have gzip/deflate? We are not talking about
>> >>>>> compressing an archive of files but rather compressing a single
>> >>>>> stream.
>> >>>>>
>> >>>>> Also I think the original "void write( BufferedWriter writer,
>> >>>>> ExportParams params )" might be better than "void write(
>> >>>>> ZipOutputStream out, ExportParams params )". It seems
>> >>>>> unnecessary
>> >>>>> that the convertor should have to know anything about zip, gzip,
>> >>>>> 7zip
>> >>>>> or what have you. It should know how to write csv to a stream.
>> >>>>>
>> >>>>> I suspect that how the stream is later compressed is better
>> >>>>> deferred
>> >>>>> to
>> >>>>> later.
>> >>>>
>> >>>> Problem is that DHIS 1.4 uses a CSV file for data and an XML file
>> >>>> for
>> >>>> meta-data and keeps both inside the archive... I was was not able
>> >>>> to
>> >>>> have
>> >>>> multiple zip entries while using the Writer..
>> >>>
>> >>> Ah. Ok. I do remember. Then you would need an archive (zip or the
>> >>> seven thing) rather a gzipped stream.
>> >>>
>> >>> But does your CSV writer need to know that? Surely it just has an
>> >>> interest in churning out csv datavalues. Some other component
>> >>> should
>> >>> put the csv stream together with the xml stream into the zip.
>> >>>
>> >>>>
>> >>>>>
>> >>>>> Cheers
>> >>>>> Bob
>> >>>>>
>> >>>>> >
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> --
>> >>>>> >> lp:dhis2
>> >>>>> >> trunk : Code : DHIS
>> >>>>> >>
>> >>>>> >> Your team DHIS 2 developers is subscribed to branch lp:dhis2.
>> >>>>> >> To unsubscribe from this branch go to
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> >>>>> >> 2009-03-03 16:46:36 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -28,7 +28,7 @@
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> import java.io.BufferedReader;
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> +import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> * @author Lars Helge Overland
>> >>>>> >> @@ -36,7 +36,7 @@
>> >>>>> >> */
>> >>>>> >> public interface CSVConverter
>> >>>>> >> {
>> >>>>> >> - void write( BufferedWriter writer, ExportParams params );
>> >>>>> >> + void write( ZipOutputStream out, ExportParams params );
>> >>>>> >>
>> >>>>> >> void read( BufferedReader reader, ImportParams params );
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> >>>>> >> 2009-11-02 15:55:44 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -52,7 +52,8 @@
>> >>>>> >>
>> >>>>> >> private List<XMLConverter> xsdConverters = new
>> >>>>> >> ArrayList<XMLConverter>();
>> >>>>> >> private List<XMLConverter> xmlConverters = new
>> >>>>> >> ArrayList<XMLConverter>();
>> >>>>> >> -
>> >>>>> >> + private List<CSVConverter> csvConverters = new
>> >>>>> >> ArrayList<CSVConverter>();
>> >>>>> >> +
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Parameters
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -122,6 +123,11 @@
>> >>>>> >> this.xmlConverters.add( converter );
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> + public void registerCSVConverter ( CSVConverter converter
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + this.csvConverters.add( converter );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Thread implementation
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -159,9 +165,20 @@
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> afterXML( writer );
>> >>>>> >> -
>> >>>>> >> +
>> >>>>> >> closeDocument( writer );
>> >>>>> >> -
>> >>>>> >> +
>> >>>>> >> + StreamUtils.closeZipEntry( zipOutputStream );
>> >>>>> >> +
>> >>>>> >> + //
>> >>>>> >>
>> >>>>> >> -----------------------------------------------------------------
>> >>>>> >> + // CSV
>> >>>>> >> + //
>> >>>>> >>
>> >>>>> >> -----------------------------------------------------------------
>> >>>>> >> +
>> >>>>> >> + for ( CSVConverter converter : csvConverters )
>> >>>>> >> + {
>> >>>>> >> + converter.write( zipOutputStream, params );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> log.info( "Export done" );
>> >>>>> >> }
>> >>>>> >> catch ( Exception ex )
>> >>>>> >> @@ -172,12 +189,10 @@
>> >>>>> >> }
>> >>>>> >> finally
>> >>>>> >> {
>> >>>>> >> - StreamUtils.finishZipEntry( zipOutputStream );
>> >>>>> >> + writer.closeWriter();
>> >>>>> >>
>> >>>>> >> StreamUtils.closeOutputStream( zipOutputStream );
>> >>>>> >>
>> >>>>> >> - writer.closeWriter();
>> >>>>> >> -
>> >>>>> >> NameMappingUtil.clearMapping();
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> >>>>> >> 2009-06-10 22:25:07 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -27,14 +27,17 @@
>> >>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
>> >>>>> >> DAMAGE.
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> -import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> >>>>> >> import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>> >>>>> >>
>> >>>>> >> import java.io.BufferedReader;
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> import java.io.IOException;
>> >>>>> >> import java.util.Iterator;
>> >>>>> >> import java.util.SortedMap;
>> >>>>> >> +import java.util.zip.ZipEntry;
>> >>>>> >> +import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> import org.hisp.dhis.importexport.CSVConverter;
>> >>>>> >> import org.hisp.dhis.importexport.ExportParams;
>> >>>>> >> @@ -69,27 +72,29 @@
>> >>>>> >> // CSVConverter implementation
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> - public void write( BufferedWriter writer, ExportParams
>> >>>>> >> params )
>> >>>>> >> + public void write( ZipOutputStream out, ExportParams
>> >>>>> >> params
>> >>>>> >> )
>> >>>>> >> {
>> >>>>> >> try
>> >>>>> >> {
>> >>>>> >> - for ( Integer id : params.getReportTables() )
>> >>>>> >> //TODO
>> >>>>> >> more
>> >>>>> >> than one?
>> >>>>> >> + for ( Integer id : params.getReportTables() )
>> >>>>> >> {
>> >>>>> >> + out.putNextEntry( new ZipEntry( "ReportTable"
>> >>>>> >> +
>> >>>>> >> id +
>> >>>>> >> CSV_EXTENSION ) );
>> >>>>> >> +
>> >>>>> >> ReportTableData data =
>> >>>>> >> reportTableService.getReportTableData( id, params.getFormat()
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> Iterator<String> columns =
>> >>>>> >> data.getPrettyPrintColumns().iterator();
>> >>>>> >>
>> >>>>> >> while ( columns.hasNext() )
>> >>>>> >> {
>> >>>>> >> - writer.write( csvEncode( columns.next() )
>> >>>>> >> );
>> >>>>> >> + out.write( csvEncode( columns.next()
>> >>>>> >> ).getBytes()
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> if ( columns.hasNext() )
>> >>>>> >> {
>> >>>>> >> - writer.write( SEPARATOR );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> - writer.newLine();
>> >>>>> >> + out.write( NEWLINE );
>> >>>>> >>
>> >>>>> >> for ( SortedMap<Integer, String> row :
>> >>>>> >> data.getRows()
>> >>>>> >> )
>> >>>>> >> {
>> >>>>> >> @@ -97,15 +102,15 @@
>> >>>>> >>
>> >>>>> >> while ( values.hasNext() )
>> >>>>> >> {
>> >>>>> >> - writer.write( csvEncode(
>> >>>>> >> values.next() )
>> >>>>> >> );
>> >>>>> >> + out.write( csvEncode( values.next()
>> >>>>> >> ).getBytes()
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> if ( values.hasNext() )
>> >>>>> >> {
>> >>>>> >> - writer.write( SEPARATOR );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> - writer.newLine();
>> >>>>> >> + out.write( NEWLINE );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> >>>>> >> 2009-06-10 22:25:07 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -27,9 +27,9 @@
>> >>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
>> >>>>> >> DAMAGE.
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> import java.util.ArrayList;
>> >>>>> >> import java.util.List;
>> >>>>> >> +import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> import org.apache.commons.logging.Log;
>> >>>>> >> import org.apache.commons.logging.LogFactory;
>> >>>>> >> @@ -48,13 +48,6 @@
>> >>>>> >> {
>> >>>>> >> private static final Log log = LogFactory.getLog(
>> >>>>> >> CSVExportPipeThread.class );
>> >>>>> >>
>> >>>>> >> - private BufferedWriter writer;
>> >>>>> >> -
>> >>>>> >> - public void setWriter( BufferedWriter writer )
>> >>>>> >> - {
>> >>>>> >> - this.writer = writer;
>> >>>>> >> - }
>> >>>>> >> -
>> >>>>> >> private ExportParams params;
>> >>>>> >>
>> >>>>> >> public void setParams( ExportParams params )
>> >>>>> >> @@ -62,6 +55,13 @@
>> >>>>> >> this.params = params;
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> + private ZipOutputStream outputStream;
>> >>>>> >> +
>> >>>>> >> + public void setOutputStream( ZipOutputStream outputStream
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + this.outputStream = outputStream;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> private List<CSVConverter> converters = new
>> >>>>> >> ArrayList<CSVConverter>();
>> >>>>> >>
>> >>>>> >> public void registerCSVConverter( CSVConverter converter )
>> >>>>> >> @@ -90,14 +90,18 @@
>> >>>>> >>
>> >>>>> >> for ( CSVConverter converter : converters )
>> >>>>> >> {
>> >>>>> >> - converter.write( writer, params );
>> >>>>> >> + converter.write( outputStream, params );
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> log.info( "Export finished" );
>> >>>>> >> }
>> >>>>> >> + catch ( Exception ex )
>> >>>>> >> + {
>> >>>>> >> + throw new RuntimeException( ex );
>> >>>>> >> + }
>> >>>>> >> finally
>> >>>>> >> {
>> >>>>> >> - StreamUtils.closeWriter( writer );
>> >>>>> >> + StreamUtils.closeOutputStream( outputStream );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> >>>>> >> 2009-06-10 22:25:07 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -28,13 +28,11 @@
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> import java.io.BufferedInputStream;
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> +import java.io.BufferedOutputStream;
>> >>>>> >> import java.io.IOException;
>> >>>>> >> import java.io.InputStream;
>> >>>>> >> -import java.io.OutputStreamWriter;
>> >>>>> >> import java.io.PipedInputStream;
>> >>>>> >> import java.io.PipedOutputStream;
>> >>>>> >> -import java.util.zip.ZipEntry;
>> >>>>> >> import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> import org.hibernate.SessionFactory;
>> >>>>> >> @@ -50,8 +48,6 @@
>> >>>>> >> public class DefaultCSVExportService
>> >>>>> >> implements ExportService
>> >>>>> >> {
>> >>>>> >> - private static final String ZIP_ENTRY_NAME =
>> >>>>> >> "Export.csv";
>> >>>>> >> -
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Dependencies
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -87,20 +83,18 @@
>> >>>>> >>
>> >>>>> >> PipedInputStream in = new PipedInputStream( out );
>> >>>>> >>
>> >>>>> >> - ZipOutputStream zipOut = new ZipOutputStream( out
>> >>>>> >> );
>> >>>>> >> + ZipOutputStream zipOut = new ZipOutputStream( new
>> >>>>> >> BufferedOutputStream( out ) );
>> >>>>> >>
>> >>>>> >> - zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + //zipOut.putNextEntry( new ZipEntry(
>> >>>>> >> ZIP_ENTRY_NAME
>> >>>>> >> ) );
>> >>>>> >>
>> >>>>> >> - BufferedWriter writer = new BufferedWriter( new
>> >>>>> >> OutputStreamWriter( zipOut ) );
>> >>>>> >> -
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >> -----------------------------------------------------------------
>> >>>>> >> // Writes to one end of the pipe
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >> -----------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> CSVExportPipeThread thread = new
>> >>>>> >> CSVExportPipeThread(
>> >>>>> >> sessionFactory );
>> >>>>> >>
>> >>>>> >> - thread.setWriter( writer );
>> >>>>> >> thread.setParams( params );
>> >>>>> >> + thread.setOutputStream( zipOut );
>> >>>>> >>
>> >>>>> >> thread.registerCSVConverter( new
>> >>>>> >> ReportTableDataConverter(
>> >>>>> >> reportTableService ) );
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> >>>>> >> 2009-04-16 09:53:17 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -33,15 +33,80 @@
>> >>>>> >> */
>> >>>>> >> public class CsvUtil
>> >>>>> >> {
>> >>>>> >> - public static final char SEPARATOR = ',';
>> >>>>> >> -
>> >>>>> >> - private static final String ENCLOSURE = "\"";
>> >>>>> >> -
>> >>>>> >> - public static String csvEncode( String string )
>> >>>>> >> - {
>> >>>>> >> - string = string.replaceAll( ENCLOSURE, ENCLOSURE +
>> >>>>> >> ENCLOSURE
>> >>>>> >> );
>> >>>>> >> - string = ENCLOSURE + string + ENCLOSURE;
>> >>>>> >> + public static final String SEPARATOR = ",";
>> >>>>> >> + public static final byte SEPARATOR_B =
>> >>>>> >> SEPARATOR.getBytes();
>> >>>>> >> + public static final byte NEWLINE = "\n".getBytes();
>> >>>>> >> +
>> >>>>> >> + public static final String CSV_EXTENSION = ".csv";
>> >>>>> >> + private static final String ENCLOSURE = "\"";
>> >>>>> >> + private static final String EMPTY = "";
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> + * Encodes the given value to a CSV acceptable value.
>> >>>>> >> + *
>> >>>>> >> + * @param value the value.
>> >>>>> >> + * @return the CSV encoded value.
>> >>>>> >> + */
>> >>>>> >> + public static String csvEncode( int value )
>> >>>>> >> + {
>> >>>>> >> + return csvEncode( String.valueOf( value ) );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> + * Encodes the given value to a CSV acceptable value.
>> >>>>> >> + *
>> >>>>> >> + * @param value the value.
>> >>>>> >> + * @return the CSV encoded value.
>> >>>>> >> + */
>> >>>>> >> + public static String csvEncode( String value )
>> >>>>> >> + {
>> >>>>> >> + if ( value == null )
>> >>>>> >> + {
>> >>>>> >> + value = EMPTY;
>> >>>>> >> + }
>> >>>>> >> + else
>> >>>>> >> + {
>> >>>>> >> + value = value.replaceAll( ENCLOSURE, ENCLOSURE +
>> >>>>> >> ENCLOSURE
>> >>>>> >> );
>> >>>>> >> + value = ENCLOSURE + value + ENCLOSURE;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + return value;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> + * Appends a separator to the value and returns the value
>> >>>>> >> as
>> >>>>> >> a
>> >>>>> >> byte
>> >>>>> >> array.
>> >>>>> >> + *
>> >>>>> >> + * @param value the value.
>> >>>>> >> + * @return a byte araray.
>> >>>>> >> + */
>> >>>>> >> + public static byte getCsvValue( int value )
>> >>>>> >> + {
>> >>>>> >> + return getCsvEndValue( value + SEPARATOR );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> + * Appends a separator to the value and returns the value
>> >>>>> >> as
>> >>>>> >> a
>> >>>>> >> byte
>> >>>>> >> array.
>> >>>>> >> + *
>> >>>>> >> + * @param value the value.
>> >>>>> >> + * @return a byte araray.
>> >>>>> >> + */
>> >>>>> >> + public static byte getCsvValue( String value )
>> >>>>> >> + {
>> >>>>> >> + return getCsvEndValue( value + SEPARATOR );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + public static byte getCsvEndValue( int value )
>> >>>>> >> + {
>> >>>>> >> + return getCsvEndValue( String.valueOf( value ) );
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + public static byte getCsvEndValue( String value )
>> >>>>> >> + {
>> >>>>> >> + if ( value == null )
>> >>>>> >> + {
>> >>>>> >> + return EMPTY.getBytes();
>> >>>>> >> + }
>> >>>>> >>
>> >>>>> >> - return string;
>> >>>>> >> + return ( value ).getBytes();
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> >>>>> >> 2010-02-08 07:04:26 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -27,17 +27,28 @@
>> >>>>> >> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
>> >>>>> >> DAMAGE.
>> >>>>> >> */
>> >>>>> >>
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;
>> >>>>> >> +import static
>> >>>>> >> org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;
>> >>>>> >> +
>> >>>>> >> import java.io.BufferedReader;
>> >>>>> >> -import java.io.BufferedWriter;
>> >>>>> >> import java.io.IOException;
>> >>>>> >> +import java.util.Collection;
>> >>>>> >> import java.util.Map;
>> >>>>> >> +import java.util.zip.ZipEntry;
>> >>>>> >> +import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> import org.amplecode.quick.BatchHandler;
>> >>>>> >> +import org.amplecode.quick.StatementManager;
>> >>>>> >> import org.hisp.dhis.dataelement.DataElement;
>> >>>>> >> import
>> >>>>> >> org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
>> >>>>> >> import org.hisp.dhis.dataelement.DataElementCategoryService;
>> >>>>> >> +import org.hisp.dhis.datamart.DataMartService;
>> >>>>> >> import org.hisp.dhis.datavalue.DataValue;
>> >>>>> >> import org.hisp.dhis.datavalue.DataValueService;
>> >>>>> >> +import org.hisp.dhis.datavalue.DeflatedDataValue;
>> >>>>> >> import org.hisp.dhis.importexport.CSVConverter;
>> >>>>> >> import org.hisp.dhis.importexport.ExportParams;
>> >>>>> >> import org.hisp.dhis.importexport.GroupMemberType;
>> >>>>> >> @@ -47,7 +58,10 @@
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.converter.AbstractDataValueConverter;
>> >>>>> >> import org.hisp.dhis.organisationunit.OrganisationUnit;
>> >>>>> >> import org.hisp.dhis.period.Period;
>> >>>>> >> +import org.hisp.dhis.period.PeriodService;
>> >>>>> >> +import org.hisp.dhis.system.util.DateUtils;
>> >>>>> >> import org.hisp.dhis.system.util.MimicingHashMap;
>> >>>>> >> +import org.hisp.dhis.system.util.StreamUtils;
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> * @author Lars Helge Overland
>> >>>>> >> @@ -57,8 +71,11 @@
>> >>>>> >> extends AbstractDataValueConverter implements CSVConverter
>> >>>>> >> {
>> >>>>> >> private static final String SEPARATOR = ",";
>> >>>>> >> + private static final String FILENAME = "RoutineData.txt";
>> >>>>> >>
>> >>>>> >> private DataElementCategoryService categoryService;
>> >>>>> >> + private PeriodService periodService;
>> >>>>> >> + private StatementManager statementManager;
>> >>>>> >>
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Properties
>> >>>>> >> @@ -72,6 +89,14 @@
>> >>>>> >> // Constructor
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> + public DataValueConverter( PeriodService periodService,
>> >>>>> >> DataMartService dataMartService,
>> >>>>> >> + StatementManager statementManager )
>> >>>>> >> + {
>> >>>>> >> + this.periodService = periodService;
>> >>>>> >> + this.dataMartService = dataMartService;
>> >>>>> >> + this.statementManager = statementManager;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> /**
>> >>>>> >> * Constructor for read operations.
>> >>>>> >> */
>> >>>>> >> @@ -95,9 +120,81 @@
>> >>>>> >> // CSVConverter implementation
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> - public void write( BufferedWriter writer, ExportParams
>> >>>>> >> params )
>> >>>>> >> + public void write( ZipOutputStream out, ExportParams
>> >>>>> >> params
>> >>>>> >> )
>> >>>>> >> {
>> >>>>> >> - // Not implemented
>> >>>>> >> + try
>> >>>>> >> + {
>> >>>>> >> + out.putNextEntry( new ZipEntry( FILENAME ) );
>> >>>>> >> +
>> >>>>> >> + out.write( getCsvValue( csvEncode(
>> >>>>> >> "RoutineDataID" )
>> >>>>> >> ) );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "OrgUnitID" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode(
>> >>>>> >> "DataElementID" )
>> >>>>> >> ) );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "DataPeriodID"
>> >>>>> >> )
>> >>>>> >> ) );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryText" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryYesNo" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryNumber"
>> >>>>> >> ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryDate" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryMemo" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "EntryObject"
>> >>>>> >> ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "Check" ) ) );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "Verified" ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "Deleted" ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "Comment" ) )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( csvEncode( "LastUserID" )
>> >>>>> >> )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvEndValue( csvEncode(
>> >>>>> >> "LastUpdated"
>> >>>>> >> ) )
>> >>>>> >> );
>> >>>>> >> +
>> >>>>> >> + out.write( NEWLINE );
>> >>>>> >> +
>> >>>>> >> + if ( params.isIncludeDataValues() )
>> >>>>> >> + {
>> >>>>> >> + if ( params.getStartDate() != null &&
>> >>>>> >> params.getEndDate()
>> >>>>> >> != null )
>> >>>>> >> + {
>> >>>>> >> + Collection<DeflatedDataValue> values =
>> >>>>> >> null;
>> >>>>> >> +
>> >>>>> >> + Collection<Period> periods =
>> >>>>> >> periodService.getIntersectingPeriods( params.getStartDate(),
>> >>>>> >> params.getEndDate() );
>> >>>>> >> +
>> >>>>> >> + statementManager.initialise();
>> >>>>> >> +
>> >>>>> >> + for ( final Integer element :
>> >>>>> >> params.getDataElements() )
>> >>>>> >> + {
>> >>>>> >> + for ( final Period period : periods )
>> >>>>> >> + {
>> >>>>> >> + values =
>> >>>>> >> dataMartService.getDeflatedDataValues( element,
>> >>>>> >> period.getId(),
>> >>>>> >> params.getOrganisationUnits() );
>> >>>>> >> +
>> >>>>> >> + for ( final DeflatedDataValue
>> >>>>> >> value
>> >>>>> >> :
>> >>>>> >> values
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + out.write( getCsvValue( 0 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> value.getSourceId() ) );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> value.getDataElementId() ) );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> value.getPeriodId() ) );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> csvEncode(
>> >>>>> >> value.getValue() ) ) );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( SEPARATOR_B );
>> >>>>> >> + out.write( getCsvValue( 0 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( 0 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue( 0 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvValue(
>> >>>>> >> csvEncode(
>> >>>>> >> value.getComment() ) ) );
>> >>>>> >> + out.write( getCsvValue( 1 )
>> >>>>> >> );
>> >>>>> >> + out.write( getCsvEndValue(
>> >>>>> >> DateUtils.getAccessDateString( value.getTimestamp() ) ) );
>> >>>>> >> +
>> >>>>> >> + out.write( NEWLINE );
>> >>>>> >> + }
>> >>>>> >> + }
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + statementManager.destroy();
>> >>>>> >> + }
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + StreamUtils.closeZipEntry( out );
>> >>>>> >> + }
>> >>>>> >> + catch ( IOException ex )
>> >>>>> >> + {
>> >>>>> >> + throw new RuntimeException( "Failed to write
>> >>>>> >> data",
>> >>>>> >> ex );
>> >>>>> >> + }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> public void read( BufferedReader reader, ImportParams
>> >>>>> >> params
>> >>>>> >> )
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> >>>>> >> 2009-11-07 14:09:00 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -35,16 +35,19 @@
>> >>>>> >> import java.util.zip.ZipEntry;
>> >>>>> >> import java.util.zip.ZipOutputStream;
>> >>>>> >>
>> >>>>> >> +import org.amplecode.quick.StatementManager;
>> >>>>> >> import org.amplecode.staxwax.factory.XMLFactory;
>> >>>>> >> import org.amplecode.staxwax.writer.XMLWriter;
>> >>>>> >> import org.hibernate.SessionFactory;
>> >>>>> >> import org.hisp.dhis.dataelement.DataElementService;
>> >>>>> >> +import org.hisp.dhis.datamart.DataMartService;
>> >>>>> >> import org.hisp.dhis.importexport.ExportParams;
>> >>>>> >> import org.hisp.dhis.importexport.ExportPipeThread;
>> >>>>> >> import org.hisp.dhis.importexport.ExportService;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;
>> >>>>> >> +import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;
>> >>>>> >> @@ -60,6 +63,7 @@
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;
>> >>>>> >> import
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;
>> >>>>> >> import org.hisp.dhis.indicator.IndicatorService;
>> >>>>> >> +import org.hisp.dhis.period.PeriodService;
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> * @author Lars Helge Overland
>> >>>>> >> @@ -100,6 +104,27 @@
>> >>>>> >> this.indicatorService = indicatorService;
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> + private PeriodService periodService;
>> >>>>> >> +
>> >>>>> >> + public void setPeriodService( PeriodService periodService
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + this.periodService = periodService;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + private DataMartService dataMartService;
>> >>>>> >> +
>> >>>>> >> + public void setDataMartService( DataMartService
>> >>>>> >> dataMartService )
>> >>>>> >> + {
>> >>>>> >> + this.dataMartService = dataMartService;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + private StatementManager statementManager;
>> >>>>> >> +
>> >>>>> >> + public void setStatementManager( StatementManager
>> >>>>> >> statementManager
>> >>>>> >> )
>> >>>>> >> + {
>> >>>>> >> + this.statementManager = statementManager;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // ExportService implementation
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -122,7 +147,7 @@
>> >>>>> >> zipOut.putNextEntry( new ZipEntry( "Export.xml" )
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> XMLWriter writer = XMLFactory.getPlainXMLWriter(
>> >>>>> >> zipOut );
>> >>>>> >> -
>> >>>>> >> +
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> // Writes to one end of the pipe
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >> @@ -156,6 +181,8 @@
>> >>>>> >> thread.registerXMLConverter( new UserConverter()
>> >>>>> >> );
>> >>>>> >> thread.registerXMLConverter( new
>> >>>>> >> UserRoleConverter()
>> >>>>> >> );
>> >>>>> >>
>> >>>>> >> + thread.registerCSVConverter( new
>> >>>>> >> DataValueConverter(
>> >>>>> >> periodService, dataMartService, statementManager ) );
>> >>>>> >> +
>> >>>>> >> thread.start();
>> >>>>> >>
>> >>>>> >> //
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> -------------------------------------------------------------------------
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> >>>>> >> 2010-02-02 19:21:58 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -381,6 +381,9 @@
>> >>>>> >> <property name="sessionFactory"
>> >>>>> >> ref="sessionFactory" />
>> >>>>> >> <property name="dataElementService"
>> >>>>> >> ref="org.hisp.dhis.dataelement.DataElementService" />
>> >>>>> >> <property name="indicatorService"
>> >>>>> >> ref="org.hisp.dhis.indicator.IndicatorService" />
>> >>>>> >> + <property name="periodService"
>> >>>>> >> ref="org.hisp.dhis.period.PeriodService" />
>> >>>>> >> + <property name="dataMartService"
>> >>>>> >> ref="org.hisp.dhis.datamart.DataMartService" />
>> >>>>> >> + <property name="statementManager"
>> >>>>> >> ref="statementManager"
>> >>>>> >> />
>> >>>>> >> </bean>
>> >>>>> >>
>> >>>>> >> <!-- - - - - - - - - - - - - - - - - - - - - - - - - -
>> >>>>> >> - -
>> >>>>> >> - -
>> >>>>> >> -
>> >>>>> >> -
>> >>>>> >> -->
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> >>>>> >> 2009-11-19 19:16:46 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -49,6 +49,20 @@
>> >>>>> >> public static final String DEFAULT_DATE_FORMAT =
>> >>>>> >> "yyyy-MM-dd";
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> + * Formats a Date to the Access date format.
>> >>>>> >> + *
>> >>>>> >> + * @param date the Date to parse.
>> >>>>> >> + * @return a formatted date string.
>> >>>>> >> + */
>> >>>>> >> + public static String getAccessDateString( Date date )
>> >>>>> >> + {
>> >>>>> >> + final SimpleDateFormat format = new
>> >>>>> >> SimpleDateFormat();
>> >>>>> >> + format.applyPattern( "yyyy/MM/dd HH:mm:ss" );
>> >>>>> >> +
>> >>>>> >> + return date != null ? format.format( date ) : null;
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> * Formats a Date to the IXF date format which is
>> >>>>> >> YYYY-MM-DD'T'HH:MM:SS.
>> >>>>> >> *
>> >>>>> >> * @param date the Date to parse.
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> >>>>> >> 2009-12-19 15:20:41 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -422,9 +422,26 @@
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >> /**
>> >>>>> >> + * Closes the current ZipEntry and positions the stream
>> >>>>> >> for
>> >>>>> >> writing
>> >>>>> >> the next entry.
>> >>>>> >> + *
>> >>>>> >> + * @param out the ZipOutputStream.
>> >>>>> >> + */
>> >>>>> >> + public static void closeZipEntry( ZipOutputStream out )
>> >>>>> >> + {
>> >>>>> >> + try
>> >>>>> >> + {
>> >>>>> >> + out.closeEntry();
>> >>>>> >> + }
>> >>>>> >> + catch ( Exception ex )
>> >>>>> >> + {
>> >>>>> >> + throw new RuntimeException( "Failed to close the
>> >>>>> >> current
>> >>>>> >> ZipEntry", ex );
>> >>>>> >> + }
>> >>>>> >> + }
>> >>>>> >> +
>> >>>>> >> + /**
>> >>>>> >> * Finishes writing the contents of the ZIP output stream
>> >>>>> >> without
>> >>>>> >> closing the underlying stream.
>> >>>>> >> *
>> >>>>> >> - * @param out the ZipOutputStream to write to.
>> >>>>> >> + * @param out the ZipOutputStream.
>> >>>>> >> */
>> >>>>> >> public static void finishZipEntry( ZipOutputStream out )
>> >>>>> >> {
>> >>>>> >> @@ -434,7 +451,7 @@
>> >>>>> >> }
>> >>>>> >> catch ( Exception ex )
>> >>>>> >> {
>> >>>>> >> - throw new RuntimeException( "Failed to finish
>> >>>>> >> ZipOutputStream", ex );
>> >>>>> >> + throw new RuntimeException( "Failed to finish the
>> >>>>> >> content
>> >>>>> >> of
>> >>>>> >> the ZipOutputStream", ex );
>> >>>>> >> }
>> >>>>> >> }
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> >>>>> >> 2010-01-27 21:45:11 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -146,6 +146,7 @@
>> >>>>> >> import_from_other_systems = Import from other systems
>> >>>>> >> DHIS14_import = DHIS 1.4 Import
>> >>>>> >> DHIS14_metadata_export = DHIS 1.4 Metadata Export
>> >>>>> >> +DHIS14_data_export = DHIS 1.4 Data Export
>> >>>>> >> IXF_import = IXF Import
>> >>>>> >> accept_incoming_records = Accept incoming records
>> >>>>> >> include_datavalues = Include data values
>> >>>>> >> @@ -442,4 +443,5 @@
>> >>>>> >> intro_ixf_metadata_export = Do an export of meta-data or
>> >>>>> >> dimensional
>> >>>>> >> data
>> >>>>> >> describing the facts. Indicator Transmission Format (IXF) is a
>> >>>>> >> standard
>> >>>>> >> developed by the WHO.
>> >>>>> >> intro_DHIS14_metadata_export = Do an export of meta-data or
>> >>>>> >> dimensional
>> >>>>> >> data describing the facts. DHIS 1.4 is the predecessor of DHIS
>> >>>>> >> 2.
>> >>>>> >> intro_DHIS14_detailed_metadata_export = Do an export of an
>> >>>>> >> detailed
>> >>>>> >> selection of meta-data. DHIS 1.4 is the predecessor of DHIS 2.
>> >>>>> >> +intro_DHIS14_data_export = Do an export of data values or
>> >>>>> >> facts.
>> >>>>> >> DHIS
>> >>>>> >> 1.4
>> >>>>> >> is the predecessor of DHIS 2.
>> >>>>> >> intro_pdf_metadata_export = Portable Document Format (PDF) is
>> >>>>> >> a
>> >>>>> >> file
>> >>>>> >> format for document exchange.
>> >>>>> >>
>> >>>>> >> === modified file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> 'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'
>> >>>>> >> ---
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> >>>>> >> 2010-01-28 11:51:39 +0000
>> >>>>> >> +++
>> >>>>> >>
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm
>> >>>>> >> 2010-02-08 10:56:08 +0000
>> >>>>> >> @@ -2,8 +2,9 @@
>> >>>>> >> <h3>$i18n.getString( "export_to_other_systems" )</h3>
>> >>>>> >>
>> >>>>> >> <ul class="introList">
>> >>>>> >> + #introListItem(
>> >>>>> >> "displayMetaDataExportForm.action?exportFormat=IXF"
>> >>>>> >> "ixf_metadata_export" )
>> >>>>> >> #introListItem(
>> >>>>> >> "displayDataValueExportForm.action?exportFormat=IXF"
>> >>>>> >> "ixf_data_export" )
>> >>>>> >> - #introListItem(
>> >>>>> >> "displayMetaDataExportForm.action?exportFormat=IXF"
>> >>>>> >> "ixf_metadata_export" )
>> >>>>> >> #introListItem(
>> >>>>> >> "displayMetaDataExportForm.action?exportFormat=DHIS14XML"
>> >>>>> >> "DHIS14_metadata_export" )
>> >>>>> >> #introListItem(
>> >>>>> >>
>> >>>>> >> "displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"
>> >>>>> >> "DHIS14_detailed_metadata_export" )
>> >>>>> >> + #introListItem(
>> >>>>> >> "displayDataValueExportForm.action?exportFormat=DHIS14XML"
>> >>>>> >> "DHIS14_data_export" )
>> >>>>> >> #introListItem(
>> >>>>> >> "displayMetaDataExportForm.action?exportFormat=PDF"
>> >>>>> >> "pdf_metadata_export" )
>> >>>>> >> \ No newline at end of file
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> _______________________________________________
>> >>>>> >> Mailing list: https://launchpad.net/~dhis2-devs
>> >>>>> >> Post to : dhis2-devs@lists.launchpad.net
>> >>>>> >> Unsubscribe : https://launchpad.net/~dhis2-devs
>> >>>>> >> More help : https://help.launchpad.net/ListHelp
>> >>>>> >>
>> >>>>> >
>> >>>>> >
>> >>>>> > _______________________________________________
>> >>>>> > Mailing list: https://launchpad.net/~dhis2-devs
>> >>>>> > Post to : dhis2-devs@lists.launchpad.net
>> >>>>> > Unsubscribe : https://launchpad.net/~dhis2-devs
>> >>>>> > More help : https://help.launchpad.net/ListHelp
>> >>>>> >
>> >>>>> >
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> --
>> >> Sendt fra min mobile enhet
>> >>
>> >
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~dhis2-devs
>> Post to : dhis2-devs@lists.launchpad.net
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help : https://help.launchpad.net/ListHelp
>
>

Hi,

Pardon me if this is irrelevant as I'm unable to understand the initial context. But it appears you were discussing writing 7z for dhis1.4.

For our mobile server, I simply used a zipoutputstream and used a filename that ends with .7z. And it did the magic. We found no need for actual LZMA streams and dhis1.4 is importing this 'fake' .7z very well :slight_smile:

Ime

···

--- On Mon, 2/8/10, Saptarshi Purkayastha <sunbiz@gmail.com> wrote:

From: Saptarshi Purkayastha <sunbiz@gmail.com>
Subject: Re: [Dhis2-devs] [Branch ~dhis2-devs-core/dhis2/trunk] Rev 1404: Implemented DHIS 1.4 export of data values
To: "Jason Pickering" <jason.p.pickering@gmail.com>
Cc: "DHIS 2 developers" <dhis2-devs@lists.launchpad.net>
Date: Monday, February 8, 2010, 6:23 PM
Isn't LZMA SDK providing
the JAVA library?? and comparisons are here
---
Regards,
Saptarshi PURKAYASTHA

Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:17, Jason > Pickering <jason.p.pickering@gmail.com> > wrote:

No clue if this is possible, but if the user was to provide
a path to

a native OS executable, could DHIS push the job off to
this?

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>:

> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

>> Yup agree with that just could not make it write
the appropriate zip

>> entries that way.. Open for being enlighted
here..

>

> OK. Can't really look now but I guess it must be
tricky :slight_smile: Will

> maybe look later in the week. If the day comes (and
I don't see it

> soon) that you had an option to write to either 7z or
zip format I'm

> just thinking you would want the packaging decoupled
from the

> production of the streams.

>

> Bob

>

>>

>> 2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:

>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

>>>>

>>>>

>>>> 2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>

>>>>>

>>>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

>>>>> >

>>>>> >

>>>>> > On Mon, Feb 8, 2010 at 11:59 AM, > <noreply@launchpad.net> > wrote:

>>>>> >>

>>>>> >>
------------------------------------------------------------

>>>>> >> revno: 1404

>>>>> >> committer: Lars Helge
Oeverland <larshelge@gmail.com>

>>>>> >> branch nick: trunk

>>>>> >> timestamp: Mon 2010-02-08
11:56:08 +0100

>>>>> >> message:

>>>>> >> Implemented DHIS 1.4 export
of data values

>>>>> >> modified:

>>>>> >

>>>>> >

>>>>> > There is actually still a snag
here. DHIS 1.4 only accepts the

>>>>> > 7zip/lzma

>>>>> > format currently. I have talked
Greg into making 1.4 accept zip/deflate

>>>>> > too.

>>>>>

>>>>> Isn't it better to have
gzip/deflate? We are not talking about

>>>>> compressing an archive of files but
rather compressing a single

>>>>> stream.

>>>>>

>>>>> Also I think the original "void
write( BufferedWriter writer,

>>>>> ExportParams params )" might be
better than "void write(

>>>>> ZipOutputStream out, ExportParams
params )". It seems unnecessary

>>>>> that the convertor should have to know
anything about zip, gzip, 7zip

>>>>> or what have you. It should know how
to write csv to a stream.

>>>>>

>>>>> I suspect that how the stream is later
compressed is better deferred to

>>>>> later.

>>>>

>>>> Problem is that DHIS 1.4 uses a CSV file
for data and an XML file for

>>>> meta-data and keeps both inside the
archive... I was was not able to have

>>>> multiple zip entries while using the
Writer..

>>>

>>> Ah. Ok. I do remember. Then you would need
an archive (zip or the

>>> seven thing) rather a gzipped stream.

>>>

>>> But does your CSV writer need to know that?
Surely it just has an

>>> interest in churning out csv datavalues.
Some other component should

>>> put the csv stream together with the xml
stream into the zip.

>>>

>>>>

>>>>>

>>>>> Cheers

>>>>> Bob

>>>>>

>>>>> >

>>>>> >>

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

>>>>> >>

>>>>> >>

>>>>> >> --

>>>>> >> lp:dhis2

>>>>> >> trunk : Code : DHIS

>>>>> >>

>>>>> >> Your team DHIS 2 developers
is subscribed to branch lp:dhis2.

>>>>> >> To unsubscribe from this
branch go to

>>>>> >>

>>>>> >> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

>>>>> >> 2009-03-03 16:46:36 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -28,7 +28,7 @@

>>>>> >> */

>>>>> >>

>>>>> >> import
java.io.BufferedReader;

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> +import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> /**

>>>>> >> * @author Lars Helge
Overland

>>>>> >> @@ -36,7 +36,7 @@

>>>>> >> */

>>>>> >> public interface
CSVConverter

>>>>> >> {

>>>>> >> - void write(
BufferedWriter writer, ExportParams params );

>>>>> >> + void write(
ZipOutputStream out, ExportParams params );

>>>>> >>

>>>>> >> void read(
BufferedReader reader, ImportParams params );

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

>>>>> >> 2009-11-02 15:55:44
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -52,7 +52,8 @@

>>>>> >>

>>>>> >> private
List<XMLConverter> xsdConverters = new

>>>>> >>
ArrayList<XMLConverter>();

>>>>> >> private
List<XMLConverter> xmlConverters = new

>>>>> >>
ArrayList<XMLConverter>();

>>>>> >> -

>>>>> >> + private
List<CSVConverter> csvConverters = new

>>>>> >>
ArrayList<CSVConverter>();

>>>>> >> +

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Parameters

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -122,6 +123,11 @@

>>>>> >>
this.xmlConverters.add( converter );

>>>>> >> }

>>>>> >>

>>>>> >> + public void
registerCSVConverter ( CSVConverter converter )

>>>>> >> + {

>>>>> >> +
this.csvConverters.add( converter );

>>>>> >> + }

>>>>> >> +

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Thread
implementation

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -159,9 +165,20 @@

>>>>> >> }

>>>>> >>

>>>>> >> afterXML(
writer );

>>>>> >> -

>>>>> >> +

>>>>> >>
closeDocument( writer );

>>>>> >> -

>>>>> >> +

>>>>> >> +
StreamUtils.closeZipEntry( zipOutputStream );

>>>>> >> +

>>>>> >> + //

>>>>> >>
-----------------------------------------------------------------

>>>>> >> + // CSV

>>>>> >> + //

>>>>> >>
-----------------------------------------------------------------

>>>>> >> +

>>>>> >> + for (
CSVConverter converter : csvConverters )

>>>>> >> + {

>>>>> >> +
converter.write( zipOutputStream, params );

>>>>> >> + }

>>>>> >> +

>>>>> >> log.info( "Export done"
);

>>>>> >> }

>>>>> >> catch ( Exception
ex )

>>>>> >> @@ -172,12 +189,10 @@

>>>>> >> }

>>>>> >> finally

>>>>> >> {

>>>>> >> -
StreamUtils.finishZipEntry( zipOutputStream );

>>>>> >> +
writer.closeWriter();

>>>>> >>

>>>>> >>
StreamUtils.closeOutputStream( zipOutputStream );

>>>>> >>

>>>>> >> -
writer.closeWriter();

>>>>> >> -

>>>>> >>
NameMappingUtil.clearMapping();

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

>>>>> >> 2009-06-10 22:25:07 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -27,14 +27,17 @@

>>>>> >> * SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

>>>>> >> */

>>>>> >>

>>>>> >> -import static
org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;

>>>>> >> +import static
org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

>>>>> >> import static
org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

>>>>> >>

>>>>> >> import
java.io.BufferedReader;

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> import
java.io.IOException;

>>>>> >> import java.util.Iterator;

>>>>> >> import
java.util.SortedMap;

>>>>> >> +import
java.util.zip.ZipEntry;

>>>>> >> +import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> import
org.hisp.dhis.importexport.CSVConverter;

>>>>> >> import
org.hisp.dhis.importexport.ExportParams;

>>>>> >> @@ -69,27 +72,29 @@

>>>>> >> // CSVConverter
implementation

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >>

>>>>> >> - public void write(
BufferedWriter writer, ExportParams params )

>>>>> >> + public void write(
ZipOutputStream out, ExportParams params )

>>>>> >> {

>>>>> >> try

>>>>> >> {

>>>>> >> - for (
Integer id : params.getReportTables() ) //TODO more

>>>>> >> than one?

>>>>> >> + for (
Integer id : params.getReportTables() )

>>>>> >> {

>>>>> >> +
out.putNextEntry( new ZipEntry( "ReportTable" +
id +

>>>>> >> CSV_EXTENSION ) );

>>>>> >> +

>>>>> >>
ReportTableData data =

>>>>> >>
reportTableService.getReportTableData( id,
params.getFormat() );

>>>>> >>

>>>>> >>
Iterator<String> columns =

>>>>> >>
data.getPrettyPrintColumns().iterator();

>>>>> >>

>>>>> >> while
( columns.hasNext() )

>>>>> >> {

>>>>> >> -
writer.write( csvEncode( columns.next() ) );

>>>>> >> +
out.write( csvEncode( columns.next() ).getBytes()

>>>>> >> );

>>>>> >>

>>>>> >>
if ( columns.hasNext() )

>>>>> >>
{

>>>>> >> -
writer.write( SEPARATOR );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >>
}

>>>>> >> }

>>>>> >>

>>>>> >> -
writer.newLine();

>>>>> >> +
out.write( NEWLINE );

>>>>> >>

>>>>> >> for (
SortedMap<Integer, String> row : data.getRows()

>>>>> >> )

>>>>> >> {

>>>>> >> @@ -97,15 +102,15 @@

>>>>> >>

>>>>> >>
while ( values.hasNext() )

>>>>> >>
{

>>>>> >> -
writer.write( csvEncode( values.next() ) );

>>>>> >> +
out.write( csvEncode( values.next()

>>>>> >> ).getBytes()

>>>>> >> );

>>>>> >>

>>>>> >>
if ( values.hasNext() )

>>>>> >>
{

>>>>> >> -
writer.write( SEPARATOR );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >>
}

>>>>> >>
}

>>>>> >>

>>>>> >> -
writer.newLine();

>>>>> >> +
out.write( NEWLINE );

>>>>> >> }

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

>>>>> >> 2009-06-10 22:25:07
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -27,9 +27,9 @@

>>>>> >> * SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

>>>>> >> */

>>>>> >>

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> import
java.util.ArrayList;

>>>>> >> import java.util.List;

>>>>> >> +import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> import
org.apache.commons.logging.Log;

>>>>> >> import
org.apache.commons.logging.LogFactory;

>>>>> >> @@ -48,13 +48,6 @@

>>>>> >> {

>>>>> >> private static final
Log log = LogFactory.getLog(

>>>>> >> CSVExportPipeThread.class );

>>>>> >>

>>>>> >> - private BufferedWriter
writer;

>>>>> >> -

>>>>> >> - public void setWriter(
BufferedWriter writer )

>>>>> >> - {

>>>>> >> - this.writer =
writer;

>>>>> >> - }

>>>>> >> -

>>>>> >> private ExportParams
params;

>>>>> >>

>>>>> >> public void setParams(
ExportParams params )

>>>>> >> @@ -62,6 +55,13 @@

>>>>> >> this.params =
params;

>>>>> >> }

>>>>> >>

>>>>> >> + private
ZipOutputStream outputStream;

>>>>> >> +

>>>>> >> + public void
setOutputStream( ZipOutputStream outputStream )

>>>>> >> + {

>>>>> >> +
this.outputStream = outputStream;

>>>>> >> + }

>>>>> >> +

>>>>> >> private
List<CSVConverter> converters = new

>>>>> >>
ArrayList<CSVConverter>();

>>>>> >>

>>>>> >> public void
registerCSVConverter( CSVConverter converter )

>>>>> >> @@ -90,14 +90,18 @@

>>>>> >>

>>>>> >> for (
CSVConverter converter : converters )

>>>>> >> {

>>>>> >> -
converter.write( writer, params );

>>>>> >> +
converter.write( outputStream, params );

>>>>> >> }

>>>>> >>

>>>>> >> log.info( "Export
finished" );

>>>>> >> }

>>>>> >> + catch (
Exception ex )

>>>>> >> + {

>>>>> >> + throw new
RuntimeException( ex );

>>>>> >> + }

>>>>> >> finally

>>>>> >> {

>>>>> >> -
StreamUtils.closeWriter( writer );

>>>>> >> +
StreamUtils.closeOutputStream( outputStream );

>>>>> >> }

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

>>>>> >> 2009-06-10 22:25:07 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -28,13 +28,11 @@

>>>>> >> */

>>>>> >>

>>>>> >> import
java.io.BufferedInputStream;

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> +import
java.io.BufferedOutputStream;

>>>>> >> import
java.io.IOException;

>>>>> >> import
java.io.InputStream;

>>>>> >> -import
java.io.OutputStreamWriter;

>>>>> >> import
java.io.PipedInputStream;

>>>>> >> import
java.io.PipedOutputStream;

>>>>> >> -import
java.util.zip.ZipEntry;

>>>>> >> import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> import
org.hibernate.SessionFactory;

>>>>> >> @@ -50,8 +48,6 @@

>>>>> >> public class
DefaultCSVExportService

>>>>> >> implements
ExportService

>>>>> >> {

>>>>> >> - private static final
String ZIP_ENTRY_NAME = "Export.csv";

>>>>> >> -

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Dependencies

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -87,20 +83,18 @@

>>>>> >>

>>>>> >>
PipedInputStream in = new PipedInputStream( out );

>>>>> >>

>>>>> >> -
ZipOutputStream zipOut = new ZipOutputStream( out );

>>>>> >> +
ZipOutputStream zipOut = new ZipOutputStream( new

>>>>> >> BufferedOutputStream( out )
);

>>>>> >>

>>>>> >> -
zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );

>>>>> >> +
//zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );

>>>>> >>

>>>>> >> -
BufferedWriter writer = new BufferedWriter( new

>>>>> >> OutputStreamWriter( zipOut )
);

>>>>> >> -

>>>>> >> //

>>>>> >>
-----------------------------------------------------------------

>>>>> >> // Writes
to one end of the pipe

>>>>> >> //

>>>>> >>
-----------------------------------------------------------------

>>>>> >>

>>>>> >>
CSVExportPipeThread thread = new CSVExportPipeThread(

>>>>> >> sessionFactory );

>>>>> >>

>>>>> >> -
thread.setWriter( writer );

>>>>> >>
thread.setParams( params );

>>>>> >> +
thread.setOutputStream( zipOut );

>>>>> >>

>>>>> >>
thread.registerCSVConverter( new ReportTableDataConverter(

>>>>> >> reportTableService ) );

>>>>> >>

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

>>>>> >> 2009-04-16 09:53:17
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -33,15 +33,80 @@

>>>>> >> */

>>>>> >> public class CsvUtil

>>>>> >> {

>>>>> >> - public static final
char SEPARATOR = ',';

>>>>> >> -

>>>>> >> - private static final
String ENCLOSURE = "\"";

>>>>> >> -

>>>>> >> - public static String
csvEncode( String string )

>>>>> >> - {

>>>>> >> - string =
string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE

>>>>> >> );

>>>>> >> - string =
ENCLOSURE + string + ENCLOSURE;

>>>>> >> + public static final
String SEPARATOR = ",";

>>>>> >> + public static final
byte SEPARATOR_B = SEPARATOR.getBytes();

>>>>> >> + public static final
byte NEWLINE = "\n".getBytes();

>>>>> >> +

>>>>> >> + public static final
String CSV_EXTENSION = ".csv";

>>>>> >> + private static final
String ENCLOSURE = "\"";

>>>>> >> + private static final
String EMPTY = "";

>>>>> >> +

>>>>> >> + /**

>>>>> >> + * Encodes the given
value to a CSV acceptable value.

>>>>> >> + *

>>>>> >> + * @param value the
value.

>>>>> >> + * @return the CSV
encoded value.

>>>>> >> + */

>>>>> >> + public static String
csvEncode( int value )

>>>>> >> + {

>>>>> >> + return
csvEncode( String.valueOf( value ) );

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> + * Encodes the given
value to a CSV acceptable value.

>>>>> >> + *

>>>>> >> + * @param value the
value.

>>>>> >> + * @return the CSV
encoded value.

>>>>> >> + */

>>>>> >> + public static String
csvEncode( String value )

>>>>> >> + {

>>>>> >> + if ( value ==
null )

>>>>> >> + {

>>>>> >> + value =
EMPTY;

>>>>> >> + }

>>>>> >> + else

>>>>> >> + {

>>>>> >> + value =
value.replaceAll( ENCLOSURE, ENCLOSURE +

>>>>> >> ENCLOSURE

>>>>> >> );

>>>>> >> + value =
ENCLOSURE + value + ENCLOSURE;

>>>>> >> + }

>>>>> >> +

>>>>> >> + return value;

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> + * Appends a separator
to the value and returns the value as a

>>>>> >> byte

>>>>> >> array.

>>>>> >> + *

>>>>> >> + * @param value the
value.

>>>>> >> + * @return a byte
araray.

>>>>> >> + */

>>>>> >> + public static byte
getCsvValue( int value )

>>>>> >> + {

>>>>> >> + return
getCsvEndValue( value + SEPARATOR );

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> + * Appends a separator
to the value and returns the value as a

>>>>> >> byte

>>>>> >> array.

>>>>> >> + *

>>>>> >> + * @param value the
value.

>>>>> >> + * @return a byte
araray.

>>>>> >> + */

>>>>> >> + public static byte
getCsvValue( String value )

>>>>> >> + {

>>>>> >> + return
getCsvEndValue( value + SEPARATOR );

>>>>> >> + }

>>>>> >> +

>>>>> >> + public static byte
getCsvEndValue( int value )

>>>>> >> + {

>>>>> >> + return
getCsvEndValue( String.valueOf( value ) );

>>>>> >> + }

>>>>> >> +

>>>>> >> + public static byte
getCsvEndValue( String value )

>>>>> >> + {

>>>>> >> + if ( value ==
null )

>>>>> >> + {

>>>>> >> + return
EMPTY.getBytes();

>>>>> >> + }

>>>>> >>

>>>>> >> - return string;

>>>>> >> + return ( value
).getBytes();

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

>>>>> >> 2010-02-08
07:04:26 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

>>>>> >> 2010-02-08
10:56:08 +0000

>>>>> >> @@ -27,17 +27,28 @@

>>>>> >> * SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

>>>>> >> */

>>>>> >>

>>>>> >> +import static
org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

>>>>> >> +import static
org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;

>>>>> >> +

>>>>> >> import
java.io.BufferedReader;

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> import
java.io.IOException;

>>>>> >> +import
java.util.Collection;

>>>>> >> import java.util.Map;

>>>>> >> +import
java.util.zip.ZipEntry;

>>>>> >> +import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> import
org.amplecode.quick.BatchHandler;

>>>>> >> +import
org.amplecode.quick.StatementManager;

>>>>> >> import
org.hisp.dhis.dataelement.DataElement;

>>>>> >> import
org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;

>>>>> >> import
org.hisp.dhis.dataelement.DataElementCategoryService;

>>>>> >> +import
org.hisp.dhis.datamart.DataMartService;

>>>>> >> import
org.hisp.dhis.datavalue.DataValue;

>>>>> >> import
org.hisp.dhis.datavalue.DataValueService;

>>>>> >> +import
org.hisp.dhis.datavalue.DeflatedDataValue;

>>>>> >> import
org.hisp.dhis.importexport.CSVConverter;

>>>>> >> import
org.hisp.dhis.importexport.ExportParams;

>>>>> >> import
org.hisp.dhis.importexport.GroupMemberType;

>>>>> >> @@ -47,7 +58,10 @@

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.converter.AbstractDataValueConverter;

>>>>> >> import
org.hisp.dhis.organisationunit.OrganisationUnit;

>>>>> >> import
org.hisp.dhis.period.Period;

>>>>> >> +import
org.hisp.dhis.period.PeriodService;

>>>>> >> +import
org.hisp.dhis.system.util.DateUtils;

>>>>> >> import
org.hisp.dhis.system.util.MimicingHashMap;

>>>>> >> +import
org.hisp.dhis.system.util.StreamUtils;

>>>>> >>

>>>>> >> /**

>>>>> >> * @author Lars Helge
Overland

>>>>> >> @@ -57,8 +71,11 @@

>>>>> >> extends
AbstractDataValueConverter implements CSVConverter

>>>>> >> {

>>>>> >> private static final
String SEPARATOR = ",";

>>>>> >> + private static final
String FILENAME = "RoutineData.txt";

>>>>> >>

>>>>> >> private
DataElementCategoryService categoryService;

>>>>> >> + private PeriodService
periodService;

>>>>> >> + private
StatementManager statementManager;

>>>>> >>

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Properties

>>>>> >> @@ -72,6 +89,14 @@

>>>>> >> // Constructor

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >>

>>>>> >> + public
DataValueConverter( PeriodService periodService,

>>>>> >> DataMartService
dataMartService,

>>>>> >> + StatementManager
statementManager )

>>>>> >> + {

>>>>> >> +
this.periodService = periodService;

>>>>> >> +
this.dataMartService = dataMartService;

>>>>> >> +
this.statementManager = statementManager;

>>>>> >> + }

>>>>> >> +

>>>>> >> /**

>>>>> >> * Constructor for
read operations.

>>>>> >> */

>>>>> >> @@ -95,9 +120,81 @@

>>>>> >> // CSVConverter
implementation

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >>

>>>>> >> - public void write(
BufferedWriter writer, ExportParams params )

>>>>> >> + public void write(
ZipOutputStream out, ExportParams params )

>>>>> >> {

>>>>> >> - // Not
implemented

>>>>> >> + try

>>>>> >> + {

>>>>> >> +
out.putNextEntry( new ZipEntry( FILENAME ) );

>>>>> >> +

>>>>> >> + out.write(
getCsvValue( csvEncode( "RoutineDataID" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "OrgUnitID" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "DataElementID" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "DataPeriodID" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryText" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryYesNo" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryNumber" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryDate" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryMemo" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryObject" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "Check" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "Verified" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "Deleted" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "Comment" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "LastUserID" ) ) );

>>>>> >> + out.write(
getCsvEndValue( csvEncode( "LastUpdated" ) )

>>>>> >> );

>>>>> >> +

>>>>> >> + out.write(
NEWLINE );

>>>>> >> +

>>>>> >> + if (
params.isIncludeDataValues() )

>>>>> >> + {

>>>>> >> + if (
params.getStartDate() != null &&

>>>>> >> params.getEndDate()

>>>>> >> != null )

>>>>> >> + {

>>>>> >> +
Collection<DeflatedDataValue> values = null;

>>>>> >> +

>>>>> >> +
Collection<Period> periods =

>>>>> >>
periodService.getIntersectingPeriods(
params.getStartDate(),

>>>>> >> params.getEndDate() );

>>>>> >> +

>>>>> >> +
statementManager.initialise();

>>>>> >> +

>>>>> >> +
for ( final Integer element :

>>>>> >> params.getDataElements() )

>>>>> >> +
{

>>>>> >> +
for ( final Period period : periods )

>>>>> >> +
{

>>>>> >> +
values =

>>>>> >>
dataMartService.getDeflatedDataValues( element,
period.getId(),

>>>>> >> params.getOrganisationUnits()
);

>>>>> >> +

>>>>> >> +
for ( final DeflatedDataValue value :

>>>>> >> values

>>>>> >> )

>>>>> >> +
{

>>>>> >> +
out.write( getCsvValue( 0 ) );

>>>>> >> +
out.write( getCsvValue(

>>>>> >> value.getSourceId() ) );

>>>>> >> +
out.write( getCsvValue(

>>>>> >> value.getDataElementId() )
);

>>>>> >> +
out.write( getCsvValue(

>>>>> >> value.getPeriodId() ) );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( getCsvValue( csvEncode(

>>>>> >> value.getValue() ) ) );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( getCsvValue( 0 ) );

>>>>> >> +
out.write( getCsvValue( 0 ) );

>>>>> >> +
out.write( getCsvValue( 0 ) );

>>>>> >> +
out.write( getCsvValue( csvEncode(

>>>>> >> value.getComment() ) ) );

>>>>> >> +
out.write( getCsvValue( 1 ) );

>>>>> >> +
out.write( getCsvEndValue(

>>>>> >>
DateUtils.getAccessDateString( value.getTimestamp() ) ) );

>>>>> >> +

>>>>> >> +
out.write( NEWLINE );

>>>>> >> +
}

>>>>> >> +
}

>>>>> >> +
}

>>>>> >> +

>>>>> >> +
statementManager.destroy();

>>>>> >> + }

>>>>> >> + }

>>>>> >> +

>>>>> >> +
StreamUtils.closeZipEntry( out );

>>>>> >> + }

>>>>> >> + catch (
IOException ex )

>>>>> >> + {

>>>>> >> + throw new
RuntimeException( "Failed to write data", ex );

>>>>> >> + }

>>>>> >> }

>>>>> >>

>>>>> >> public void read(
BufferedReader reader, ImportParams params )

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

>>>>> >> 2009-11-07 14:09:00
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -35,16 +35,19 @@

>>>>> >> import
java.util.zip.ZipEntry;

>>>>> >> import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> +import
org.amplecode.quick.StatementManager;

>>>>> >> import
org.amplecode.staxwax.factory.XMLFactory;

>>>>> >> import
org.amplecode.staxwax.writer.XMLWriter;

>>>>> >> import
org.hibernate.SessionFactory;

>>>>> >> import
org.hisp.dhis.dataelement.DataElementService;

>>>>> >> +import
org.hisp.dhis.datamart.DataMartService;

>>>>> >> import
org.hisp.dhis.importexport.ExportParams;

>>>>> >> import
org.hisp.dhis.importexport.ExportPipeThread;

>>>>> >> import
org.hisp.dhis.importexport.ExportService;

>>>>> >> import

>>>>> >>

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;

>>>>> >> +import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;

>>>>> >> @@ -60,6 +63,7 @@

>>>>> >> import

>>>>> >>

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;

>>>>> >> import
org.hisp.dhis.indicator.IndicatorService;

>>>>> >> +import
org.hisp.dhis.period.PeriodService;

>>>>> >>

>>>>> >> /**

>>>>> >> * @author Lars Helge
Overland

>>>>> >> @@ -100,6 +104,27 @@

>>>>> >>
this.indicatorService = indicatorService;

>>>>> >> }

>>>>> >>

>>>>> >> + private PeriodService
periodService;

>>>>> >> +

>>>>> >> + public void
setPeriodService( PeriodService periodService )

>>>>> >> + {

>>>>> >> +
this.periodService = periodService;

>>>>> >> + }

>>>>> >> +

>>>>> >> + private
DataMartService dataMartService;

>>>>> >> +

>>>>> >> + public void
setDataMartService( DataMartService dataMartService )

>>>>> >> + {

>>>>> >> +
this.dataMartService = dataMartService;

>>>>> >> + }

>>>>> >> +

>>>>> >> + private
StatementManager statementManager;

>>>>> >> +

>>>>> >> + public void
setStatementManager( StatementManager

>>>>> >> statementManager

>>>>> >> )

>>>>> >> + {

>>>>> >> +
this.statementManager = statementManager;

>>>>> >> + }

>>>>> >> +

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // ExportService
implementation

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -122,7 +147,7 @@

>>>>> >>
zipOut.putNextEntry( new ZipEntry( "Export.xml" )
);

>>>>> >>

>>>>> >> XMLWriter
writer = XMLFactory.getPlainXMLWriter( zipOut );

>>>>> >> -

>>>>> >> +

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Writes
to one end of the pipe

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -156,6 +181,8 @@

>>>>> >>
thread.registerXMLConverter( new UserConverter() );

>>>>> >>
thread.registerXMLConverter( new UserRoleConverter() );

>>>>> >>

>>>>> >> +
thread.registerCSVConverter( new DataValueConverter(

>>>>> >> periodService,
dataMartService, statementManager ) );

>>>>> >> +

>>>>> >>
thread.start();

>>>>> >>

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

>>>>> >> 2010-02-02 19:21:58 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -381,6 +381,9 @@

>>>>> >>
<property name="sessionFactory"
ref="sessionFactory" />

>>>>> >>
<property name="dataElementService"

>>>>> >>
ref="org.hisp.dhis.dataelement.DataElementService"
/>

>>>>> >>
<property name="indicatorService"

>>>>> >>
ref="org.hisp.dhis.indicator.IndicatorService"
/>

>>>>> >> +
<property name="periodService"

>>>>> >>
ref="org.hisp.dhis.period.PeriodService" />

>>>>> >> +
<property name="dataMartService"

>>>>> >>
ref="org.hisp.dhis.datamart.DataMartService"
/>

>>>>> >> +
<property name="statementManager"

>>>>> >>
ref="statementManager"

>>>>> >> />

>>>>> >> </bean>

>>>>> >>

>>>>> >> <!-- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -

>>>>> >> -

>>>>> >> -

>>>>> >> -->

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

>>>>> >> 2009-11-19 19:16:46
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -49,6 +49,20 @@

>>>>> >> public static final
String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

>>>>> >>

>>>>> >> /**

>>>>> >> + * Formats a Date to
the Access date format.

>>>>> >> + *

>>>>> >> + * @param date the
Date to parse.

>>>>> >> + * @return a formatted
date string.

>>>>> >> + */

>>>>> >> + public static String
getAccessDateString( Date date )

>>>>> >> + {

>>>>> >> + final
SimpleDateFormat format = new SimpleDateFormat();

>>>>> >> +
format.applyPattern( "yyyy/MM/dd HH:mm:ss" );

>>>>> >> +

>>>>> >> + return date !=
null ? format.format( date ) : null;

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> * Formats a Date to
the IXF date format which is

>>>>> >>
YYYY-MM-DD'T'HH:MM:SS.

>>>>> >> *

>>>>> >> * @param date the
Date to parse.

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

>>>>> >> 2009-12-19 15:20:41
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -422,9 +422,26 @@

>>>>> >> }

>>>>> >>

>>>>> >> /**

>>>>> >> + * Closes the current
ZipEntry and positions the stream for

>>>>> >> writing

>>>>> >> the next entry.

>>>>> >> + *

>>>>> >> + * @param out the
ZipOutputStream.

>>>>> >> + */

>>>>> >> + public static void
closeZipEntry( ZipOutputStream out )

>>>>> >> + {

>>>>> >> + try

>>>>> >> + {

>>>>> >> +
out.closeEntry();

>>>>> >> + }

>>>>> >> + catch (
Exception ex )

>>>>> >> + {

>>>>> >> + throw new
RuntimeException( "Failed to close the current

>>>>> >> ZipEntry", ex );

>>>>> >> + }

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> * Finishes writing
the contents of the ZIP output stream without

>>>>> >> closing the underlying
stream.

>>>>> >> *

>>>>> >> - * @param out the
ZipOutputStream to write to.

>>>>> >> + * @param out the
ZipOutputStream.

>>>>> >> */

>>>>> >> public static void
finishZipEntry( ZipOutputStream out )

>>>>> >> {

>>>>> >> @@ -434,7 +451,7 @@

>>>>> >> }

>>>>> >> catch ( Exception
ex )

>>>>> >> {

>>>>> >> - throw new
RuntimeException( "Failed to finish

>>>>> >> ZipOutputStream", ex );

>>>>> >> + throw new
RuntimeException( "Failed to finish the content

>>>>> >> of

>>>>> >> the ZipOutputStream", ex
);

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

>>>>> >> 2010-01-27 21:45:11 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -146,6 +146,7 @@

>>>>> >> import_from_other_systems =
Import from other systems

>>>>> >> DHIS14_import = DHIS 1.4
Import

>>>>> >> DHIS14_metadata_export =
DHIS 1.4 Metadata Export

>>>>> >> +DHIS14_data_export = DHIS
1.4 Data Export

>>>>> >> IXF_import = IXF Import

>>>>> >> accept_incoming_records =
Accept incoming records

>>>>> >> include_datavalues =
Include data values

>>>>> >> @@ -442,4 +443,5 @@

>>>>> >> intro_ixf_metadata_export =
Do an export of meta-data or dimensional

>>>>> >> data

>>>>> >> describing the facts.
Indicator Transmission Format (IXF) is a

>>>>> >> standard

>>>>> >> developed by the WHO.

>>>>> >>
intro_DHIS14_metadata_export = Do an export of meta-data
or

>>>>> >> dimensional

>>>>> >> data describing the facts.
DHIS 1.4 is the predecessor of DHIS 2.

>>>>> >>
intro_DHIS14_detailed_metadata_export = Do an export of an
detailed

>>>>> >> selection of meta-data. DHIS
1.4 is the predecessor of DHIS 2.

>>>>> >> +intro_DHIS14_data_export =
Do an export of data values or facts. DHIS

>>>>> >> 1.4

>>>>> >> is the predecessor of DHIS
2.

>>>>> >> intro_pdf_metadata_export =
Portable Document Format (PDF) is a file

>>>>> >> format for document
exchange.

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

>>>>> >> 2010-01-28 11:51:39 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -2,8 +2,9 @@

>>>>> >> <h3>$i18n.getString(
"export_to_other_systems" )</h3>

>>>>> >>

>>>>> >> <ul
class="introList">

>>>>> >> + #introListItem(

>>>>> >>
"displayMetaDataExportForm.action?exportFormat=IXF"

>>>>> >>
"ixf_metadata_export" )

>>>>> >> #introListItem(

>>>>> >>
"displayDataValueExportForm.action?exportFormat=IXF"

>>>>> >> "ixf_data_export"
)

>>>>> >> - #introListItem(

>>>>> >>
"displayMetaDataExportForm.action?exportFormat=IXF"

>>>>> >>
"ixf_metadata_export" )

>>>>> >> #introListItem(

>>>>> >>
"displayMetaDataExportForm.action?exportFormat=DHIS14XML"

>>>>> >>
"DHIS14_metadata_export" )

>>>>> >> #introListItem(

>>>>> >>
"displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"

>>>>> >>
"DHIS14_detailed_metadata_export" )

>>>>> >> + #introListItem(

>>>>> >>
"displayDataValueExportForm.action?exportFormat=DHIS14XML"

>>>>> >>
"DHIS14_data_export" )

>>>>> >> #introListItem(

>>>>> >>
"displayMetaDataExportForm.action?exportFormat=PDF"

>>>>> >>
"pdf_metadata_export" )

>>>>> >> \ No newline at end of
file

>>>>> >>

>>>>> >>

>>>>> >>
_______________________________________________

>>>>> >> Mailing list: https://launchpad.net/~dhis2-devs

>>>>> >> Post to : dhis2-devs@lists.launchpad.net

>>>>> >> Unsubscribe : https://launchpad.net/~dhis2-devs

>>>>> >> More help : https://help.launchpad.net/ListHelp

>>>>> >>

>>>>> >

>>>>> >

>>>>> >
_______________________________________________

>>>>> > Mailing list: https://launchpad.net/~dhis2-devs

>>>>> > Post to : dhis2-devs@lists.launchpad.net

>>>>> > Unsubscribe : https://launchpad.net/~dhis2-devs

>>>>> > More help : https://help.launchpad.net/ListHelp

>>>>> >

>>>>> >

>>>>

>>>>

>>>

>>

>> --

>> Sendt fra min mobile enhet

>>

>

_______________________________________________

Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

-----Inline Attachment Follows-----

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp

Damn I like that! Jason try that one.

···

On 8 February 2010 20:21, Ime Asangansi <asangansi@yahoo.com> wrote:

Hi,

Pardon me if this is irrelevant as I'm unable to understand the initial context. But it appears you were discussing writing 7z for dhis1.4.

For our mobile server, I simply used a zipoutputstream and used a filename that ends with .7z. And it did the magic. We found no need for actual LZMA streams and dhis1.4 is importing this 'fake' .7z very well :slight_smile:

Ime

--- On Mon, 2/8/10, Saptarshi Purkayastha <sunbiz@gmail.com> wrote:

From: Saptarshi Purkayastha <sunbiz@gmail.com>
Subject: Re: [Dhis2-devs] [Branch ~dhis2-devs-core/dhis2/trunk] Rev 1404: Implemented DHIS 1.4 export of data values
To: "Jason Pickering" <jason.p.pickering@gmail.com>
Cc: "DHIS 2 developers" <dhis2-devs@lists.launchpad.net>
Date: Monday, February 8, 2010, 6:23 PM
Isn't LZMA SDK providing
the JAVA library?? and comparisons are here
---
Regards,
Saptarshi PURKAYASTHA

Director R & D, HISP India
Health Information Systems Programme

My Tech Blog: http://sunnytalkstech.blogspot.com
You Live by CHOICE, Not by CHANCE

On 8 February 2010 18:17, Jason >> Pickering <jason.p.pickering@gmail.com> >> wrote:

No clue if this is possible, but if the user was to provide
a path to

a native OS executable, could DHIS push the job off to
this?

2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>:

> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

>> Yup agree with that just could not make it write
the appropriate zip

>> entries that way.. Open for being enlighted
here..

>

> OK. Can't really look now but I guess it must be
tricky :slight_smile: Will

> maybe look later in the week. If the day comes (and
I don't see it

> soon) that you had an option to write to either 7z or
zip format I'm

> just thinking you would want the packaging decoupled
from the

> production of the streams.

>

> Bob

>

>>

>> 2010/2/8, Bob Jolliffe <bobjolliffe@gmail.com>:

>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

>>>>

>>>>

>>>> 2010/2/8 Bob Jolliffe <bobjolliffe@gmail.com>

>>>>>

>>>>> 2010/2/8 Lars Helge Øverland <larshelge@gmail.com>:

>>>>> >

>>>>> >

>>>>> > On Mon, Feb 8, 2010 at 11:59 AM, >> <noreply@launchpad.net> >> wrote:

>>>>> >>

>>>>> >>
------------------------------------------------------------

>>>>> >> revno: 1404

>>>>> >> committer: Lars Helge
Oeverland <larshelge@gmail.com>

>>>>> >> branch nick: trunk

>>>>> >> timestamp: Mon 2010-02-08
11:56:08 +0100

>>>>> >> message:

>>>>> >> Implemented DHIS 1.4 export
of data values

>>>>> >> modified:

>>>>> >

>>>>> >

>>>>> > There is actually still a snag
here. DHIS 1.4 only accepts the

>>>>> > 7zip/lzma

>>>>> > format currently. I have talked
Greg into making 1.4 accept zip/deflate

>>>>> > too.

>>>>>

>>>>> Isn't it better to have
gzip/deflate? We are not talking about

>>>>> compressing an archive of files but
rather compressing a single

>>>>> stream.

>>>>>

>>>>> Also I think the original "void
write( BufferedWriter writer,

>>>>> ExportParams params )" might be
better than "void write(

>>>>> ZipOutputStream out, ExportParams
params )". It seems unnecessary

>>>>> that the convertor should have to know
anything about zip, gzip, 7zip

>>>>> or what have you. It should know how
to write csv to a stream.

>>>>>

>>>>> I suspect that how the stream is later
compressed is better deferred to

>>>>> later.

>>>>

>>>> Problem is that DHIS 1.4 uses a CSV file
for data and an XML file for

>>>> meta-data and keeps both inside the
archive... I was was not able to have

>>>> multiple zip entries while using the
Writer..

>>>

>>> Ah. Ok. I do remember. Then you would need
an archive (zip or the

>>> seven thing) rather a gzipped stream.

>>>

>>> But does your CSV writer need to know that?
Surely it just has an

>>> interest in churning out csv datavalues.
Some other component should

>>> put the csv stream together with the xml
stream into the zip.

>>>

>>>>

>>>>>

>>>>> Cheers

>>>>> Bob

>>>>>

>>>>> >

>>>>> >>

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

>>>>> >>

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

>>>>> >>

>>>>> >>

>>>>> >> --

>>>>> >> lp:dhis2

>>>>> >> trunk : Code : DHIS

>>>>> >>

>>>>> >> Your team DHIS 2 developers
is subscribed to branch lp:dhis2.

>>>>> >> To unsubscribe from this
branch go to

>>>>> >>

>>>>> >> https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription\.

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

>>>>> >> 2009-03-03 16:46:36 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/CSVConverter.java

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -28,7 +28,7 @@

>>>>> >> */

>>>>> >>

>>>>> >> import
java.io.BufferedReader;

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> +import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> /**

>>>>> >> * @author Lars Helge
Overland

>>>>> >> @@ -36,7 +36,7 @@

>>>>> >> */

>>>>> >> public interface
CSVConverter

>>>>> >> {

>>>>> >> - void write(
BufferedWriter writer, ExportParams params );

>>>>> >> + void write(
ZipOutputStream out, ExportParams params );

>>>>> >>

>>>>> >> void read(
BufferedReader reader, ImportParams params );

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

>>>>> >> 2009-11-02 15:55:44
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/ExportPipeThread.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -52,7 +52,8 @@

>>>>> >>

>>>>> >> private
List<XMLConverter> xsdConverters = new

>>>>> >>
ArrayList<XMLConverter>();

>>>>> >> private
List<XMLConverter> xmlConverters = new

>>>>> >>
ArrayList<XMLConverter>();

>>>>> >> -

>>>>> >> + private
List<CSVConverter> csvConverters = new

>>>>> >>
ArrayList<CSVConverter>();

>>>>> >> +

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Parameters

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -122,6 +123,11 @@

>>>>> >>
this.xmlConverters.add( converter );

>>>>> >> }

>>>>> >>

>>>>> >> + public void
registerCSVConverter ( CSVConverter converter )

>>>>> >> + {

>>>>> >> +
this.csvConverters.add( converter );

>>>>> >> + }

>>>>> >> +

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Thread
implementation

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -159,9 +165,20 @@

>>>>> >> }

>>>>> >>

>>>>> >> afterXML(
writer );

>>>>> >> -

>>>>> >> +

>>>>> >>
closeDocument( writer );

>>>>> >> -

>>>>> >> +

>>>>> >> +
StreamUtils.closeZipEntry( zipOutputStream );

>>>>> >> +

>>>>> >> + //

>>>>> >>
-----------------------------------------------------------------

>>>>> >> + // CSV

>>>>> >> + //

>>>>> >>
-----------------------------------------------------------------

>>>>> >> +

>>>>> >> + for (
CSVConverter converter : csvConverters )

>>>>> >> + {

>>>>> >> +
converter.write( zipOutputStream, params );

>>>>> >> + }

>>>>> >> +

>>>>> >> log.info( "Export done"
);

>>>>> >> }

>>>>> >> catch ( Exception
ex )

>>>>> >> @@ -172,12 +189,10 @@

>>>>> >> }

>>>>> >> finally

>>>>> >> {

>>>>> >> -
StreamUtils.finishZipEntry( zipOutputStream );

>>>>> >> +
writer.closeWriter();

>>>>> >>

>>>>> >>
StreamUtils.closeOutputStream( zipOutputStream );

>>>>> >>

>>>>> >> -
writer.closeWriter();

>>>>> >> -

>>>>> >>
NameMappingUtil.clearMapping();

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

>>>>> >> 2009-06-10 22:25:07 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/converter/ReportTableDataConverter.java

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -27,14 +27,17 @@

>>>>> >> * SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

>>>>> >> */

>>>>> >>

>>>>> >> -import static
org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.CSV_EXTENSION;

>>>>> >> +import static
org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

>>>>> >> import static
org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

>>>>> >>

>>>>> >> import
java.io.BufferedReader;

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> import
java.io.IOException;

>>>>> >> import java.util.Iterator;

>>>>> >> import
java.util.SortedMap;

>>>>> >> +import
java.util.zip.ZipEntry;

>>>>> >> +import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> import
org.hisp.dhis.importexport.CSVConverter;

>>>>> >> import
org.hisp.dhis.importexport.ExportParams;

>>>>> >> @@ -69,27 +72,29 @@

>>>>> >> // CSVConverter
implementation

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >>

>>>>> >> - public void write(
BufferedWriter writer, ExportParams params )

>>>>> >> + public void write(
ZipOutputStream out, ExportParams params )

>>>>> >> {

>>>>> >> try

>>>>> >> {

>>>>> >> - for (
Integer id : params.getReportTables() ) //TODO more

>>>>> >> than one?

>>>>> >> + for (
Integer id : params.getReportTables() )

>>>>> >> {

>>>>> >> +
out.putNextEntry( new ZipEntry( "ReportTable" +
id +

>>>>> >> CSV_EXTENSION ) );

>>>>> >> +

>>>>> >>
ReportTableData data =

>>>>> >>
reportTableService.getReportTableData( id,
params.getFormat() );

>>>>> >>

>>>>> >>
Iterator<String> columns =

>>>>> >>
data.getPrettyPrintColumns().iterator();

>>>>> >>

>>>>> >> while
( columns.hasNext() )

>>>>> >> {

>>>>> >> -
writer.write( csvEncode( columns.next() ) );

>>>>> >> +
out.write( csvEncode( columns.next() ).getBytes()

>>>>> >> );

>>>>> >>

>>>>> >>
if ( columns.hasNext() )

>>>>> >>
{

>>>>> >> -
writer.write( SEPARATOR );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >>
}

>>>>> >> }

>>>>> >>

>>>>> >> -
writer.newLine();

>>>>> >> +
out.write( NEWLINE );

>>>>> >>

>>>>> >> for (
SortedMap<Integer, String> row : data.getRows()

>>>>> >> )

>>>>> >> {

>>>>> >> @@ -97,15 +102,15 @@

>>>>> >>

>>>>> >>
while ( values.hasNext() )

>>>>> >>
{

>>>>> >> -
writer.write( csvEncode( values.next() ) );

>>>>> >> +
out.write( csvEncode( values.next()

>>>>> >> ).getBytes()

>>>>> >> );

>>>>> >>

>>>>> >>
if ( values.hasNext() )

>>>>> >>
{

>>>>> >> -
writer.write( SEPARATOR );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >>
}

>>>>> >>
}

>>>>> >>

>>>>> >> -
writer.newLine();

>>>>> >> +
out.write( NEWLINE );

>>>>> >> }

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

>>>>> >> 2009-06-10 22:25:07
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/CSVExportPipeThread.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -27,9 +27,9 @@

>>>>> >> * SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

>>>>> >> */

>>>>> >>

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> import
java.util.ArrayList;

>>>>> >> import java.util.List;

>>>>> >> +import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> import
org.apache.commons.logging.Log;

>>>>> >> import
org.apache.commons.logging.LogFactory;

>>>>> >> @@ -48,13 +48,6 @@

>>>>> >> {

>>>>> >> private static final
Log log = LogFactory.getLog(

>>>>> >> CSVExportPipeThread.class );

>>>>> >>

>>>>> >> - private BufferedWriter
writer;

>>>>> >> -

>>>>> >> - public void setWriter(
BufferedWriter writer )

>>>>> >> - {

>>>>> >> - this.writer =
writer;

>>>>> >> - }

>>>>> >> -

>>>>> >> private ExportParams
params;

>>>>> >>

>>>>> >> public void setParams(
ExportParams params )

>>>>> >> @@ -62,6 +55,13 @@

>>>>> >> this.params =
params;

>>>>> >> }

>>>>> >>

>>>>> >> + private
ZipOutputStream outputStream;

>>>>> >> +

>>>>> >> + public void
setOutputStream( ZipOutputStream outputStream )

>>>>> >> + {

>>>>> >> +
this.outputStream = outputStream;

>>>>> >> + }

>>>>> >> +

>>>>> >> private
List<CSVConverter> converters = new

>>>>> >>
ArrayList<CSVConverter>();

>>>>> >>

>>>>> >> public void
registerCSVConverter( CSVConverter converter )

>>>>> >> @@ -90,14 +90,18 @@

>>>>> >>

>>>>> >> for (
CSVConverter converter : converters )

>>>>> >> {

>>>>> >> -
converter.write( writer, params );

>>>>> >> +
converter.write( outputStream, params );

>>>>> >> }

>>>>> >>

>>>>> >> log.info( "Export
finished" );

>>>>> >> }

>>>>> >> + catch (
Exception ex )

>>>>> >> + {

>>>>> >> + throw new
RuntimeException( ex );

>>>>> >> + }

>>>>> >> finally

>>>>> >> {

>>>>> >> -
StreamUtils.closeWriter( writer );

>>>>> >> +
StreamUtils.closeOutputStream( outputStream );

>>>>> >> }

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

>>>>> >> 2009-06-10 22:25:07 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/exporter/DefaultCSVExportService.java

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -28,13 +28,11 @@

>>>>> >> */

>>>>> >>

>>>>> >> import
java.io.BufferedInputStream;

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> +import
java.io.BufferedOutputStream;

>>>>> >> import
java.io.IOException;

>>>>> >> import
java.io.InputStream;

>>>>> >> -import
java.io.OutputStreamWriter;

>>>>> >> import
java.io.PipedInputStream;

>>>>> >> import
java.io.PipedOutputStream;

>>>>> >> -import
java.util.zip.ZipEntry;

>>>>> >> import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> import
org.hibernate.SessionFactory;

>>>>> >> @@ -50,8 +48,6 @@

>>>>> >> public class
DefaultCSVExportService

>>>>> >> implements
ExportService

>>>>> >> {

>>>>> >> - private static final
String ZIP_ENTRY_NAME = "Export.csv";

>>>>> >> -

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Dependencies

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -87,20 +83,18 @@

>>>>> >>

>>>>> >>
PipedInputStream in = new PipedInputStream( out );

>>>>> >>

>>>>> >> -
ZipOutputStream zipOut = new ZipOutputStream( out );

>>>>> >> +
ZipOutputStream zipOut = new ZipOutputStream( new

>>>>> >> BufferedOutputStream( out )
);

>>>>> >>

>>>>> >> -
zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );

>>>>> >> +
//zipOut.putNextEntry( new ZipEntry( ZIP_ENTRY_NAME ) );

>>>>> >>

>>>>> >> -
BufferedWriter writer = new BufferedWriter( new

>>>>> >> OutputStreamWriter( zipOut )
);

>>>>> >> -

>>>>> >> //

>>>>> >>
-----------------------------------------------------------------

>>>>> >> // Writes
to one end of the pipe

>>>>> >> //

>>>>> >>
-----------------------------------------------------------------

>>>>> >>

>>>>> >>
CSVExportPipeThread thread = new CSVExportPipeThread(

>>>>> >> sessionFactory );

>>>>> >>

>>>>> >> -
thread.setWriter( writer );

>>>>> >>
thread.setParams( params );

>>>>> >> +
thread.setOutputStream( zipOut );

>>>>> >>

>>>>> >>
thread.registerCSVConverter( new ReportTableDataConverter(

>>>>> >> reportTableService ) );

>>>>> >>

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

>>>>> >> 2009-04-16 09:53:17
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/csv/util/CsvUtil.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -33,15 +33,80 @@

>>>>> >> */

>>>>> >> public class CsvUtil

>>>>> >> {

>>>>> >> - public static final
char SEPARATOR = ',';

>>>>> >> -

>>>>> >> - private static final
String ENCLOSURE = "\"";

>>>>> >> -

>>>>> >> - public static String
csvEncode( String string )

>>>>> >> - {

>>>>> >> - string =
string.replaceAll( ENCLOSURE, ENCLOSURE + ENCLOSURE

>>>>> >> );

>>>>> >> - string =
ENCLOSURE + string + ENCLOSURE;

>>>>> >> + public static final
String SEPARATOR = ",";

>>>>> >> + public static final
byte SEPARATOR_B = SEPARATOR.getBytes();

>>>>> >> + public static final
byte NEWLINE = "\n".getBytes();

>>>>> >> +

>>>>> >> + public static final
String CSV_EXTENSION = ".csv";

>>>>> >> + private static final
String ENCLOSURE = "\"";

>>>>> >> + private static final
String EMPTY = "";

>>>>> >> +

>>>>> >> + /**

>>>>> >> + * Encodes the given
value to a CSV acceptable value.

>>>>> >> + *

>>>>> >> + * @param value the
value.

>>>>> >> + * @return the CSV
encoded value.

>>>>> >> + */

>>>>> >> + public static String
csvEncode( int value )

>>>>> >> + {

>>>>> >> + return
csvEncode( String.valueOf( value ) );

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> + * Encodes the given
value to a CSV acceptable value.

>>>>> >> + *

>>>>> >> + * @param value the
value.

>>>>> >> + * @return the CSV
encoded value.

>>>>> >> + */

>>>>> >> + public static String
csvEncode( String value )

>>>>> >> + {

>>>>> >> + if ( value ==
null )

>>>>> >> + {

>>>>> >> + value =
EMPTY;

>>>>> >> + }

>>>>> >> + else

>>>>> >> + {

>>>>> >> + value =
value.replaceAll( ENCLOSURE, ENCLOSURE +

>>>>> >> ENCLOSURE

>>>>> >> );

>>>>> >> + value =
ENCLOSURE + value + ENCLOSURE;

>>>>> >> + }

>>>>> >> +

>>>>> >> + return value;

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> + * Appends a separator
to the value and returns the value as a

>>>>> >> byte

>>>>> >> array.

>>>>> >> + *

>>>>> >> + * @param value the
value.

>>>>> >> + * @return a byte
araray.

>>>>> >> + */

>>>>> >> + public static byte
getCsvValue( int value )

>>>>> >> + {

>>>>> >> + return
getCsvEndValue( value + SEPARATOR );

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> + * Appends a separator
to the value and returns the value as a

>>>>> >> byte

>>>>> >> array.

>>>>> >> + *

>>>>> >> + * @param value the
value.

>>>>> >> + * @return a byte
araray.

>>>>> >> + */

>>>>> >> + public static byte
getCsvValue( String value )

>>>>> >> + {

>>>>> >> + return
getCsvEndValue( value + SEPARATOR );

>>>>> >> + }

>>>>> >> +

>>>>> >> + public static byte
getCsvEndValue( int value )

>>>>> >> + {

>>>>> >> + return
getCsvEndValue( String.valueOf( value ) );

>>>>> >> + }

>>>>> >> +

>>>>> >> + public static byte
getCsvEndValue( String value )

>>>>> >> + {

>>>>> >> + if ( value ==
null )

>>>>> >> + {

>>>>> >> + return
EMPTY.getBytes();

>>>>> >> + }

>>>>> >>

>>>>> >> - return string;

>>>>> >> + return ( value
).getBytes();

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

>>>>> >> 2010-02-08
07:04:26 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/converter/DataValueConverter.java

>>>>> >> 2010-02-08
10:56:08 +0000

>>>>> >> @@ -27,17 +27,28 @@

>>>>> >> * SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE.

>>>>> >> */

>>>>> >>

>>>>> >> +import static
org.hisp.dhis.importexport.csv.util.CsvUtil.NEWLINE;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.SEPARATOR_B;

>>>>> >> +import static
org.hisp.dhis.importexport.csv.util.CsvUtil.csvEncode;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvValue;

>>>>> >> +import static

>>>>> >>
org.hisp.dhis.importexport.csv.util.CsvUtil.getCsvEndValue;

>>>>> >> +

>>>>> >> import
java.io.BufferedReader;

>>>>> >> -import
java.io.BufferedWriter;

>>>>> >> import
java.io.IOException;

>>>>> >> +import
java.util.Collection;

>>>>> >> import java.util.Map;

>>>>> >> +import
java.util.zip.ZipEntry;

>>>>> >> +import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> import
org.amplecode.quick.BatchHandler;

>>>>> >> +import
org.amplecode.quick.StatementManager;

>>>>> >> import
org.hisp.dhis.dataelement.DataElement;

>>>>> >> import
org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;

>>>>> >> import
org.hisp.dhis.dataelement.DataElementCategoryService;

>>>>> >> +import
org.hisp.dhis.datamart.DataMartService;

>>>>> >> import
org.hisp.dhis.datavalue.DataValue;

>>>>> >> import
org.hisp.dhis.datavalue.DataValueService;

>>>>> >> +import
org.hisp.dhis.datavalue.DeflatedDataValue;

>>>>> >> import
org.hisp.dhis.importexport.CSVConverter;

>>>>> >> import
org.hisp.dhis.importexport.ExportParams;

>>>>> >> import
org.hisp.dhis.importexport.GroupMemberType;

>>>>> >> @@ -47,7 +58,10 @@

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.converter.AbstractDataValueConverter;

>>>>> >> import
org.hisp.dhis.organisationunit.OrganisationUnit;

>>>>> >> import
org.hisp.dhis.period.Period;

>>>>> >> +import
org.hisp.dhis.period.PeriodService;

>>>>> >> +import
org.hisp.dhis.system.util.DateUtils;

>>>>> >> import
org.hisp.dhis.system.util.MimicingHashMap;

>>>>> >> +import
org.hisp.dhis.system.util.StreamUtils;

>>>>> >>

>>>>> >> /**

>>>>> >> * @author Lars Helge
Overland

>>>>> >> @@ -57,8 +71,11 @@

>>>>> >> extends
AbstractDataValueConverter implements CSVConverter

>>>>> >> {

>>>>> >> private static final
String SEPARATOR = ",";

>>>>> >> + private static final
String FILENAME = "RoutineData.txt";

>>>>> >>

>>>>> >> private
DataElementCategoryService categoryService;

>>>>> >> + private PeriodService
periodService;

>>>>> >> + private
StatementManager statementManager;

>>>>> >>

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Properties

>>>>> >> @@ -72,6 +89,14 @@

>>>>> >> // Constructor

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >>

>>>>> >> + public
DataValueConverter( PeriodService periodService,

>>>>> >> DataMartService
dataMartService,

>>>>> >> + StatementManager
statementManager )

>>>>> >> + {

>>>>> >> +
this.periodService = periodService;

>>>>> >> +
this.dataMartService = dataMartService;

>>>>> >> +
this.statementManager = statementManager;

>>>>> >> + }

>>>>> >> +

>>>>> >> /**

>>>>> >> * Constructor for
read operations.

>>>>> >> */

>>>>> >> @@ -95,9 +120,81 @@

>>>>> >> // CSVConverter
implementation

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >>

>>>>> >> - public void write(
BufferedWriter writer, ExportParams params )

>>>>> >> + public void write(
ZipOutputStream out, ExportParams params )

>>>>> >> {

>>>>> >> - // Not
implemented

>>>>> >> + try

>>>>> >> + {

>>>>> >> +
out.putNextEntry( new ZipEntry( FILENAME ) );

>>>>> >> +

>>>>> >> + out.write(
getCsvValue( csvEncode( "RoutineDataID" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "OrgUnitID" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "DataElementID" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "DataPeriodID" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryText" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryYesNo" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryNumber" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryDate" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryMemo" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "EntryObject" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "Check" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "Verified" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "Deleted" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "Comment" ) ) );

>>>>> >> + out.write(
getCsvValue( csvEncode( "LastUserID" ) ) );

>>>>> >> + out.write(
getCsvEndValue( csvEncode( "LastUpdated" ) )

>>>>> >> );

>>>>> >> +

>>>>> >> + out.write(
NEWLINE );

>>>>> >> +

>>>>> >> + if (
params.isIncludeDataValues() )

>>>>> >> + {

>>>>> >> + if (
params.getStartDate() != null &&

>>>>> >> params.getEndDate()

>>>>> >> != null )

>>>>> >> + {

>>>>> >> +
Collection<DeflatedDataValue> values = null;

>>>>> >> +

>>>>> >> +
Collection<Period> periods =

>>>>> >>
periodService.getIntersectingPeriods(
params.getStartDate(),

>>>>> >> params.getEndDate() );

>>>>> >> +

>>>>> >> +
statementManager.initialise();

>>>>> >> +

>>>>> >> +
for ( final Integer element :

>>>>> >> params.getDataElements() )

>>>>> >> +
{

>>>>> >> +
for ( final Period period : periods )

>>>>> >> +
{

>>>>> >> +
values =

>>>>> >>
dataMartService.getDeflatedDataValues( element,
period.getId(),

>>>>> >> params.getOrganisationUnits()
);

>>>>> >> +

>>>>> >> +
for ( final DeflatedDataValue value :

>>>>> >> values

>>>>> >> )

>>>>> >> +
{

>>>>> >> +
out.write( getCsvValue( 0 ) );

>>>>> >> +
out.write( getCsvValue(

>>>>> >> value.getSourceId() ) );

>>>>> >> +
out.write( getCsvValue(

>>>>> >> value.getDataElementId() )
);

>>>>> >> +
out.write( getCsvValue(

>>>>> >> value.getPeriodId() ) );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( getCsvValue( csvEncode(

>>>>> >> value.getValue() ) ) );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( SEPARATOR_B );

>>>>> >> +
out.write( getCsvValue( 0 ) );

>>>>> >> +
out.write( getCsvValue( 0 ) );

>>>>> >> +
out.write( getCsvValue( 0 ) );

>>>>> >> +
out.write( getCsvValue( csvEncode(

>>>>> >> value.getComment() ) ) );

>>>>> >> +
out.write( getCsvValue( 1 ) );

>>>>> >> +
out.write( getCsvEndValue(

>>>>> >>
DateUtils.getAccessDateString( value.getTimestamp() ) ) );

>>>>> >> +

>>>>> >> +
out.write( NEWLINE );

>>>>> >> +
}

>>>>> >> +
}

>>>>> >> +
}

>>>>> >> +

>>>>> >> +
statementManager.destroy();

>>>>> >> + }

>>>>> >> + }

>>>>> >> +

>>>>> >> +
StreamUtils.closeZipEntry( out );

>>>>> >> + }

>>>>> >> + catch (
IOException ex )

>>>>> >> + {

>>>>> >> + throw new
RuntimeException( "Failed to write data", ex );

>>>>> >> + }

>>>>> >> }

>>>>> >>

>>>>> >> public void read(
BufferedReader reader, ImportParams params )

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

>>>>> >> 2009-11-07 14:09:00
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/dhis14/xml/exporter/DefaultDhis14XMLExportService.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -35,16 +35,19 @@

>>>>> >> import
java.util.zip.ZipEntry;

>>>>> >> import
java.util.zip.ZipOutputStream;

>>>>> >>

>>>>> >> +import
org.amplecode.quick.StatementManager;

>>>>> >> import
org.amplecode.staxwax.factory.XMLFactory;

>>>>> >> import
org.amplecode.staxwax.writer.XMLWriter;

>>>>> >> import
org.hibernate.SessionFactory;

>>>>> >> import
org.hisp.dhis.dataelement.DataElementService;

>>>>> >> +import
org.hisp.dhis.datamart.DataMartService;

>>>>> >> import
org.hisp.dhis.importexport.ExportParams;

>>>>> >> import
org.hisp.dhis.importexport.ExportPipeThread;

>>>>> >> import
org.hisp.dhis.importexport.ExportService;

>>>>> >> import

>>>>> >>

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.CalculatedDataElementAssociationConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.DataElementConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.DataTypeConverter;

>>>>> >> +import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.DataValueConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.IndicatorTypeConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.PeriodTypeConverter;

>>>>> >> @@ -60,6 +63,7 @@

>>>>> >> import

>>>>> >>

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserRoleXSDConverter;

>>>>> >> import

>>>>> >>
org.hisp.dhis.importexport.dhis14.xml.converter.xsd.UserXSDConverter;

>>>>> >> import
org.hisp.dhis.indicator.IndicatorService;

>>>>> >> +import
org.hisp.dhis.period.PeriodService;

>>>>> >>

>>>>> >> /**

>>>>> >> * @author Lars Helge
Overland

>>>>> >> @@ -100,6 +104,27 @@

>>>>> >>
this.indicatorService = indicatorService;

>>>>> >> }

>>>>> >>

>>>>> >> + private PeriodService
periodService;

>>>>> >> +

>>>>> >> + public void
setPeriodService( PeriodService periodService )

>>>>> >> + {

>>>>> >> +
this.periodService = periodService;

>>>>> >> + }

>>>>> >> +

>>>>> >> + private
DataMartService dataMartService;

>>>>> >> +

>>>>> >> + public void
setDataMartService( DataMartService dataMartService )

>>>>> >> + {

>>>>> >> +
this.dataMartService = dataMartService;

>>>>> >> + }

>>>>> >> +

>>>>> >> + private
StatementManager statementManager;

>>>>> >> +

>>>>> >> + public void
setStatementManager( StatementManager

>>>>> >> statementManager

>>>>> >> )

>>>>> >> + {

>>>>> >> +
this.statementManager = statementManager;

>>>>> >> + }

>>>>> >> +

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // ExportService
implementation

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -122,7 +147,7 @@

>>>>> >>
zipOut.putNextEntry( new ZipEntry( "Export.xml" )
);

>>>>> >>

>>>>> >> XMLWriter
writer = XMLFactory.getPlainXMLWriter( zipOut );

>>>>> >> -

>>>>> >> +

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> // Writes
to one end of the pipe

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >> @@ -156,6 +181,8 @@

>>>>> >>
thread.registerXMLConverter( new UserConverter() );

>>>>> >>
thread.registerXMLConverter( new UserRoleConverter() );

>>>>> >>

>>>>> >> +
thread.registerCSVConverter( new DataValueConverter(

>>>>> >> periodService,
dataMartService, statementManager ) );

>>>>> >> +

>>>>> >>
thread.start();

>>>>> >>

>>>>> >> //

>>>>> >>

>>>>> >>
-------------------------------------------------------------------------

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

>>>>> >> 2010-02-02 19:21:58 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-services/dhis-service-importexport/src/main/resources/META-INF/dhis/beans.xml

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -381,6 +381,9 @@

>>>>> >>
<property name="sessionFactory"
ref="sessionFactory" />

>>>>> >>
<property name="dataElementService"

>>>>> >>
ref="org.hisp.dhis.dataelement.DataElementService"
/>

>>>>> >>
<property name="indicatorService"

>>>>> >>
ref="org.hisp.dhis.indicator.IndicatorService"
/>

>>>>> >> +
<property name="periodService"

>>>>> >>
ref="org.hisp.dhis.period.PeriodService" />

>>>>> >> +
<property name="dataMartService"

>>>>> >>
ref="org.hisp.dhis.datamart.DataMartService"
/>

>>>>> >> +
<property name="statementManager"

>>>>> >>
ref="statementManager"

>>>>> >> />

>>>>> >> </bean>

>>>>> >>

>>>>> >> <!-- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - -

>>>>> >> -

>>>>> >> -

>>>>> >> -->

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

>>>>> >> 2009-11-19 19:16:46
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/DateUtils.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -49,6 +49,20 @@

>>>>> >> public static final
String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

>>>>> >>

>>>>> >> /**

>>>>> >> + * Formats a Date to
the Access date format.

>>>>> >> + *

>>>>> >> + * @param date the
Date to parse.

>>>>> >> + * @return a formatted
date string.

>>>>> >> + */

>>>>> >> + public static String
getAccessDateString( Date date )

>>>>> >> + {

>>>>> >> + final
SimpleDateFormat format = new SimpleDateFormat();

>>>>> >> +
format.applyPattern( "yyyy/MM/dd HH:mm:ss" );

>>>>> >> +

>>>>> >> + return date !=
null ? format.format( date ) : null;

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> * Formats a Date to
the IXF date format which is

>>>>> >>
YYYY-MM-DD'T'HH:MM:SS.

>>>>> >> *

>>>>> >> * @param date the
Date to parse.

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

>>>>> >> 2009-12-19 15:20:41
+0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/StreamUtils.java

>>>>> >> 2010-02-08 10:56:08
+0000

>>>>> >> @@ -422,9 +422,26 @@

>>>>> >> }

>>>>> >>

>>>>> >> /**

>>>>> >> + * Closes the current
ZipEntry and positions the stream for

>>>>> >> writing

>>>>> >> the next entry.

>>>>> >> + *

>>>>> >> + * @param out the
ZipOutputStream.

>>>>> >> + */

>>>>> >> + public static void
closeZipEntry( ZipOutputStream out )

>>>>> >> + {

>>>>> >> + try

>>>>> >> + {

>>>>> >> +
out.closeEntry();

>>>>> >> + }

>>>>> >> + catch (
Exception ex )

>>>>> >> + {

>>>>> >> + throw new
RuntimeException( "Failed to close the current

>>>>> >> ZipEntry", ex );

>>>>> >> + }

>>>>> >> + }

>>>>> >> +

>>>>> >> + /**

>>>>> >> * Finishes writing
the contents of the ZIP output stream without

>>>>> >> closing the underlying
stream.

>>>>> >> *

>>>>> >> - * @param out the
ZipOutputStream to write to.

>>>>> >> + * @param out the
ZipOutputStream.

>>>>> >> */

>>>>> >> public static void
finishZipEntry( ZipOutputStream out )

>>>>> >> {

>>>>> >> @@ -434,7 +451,7 @@

>>>>> >> }

>>>>> >> catch ( Exception
ex )

>>>>> >> {

>>>>> >> - throw new
RuntimeException( "Failed to finish

>>>>> >> ZipOutputStream", ex );

>>>>> >> + throw new
RuntimeException( "Failed to finish the content

>>>>> >> of

>>>>> >> the ZipOutputStream", ex
);

>>>>> >> }

>>>>> >> }

>>>>> >>

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

>>>>> >> 2010-01-27 21:45:11 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/resources/org/hisp/dhis/importexport/i18n_module.properties

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -146,6 +146,7 @@

>>>>> >> import_from_other_systems =
Import from other systems

>>>>> >> DHIS14_import = DHIS 1.4
Import

>>>>> >> DHIS14_metadata_export =
DHIS 1.4 Metadata Export

>>>>> >> +DHIS14_data_export = DHIS
1.4 Data Export

>>>>> >> IXF_import = IXF Import

>>>>> >> accept_incoming_records =
Accept incoming records

>>>>> >> include_datavalues =
Include data values

>>>>> >> @@ -442,4 +443,5 @@

>>>>> >> intro_ixf_metadata_export =
Do an export of meta-data or dimensional

>>>>> >> data

>>>>> >> describing the facts.
Indicator Transmission Format (IXF) is a

>>>>> >> standard

>>>>> >> developed by the WHO.

>>>>> >>
intro_DHIS14_metadata_export = Do an export of meta-data
or

>>>>> >> dimensional

>>>>> >> data describing the facts.
DHIS 1.4 is the predecessor of DHIS 2.

>>>>> >>
intro_DHIS14_detailed_metadata_export = Do an export of an
detailed

>>>>> >> selection of meta-data. DHIS
1.4 is the predecessor of DHIS 2.

>>>>> >> +intro_DHIS14_data_export =
Do an export of data values or facts. DHIS

>>>>> >> 1.4

>>>>> >> is the predecessor of DHIS
2.

>>>>> >> intro_pdf_metadata_export =
Portable Document Format (PDF) is a file

>>>>> >> format for document
exchange.

>>>>> >>

>>>>> >> === modified file

>>>>> >>

>>>>> >>
'dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm'

>>>>> >> ---

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

>>>>> >> 2010-01-28 11:51:39 +0000

>>>>> >> +++

>>>>> >>

>>>>> >>
dhis-2/dhis-web/dhis-web-importexport/src/main/webapp/dhis-web-importexport/externalExportMenu.vm

>>>>> >> 2010-02-08 10:56:08 +0000

>>>>> >> @@ -2,8 +2,9 @@

>>>>> >> <h3>$i18n.getString(
"export_to_other_systems" )</h3>

>>>>> >>

>>>>> >> <ul
class="introList">

>>>>> >> + #introListItem(

>>>>> >>
"displayMetaDataExportForm.action?exportFormat=IXF"

>>>>> >>
"ixf_metadata_export" )

>>>>> >> #introListItem(

>>>>> >>
"displayDataValueExportForm.action?exportFormat=IXF"

>>>>> >> "ixf_data_export"
)

>>>>> >> - #introListItem(

>>>>> >>
"displayMetaDataExportForm.action?exportFormat=IXF"

>>>>> >>
"ixf_metadata_export" )

>>>>> >> #introListItem(

>>>>> >>
"displayMetaDataExportForm.action?exportFormat=DHIS14XML"

>>>>> >>
"DHIS14_metadata_export" )

>>>>> >> #introListItem(

>>>>> >>
"displayDetailedMetaDataExportForm.action?exportFormat=DHIS14XML"

>>>>> >>
"DHIS14_detailed_metadata_export" )

>>>>> >> + #introListItem(

>>>>> >>
"displayDataValueExportForm.action?exportFormat=DHIS14XML"

>>>>> >>
"DHIS14_data_export" )

>>>>> >> #introListItem(

>>>>> >>
"displayMetaDataExportForm.action?exportFormat=PDF"

>>>>> >>
"pdf_metadata_export" )

>>>>> >> \ No newline at end of
file

>>>>> >>

>>>>> >>

>>>>> >>
_______________________________________________

>>>>> >> Mailing list: https://launchpad.net/~dhis2-devs

>>>>> >> Post to : dhis2-devs@lists.launchpad.net

>>>>> >> Unsubscribe : https://launchpad.net/~dhis2-devs

>>>>> >> More help : https://help.launchpad.net/ListHelp

>>>>> >>

>>>>> >

>>>>> >

>>>>> >
_______________________________________________

>>>>> > Mailing list: https://launchpad.net/~dhis2-devs

>>>>> > Post to : dhis2-devs@lists.launchpad.net

>>>>> > Unsubscribe : https://launchpad.net/~dhis2-devs

>>>>> > More help : https://help.launchpad.net/ListHelp

>>>>> >

>>>>> >

>>>>

>>>>

>>>

>>

>> --

>> Sendt fra min mobile enhet

>>

>

_______________________________________________

Mailing list: https://launchpad.net/~dhis2-devs

Post to : dhis2-devs@lists.launchpad.net

Unsubscribe : https://launchpad.net/~dhis2-devs

More help : https://help.launchpad.net/ListHelp

-----Inline Attachment Follows-----

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp

_______________________________________________
Mailing list: https://launchpad.net/~dhis2-devs
Post to : dhis2-devs@lists.launchpad.net
Unsubscribe : https://launchpad.net/~dhis2-devs
More help : https://help.launchpad.net/ListHelp