=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElement.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElement.java 2014-04-25 11:22:12 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElement.java 2014-04-25 14:00:28 +0000 @@ -83,18 +83,18 @@ */ private static final long serialVersionUID = -7131541880444446669L; + public static final String VALUE_TYPE_INT = "int"; public static final String VALUE_TYPE_STRING = "string"; - public static final String VALUE_TYPE_INT = "int"; - public static final String VALUE_TYPE_NUMBER = "number"; public static final String VALUE_TYPE_USER_NAME = "username"; public static final String VALUE_TYPE_BOOL = "bool"; public static final String VALUE_TYPE_TRUE_ONLY = "trueOnly"; public static final String VALUE_TYPE_DATE = "date"; public static final String VALUE_TYPE_UNIT_INTERVAL = "unitInterval"; - public static final String VALUE_TYPE_ZERO_OR_POSITIVE_INT = "zeroPositiveInt"; + public static final String VALUE_TYPE_NUMBER = "number"; public static final String VALUE_TYPE_POSITIVE_INT = "posInt"; public static final String VALUE_TYPE_NEGATIVE_INT = "negInt"; + public static final String VALUE_TYPE_ZERO_OR_POSITIVE_INT = "zeroPositiveInt"; public static final String VALUE_TYPE_TEXT = "text"; public static final String VALUE_TYPE_LONG_TEXT = "longText"; === modified file 'tools/dhis-adhoc/pom.xml' --- tools/dhis-adhoc/pom.xml 2014-02-10 10:37:03 +0000 +++ tools/dhis-adhoc/pom.xml 2014-04-25 14:00:28 +0000 @@ -6,7 +6,7 @@ org.hisp.dhis dhis-services - 2.14-SNAPSHOT + 2.15-SNAPSHOT dhis-adhoc === added file 'tools/dhis-adhoc/src/main/java/org/hisp/dhis/adhoc/command/RandomDataPopulator.java' --- tools/dhis-adhoc/src/main/java/org/hisp/dhis/adhoc/command/RandomDataPopulator.java 1970-01-01 00:00:00 +0000 +++ tools/dhis-adhoc/src/main/java/org/hisp/dhis/adhoc/command/RandomDataPopulator.java 2014-04-25 14:00:28 +0000 @@ -0,0 +1,173 @@ +package org.hisp.dhis.adhoc.command; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import org.amplecode.quick.BatchHandler; +import org.amplecode.quick.BatchHandlerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.hisp.dhis.adhoc.Command; +import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; +import org.hisp.dhis.dataelement.DataElementCategoryService; +import org.hisp.dhis.dataelement.DataElementService; +import org.hisp.dhis.dataset.DataSetService; +import org.hisp.dhis.datavalue.DataValue; +import org.hisp.dhis.datavalue.DataValueService; +import org.hisp.dhis.jdbc.batchhandler.DataValueBatchHandler; +import org.hisp.dhis.organisationunit.OrganisationUnit; +import org.hisp.dhis.organisationunit.OrganisationUnitService; +import org.hisp.dhis.period.Period; +import org.hisp.dhis.period.PeriodService; +import org.hisp.dhis.system.util.ListUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +public class RandomDataPopulator + implements Command +{ + private static final Log log = LogFactory.getLog( RandomDataPopulator.class ); + + private static final String DE_GROUP = "Svac1cNQhRS"; + private static final String DE_WEIGHT = "h0xKKjijTdI"; + private static final int OU_LEVEL = 4; + private static final String PE_WEIGHT = "2014"; + private static final List PERIODS = Arrays.asList( + "201301", "201302", "201303", "201304", "201305", "201306", "201307", "201308", "201309", "201310","201311", "201312", + "201401", "201402", "201403", "201404", "201405", "201406", "201407", "201408", "201409", "201410","201411", "201412" + ); + + @Autowired + private DataElementService dataElementService; + + @Autowired + private DataSetService dataSetService; + + @Autowired + private PeriodService periodService; + + @Autowired + private DataElementCategoryService categoryService; + + @Autowired + private BatchHandlerFactory batchHandlerFactory; + + @Autowired + private OrganisationUnitService organisationUnitService; + + @Autowired + private DataValueService dataValueService; + + @Override + @Transactional + public void execute() + throws Exception + { + // --------------------------------------------------------------------- + // Data elements + // --------------------------------------------------------------------- + + List des = new ArrayList( dataElementService.getDataElementGroup( DE_GROUP ).getMembers() ); + + log.info( "Data elements: " + des.size() ); + + // --------------------------------------------------------------------- + // Organisation units + // --------------------------------------------------------------------- + + List ous = new ArrayList( organisationUnitService.getOrganisationUnitsAtLevel( OU_LEVEL ) ); + Collections.shuffle( ous ); + ous = ListUtils.subList( ous, 0, 4000 ); + + log.info( "Organisation units: " + ous.size() ); + + // --------------------------------------------------------------------- + // Periods (might fail if not present in database due to single tx) + // --------------------------------------------------------------------- + + List pes = periodService.reloadIsoPeriods( PERIODS ); + + log.info( "Periods: " + pes ); + + // --------------------------------------------------------------------- + // Category option combos + // --------------------------------------------------------------------- + + DataElementCategoryOptionCombo coc = categoryService.getDataElementCategoryOptionCombo( 1153734 ); + DataElementCategoryOptionCombo aoc = categoryService.getDefaultDataElementCategoryOptionCombo(); + + // --------------------------------------------------------------------- + // Weight data + // --------------------------------------------------------------------- + + DataElement deWeight = dataElementService.getDataElement( DE_WEIGHT ); + Period peWeight = periodService.reloadIsoPeriod( PE_WEIGHT ); + + Collection values = dataValueService.getDataValues( deWeight, peWeight, ous ); + + Map valueMap = new HashMap(); + + for ( DataValue value : values ) + { + valueMap.put( value.getSource().getUid(), value.getValue() ); + } + + log.info( "Weight data values: " + valueMap.keySet().size() ); + + // --------------------------------------------------------------------- + // Setup and generation + // --------------------------------------------------------------------- + + BatchHandler handler = batchHandlerFactory.createBatchHandler( DataValueBatchHandler.class ).init(); + + Date d = new Date(); + + int total = pes.size(); + int count = 0; + + Random r = new Random(); + + for ( Period pe : pes ) + { + double peFactor = ( ( r.nextInt( 50 ) + 75 ) / 100d ); + + for ( OrganisationUnit ou : ous ) + { + String val = valueMap.get( ou.getUid() ); + + for ( DataElement de : des ) + { + if ( val != null ) + { + DataValue dv = new DataValue( de, pe, ou, coc, aoc, String.valueOf( getVal( val, peFactor ) ), "", d, "" ); + handler.addObject( dv ); + } + } + } + + log.info( "Done for " + ( ++count ) + " out of " + total ); + } + + handler.flush(); + + log.info( "Data population completed" ); + } + + private Integer getVal( String value, double peFactor ) + { + Random r = new Random(); + Double val = Double.parseDouble( value ); + Double delta = 30 * ( r.nextDouble() - 0.5 ); + Double weightedVal = ( val * 0.6 ) + delta; + weightedVal = weightedVal * peFactor; + return weightedVal.intValue(); + } +} === modified file 'tools/dhis-adhoc/src/main/resources/META-INF/dhis/beans.xml' --- tools/dhis-adhoc/src/main/resources/META-INF/dhis/beans.xml 2013-01-24 08:39:47 +0000 +++ tools/dhis-adhoc/src/main/resources/META-INF/dhis/beans.xml 2014-04-25 14:00:28 +0000 @@ -3,5 +3,7 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"> + +