=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dimension/DimensionService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dimension/DimensionService.java 2009-11-10 14:02:08 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dimension/DimensionService.java 2009-11-10 15:17:51 +0000 @@ -27,8 +27,11 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.util.Collection; import java.util.Map; +import org.hisp.dhis.dataelement.DataElement; + /** * @author Lars Helge Overland */ @@ -36,5 +39,7 @@ { final String ID = DimensionService.class.getName(); - Map getDimensionSets(); + Map getDataElementDimensionSets(); + + Collection getDataElements( String identifier ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dimension/DefaultDimensionService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dimension/DefaultDimensionService.java 2009-11-10 14:02:08 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dimension/DefaultDimensionService.java 2009-11-10 15:17:51 +0000 @@ -27,19 +27,38 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.Map; +import java.util.Set; +import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementCategoryCombo; import org.hisp.dhis.dataelement.DataElementCategoryService; +import org.hisp.dhis.dataelement.DataElementGroupSet; import org.hisp.dhis.dataelement.DataElementService; import org.hisp.dhis.indicator.IndicatorService; +import org.hisp.dhis.system.util.ConversionUtils; /** + * The DimensionSet identifier is on the format + * [TYPE]SEPARATOR_TYPE[id]SEPARATOR_ID[id]SEPARATOR[id], for instance + * groupSet_1-2-3 and categoryCombo_1 . + * * @author Lars Helge Overland * @version $Id: Indicator.java 5540 2008-08-19 10:47:07Z larshelg $ */ public class DefaultDimensionService implements DimensionService { + final String TYPE_CATEGORY_COMBO = "categoryCombo"; + final String TYPE_GROUP_SET = "groupSet"; + final String SEPARATOR_TYPE = "_"; + final String SEPARATOR_ID = "-"; + final String SEPARATOR_NAME = ","; + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -69,8 +88,122 @@ // DimensionService implementation // ------------------------------------------------------------------------- - public Map getDimensionSets() + public Map getDataElementDimensionSets() { + Map dimensions = new HashMap(); + + for ( DataElementCategoryCombo categoryCombo : categoryService.getAllDataElementCategoryCombos() ) + { + dimensions.put( getCategoryComboIdentifier( categoryCombo ), categoryCombo.getName() ); + } + + for ( Set dimensionSet : getDistinctDataElemenDimensionSets() ) + { + dimensions.put( getGroupSetIdentifier( dimensionSet ), getGroupSetName( dimensionSet ) ); + } + + return dimensions; + } + + public Collection getDataElements( String identifier ) + { + if ( identifier != null ) + { + if ( getDimensionSetType( identifier ).equals( TYPE_CATEGORY_COMBO ) ) + { + DataElementCategoryCombo categoryCombo = categoryService.getDataElementCategoryCombo( getDimensionSetIdentifiers( identifier )[0] ); + + return dataElementService.getDataElementByCategoryCombo( categoryCombo ); + } + else // TYPE_GROUP_SET + { + Set dimensionSet = getDataElementDimensionSet( getDimensionSetIdentifiers( identifier ) ); + + // TODO return dataElementService.getDataElementsByDimensionSet( dimensionSet ); + } + } + return null; } + + // ------------------------------------------------------------------------- + // Supportive methods + // ------------------------------------------------------------------------- + + private String getDimensionSetType( String identifier ) + { + return identifier.split( SEPARATOR_TYPE )[0]; + } + + private Integer[] getDimensionSetIdentifiers( String identifier ) + { + return ConversionUtils.getIntegerArray( identifier.split( SEPARATOR_TYPE )[1].split( SEPARATOR_ID ) ); + } + + private Set getDataElementDimensionSet( Integer[] identifiers ) + { + Set dimensionSet = new HashSet(); + + for ( Integer id : identifiers ) + { + dimensionSet.add( dataElementService.getDataElementGroupSet( id ) ); + } + + return dimensionSet; + } + + private Set> getDistinctDataElemenDimensionSets() + { + Set> dimensionSets = new HashSet>(); + + for ( DataElement dataElement : dataElementService.getDataElementsWithGroupSets() ) + { + dimensionSets.add( new HashSet( dataElement.getGroupSets() ) ); + } + + return dimensionSets; + } + + private String getCategoryComboIdentifier( DataElementCategoryCombo categoryCombo ) + { + return TYPE_CATEGORY_COMBO + SEPARATOR_TYPE + categoryCombo.getId(); + } + + private String getGroupSetIdentifier( Set groupSets ) + { + StringBuffer identifier = new StringBuffer( TYPE_GROUP_SET + SEPARATOR_TYPE ); + + Iterator iterator = groupSets.iterator(); + + while ( iterator.hasNext() ) + { + identifier.append( iterator.next().getId() ); + + if ( iterator.hasNext() ) + { + identifier.append( SEPARATOR_ID ); + } + } + + return identifier.toString(); + } + + private String getGroupSetName( Set groupSets ) + { + StringBuffer name = new StringBuffer(); + + Iterator iterator = groupSets.iterator(); + + while ( iterator.hasNext() ) + { + name.append( iterator.next().getName() ); + + if ( iterator.hasNext() ) + { + name.append( SEPARATOR_NAME ); + } + } + + return name.toString(); + } } === modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ConversionUtils.java' --- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ConversionUtils.java 2009-11-02 15:55:44 +0000 +++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/util/ConversionUtils.java 2009-11-10 15:17:51 +0000 @@ -77,14 +77,33 @@ { Collection integers = new ArrayList(); - if ( strings == null ) + if ( strings != null ) { - return integers; + for ( String string : strings ) + { + integers.add( Integer.valueOf( string ) ); + } } - for ( String string : strings ) + return integers; + } + + /** + * Creates an array of Integers out of an array of Strings. + * + * @param strings the array of Strings. + * @return an array of Integers. + */ + public static Integer[] getIntegerArray( String[] strings ) + { + Integer[] integers = new Integer[strings.length]; + + if ( strings != null ) { - integers.add( Integer.valueOf( string ) ); + for ( int i = 0; i < strings.length; i++ ) + { + integers[i] = Integer.valueOf( strings[i] ); + } } return integers;