← Back to team overview

dhis2-devs team mailing list archive

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

 

Damn I like that!  Jason try that one.

On 8 February 2010 20:21, Ime Asangansi <asangansi@xxxxxxxxx> 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 :)
>
> Ime
>
>
>
> --- On Mon, 2/8/10, Saptarshi Purkayastha <sunbiz@xxxxxxxxx> wrote:
>
>> From: Saptarshi Purkayastha <sunbiz@xxxxxxxxx>
>> 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@xxxxxxxxx>
>> Cc: "DHIS 2 developers" <dhis2-devs@xxxxxxxxxxxxxxxxxxx>
>> 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@xxxxxxxxx>
>> 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@xxxxxxxxx>:
>>
>> > 2010/2/8 Lars Helge Øverland <larshelge@xxxxxxxxx>:
>>
>> >> 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 :-)  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@xxxxxxxxx>:
>>
>> >>> 2010/2/8 Lars Helge Øverland <larshelge@xxxxxxxxx>:
>>
>> >>>>
>>
>> >>>>
>>
>> >>>> 2010/2/8 Bob Jolliffe <bobjolliffe@xxxxxxxxx>
>>
>> >>>>>
>>
>> >>>>> 2010/2/8 Lars Helge Øverland <larshelge@xxxxxxxxx>:
>>
>> >>>>> >
>>
>> >>>>> >
>>
>> >>>>> > On Mon, Feb 8, 2010 at 11:59 AM,
>> <noreply@xxxxxxxxxxxxx>
>> wrote:
>>
>> >>>>> >>
>>
>> >>>>> >>
>> ------------------------------------------------------------
>>
>> >>>>> >> revno: 1404
>>
>> >>>>> >> committer: Lars Helge
>> Oeverland <larshelge@xxxxxxxxx>
>>
>> >>>>> >> 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<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@xxxxxxxxxxxxxxxxxxx
>>
>> >>>>> >> Unsubscribe : https://launchpad.net/~dhis2-devs
>>
>> >>>>> >> More help   : https://help.launchpad.net/ListHelp
>>
>> >>>>> >>
>>
>> >>>>> >
>>
>> >>>>> >
>>
>> >>>>> >
>> _______________________________________________
>>
>> >>>>> > Mailing list: https://launchpad.net/~dhis2-devs
>>
>> >>>>> > Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
>>
>> >>>>> > 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@xxxxxxxxxxxxxxxxxxx
>>
>> 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@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~dhis2-devs
>> More help   : https://help.launchpad.net/ListHelp
>>
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dhis2-devs
> Post to     : dhis2-devs@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dhis2-devs
> More help   : https://help.launchpad.net/ListHelp
>



References