=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/GenericStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/GenericStore.java 2015-11-17 07:00:29 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/GenericStore.java 2015-11-18 03:02:19 +0000 @@ -29,6 +29,7 @@ */ import org.hisp.dhis.attribute.Attribute; +import org.hisp.dhis.attribute.AttributeValue; import java.util.List; @@ -133,4 +134,6 @@ * @return Object if object.attributeValues.attribute=attribute exists */ T getByAttribute( Attribute attribute ); + + AttributeValue getAttributeValueByAttribute( Attribute attribute ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataelement/DataElementStoreTest.java' --- dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataelement/DataElementStoreTest.java 2015-11-17 07:00:29 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/test/java/org/hisp/dhis/dataelement/DataElementStoreTest.java 2015-11-18 03:02:19 +0000 @@ -439,4 +439,26 @@ DataElement dataElement = dataElementStore.getByAttribute( attribute ); assertEquals( dataElement.getUid(), dataElementA.getUid() ); } + + @Test + public void testAttributeValueFromAttribute() + { + Attribute attribute = new Attribute( "test", ValueType.TEXT ); + attribute.setDataElementAttribute( true ); + attributeService.addAttribute( attribute ); + + DataElement dataElementA = createDataElement( 'A' ); + DataElement dataElementB = createDataElement( 'B' ); + dataElementStore.save( dataElementA ); + dataElementStore.save( dataElementB ); + + AttributeValue attributeValue = new AttributeValue( "SOME VALUE", attribute ); + attributeService.addAttributeValue( attributeValue ); + + dataElementA.getAttributeValues().add( attributeValue ); + dataElementStore.update( dataElementA ); + + AttributeValue value = dataElementStore.getAttributeValueByAttribute( attribute ); + assertEquals( value.getValue(), attributeValue.getValue() ); + } } === modified file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/java/org/hisp/dhis/hibernate/HibernateGenericStore.java' --- dhis-2/dhis-support/dhis-support-hibernate/src/main/java/org/hisp/dhis/hibernate/HibernateGenericStore.java 2015-11-17 07:09:05 +0000 +++ dhis-2/dhis-support/dhis-support-hibernate/src/main/java/org/hisp/dhis/hibernate/HibernateGenericStore.java 2015-11-18 03:02:19 +0000 @@ -43,6 +43,7 @@ import org.hibernate.criterion.Restrictions; import org.hibernate.criterion.Subqueries; import org.hisp.dhis.attribute.Attribute; +import org.hisp.dhis.attribute.AttributeValue; import org.hisp.dhis.common.AuditLogUtil; import org.hisp.dhis.common.BaseIdentifiableObject; import org.hisp.dhis.common.GenericStore; @@ -541,6 +542,22 @@ return (T) criteria.uniqueResult(); } + @Override + public AttributeValue getAttributeValueByAttribute( Attribute attribute ) + { + Schema schema = schemaService.getDynamicSchema( getClazz() ); + + if ( schema == null || !schema.havePersistedProperty( "attributeValues" ) ) + { + return null; + } + + String hql = "select av from " + getClazz().getSimpleName() + " as e " + + "inner join e.attributeValues av inner join av.attribute at where at = :attribute )"; + + return (AttributeValue) getQuery( hql ).setEntity( "attribute", attribute ).uniqueResult(); + } + //---------------------------------------------------------------------------------------------------------------- // Helpers //----------------------------------------------------------------------------------------------------------------