=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryCombo.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryCombo.java 2011-09-26 16:24:46 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryCombo.java 2011-09-26 17:08:55 +0000 @@ -28,6 +28,8 @@ */ import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -151,13 +153,29 @@ return list; } + + //TODO update category option -> category option combo association public void generateOptionCombos() { this.optionCombos = new HashSet( generateOptionCombosList() ); } - //TODO update category option -> category option combo association + public List getSortedOptionCombos() + { + final List persistedList = new ArrayList( optionCombos ); + final List sortedList = generateOptionCombosList(); + + Collections.sort( persistedList, new Comparator() + { + public int compare( DataElementCategoryOptionCombo o1, DataElementCategoryOptionCombo o2 ) + { + return new Integer( sortedList.indexOf( o1 ) ).compareTo( new Integer( sortedList.indexOf( o2 ) ) ); + } + } ); + + return persistedList; + } // ------------------------------------------------------------------------- // hashCode, equals and toString === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryService.java 2011-04-12 12:15:54 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dataelement/DataElementCategoryService.java 2011-09-26 17:37:55 +0000 @@ -28,7 +28,6 @@ */ import java.util.Collection; -import java.util.List; import org.hisp.dhis.hierarchy.HierarchyViolationException; @@ -289,15 +288,6 @@ Collection getAllDataElementCategoryOptionCombos(); /** - * Sorts the DataElementCategoryOptionCombos in the given - * DataElementCategoryCombo. - * - * @param categoryCombo the DataElementCategoryCombo. - * - */ - List sortOptionCombos( DataElementCategoryCombo categoryCombo ); - - /** * Generates and persists a default DataElementCategory, * DataElmentCategoryOption, DataElementCategoryCombo and * DataElementCategoryOptionCombo. === modified file 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/dataelement/DataElementCategoryComboTest.java' --- dhis-2/dhis-api/src/test/java/org/hisp/dhis/dataelement/DataElementCategoryComboTest.java 2011-09-26 16:24:46 +0000 +++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/dataelement/DataElementCategoryComboTest.java 2011-09-26 17:08:55 +0000 @@ -27,13 +27,14 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; + import java.util.List; import org.junit.Before; import org.junit.Test; -import static junit.framework.Assert.*; - /** * @author Lars Helge Overland */ @@ -92,7 +93,7 @@ } @Test - public void testGenerate() + public void testGenerateOptionCombosList() { List list = categoryCombo.generateOptionCombosList(); @@ -109,6 +110,16 @@ assertEquals( createCategoryOptionCombo( categoryCombo, categoryOptionB, categoryOptionD, categoryOptionF ), list.get( 7 ) ); } + @Test + public void test() + { + List list = categoryCombo.generateOptionCombosList(); + + categoryCombo.generateOptionCombos(); + + assertEquals( list, categoryCombo.getSortedOptionCombos() ); + } + private static DataElementCategoryOptionCombo createCategoryOptionCombo( DataElementCategoryCombo categoryCombo, DataElementCategoryOption... categoryOptions ) { DataElementCategoryOptionCombo categoryOptionCombo = new DataElementCategoryOptionCombo(); === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/DefaultDataElementCategoryService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/DefaultDataElementCategoryService.java 2011-09-26 15:36:02 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/dataelement/DefaultDataElementCategoryService.java 2011-09-26 17:37:55 +0000 @@ -29,15 +29,11 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.Set; import org.apache.commons.collections.CollectionUtils; -import org.hisp.dhis.common.CombinationGenerator; import org.hisp.dhis.common.GenericIdentifiableObjectStore; import org.hisp.dhis.system.util.Filter; import org.hisp.dhis.system.util.FilterUtils; @@ -479,168 +475,6 @@ updateDataElementCategoryCombo( categoryCombo ); } - public List sortOptionCombos( DataElementCategoryCombo categoryCombo ) - { - List optionCombos = new ArrayList( - categoryCombo.getOptionCombos() ); - - int totalColumns = optionCombos.size(); - - Map> orderedOptions = prepareOptionsForCombination( categoryCombo ); - - List orderdCategoryOptionCombos = new ArrayList(); - - for ( int i = 0; i < totalColumns; i++ ) - { - List options = new ArrayList( categoryCombo - .getCategories().size() ); - - List copyOforderedCategories = categoryCombo.getCategories(); - - Iterator categoryIterator = copyOforderedCategories.iterator(); - - while ( categoryIterator.hasNext() ) - { - DataElementCategory category = categoryIterator.next(); - Iterator optionIterator = orderedOptions.get( category.getId() ).iterator(); - DataElementCategoryOption option = optionIterator.next(); - options.add( option ); - optionIterator.remove(); - } - - for ( DataElementCategoryOptionCombo optionCombo : optionCombos ) - { - if ( optionCombo.getCategoryOptions().containsAll( options ) ) - { - orderdCategoryOptionCombos.add( optionCombo ); - break; - } - } - } - - return orderdCategoryOptionCombos; - } - - private Map> prepareOptionsForCombination( - DataElementCategoryCombo categoryCombo ) - { - // Get categories for a given category - - List categories = new ArrayList( categoryCombo.getCategories() ); - - /* - * Get the total number of option combinations that will come into - * existence when combining categories having their own options - * - * Eg. Category SEX with Options MALE and FEMALE Category AGE with - * Options <5years, 5-15years, >15years When combining these two - * categories we are going to have a total of 6 option combinations - * MALE_<5years,MALE_5-15years,MALE_>15years - * FEMALE_<5years,FEMALE_5-15years,FEMALE_>15years - * - * 6 OptionCombinations = 2(from SEX) * 3(from AGE) - * - * generalizing this we can have total option combinations by - * multiplying the number of options in each category - */ - int totalOptionCombos = 1; - - for ( DataElementCategory category : categories ) - { - totalOptionCombos = totalOptionCombos * category.getCategoryOptions().size(); - } - - // --------------------------------------------------------------------- - // Determine the number of times each category is going to repeat - // --------------------------------------------------------------------- - - /* - * Example again Category IPD_OPD, Options I and D Category Sex, Options - * F and M Category Age, Options 0-5,5-10,11+ - * - * Category combination is IPD_OPD+Sex+Age - * - * Option combinations ... with the following arrangement in Data Entry - * - * I | I | I | I | I | I | O | O | O | O | O | O F | F | F | F | F | F | - * M | M | M | M | M | M - * 0-5|5-10|11+|0-5|5-10|11+1|0-5|5-10|11+|0-5|5-10|11+1 - * - * If we rearrange our categories like IPD_OPD+Age+Sex - then we will - * have the same option combinations, but with different arrangement. - * - * I | I | I | I | I | I | O | O | O | O | O | O 0-5| 0-5|5-10|5-10| - * 11+| 11+|0-5| 0-5|5-10|5-10| 11+|11+ F | M | F | M | F | M |F | M | F - * | M | F | M - * - * If we assume that we will draw a data entry table header, the top a - * category is in the order list, then the more ColSpan its options are - * going to have - */ - int categoryColSpan = totalOptionCombos; - - Map categoryRepeat = new HashMap(); - - for ( DataElementCategory category : categories ) - { - categoryColSpan = categoryColSpan / category.getCategoryOptions().size(); - - categoryRepeat.put( category.getId(), categoryColSpan ); - } - - /* - * If we see the above example, any option from AGE appear only twice - * while an option from SEX appears three times....generalizing this we - * can say set the following formula let - * - * appearance = appearance of any option from a given category - * category_options = number of options from the category containing the - * option and option_combinations = total number of option combinations - * - * appearance = option_combinaitions/category_options - * - * each option becoming part of the option combinations for 'appearance' - * number of times, then totally a category will be represented in the - * option combinations option_combinaitions number of times. - * - * Then we can prepare list of categories containing collection of its - * options where each option is repeated 'appearance' times. By doing - * this, we can iterate through these categories every time removing an - * option from the category but putting it in the option combinations. - */ - Map> optionsMap = new HashMap>(); - - /* - * For each category create a collection of options by repeating each of - * its options 'appearance' number of times. The size of the collection - * should be equal to total number of options combinations. - */ - for ( DataElementCategory cat : categories ) - { - Collection requiredOptions = new ArrayList(); - Collection options = cat.getCategoryOptions(); - - int count = 0; - - while ( count < totalOptionCombos ) - { - for ( DataElementCategoryOption option : options ) - { - for ( int i = 0; i < categoryRepeat.get( cat.getId() ); i++ ) - { - requiredOptions.add( option ); - - count++; - } - } - } - - optionsMap.put( cat.getId(), requiredOptions ); - } - - return optionsMap; - } - public int getDataElementCategoryCount() { return dataElementCategoryStore.getCount(); === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/impl/DefaultDataSetReportService.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/impl/DefaultDataSetReportService.java 2011-08-25 08:52:40 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/datasetreport/impl/DefaultDataSetReportService.java 2011-09-26 17:37:55 +0000 @@ -52,7 +52,6 @@ import org.hisp.dhis.dataelement.DataElementCategoryCombo; import org.hisp.dhis.dataelement.DataElementCategoryOption; import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; -import org.hisp.dhis.dataelement.DataElementCategoryService; import org.hisp.dhis.dataelement.comparator.DataElementCategoryOptionComboNameComparator; import org.hisp.dhis.dataelement.comparator.DataElementNameComparator; import org.hisp.dhis.dataentryform.DataEntryForm; @@ -109,13 +108,6 @@ this.aggregatedDataValueService = aggregatedDataValueService; } - private DataElementCategoryService categoryService; - - public void setCategoryService( DataElementCategoryService categoryService ) - { - this.categoryService = categoryService; - } - private SystemSettingManager systemSettingManager; public void setSystemSettingManager( SystemSettingManager systemSettingManager ) @@ -162,7 +154,7 @@ grid.addHeader( new GridHeader( i18n.getString( "dataelement" ), false, true ) ); // Data element header - List optionCombos = categoryService.sortOptionCombos( categoryCombo ); + List optionCombos = categoryCombo.getSortedOptionCombos(); for ( DataElementCategoryOptionCombo optionCombo : optionCombos ) // Value headers { === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml 2011-09-16 16:54:03 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml 2011-09-26 17:37:55 +0000 @@ -164,7 +164,6 @@ - === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/LoadFormAction.java' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/LoadFormAction.java 2011-09-26 15:24:25 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/LoadFormAction.java 2011-09-26 17:37:55 +0000 @@ -40,7 +40,6 @@ import org.hisp.dhis.dataelement.DataElementCategoryCombo; import org.hisp.dhis.dataelement.DataElementCategoryOption; import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo; -import org.hisp.dhis.dataelement.DataElementCategoryService; import org.hisp.dhis.dataelement.DataElementOperand; import org.hisp.dhis.dataelement.DataElementService; import org.hisp.dhis.dataelement.comparator.DataElementSortOrderComparator; @@ -86,13 +85,6 @@ this.dataSetService = dataSetService; } - private DataElementCategoryService categoryService; - - public void setCategoryService( DataElementCategoryService categoryService ) - { - this.categoryService = categoryService; - } - private I18n i18n; public void setI18n( I18n i18n ) @@ -238,7 +230,7 @@ for ( DataElementCategoryCombo categoryCombo : orderedCategoryCombos ) { - List optionCombos = categoryService.sortOptionCombos( categoryCombo ); + List optionCombos = categoryCombo.getSortedOptionCombos(); orderdCategoryOptionCombos.put( categoryCombo.getId(), optionCombos ); === modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml 2011-09-15 13:30:54 +0000 +++ dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml 2011-09-26 17:37:55 +0000 @@ -36,7 +36,6 @@ - === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/section/GreySectionAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/section/GreySectionAction.java 2011-05-08 08:17:20 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-dataset/src/main/java/org/hisp/dhis/dataset/action/section/GreySectionAction.java 2011-09-26 17:37:55 +0000 @@ -133,9 +133,9 @@ return colRepeat; } - private Collection optionCombos = new ArrayList(); + private List optionCombos = new ArrayList(); - public Collection getOptionCombos() + public List getOptionCombos() { return optionCombos; } @@ -176,7 +176,7 @@ if ( sectionIsMultiDimensional ) { - optionCombos = categoryService.sortOptionCombos( categoryCombo ); + optionCombos = categoryCombo.getSortedOptionCombos(); for ( DataElementCategory dec : categoryCombo.getCategories() ) {