=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentityattributevalue/TrackedEntityAttributeValueAuditService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentityattributevalue/TrackedEntityAttributeValueAuditService.java 2015-11-30 02:50:28 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentityattributevalue/TrackedEntityAttributeValueAuditService.java 2015-11-30 03:21:59 +0000 @@ -28,10 +28,19 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hisp.dhis.common.AuditType; +import org.hisp.dhis.trackedentity.TrackedEntityAttribute; +import org.hisp.dhis.trackedentity.TrackedEntityInstance; + +import java.util.List; + /** * @author Morten Olav Hansen */ public interface TrackedEntityAttributeValueAuditService { void addTrackedEntityAttributeValueAudit( TrackedEntityAttributeValueAudit trackedEntityAttributeValueAudit ); + + List getTrackedEntityAttributeValueAudits( List trackedEntityAttributes, + List trackedEntityInstances, AuditType auditType ); } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentityattributevalue/TrackedEntityAttributeValueAuditStore.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentityattributevalue/TrackedEntityAttributeValueAuditStore.java 2015-11-30 02:50:28 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentityattributevalue/TrackedEntityAttributeValueAuditStore.java 2015-11-30 03:21:59 +0000 @@ -28,10 +28,19 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hisp.dhis.common.AuditType; +import org.hisp.dhis.trackedentity.TrackedEntityAttribute; +import org.hisp.dhis.trackedentity.TrackedEntityInstance; + +import java.util.List; + /** * @author Morten Olav Hansen */ public interface TrackedEntityAttributeValueAuditStore { void addTrackedEntityAttributeValueAudit( TrackedEntityAttributeValueAudit trackedEntityAttributeValueAudit ); + + List getTrackedEntityAttributeValueAudits( List trackedEntityAttributes, + List trackedEntityInstances, AuditType auditType ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentityattributevalue/DefaultTrackedEntityAttributeValueAuditService.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentityattributevalue/DefaultTrackedEntityAttributeValueAuditService.java 2015-11-30 02:50:28 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentityattributevalue/DefaultTrackedEntityAttributeValueAuditService.java 2015-11-30 03:21:59 +0000 @@ -28,8 +28,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hisp.dhis.common.AuditType; +import org.hisp.dhis.trackedentity.TrackedEntityAttribute; +import org.hisp.dhis.trackedentity.TrackedEntityInstance; import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; + /** * @author Morten Olav Hansen */ @@ -44,4 +49,11 @@ { trackedEntityAttributeValueAuditStore.addTrackedEntityAttributeValueAudit( trackedEntityAttributeValueAudit ); } + + @Override + public List getTrackedEntityAttributeValueAudits( List trackedEntityAttributes, + List trackedEntityInstances, AuditType auditType ) + { + return trackedEntityAttributeValueAuditStore.getTrackedEntityAttributeValueAudits( trackedEntityAttributes, trackedEntityInstances, auditType ); + } } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentityattributevalue/hibernate/HibernateTrackedEntityAttributeValueAuditStore.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentityattributevalue/hibernate/HibernateTrackedEntityAttributeValueAuditStore.java 2015-11-30 02:50:28 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/trackedentityattributevalue/hibernate/HibernateTrackedEntityAttributeValueAuditStore.java 2015-11-30 03:21:59 +0000 @@ -28,10 +28,19 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; +import org.hibernate.criterion.Order; +import org.hibernate.criterion.Restrictions; +import org.hisp.dhis.common.AuditType; +import org.hisp.dhis.trackedentity.TrackedEntityAttribute; +import org.hisp.dhis.trackedentity.TrackedEntityInstance; import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValueAudit; import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValueAuditStore; +import org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValueAudit; + +import java.util.List; /** * @author Morten Olav Hansen @@ -60,4 +69,32 @@ Session session = sessionFactory.getCurrentSession(); session.save( trackedEntityAttributeValueAudit ); } + + @Override + @SuppressWarnings( "unchecked" ) + public List getTrackedEntityAttributeValueAudits( List trackedEntityAttributes, + List trackedEntityInstances, AuditType auditType ) + { + Session session = sessionFactory.getCurrentSession(); + Criteria criteria = session.createCriteria( TrackedEntityAttributeValueAudit.class ); + + if ( !trackedEntityAttributes.isEmpty() ) + { + criteria.add( Restrictions.in( "attribute", trackedEntityAttributes ) ); + } + + if ( !trackedEntityInstances.isEmpty() ) + { + criteria.add( Restrictions.in( "entityInstance", trackedEntityInstances ) ); + } + + if ( auditType != null ) + { + criteria.add( Restrictions.eq( "auditType", auditType ) ); + } + + criteria.addOrder( Order.desc( "timestamp" ) ); + + return criteria.list(); + } } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AuditController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AuditController.java 2015-11-27 10:16:01 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/AuditController.java 2015-11-30 03:21:59 +0000 @@ -43,6 +43,10 @@ import org.hisp.dhis.period.PeriodType; import org.hisp.dhis.program.ProgramStageInstance; import org.hisp.dhis.program.ProgramStageInstanceService; +import org.hisp.dhis.trackedentity.TrackedEntityAttribute; +import org.hisp.dhis.trackedentity.TrackedEntityInstance; +import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValueAudit; +import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValueAuditService; import org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValueAudit; import org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValueAuditService; import org.hisp.dhis.webapi.utils.WebMessageUtils; @@ -76,6 +80,9 @@ private TrackedEntityDataValueAuditService trackedEntityDataValueAuditService; @Autowired + private TrackedEntityAttributeValueAuditService trackedEntityAttributeValueAuditService; + + @Autowired private FieldFilterService fieldFilterService; @RequestMapping( value = "dataValue", method = RequestMethod.GET ) @@ -122,15 +129,102 @@ return rootNode; } + @RequestMapping( value = "trackedEntityAttributeValue", method = RequestMethod.GET ) + public @ResponseBody RootNode getTrackedEntityAttributeValueAudit( + @RequestParam( required = false, defaultValue = "" ) List tea, + @RequestParam( required = false, defaultValue = "" ) List tei, + @RequestParam( required = false ) AuditType auditType + ) throws WebMessageException + { + List trackedEntityAttributes = getTrackedEntityAttributes( tea ); + List trackedEntityInstances = getTrackedEntityInstances( tei ); + + List attributeValueAudits = trackedEntityAttributeValueAuditService.getTrackedEntityAttributeValueAudits( + trackedEntityAttributes, trackedEntityInstances, auditType ); + + RootNode rootNode = NodeUtils.createRootNode( "trackedEntityAttributeValueAudits" ); + rootNode.addChild( fieldFilterService.filter( TrackedEntityAttributeValueAudit.class, attributeValueAudits, new ArrayList<>() ) ); + + return rootNode; + } + //----------------------------------------------------------------------------------------------------------------- // Helpers //----------------------------------------------------------------------------------------------------------------- - private List getProgramStageInstances( List psIdentifier ) throws WebMessageException + private List getTrackedEntityInstances( List teiIdentifiers ) throws WebMessageException + { + List trackedEntityInstances = new ArrayList<>(); + + for ( String tei : teiIdentifiers ) + { + TrackedEntityInstance trackedEntityInstance = getTrackedEntityInstance( tei ); + + if ( trackedEntityInstance != null ) + { + trackedEntityInstances.add( trackedEntityInstance ); + } + } + + return trackedEntityInstances; + } + + private TrackedEntityInstance getTrackedEntityInstance( String tei ) throws WebMessageException + { + if ( tei == null ) + { + return null; + } + + TrackedEntityInstance trackedEntityInstance = manager.get( TrackedEntityInstance.class, tei ); + + if ( trackedEntityInstance == null ) + { + throw new WebMessageException( WebMessageUtils.conflict( "Illegal trackedEntityInstance identifier: " + tei ) ); + } + + return trackedEntityInstance; + } + + private List getTrackedEntityAttributes( List teaIdentifiers ) throws WebMessageException + { + List trackedEntityAttributes = new ArrayList<>(); + + for ( String tea : teaIdentifiers ) + { + TrackedEntityAttribute trackedEntityAttribute = getTrackedEntityAttribute( tea ); + + if ( trackedEntityAttribute != null ) + { + trackedEntityAttributes.add( trackedEntityAttribute ); + } + } + + return trackedEntityAttributes; + } + + private TrackedEntityAttribute getTrackedEntityAttribute( String tea ) throws WebMessageException + { + if ( tea == null ) + { + return null; + } + + TrackedEntityAttribute trackedEntityAttribute = manager.get( TrackedEntityAttribute.class, tea ); + + if ( trackedEntityAttribute == null ) + { + throw new WebMessageException( WebMessageUtils.conflict( "Illegal trackedEntityAttribute identifier: " + tea ) ); + } + + return trackedEntityAttribute; + } + + private List getProgramStageInstances( List psIdentifiers ) throws WebMessageException { List programStageInstances = new ArrayList<>(); - for ( String ps : psIdentifier ) + for ( String ps : psIdentifiers ) { ProgramStageInstance programStageInstance = getProgramStageInstance( ps );