=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/i18n/DefaultI18nService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/i18n/DefaultI18nService.java 2012-01-19 14:20:31 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/i18n/DefaultI18nService.java 2012-01-20 09:47:13 +0000 @@ -84,7 +84,7 @@ { if ( isCollection( object ) ) { - internationaliseCollection( (Collection) object ); + internationaliseCollection( (Collection) object, localeManager.getCurrentLocale() ); } else { @@ -129,11 +129,6 @@ } } - private void internationaliseCollection( Collection objects ) - { - internationaliseCollection( objects, localeManager.getCurrentLocale() ); - } - private void internationaliseCollection( Collection objects, Locale locale ) { if ( objects == null || objects.size() == 0 || DHIS_STANDARD_LOCALE.equals( locale ) ) === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java 2012-01-15 08:44:02 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/TableAlteror.java 2012-01-20 09:47:13 +0000 @@ -259,8 +259,8 @@ executeSql( "ALTER TABLE chart DROP COLUMN size" ); executeSql( "ALTER TABLE chart DROP COLUMN verticallabels" ); executeSql( "ALTER TABLE chart DROP COLUMN horizontalplotorientation" ); - executeSql( "ALTER TABLE chart ADD COLUMN targetline boolean NOT NULL DEFAULT false"); - executeSql( "ALTER TABLE chart ADD COLUMN hidesubtitle boolean NOT NULL DEFAULT false"); + executeSql( "ALTER TABLE chart ADD COLUMN targetline boolean NOT NULL DEFAULT false" ); + executeSql( "ALTER TABLE chart ADD COLUMN hidesubtitle boolean NOT NULL DEFAULT false" ); executeSql( "ALTER TABLE chart DROP COLUMN monthsLastYear" ); executeSql( "ALTER TABLE chart DROP COLUMN quartersLastYear" ); === modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/i18n/I18nServiceTest.java' --- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/i18n/I18nServiceTest.java 2012-01-19 11:43:06 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/i18n/I18nServiceTest.java 2012-01-20 09:47:13 +0000 @@ -27,14 +27,27 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + import org.hisp.dhis.DhisSpringTest; +import org.hisp.dhis.dataelement.DataElement; +import org.hisp.dhis.dataelement.DataElementService; import org.hisp.dhis.i18n.locale.LocaleManager; import org.hisp.dhis.mock.MockLocaleManager; import org.junit.Before; import org.junit.Test; /** - * @author Oyvind Brucker + * @author Lars Helge Overland */ public class I18nServiceTest extends DhisSpringTest @@ -55,6 +68,8 @@ localeManager = new MockLocaleManager(); + dataElementService = (DataElementService) getBean( DataElementService.ID ); + setDependency( i18nService, "localeManager", localeManager ); } @@ -66,6 +81,116 @@ public void testUpdateTranslation() throws Exception { - + Locale locale = Locale.FRANCE; + String className = DataElement.class.getSimpleName(); + + DataElement dataElementA = createDataElement( 'A' ); + int idA = dataElementService.addDataElement( dataElementA ); + + Map translationsA = new HashMap(); + translationsA.put( "name", "frenchNameA" ); + translationsA.put( "shortName", "frenchShortNameA" ); + translationsA.put( "description", "frenchDescriptionA" ); + + i18nService.updateTranslation( className, idA, locale, translationsA ); + + Map actual = i18nService.getTranslations( className, idA, locale ); + + assertNotNull( actual ); + assertEquals( 3, actual.size() ); + assertTrue( actual.keySet().contains( "name" ) ); + assertTrue( actual.values().contains( "frenchNameA" ) ); + } + + @Test + public void testInternationaliseObject() + { + Locale locale = Locale.FRANCE; + String className = DataElement.class.getSimpleName(); + + DataElement dataElementA = createDataElement( 'A' ); + int idA = dataElementService.addDataElement( dataElementA ); + + Map translationsA = new HashMap(); + translationsA.put( "name", "frenchNameA" ); + translationsA.put( "shortName", "frenchShortNameA" ); + translationsA.put( "description", "frenchDescriptionA" ); + + i18nService.updateTranslation( className, idA, locale, translationsA ); + + assertEquals( "DataElementA", dataElementA.getDisplayName() ); + assertEquals( "DataElementShortA", dataElementA.getDisplayShortName() ); + assertEquals( "DataElementDescriptionA", dataElementA.getDisplayDescription() ); + + i18nService.localise( dataElementA, locale ); + + assertEquals( "frenchNameA", dataElementA.getDisplayName() ); + assertEquals( "frenchShortNameA", dataElementA.getDisplayShortName() ); + assertEquals( "frenchDescriptionA", dataElementA.getDisplayDescription() ); + } + + @Test + public void testInternationaliseCollection() + { + Locale locale = Locale.FRANCE; + String className = DataElement.class.getSimpleName(); + + DataElement dataElementA = createDataElement( 'A' ); + int idA = dataElementService.addDataElement( dataElementA ); + + DataElement dataElementB = createDataElement( 'B' ); + int idB = dataElementService.addDataElement( dataElementB ); + + DataElement dataElementC = createDataElement( 'C' ); + int idC = dataElementService.addDataElement( dataElementC ); + + List elements = new ArrayList(); + elements.add( dataElementA ); + elements.add( dataElementB ); + elements.add( dataElementC ); + + Map translationsA = new HashMap(); + translationsA.put( "name", "frenchNameA" ); + translationsA.put( "shortName", "frenchShortNameA" ); + translationsA.put( "description", "frenchDescriptionA" ); + + Map translationsB = new HashMap(); + translationsB.put( "name", "frenchNameB" ); + translationsB.put( "shortName", "frenchShortNameB" ); + translationsB.put( "description", "frenchDescriptionB" ); + + Map translationsC = new HashMap(); + translationsC.put( "name", "frenchNameC" ); + translationsC.put( "shortName", "frenchShortNameC" ); + translationsC.put( "description", "frenchDescriptionC" ); + + i18nService.updateTranslation( className, idA, locale, translationsA ); + i18nService.updateTranslation( className, idB, locale, translationsB ); + i18nService.updateTranslation( className, idC, locale, translationsC ); + + i18nService.localise( elements, locale ); + + Iterator elementIter = elements.iterator(); + + assertEquals( "frenchNameA", elementIter.next().getDisplayName() ); + assertEquals( "frenchNameB", elementIter.next().getDisplayName() ); + assertEquals( "frenchNameC", elementIter.next().getDisplayName() ); + } + + @Test + public void testGetObjectPropertyValues() + { + DataElement dataElementA = createDataElement( 'A' ); + + Map values = i18nService.getObjectTranslations( dataElementA ); + + assertNotNull( values ); + assertEquals( 3, values.size() ); + assertTrue( values.keySet().contains( "name" ) ); + assertTrue( values.keySet().contains( "shortName" ) ); + assertTrue( values.keySet().contains( "description" ) ); + assertTrue( values.values().contains( "DataElementA" ) ); + assertTrue( values.values().contains( "DataElementShortA" ) ); + assertTrue( values.values().contains( "DataElementDescriptionA" ) ); } } \ No newline at end of file === modified file 'resources/sql/integritychecks.sql' --- resources/sql/integritychecks.sql 2011-11-10 19:24:16 +0000 +++ resources/sql/integritychecks.sql 2012-01-20 09:47:13 +0000 @@ -45,6 +45,12 @@ where sc.datasetid=ds.datasetid) order by ds.name, de.name; +-- Get categories with category memberships + +select co.name, c.name from dataelementcategory c +join categories_categoryoptions using(categoryid) +join dataelementcategoryoption co using(categoryoptionid) order by co.name, c.name; + -- Get orgunit groups which an orgunit is member of select * from orgunitgroup g @@ -105,11 +111,11 @@ select * from categorycombo where categorycomboid not in (select distinct categorycomboid from categorycombos_categories); --- Get category options present in more than one category +-- Get category options with count of memberships in categories (should only be 1) -select categoryoptionid, ( +select cc.categoryoptionid, co.name, ( select count(categoryoptionid) from categories_categoryoptions where categoryoptionid=cc.categoryoptionid ) -as categorycount from categories_categoryoptions as cc order by categorycount desc; +as categorycount from categories_categoryoptions as cc join dataelementcategoryoption co on(cc.categoryoptionid=co.categoryoptionid) order by categorycount desc; -- Get category option combos without data values (not an error)