dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #04294
Re: [Branch ~dhis2-devs-core/dhis2/trunk] Rev 1404: Implemented DHIS 1.4 export of data values
On Tue, Feb 9, 2010 at 6:02 PM, Jason Pickering <jason.p.pickering@xxxxxxxxx
> wrote:
> I tried the export today, but did not get very far. I examined the XML
> file, and there was no data there, just metadata. I am certain there
> is data in the database for the parameters I assigned.
>
> Lars?
>
> Have a look in the RoutineData.txt file inside the zip.
Greg said the zip import would be easy to fix, I don't think we should worry
so much about this 7zip export stuff.
Lars
> Regards,
> Jason
>
>
> On Tue, Feb 9, 2010 at 6:11 PM, Ime Asangansi <asangansi@xxxxxxxxx> wrote:
> > Hi Jason,
> >
> > Pls kindly feedback when you try.
> > Thanks
> >
> > Ime
> >
> > --- On Tue, 2/9/10, Jason Pickering <jason.p.pickering@xxxxxxxxx> wrote:
> >
> >> From: Jason Pickering <jason.p.pickering@xxxxxxxxx>
> >> Subject: Re: [Dhis2-devs] [Branch ~dhis2-devs-core/dhis2/trunk] Rev
> 1404: Implemented DHIS 1.4 export of data values
> >> To: "Ime Asangansi" <asangansi@xxxxxxxxx>
> >> Cc: "Saptarshi Purkayastha" <sunbiz@xxxxxxxxx>, "DHIS 2 developers" <
> dhis2-devs@xxxxxxxxxxxxxxxxxxx>
> >> Date: Tuesday, February 9, 2010, 5:37 AM
> >> Truly bizarre. I will give it a try.
> >> Thanks a lot for this tip Ime.
> >>
> >> Best regards,
> >> Jason
> >>
> >>
> >> On Mon, Feb 8, 2010 at 10:21 PM, 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