=== removed file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/ADXConstants.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/ADXConstants.java 2015-09-13 21:54:23 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/ADXConstants.java 1970-01-01 00:00:00 +0000 @@ -1,68 +0,0 @@ -package org.hisp.dhis.dxf2.adx; - -/* - * Copyright (c) 2004-2015, University of Oslo - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * Neither the name of the HISP project nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * - * @author bobj - */ -public interface ADXConstants -{ - //-------------------------------------------------------------------------- - // These are defined in the ADX standard - //-------------------------------------------------------------------------- - - String NAMESPACE = "urn:ihe:qrph:adx:2015"; - - String ROOT = "adx"; - - String GROUP = "group"; - - String DATASET = "dataSet"; - - String PERIOD = "period"; - - String ORGUNIT = "orgUnit"; - - String DATAELEMENT = "dataElement"; - - String DATAVALUE = "dataValue"; - - String VALUE = "value"; - - String ANNOTATION = "annotation"; - - //-------------------------------------------------------------------------- - // DHIS 2 specific - //-------------------------------------------------------------------------- - - String CATOPTCOMBO = "categoryOptionCombo"; - - String ATTOPTCOMBO = "attributeOptionCombo"; -} === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/ADXDataService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/ADXDataService.java 2015-06-18 12:42:19 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/ADXDataService.java 2015-10-02 08:02:51 +0000 @@ -31,23 +31,48 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; + import org.hisp.dhis.dxf2.common.ImportOptions; import org.hisp.dhis.dxf2.datavalueset.DataExportParams; import org.hisp.dhis.dxf2.importsummary.ImportSummaries; /** - * * @author bobj */ public interface ADXDataService { + //-------------------------------------------------------------------------- + // ADX standard constants + //-------------------------------------------------------------------------- + + String NAMESPACE = "urn:ihe:qrph:adx:2015"; + String ROOT = "adx"; + String GROUP = "group"; + String DATASET = "dataSet"; + String PERIOD = "period"; + String ORGUNIT = "orgUnit"; + String DATAELEMENT = "dataElement"; + String DATAVALUE = "dataValue"; + String VALUE = "value"; + String ANNOTATION = "annotation"; + + //-------------------------------------------------------------------------- + // DHIS 2 specific constants + //-------------------------------------------------------------------------- + + String CATOPTCOMBO = "categoryOptionCombo"; + String ATTOPTCOMBO = "attributeOptionCombo"; + + //-------------------------------------------------------------------------- + // Methods + //-------------------------------------------------------------------------- /** - * postData + * Post data. * * Takes ADX Data from input stream and saves a series of DXF2 DataValueSets * - * @param in The InputStream - typically from servlet http response + * @param in The InputStream - typically from servlet HTTP response * @param importOptions The importOptions - typically from the servlet request * @return an ImportSummaries collection of ImportSummary for each DataValueSet * @throws IOException === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/DefaultADXDataService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/DefaultADXDataService.java 2015-09-23 12:27:33 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/adx/DefaultADXDataService.java 2015-10-02 08:02:51 +0000 @@ -91,8 +91,7 @@ // Constants // ------------------------------------------------------------------------- - public static final int PIPE_BUFFER_SIZE = 4096; - public static final int TOTAL_MINUTES_TO_WAIT = 5; + private static final int TOTAL_MINUTES_TO_WAIT = 5; // ------------------------------------------------------------------------- // Dependencies @@ -130,13 +129,14 @@ ImportSummaries importSummaries = new ImportSummaries(); - adxReader.moveToStartElement( ADXConstants.ROOT, ADXConstants.NAMESPACE ); + adxReader.moveToStartElement( ADXDataService.ROOT, ADXDataService.NAMESPACE ); ExecutorService executor = Executors.newSingleThreadExecutor(); int count = 0; + // submit each ADX group to DXF importer as a datavalueSet - while ( adxReader.moveToStartElement( ADXConstants.GROUP, ADXConstants.NAMESPACE ) ) + while ( adxReader.moveToStartElement( ADXDataService.GROUP, ADXDataService.NAMESPACE ) ) { try ( PipedOutputStream pipeOut = new PipedOutputStream() ) { @@ -145,14 +145,14 @@ XMLOutputFactory factory = XMLOutputFactory.newInstance(); XMLStreamWriter dxfWriter = factory.createXMLStreamWriter( pipeOut ); - // note theis returns conflicts which are detected at adx level + // note this returns conflicts which are detected at ADX level List adxConflicts = parseADXGroupToDxf( adxReader, dxfWriter, importOptions ); pipeOut.flush(); ImportSummary summary = futureImportSummary.get( TOTAL_MINUTES_TO_WAIT, TimeUnit.MINUTES ); - // add adx conflicts to the import summary + // add ADX conflicts to the import summary for ( ImportConflict conflict : adxConflicts) { summary.getConflicts().add( conflict ); @@ -202,48 +202,48 @@ Map groupAttributes = readAttributes( adxReader ); - if ( !groupAttributes.containsKey( ADXConstants.PERIOD ) ) + if ( !groupAttributes.containsKey( ADXDataService.PERIOD ) ) { - throw new ADXException( ADXConstants.PERIOD + " attribute is required on 'group'" ); + throw new ADXException( ADXDataService.PERIOD + " attribute is required on 'group'" ); } - if ( !groupAttributes.containsKey( ADXConstants.ORGUNIT ) ) + if ( !groupAttributes.containsKey( ADXDataService.ORGUNIT ) ) { - throw new ADXException( ADXConstants.ORGUNIT + " attribute is required on 'group'" ); + throw new ADXException( ADXDataService.ORGUNIT + " attribute is required on 'group'" ); } // translate adx period to dxf2 - String periodStr = groupAttributes.get( ADXConstants.PERIOD ); - groupAttributes.remove( ADXConstants.PERIOD ); + String periodStr = groupAttributes.get( ADXDataService.PERIOD ); + groupAttributes.remove( ADXDataService.PERIOD ); Period period = ADXPeriod.parse( periodStr ); - groupAttributes.put( ADXConstants.PERIOD, period.getIsoDate()); + groupAttributes.put( ADXDataService.PERIOD, period.getIsoDate()); // process adx group attributes - if ( !groupAttributes.containsKey( ADXConstants.ATTOPTCOMBO ) - && groupAttributes.containsKey( ADXConstants.DATASET ) ) + if ( !groupAttributes.containsKey( ADXDataService.ATTOPTCOMBO ) + && groupAttributes.containsKey( ADXDataService.DATASET ) ) { log.debug( "No attributeOptionCombo present. Check dataSet for attribute categorycombo" ); DataSet dataSet = identifiableObjectManager.getObject( DataSet.class, dataElementIdScheme, - groupAttributes.get( ADXConstants.DATASET ) ); + groupAttributes.get( ADXDataService.DATASET ) ); if (dataSet == null) { - throw new ADXException("No dataSet matching identifier: " + groupAttributes.get( ADXConstants.DATASET )); + throw new ADXException("No dataSet matching identifier: " + groupAttributes.get( ADXDataService.DATASET )); } - groupAttributes.put( ADXConstants.DATASET, dataSet.getUid() ); + groupAttributes.put( ADXDataService.DATASET, dataSet.getUid() ); DataElementCategoryCombo attributeCombo = dataSet.getCategoryCombo(); - attributesToDXF( ADXConstants.ATTOPTCOMBO, attributeCombo, groupAttributes, dataElementIdScheme ); + attributesToDXF( ADXDataService.ATTOPTCOMBO, attributeCombo, groupAttributes, dataElementIdScheme ); } - // write the remaining attributes through to dxf stream + // write the remaining attributes through to DXF stream for ( String attribute : groupAttributes.keySet() ) { dxfWriter.writeAttribute( attribute, groupAttributes.get( attribute ) ); } // process the dataValues - while ( adxReader.moveToStartElement( ADXConstants.DATAVALUE, ADXConstants.GROUP ) ) + while ( adxReader.moveToStartElement( ADXDataService.DATAVALUE, ADXDataService.GROUP ) ) { try { @@ -269,51 +269,54 @@ log.debug("Processing datavalue: " + dvAttributes ); - if ( !dvAttributes.containsKey( ADXConstants.DATAELEMENT ) ) + if ( !dvAttributes.containsKey( ADXDataService.DATAELEMENT ) ) { - throw new ADXException( ADXConstants.DATAELEMENT + " attribute is required on 'dataValue'" ); + throw new ADXException( ADXDataService.DATAELEMENT + " attribute is required on 'dataValue'" ); } - if ( !dvAttributes.containsKey( ADXConstants.VALUE ) ) + if ( !dvAttributes.containsKey( ADXDataService.VALUE ) ) { - throw new ADXException( ADXConstants.VALUE + " attribute is required on 'dataValue'" ); + throw new ADXException( ADXDataService.VALUE + " attribute is required on 'dataValue'" ); } IdentifiableProperty dataElementIdScheme = importOptions.getDataElementIdScheme(); - DataElement dataElement = identifiableObjectManager.getObject( DataElement.class, dataElementIdScheme,dvAttributes.get( ADXConstants.DATAELEMENT)); + DataElement dataElement = identifiableObjectManager.getObject( DataElement.class, dataElementIdScheme,dvAttributes.get( ADXDataService.DATAELEMENT)); if ( dataElement == null ) { - throw new ADXException(dvAttributes.get( ADXConstants.DATAELEMENT), "No matching dataelement"); + throw new ADXException(dvAttributes.get( ADXDataService.DATAELEMENT), "No matching dataelement"); } - // process adx datavalue attributes - if ( !dvAttributes.containsKey( ADXConstants.CATOPTCOMBO ) ) + + // process ADX datavalue attributes + if ( !dvAttributes.containsKey( ADXDataService.CATOPTCOMBO ) ) { log.debug( "No categoryOptionCombo present." ); DataElementCategoryCombo categoryCombo = dataElement.getCategoryCombo(); - attributesToDXF( ADXConstants.CATOPTCOMBO, categoryCombo, dvAttributes, dataElementIdScheme ); + attributesToDXF( ADXDataService.CATOPTCOMBO, categoryCombo, dvAttributes, dataElementIdScheme ); } - // if dataelement type is string we need to pick out the 'annotation' element + + // if data element type is string we need to pick out the 'annotation' element if ( dataElement.getValueType().isText() ) { - adxReader.moveToStartElement( ADXConstants.ANNOTATION, ADXConstants.DATAVALUE ); - if ( adxReader.isStartElement( ADXConstants.ANNOTATION ) ) + adxReader.moveToStartElement( ADXDataService.ANNOTATION, ADXDataService.DATAVALUE ); + if ( adxReader.isStartElement( ADXDataService.ANNOTATION ) ) { String textValue = adxReader.getElementValue(); - dvAttributes.put( ADXConstants.VALUE, textValue ); + dvAttributes.put( ADXDataService.VALUE, textValue ); } else { - throw new ADXException( dvAttributes.get( ADXConstants.DATAELEMENT),"Dataelement expects text annotation" ); + throw new ADXException( dvAttributes.get( ADXDataService.DATAELEMENT),"Dataelement expects text annotation" ); } } log.debug("Processing datavalue as DXF2: " + dvAttributes ); dxfWriter.writeStartElement( "dataValue" ); - // pass through the remaining attributes to dxf + + // pass through the remaining attributes to DXF for ( String attribute : dvAttributes.keySet() ) { dxfWriter.writeAttribute( attribute, dvAttributes.get( attribute ) ); @@ -401,7 +404,6 @@ if ( catCombo.isDefault() ) { - // nothing to do return; } === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/csv/DefaultCsvEventService.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/csv/DefaultCsvEventService.java 2015-10-02 03:59:43 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/event/csv/DefaultCsvEventService.java 2015-10-02 08:02:51 +0000 @@ -52,9 +52,9 @@ */ public class DefaultCsvEventService implements CsvEventService { - private static CsvMapper CSV_MAPPER = new CsvMapper().enable( CsvParser.Feature.WRAP_AS_ARRAY ); + private static final CsvMapper CSV_MAPPER = new CsvMapper().enable( CsvParser.Feature.WRAP_AS_ARRAY ); - private static CsvSchema CSV_SCHEMA = CSV_MAPPER.schemaFor( CsvEventDataValue.class ).withLineSeparator( "\n" ); + private static final CsvSchema CSV_SCHEMA = CSV_MAPPER.schemaFor( CsvEventDataValue.class ).withLineSeparator( "\n" ); @Override public void writeEvents( OutputStream outputStream, Events events, boolean withHeader ) throws IOException