← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 1018: Fixed the database internationalisation. Applying translations through AOP.

 

------------------------------------------------------------
revno: 1018
committer: Lars Helge Oeverland larshelge@xxxxxxxxx
branch nick: trunk
timestamp: Tue 2009-11-10 12:45:58 +0100
message:
  Fixed the database internationalisation. Applying translations through AOP.
removed:
  dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/hibernate/HibernateI18nPostLoadEventListener.java
added:
  dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/interceptor/I18nTranslationInterceptor.java
modified:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java
  dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/DefaultI18nService.java
  dhis-2/dhis-i18n/dhis-i18n-db/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataelement/DataElementServiceTest.java
  dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/indicator/IndicatorServiceTest.java


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java	2009-10-01 09:24:46 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/organisationunit/OrganisationUnitService.java	2009-11-10 11:45:58 +0000
@@ -217,6 +217,12 @@
      */
     int getNumberOfOrganisationalLevels();
 
+    /**
+     * Set parent of OrganisationUnit.
+     * 
+     * @param organisationUnitId the identifier of the child OrganisationUnit.
+     * @param parentId the identifier of the parent OrganisationUnit.
+     */
     void updateOrganisationUnitParent( int organisationUnitId, int parentId );
     
     // -------------------------------------------------------------------------

=== modified file 'dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/DefaultI18nService.java'
--- dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/DefaultI18nService.java	2009-11-10 01:44:26 +0000
+++ dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/DefaultI18nService.java	2009-11-10 11:45:58 +0000
@@ -30,8 +30,8 @@
 import static org.hisp.dhis.system.util.ReflectionUtils.getClassName;
 import static org.hisp.dhis.system.util.ReflectionUtils.getId;
 import static org.hisp.dhis.system.util.ReflectionUtils.getProperty;
+import static org.hisp.dhis.system.util.ReflectionUtils.isCollection;
 import static org.hisp.dhis.system.util.ReflectionUtils.setProperty;
-import static org.hisp.dhis.system.util.ReflectionUtils.isCollection;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -143,11 +143,16 @@
 
     private void internationaliseCollection( Collection<?> intObjects )
     {
+        if ( intObjects == null || intObjects.size() == 0 )
+        {
+            return;
+        }
+        
         I18nObject i18nObject = isI18nObject( intObjects.iterator().next() );
 
         Locale locale = localeManager.getCurrentLocale();
 
-        if ( i18nObject != null && locale != null && intObjects != null )
+        if ( i18nObject != null && locale != null )
         {            
             Collection<Translation> allTranslations = translationService.getTranslations( i18nObject.getClassName(), locale );
                                 
@@ -443,7 +448,7 @@
                 }
             }
             
-            log.warn( "Object not enabled for i18n: " + object );
+            log.debug( "Object not enabled for i18n: " + object );
         }
         
         return null;

=== removed file 'dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/hibernate/HibernateI18nPostLoadEventListener.java'
--- dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/hibernate/HibernateI18nPostLoadEventListener.java	2009-03-09 22:33:48 +0000
+++ dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/hibernate/HibernateI18nPostLoadEventListener.java	1970-01-01 00:00:00 +0000
@@ -1,50 +0,0 @@
-package org.hisp.dhis.i18n.hibernate;
-
-/*
- * Copyright (c) 2004-2007, 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.
- */
-
-import org.hibernate.event.PostLoadEventListener;
-import org.hibernate.event.PostLoadEvent;
-import org.hisp.dhis.i18n.I18nService;
-
-/**
- * @author Oyvind Brucker
- */
-public class HibernateI18nPostLoadEventListener implements PostLoadEventListener
-{
-    private I18nService i18nService;
-
-    public void setI18nService( I18nService i18nService )
-    {
-        this.i18nService = i18nService;
-    }
-
-    public void onPostLoad( PostLoadEvent postLoadEvent )
-    {
-        i18nService.internationalise( postLoadEvent.getEntity() );
-    }
-}

=== added file 'dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/interceptor/I18nTranslationInterceptor.java'
--- dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/interceptor/I18nTranslationInterceptor.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-i18n/dhis-i18n-db/src/main/java/org/hisp/dhis/i18n/interceptor/I18nTranslationInterceptor.java	2009-11-10 11:45:58 +0000
@@ -0,0 +1,53 @@
+package org.hisp.dhis.i18n.interceptor;
+
+/*
+ * Copyright (c) 2004-2007, 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.
+ */
+
+import org.hisp.dhis.common.IdentifiableObject;
+import org.hisp.dhis.i18n.I18nService;
+import org.hisp.dhis.system.util.TimeUtils;
+
+import org.aspectj.lang.JoinPoint;
+
+/**
+ * @author Lars Helge Overland
+ * @version $Id$
+ */
+public class I18nTranslationInterceptor
+{
+    private I18nService i18nService;
+    
+    public void setI18nService( I18nService i18nService )
+    {
+        this.i18nService = i18nService;
+    }
+    
+    public void intercept( JoinPoint joinPoint, Object object )
+    {
+        i18nService.internationalise( object );      
+    }
+}

=== modified file 'dhis-2/dhis-i18n/dhis-i18n-db/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-i18n/dhis-i18n-db/src/main/resources/META-INF/dhis/beans.xml	2009-11-09 22:14:51 +0000
+++ dhis-2/dhis-i18n/dhis-i18n-db/src/main/resources/META-INF/dhis/beans.xml	2009-11-10 11:45:58 +0000
@@ -8,33 +8,6 @@
     <property name="systemLocale" value="en_GB"/>
   </bean>
 
-  <!-- Event listener definitions -->
-  <!--
-  <bean id="org.hisp.dhis.i18n.hibernate.HibernateI18nPostLoadEventListener"
-    class="org.hisp.dhis.i18n.hibernate.HibernateI18nPostLoadEventListener">
-    <property name="i18nService">
-      <ref bean="org.hisp.dhis.i18n.I18nService"/>
-    </property>
-  </bean>
-  -->
-  <!-- Event listener registrations -->
-  <!--
-  <bean id="addI18nPostLoadEventListener" 
-    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-    <property name="targetObject">
-      <ref bean="org.hisp.dhis.hibernate.HibernateConfigurationProvider"/>
-    </property>
-    <property name="targetMethod">
-      <value>setEventListener</value>
-    </property>
-    <property name="arguments">
-      <list>
-        <value>post-load</value>
-        <ref local="org.hisp.dhis.i18n.hibernate.HibernateI18nPostLoadEventListener"/>
-      </list>
-    </property>
-  </bean>
-  -->
   <!-- I18n object definitions -->
 
   <bean id="I18nDataElement"
@@ -179,16 +152,6 @@
     </property>
   </bean>
   
-  <bean id="I18nDataElementCategoryOption"
-    class="org.hisp.dhis.i18n.I18nObject">
-    <property name="className" value="DataElementCategoryOption"/>
-    <property name="propertyNames">
-      <list>
-        <value>name</value>
-      </list>
-    </property>
-  </bean>
-  
   <!-- I18nService -->
   
   <bean id="org.hisp.dhis.i18n.I18nService"
@@ -214,7 +177,6 @@
         <ref bean="I18nOrganisationUnitGroupSet"/>
         <ref bean="I18nDataSet"/>
         <ref bean="I18nDataElementCategory"/>
-        <ref bean="I18nDataElementCategoryOption"/>
       </list>
     </property>
   </bean>
@@ -240,11 +202,11 @@
       ref="org.hisp.dhis.i18n.I18nService"/>  
   </bean>
   -->
-  <!--
+  
   <bean id="i18nTranslationInterceptor"
-    class="org.hisp.dhis.i18n.interceptor.I18nObjectInterceptor">
+    class="org.hisp.dhis.i18n.interceptor.I18nTranslationInterceptor">
     <property name="i18nService"
       ref="org.hisp.dhis.i18n.I18nService"/>
   </bean>
-  -->
+  
 </beans>

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml	2009-11-07 14:09:00 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml	2009-11-10 11:45:58 +0000
@@ -602,6 +602,15 @@
       <aop:around pointcut="execution( * org.hisp.dhis.validation.ValidationRuleService.validate(..) )" method="intercept"/>
     </aop:aspect>
     
+    <aop:aspect ref="i18nTranslationInterceptor">
+      <aop:after-returning pointcut="execution( * org.hisp.dhis.dataelement.DataElementService.get*(..) )" method="intercept" returning="object"/>
+      <aop:after-returning pointcut="execution( * org.hisp.dhis.dataelement.DataElementCategoryService.get*(..) )" method="intercept" returning="object"/>
+      <aop:after-returning pointcut="execution( * org.hisp.dhis.indicator.IndicatorService.get*(..) )" method="intercept" returning="object"/>
+      <aop:after-returning pointcut="execution( * org.hisp.dhis.datadictionary.DataDictionaryService.get*(..) )" method="intercept" returning="object"/>
+      <aop:after-returning pointcut="execution( * org.hisp.dhis.dataset.DataSetService.get*(..) )" method="intercept" returning="object"/>
+      <aop:after-returning pointcut="execution( * org.hisp.dhis.organisationunit.OrganisationUnitService.get*(..) )" method="intercept" returning="object"/>
+    </aop:aspect>
+	
   </aop:config>
   
 </beans>

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataelement/DataElementServiceTest.java'
--- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataelement/DataElementServiceTest.java	2009-11-07 14:09:00 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataelement/DataElementServiceTest.java	2009-11-10 11:45:58 +0000
@@ -90,23 +90,11 @@
         DataElement dataElementA = createDataElement( 'A' );
         DataElement dataElementB = createDataElement( 'B' );
         DataElement dataElementC = createDataElement( 'C' );
-        DataElement dataElementD = createDataElement( 'A' );
 
         int idA = dataElementService.addDataElement( dataElementA );
         int idB = dataElementService.addDataElement( dataElementB );
         int idC = dataElementService.addDataElement( dataElementC );
 
-        try
-        {
-            // Should give unique constraint violation
-            dataElementService.addDataElement( dataElementD );
-            fail();
-        }
-        catch ( Exception e )
-        {
-            // Expected
-        }
-
         dataElementA = dataElementService.getDataElement( idA );
         assertNotNull( dataElementA );
         assertEquals( idA, dataElementA.getId() );
@@ -562,23 +550,11 @@
         DataElementGroup dataElementGroupA = new DataElementGroup( "DataElementGroupA" );
         DataElementGroup dataElementGroupB = new DataElementGroup( "DataElementGroupB" );
         DataElementGroup dataElementGroupC = new DataElementGroup( "DataElementGroupC" );
-        DataElementGroup dataElementGroupD = new DataElementGroup( "DataElementGroupA" );
 
         int idA = dataElementService.addDataElementGroup( dataElementGroupA );
         int idB = dataElementService.addDataElementGroup( dataElementGroupB );
         int idC = dataElementService.addDataElementGroup( dataElementGroupC );
 
-        try
-        {
-            // Should give unique constraint violation
-            dataElementService.addDataElementGroup( dataElementGroupD );
-            fail();
-        }
-        catch ( Exception e )
-        {
-            // Expected
-        }
-
         dataElementGroupA = dataElementService.getDataElementGroup( idA );
         assertNotNull( dataElementGroupA );
         assertEquals( idA, dataElementGroupA.getId() );

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/indicator/IndicatorServiceTest.java'
--- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/indicator/IndicatorServiceTest.java	2009-06-10 22:25:07 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/indicator/IndicatorServiceTest.java	2009-11-10 11:45:58 +0000
@@ -31,7 +31,6 @@
 import static junit.framework.Assert.assertNotNull;
 import static junit.framework.Assert.assertNull;
 import static junit.framework.Assert.assertTrue;
-import static junit.framework.Assert.fail;
 
 import java.util.Collection;
 import java.util.HashSet;
@@ -83,20 +82,10 @@
     {
         IndicatorType typeA = new IndicatorType( "IndicatorTypeA", 100 );
         IndicatorType typeB = new IndicatorType( "IndicatorTypeB", 1 );
-        IndicatorType typeC = new IndicatorType( "IndicatorTypeA", 100 );
         
         int idA = indicatorService.addIndicatorType( typeA );
         int idB = indicatorService.addIndicatorType( typeB );
         
-        try
-        {
-            indicatorService.addIndicatorType( typeC );
-            fail( "Expected unique constraint exception" );
-        }
-        catch ( Exception ex )
-        {
-        }
-
         typeA = indicatorService.getIndicatorType( idA );
         assertNotNull( typeA );
         assertEquals( idA, typeA.getId() );
@@ -194,20 +183,10 @@
     {
         IndicatorGroup groupA = new IndicatorGroup( "IndicatorGroupA" );
         IndicatorGroup groupB = new IndicatorGroup( "IndicatorGroupB" );
-        IndicatorGroup groupC = new IndicatorGroup( "IndicatorGroupA" );
         
         int idA = indicatorService.addIndicatorGroup( groupA );
         int idB = indicatorService.addIndicatorGroup( groupB );
         
-        try
-        {
-            indicatorService.addIndicatorGroup( groupC );
-            fail( "Expected unique constraint exception" );
-        }
-        catch ( Exception ex )
-        {
-        }
-
         groupA = indicatorService.getIndicatorGroup( idA );
         assertNotNull( groupA );
         assertEquals( idA, groupA.getId() );
@@ -375,20 +354,10 @@
         
         Indicator indicatorA = createIndicator( 'A', type );
         Indicator indicatorB = createIndicator( 'B', type );
-        Indicator indicatorC = createIndicator( 'A', type );
         
         int idA = indicatorService.addIndicator( indicatorA );
         int idB = indicatorService.addIndicator( indicatorB );
         
-        try
-        {
-            indicatorService.addIndicator( indicatorC );
-            fail( "Expected unique constraint exception" );
-        }
-        catch ( Exception ex )
-        {
-        }
-
         indicatorA = indicatorService.getIndicator( idA );
         assertNotNull( indicatorA );
         assertEq( 'A', indicatorA );


Follow ups