← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 13372: Data entry, moved HistoryRetriever to service layer

 

------------------------------------------------------------
revno: 13372
committer: Lars Helge Øverland <larshelge@xxxxxxxxx>
branch nick: dhis2
timestamp: Sat 2013-12-21 20:02:27 +0100
message:
  Data entry, moved HistoryRetriever to service layer
removed:
  dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/
  dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DataElementHistory.java
  dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DataElementHistoryPoint.java
  dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DefaultHistoryRetriever.java
  dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/HistoryRetriever.java
added:
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DataElementHistory.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DataElementHistoryPoint.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DefaultHistoryRetriever.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/HistoryRetriever.java
modified:
  dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-web/dhis-web-dataentry/pom.xml
  dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetHistoryAction.java
  dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js


--
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
=== added directory 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory'
=== added file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DataElementHistory.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DataElementHistory.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DataElementHistory.java	2013-12-21 19:02:27 +0000
@@ -0,0 +1,176 @@
+package org.hisp.dhis.dataelementhistory;
+
+/*
+ * Copyright (c) 2004-2013, 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 java.util.ArrayList;
+import java.util.List;
+
+import org.hisp.dhis.dataelement.DataElement;
+import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+
+/**
+ * @author Torgeir Lorange Ostby
+ * @version $Id: DataElementHistory.java 4438 2008-01-26 16:35:24Z abyot $
+ */
+public class DataElementHistory
+{
+    private DataElement dataElement;
+    
+    private DataElementCategoryOptionCombo optionCombo;
+
+    private OrganisationUnit organisationUnit;
+    
+    private Integer minLimit;
+
+    private Integer maxLimit;
+
+    private int historyLength;
+    
+    /**
+     * Max value used to draw the history graph
+     */
+    private double maxHistoryValue;
+    
+    /**
+     * The lowest entered value
+     */
+    private double minValue;
+    
+    /**
+     * The highest entered value
+     */
+    private double maxValue = Double.NEGATIVE_INFINITY;
+    
+    private List<DataElementHistoryPoint> historyPoints = new ArrayList<DataElementHistoryPoint>();
+
+    // -------------------------------------------------------------------------
+    // Getters and setters
+    // -------------------------------------------------------------------------
+
+    public Integer getMaxLimit()
+    {
+        return maxLimit;
+    }
+
+    public void setMaxLimit( Integer maxLimit )
+    {
+        this.maxLimit = maxLimit;
+    }
+
+    public OrganisationUnit getOrganisationUnit()
+    {
+        return organisationUnit;
+    }
+
+    public void setOrganisationUnit( OrganisationUnit organisationUnit )
+    {
+        this.organisationUnit = organisationUnit;
+    }
+
+    public Integer getMinLimit()
+    {
+        return minLimit;
+    }
+
+    public void setMinLimit( Integer minLimit )
+    {
+        this.minLimit = minLimit;
+    }
+
+    public DataElement getDataElement()
+    {
+        return dataElement;
+    }
+
+    public void setDataElement( DataElement dataElement )
+    {
+        this.dataElement = dataElement;
+    }
+    
+    public DataElementCategoryOptionCombo getOptionCombo()
+    {
+    	return optionCombo;
+    }
+    
+    public void setOptionCombo( DataElementCategoryOptionCombo optionCombo )
+    {
+    	this.optionCombo = optionCombo;
+    }
+
+    public int getHistoryLength()
+    {
+        return historyLength;
+    }
+
+    public void setHistoryLength( int historyLength )
+    {
+        this.historyLength = historyLength;
+    }
+
+    public List<DataElementHistoryPoint> getHistoryPoints()
+    {
+        return historyPoints;
+    }
+
+    public void setHistoryPoints( List<DataElementHistoryPoint> historyPoints )
+    {
+        this.historyPoints = historyPoints;
+    }
+
+    public double getMaxValue()
+    {
+        return maxValue;
+    }
+
+    public void setMaxValue( double maxValue )
+    {
+        this.maxValue = maxValue;
+    }
+
+    public double getMinValue()
+    {       
+        return minValue;
+    }
+
+    public void setMinValue( double minValue )
+    {
+        this.minValue = minValue;
+    }
+
+    public double getMaxHistoryValue()
+    {
+        return maxHistoryValue;
+    }
+
+    public void setMaxHistoryValue( double maxHistoryValue )
+    {
+        this.maxHistoryValue = maxHistoryValue;
+    }
+}

=== added file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DataElementHistoryPoint.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DataElementHistoryPoint.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DataElementHistoryPoint.java	2013-12-21 19:02:27 +0000
@@ -0,0 +1,78 @@
+package org.hisp.dhis.dataelementhistory;
+
+/*
+ * Copyright (c) 2004-2013, 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.period.Period;
+
+/**
+ * @author Torgeir Lorange Ostby
+ * @version $Id: DataElementHistoryPoint.java 2869 2007-02-20 14:26:09Z andegje $
+ */
+public class DataElementHistoryPoint
+{
+    private Period period;
+
+    private Double value;
+
+    private double average;
+
+    // -------------------------------------------------------------------------
+    // Getters and setters
+    // -------------------------------------------------------------------------
+
+    public double getAverage()
+    {
+        return average;
+    }
+
+    public void setAverage( double average )
+    {
+        this.average = average;
+    }
+
+    public Period getPeriod()
+    {
+        return period;
+    }
+
+    public void setPeriod( Period period )
+    {
+        this.period = period;
+    }
+
+    public Double getValue()
+    {
+        return value;
+    }
+
+    public void setValue( Double value )
+    {
+        this.value = value;
+    }
+}

=== added file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DefaultHistoryRetriever.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DefaultHistoryRetriever.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/DefaultHistoryRetriever.java	2013-12-21 19:02:27 +0000
@@ -0,0 +1,253 @@
+package org.hisp.dhis.dataelementhistory;
+
+/*
+ * Copyright (c) 2004-2013, 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 java.util.List;
+
+import org.apache.commons.math.util.MathUtils;
+import org.hisp.dhis.dataelement.DataElement;
+import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
+import org.hisp.dhis.datavalue.DataValue;
+import org.hisp.dhis.datavalue.DataValueService;
+import org.hisp.dhis.minmax.MinMaxDataElement;
+import org.hisp.dhis.minmax.MinMaxDataElementService;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.period.Period;
+import org.hisp.dhis.period.PeriodService;
+
+/**
+ * @author Torgeir Lorange Ostby
+ */
+public class DefaultHistoryRetriever
+    implements HistoryRetriever
+{
+    // -------------------------------------------------------------------------
+    // Dependencies
+    // -------------------------------------------------------------------------
+
+    private MinMaxDataElementService minMaxDataElementService;
+
+    public void setMinMaxDataElementService( MinMaxDataElementService minMaxDataElementService )
+    {
+        this.minMaxDataElementService = minMaxDataElementService;
+    }
+
+    private DataValueService dataValueService;
+
+    public void setDataValueService( DataValueService dataValueService )
+    {
+        this.dataValueService = dataValueService;
+    }
+
+    private PeriodService periodService;
+
+    public void setPeriodService( PeriodService periodService )
+    {
+        this.periodService = periodService;
+    }
+
+    // -------------------------------------------------------------------------
+    // HistoryRetriever implementation
+    // -------------------------------------------------------------------------
+
+    public DataElementHistory getHistory( DataElement dataElement, DataElementCategoryOptionCombo optionCombo,
+        OrganisationUnit organisationUnit, Period lastPeriod, int historyLength )
+    {
+        if ( !dataElement.getType().equals( DataElement.VALUE_TYPE_INT ) )
+        {
+            return null; // TODO
+        }
+
+        // ---------------------------------------------------------------------
+        // Initialise history
+        // ---------------------------------------------------------------------
+
+        DataElementHistory history = new DataElementHistory();
+        history.setDataElement( dataElement );
+        history.setOptionCombo( optionCombo );
+        history.setOrganisationUnit( organisationUnit );
+        history.setHistoryLength( historyLength );
+        addMinMaxLimits( organisationUnit, dataElement, optionCombo, history );
+
+        // ---------------------------------------------------------------------
+        // Create history points
+        // ---------------------------------------------------------------------
+
+        List<Period> periods = periodService.getPeriods( lastPeriod, historyLength );
+
+        double max = 1;
+        double average = 0;
+        double total = 0;
+        int count = 0;
+
+        if ( history.getMaxLimit() != null )
+        {
+            max = Math.max( max, history.getMaxLimit() );
+        }
+
+        for ( Period period : periods )
+        {
+            DataElementHistoryPoint historyPoint = new DataElementHistoryPoint();
+            historyPoint.setPeriod( period );
+
+            Double value = getValue( dataElement, optionCombo, organisationUnit, period );
+
+            if ( value != null )
+            {
+                historyPoint.setValue( value );
+            }
+
+            if ( historyPoint.getValue() != null )
+            {
+                max = Math.max( max, historyPoint.getValue() );
+                total += historyPoint.getValue();
+                average = total / ++count;
+                average = MathUtils.round( average, 1 );
+            }
+
+            historyPoint.setAverage( average );
+
+            history.getHistoryPoints().add( historyPoint );
+        }
+
+        history.setMaxHistoryValue( max );
+
+        double maxValue = getMaxValue( history );
+
+        if ( maxValue != Double.NEGATIVE_INFINITY )
+        {
+            history.setMaxValue( maxValue );
+
+            double minValue = getMinValue( history );
+            history.setMinValue( minValue );
+        }
+
+        return history;
+    }
+
+    // -------------------------------------------------------------------------
+    // Supportive methods
+    // -------------------------------------------------------------------------
+
+    private void addMinMaxLimits( OrganisationUnit organisationUnit, DataElement dataElement,
+        DataElementCategoryOptionCombo optionCombo, DataElementHistory history )
+    {
+        MinMaxDataElement minMaxDataElement = minMaxDataElementService.getMinMaxDataElement( organisationUnit,
+            dataElement, optionCombo );
+
+        if ( minMaxDataElement != null )
+        {
+            history.setMaxLimit( minMaxDataElement.getMax() );
+            history.setMinLimit( minMaxDataElement.getMin() );
+        }
+    }
+
+    /**
+     * Finds the lowest value entered in the periode given by
+     * history.historyLenght.
+     * 
+     * @param history DataElementHistory
+     * @return the lowest Double value entred. If no values are entred,
+     *         Double.MAX_VALUE is returned
+     */
+    private Double getMinValue( DataElementHistory history )
+    {
+        double value = Double.MAX_VALUE;
+        List<DataElementHistoryPoint> historyPoints = history.getHistoryPoints();
+
+        for ( DataElementHistoryPoint DEPoint : historyPoints )
+        {
+            if ( DEPoint.getValue() != null )
+            {
+                if ( DEPoint.getValue() < value )
+                {
+                    value = DEPoint.getValue();
+                }
+            }
+        }
+
+        return value;
+    }
+
+    /**
+     * Finds the highest value entered in the periode given by
+     * history.historyLenght.
+     * 
+     * @param history DataElementHistory
+     * @return the highest entred value. If no value is entred
+     *         Double.NEGATIVE_INFINITY is returned
+     */
+    private Double getMaxValue( DataElementHistory history )
+    {
+        double value = Double.NEGATIVE_INFINITY;
+        List<DataElementHistoryPoint> historyPoints = history.getHistoryPoints();
+
+        for ( DataElementHistoryPoint DEPoint : historyPoints )
+        {
+            if ( DEPoint.getValue() != null )
+            {
+                if ( DEPoint.getValue() > value )
+                {
+                    value = DEPoint.getValue();
+                }
+            }
+        }
+
+        return value;
+    }
+
+    private Double getValue( DataElement dataElement, DataElementCategoryOptionCombo optionCombo,
+        OrganisationUnit organisationUnit, Period period )
+    {
+        DataValue dataValue = dataValueService.getDataValue( dataElement, period, organisationUnit, optionCombo );
+
+        if ( dataValue != null )
+        {
+            if ( dataValue.getValue() != null )
+            {
+                return parseValue( dataValue.getValue() );
+
+            }
+        }
+
+        return null;
+    }
+
+    private Double parseValue( String value )
+    {
+        try
+        {
+            return Double.parseDouble( value );
+        }
+        catch ( NumberFormatException e )
+        {
+            throw new RuntimeException( "Failed to parse double: " + value, e );
+        }
+    }
+}

=== added file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/HistoryRetriever.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/HistoryRetriever.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dataelementhistory/HistoryRetriever.java	2013-12-21 19:02:27 +0000
@@ -0,0 +1,47 @@
+package org.hisp.dhis.dataelementhistory;
+
+/*
+ * Copyright (c) 2004-2013, 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.dataelement.DataElement;
+import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.period.Period;
+
+/**
+ * @author Torgeir Lorange Ostby
+ * @version $Id: HistoryRetriever.java 4438 2008-01-26 16:35:24Z abyot $
+ */
+public interface HistoryRetriever
+{
+    String ID = HistoryRetriever.class.getName();
+
+    DataElementHistory getHistory( DataElement dataElement, DataElementCategoryOptionCombo optionCombo, 
+        OrganisationUnit organisationUnit, Period lastPeriod, int historyLength );
+    
+}

=== 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	2013-12-13 11:08:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml	2013-12-21 19:02:27 +0000
@@ -161,6 +161,14 @@
     <property name="sessionFactory" ref="sessionFactory" />
   </bean>
 
+  <!-- Data element history -->
+
+  <bean id="org.hisp.dhis.dataelementhistory.HistoryRetriever" class="org.hisp.dhis.dataelementhistory.DefaultHistoryRetriever">
+    <property name="minMaxDataElementService" ref="org.hisp.dhis.minmax.MinMaxDataElementService" />
+    <property name="dataValueService" ref="org.hisp.dhis.datavalue.DataValueService" />
+    <property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
+  </bean>
+
   <!-- Scheduling -->
 
   <bean id="org.hisp.dhis.scheduling.SchedulingManager" class="org.hisp.dhis.scheduling.DefaultSchedulingManager"

=== modified file 'dhis-2/dhis-web/dhis-web-dataentry/pom.xml'
--- dhis-2/dhis-web/dhis-web-dataentry/pom.xml	2013-10-17 06:57:37 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/pom.xml	2013-12-21 19:02:27 +0000
@@ -43,8 +43,7 @@
     <dependency>
       <groupId>org.hisp.dhis</groupId>
       <artifactId>dhis-service-core</artifactId>
-    </dependency>
-    
+    </dependency>    
     <dependency>
       <groupId>org.hisp.dhis</groupId>
       <artifactId>dhis-service-reporting</artifactId>

=== modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetHistoryAction.java'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetHistoryAction.java	2013-12-19 18:12:57 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/action/GetHistoryAction.java	2013-12-21 19:02:27 +0000
@@ -28,17 +28,19 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import com.opensymphony.xwork2.Action;
+import java.util.Collection;
+import java.util.List;
+
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
 import org.hisp.dhis.dataelement.DataElementCategoryService;
 import org.hisp.dhis.dataelement.DataElementService;
+import org.hisp.dhis.dataelementhistory.DataElementHistory;
+import org.hisp.dhis.dataelementhistory.HistoryRetriever;
 import org.hisp.dhis.datavalue.DataValue;
 import org.hisp.dhis.datavalue.DataValueAudit;
 import org.hisp.dhis.datavalue.DataValueAuditService;
 import org.hisp.dhis.datavalue.DataValueService;
-import org.hisp.dhis.de.history.DataElementHistory;
-import org.hisp.dhis.de.history.HistoryRetriever;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.organisationunit.OrganisationUnitService;
 import org.hisp.dhis.period.Period;
@@ -46,8 +48,7 @@
 import org.hisp.dhis.user.UserCredentials;
 import org.hisp.dhis.user.UserService;
 
-import java.util.Collection;
-import java.util.List;
+import com.opensymphony.xwork2.Action;
 
 /**
  * @author Torgeir Lorange Ostby

=== removed directory 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history'
=== removed file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DataElementHistory.java'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DataElementHistory.java	2013-08-23 16:05:01 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DataElementHistory.java	1970-01-01 00:00:00 +0000
@@ -1,176 +0,0 @@
-package org.hisp.dhis.de.history;
-
-/*
- * Copyright (c) 2004-2013, 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 java.util.ArrayList;
-import java.util.List;
-
-import org.hisp.dhis.dataelement.DataElement;
-import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-
-/**
- * @author Torgeir Lorange Ostby
- * @version $Id: DataElementHistory.java 4438 2008-01-26 16:35:24Z abyot $
- */
-public class DataElementHistory
-{
-    private DataElement dataElement;
-    
-    private DataElementCategoryOptionCombo optionCombo;
-
-    private OrganisationUnit organisationUnit;
-    
-    private Integer minLimit;
-
-    private Integer maxLimit;
-
-    private int historyLength;
-    
-    /**
-     * Max value used to draw the history graph
-     */
-    private double maxHistoryValue;
-    
-    /**
-     * The lowest entered value
-     */
-    private double minValue;
-    
-    /**
-     * The highest entered value
-     */
-    private double maxValue = Double.NEGATIVE_INFINITY;
-    
-    private List<DataElementHistoryPoint> historyPoints = new ArrayList<DataElementHistoryPoint>();
-
-    // -------------------------------------------------------------------------
-    // Getters and setters
-    // -------------------------------------------------------------------------
-
-    public Integer getMaxLimit()
-    {
-        return maxLimit;
-    }
-
-    public void setMaxLimit( Integer maxLimit )
-    {
-        this.maxLimit = maxLimit;
-    }
-
-    public OrganisationUnit getOrganisationUnit()
-    {
-        return organisationUnit;
-    }
-
-    public void setOrganisationUnit( OrganisationUnit organisationUnit )
-    {
-        this.organisationUnit = organisationUnit;
-    }
-
-    public Integer getMinLimit()
-    {
-        return minLimit;
-    }
-
-    public void setMinLimit( Integer minLimit )
-    {
-        this.minLimit = minLimit;
-    }
-
-    public DataElement getDataElement()
-    {
-        return dataElement;
-    }
-
-    public void setDataElement( DataElement dataElement )
-    {
-        this.dataElement = dataElement;
-    }
-    
-    public DataElementCategoryOptionCombo getOptionCombo()
-    {
-    	return optionCombo;
-    }
-    
-    public void setOptionCombo( DataElementCategoryOptionCombo optionCombo )
-    {
-    	this.optionCombo = optionCombo;
-    }
-
-    public int getHistoryLength()
-    {
-        return historyLength;
-    }
-
-    public void setHistoryLength( int historyLength )
-    {
-        this.historyLength = historyLength;
-    }
-
-    public List<DataElementHistoryPoint> getHistoryPoints()
-    {
-        return historyPoints;
-    }
-
-    public void setHistoryPoints( List<DataElementHistoryPoint> historyPoints )
-    {
-        this.historyPoints = historyPoints;
-    }
-
-    public double getMaxValue()
-    {
-        return maxValue;
-    }
-
-    public void setMaxValue( double maxValue )
-    {
-        this.maxValue = maxValue;
-    }
-
-    public double getMinValue()
-    {       
-        return minValue;
-    }
-
-    public void setMinValue( double minValue )
-    {
-        this.minValue = minValue;
-    }
-
-    public double getMaxHistoryValue()
-    {
-        return maxHistoryValue;
-    }
-
-    public void setMaxHistoryValue( double maxHistoryValue )
-    {
-        this.maxHistoryValue = maxHistoryValue;
-    }
-}

=== removed file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DataElementHistoryPoint.java'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DataElementHistoryPoint.java	2013-08-23 16:05:01 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DataElementHistoryPoint.java	1970-01-01 00:00:00 +0000
@@ -1,78 +0,0 @@
-package org.hisp.dhis.de.history;
-
-/*
- * Copyright (c) 2004-2013, 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.period.Period;
-
-/**
- * @author Torgeir Lorange Ostby
- * @version $Id: DataElementHistoryPoint.java 2869 2007-02-20 14:26:09Z andegje $
- */
-public class DataElementHistoryPoint
-{
-    private Period period;
-
-    private Double value;
-
-    private double average;
-
-    // -------------------------------------------------------------------------
-    // Getters and setters
-    // -------------------------------------------------------------------------
-
-    public double getAverage()
-    {
-        return average;
-    }
-
-    public void setAverage( double average )
-    {
-        this.average = average;
-    }
-
-    public Period getPeriod()
-    {
-        return period;
-    }
-
-    public void setPeriod( Period period )
-    {
-        this.period = period;
-    }
-
-    public Double getValue()
-    {
-        return value;
-    }
-
-    public void setValue( Double value )
-    {
-        this.value = value;
-    }
-}

=== removed file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DefaultHistoryRetriever.java'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DefaultHistoryRetriever.java	2013-12-19 18:12:57 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/DefaultHistoryRetriever.java	1970-01-01 00:00:00 +0000
@@ -1,255 +0,0 @@
-package org.hisp.dhis.de.history;
-
-/*
- * Copyright (c) 2004-2013, 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 java.util.List;
-
-import org.apache.commons.math.util.MathUtils;
-import org.hisp.dhis.dataelement.DataElement;
-import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
-import org.hisp.dhis.datavalue.DataValue;
-import org.hisp.dhis.datavalue.DataValueService;
-import org.hisp.dhis.minmax.MinMaxDataElement;
-import org.hisp.dhis.minmax.MinMaxDataElementService;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.period.Period;
-import org.hisp.dhis.period.PeriodService;
-
-/**
- * @author Torgeir Lorange Ostby
- * @version $Id: DefaultHistoryRetriever.java 5131 2008-05-11 21:06:23Z larshelg
- *          $
- */
-public class DefaultHistoryRetriever
-    implements HistoryRetriever
-{
-    // -------------------------------------------------------------------------
-    // Dependencies
-    // -------------------------------------------------------------------------
-
-    private MinMaxDataElementService minMaxDataElementService;
-
-    public void setMinMaxDataElementService( MinMaxDataElementService minMaxDataElementService )
-    {
-        this.minMaxDataElementService = minMaxDataElementService;
-    }
-
-    private DataValueService dataValueService;
-
-    public void setDataValueService( DataValueService dataValueService )
-    {
-        this.dataValueService = dataValueService;
-    }
-
-    private PeriodService periodService;
-
-    public void setPeriodService( PeriodService periodService )
-    {
-        this.periodService = periodService;
-    }
-
-    // -------------------------------------------------------------------------
-    // HistoryRetriever implementation
-    // -------------------------------------------------------------------------
-
-    public DataElementHistory getHistory( DataElement dataElement, DataElementCategoryOptionCombo optionCombo,
-        OrganisationUnit organisationUnit, Period lastPeriod, int historyLength )
-    {
-        if ( !dataElement.getType().equals( DataElement.VALUE_TYPE_INT ) )
-        {
-            return null; // TODO
-        }
-
-        // ---------------------------------------------------------------------
-        // Initialise history
-        // ---------------------------------------------------------------------
-
-        DataElementHistory history = new DataElementHistory();
-        history.setDataElement( dataElement );
-        history.setOptionCombo( optionCombo );
-        history.setOrganisationUnit( organisationUnit );
-        history.setHistoryLength( historyLength );
-        addMinMaxLimits( organisationUnit, dataElement, optionCombo, history );
-
-        // ---------------------------------------------------------------------
-        // Create history points
-        // ---------------------------------------------------------------------
-
-        List<Period> periods = periodService.getPeriods( lastPeriod, historyLength );
-
-        double max = 1;
-        double average = 0;
-        double total = 0;
-        int count = 0;
-
-        if ( history.getMaxLimit() != null )
-        {
-            max = Math.max( max, history.getMaxLimit() );
-        }
-
-        for ( Period period : periods )
-        {
-            DataElementHistoryPoint historyPoint = new DataElementHistoryPoint();
-            historyPoint.setPeriod( period );
-
-            Double value = getValue( dataElement, optionCombo, organisationUnit, period );
-
-            if ( value != null )
-            {
-                historyPoint.setValue( value );
-            }
-
-            if ( historyPoint.getValue() != null )
-            {
-                max = Math.max( max, historyPoint.getValue() );
-                total += historyPoint.getValue();
-                average = total / ++count;
-                average = MathUtils.round( average, 1 );
-            }
-
-            historyPoint.setAverage( average );
-
-            history.getHistoryPoints().add( historyPoint );
-        }
-
-        history.setMaxHistoryValue( max );
-
-        double maxValue = getMaxValue( history );
-
-        if ( maxValue != Double.NEGATIVE_INFINITY )
-        {
-            history.setMaxValue( maxValue );
-
-            double minValue = getMinValue( history );
-            history.setMinValue( minValue );
-        }
-
-        return history;
-    }
-
-    // -------------------------------------------------------------------------
-    // Supportive methods
-    // -------------------------------------------------------------------------
-
-    private void addMinMaxLimits( OrganisationUnit organisationUnit, DataElement dataElement,
-        DataElementCategoryOptionCombo optionCombo, DataElementHistory history )
-    {
-        MinMaxDataElement minMaxDataElement = minMaxDataElementService.getMinMaxDataElement( organisationUnit,
-            dataElement, optionCombo );
-
-        if ( minMaxDataElement != null )
-        {
-            history.setMaxLimit( minMaxDataElement.getMax() );
-            history.setMinLimit( minMaxDataElement.getMin() );
-        }
-    }
-
-    /**
-     * Finds the lowest value entered in the periode given by
-     * history.historyLenght.
-     * 
-     * @param history DataElementHistory
-     * @return the lowest Double value entred. If no values are entred,
-     *         Double.MAX_VALUE is returned
-     */
-    private Double getMinValue( DataElementHistory history )
-    {
-        double value = Double.MAX_VALUE;
-        List<DataElementHistoryPoint> historyPoints = history.getHistoryPoints();
-
-        for ( DataElementHistoryPoint DEPoint : historyPoints )
-        {
-            if ( DEPoint.getValue() != null )
-            {
-                if ( DEPoint.getValue() < value )
-                {
-                    value = DEPoint.getValue();
-                }
-            }
-        }
-
-        return value;
-    }
-
-    /**
-     * Finds the highest value entered in the periode given by
-     * history.historyLenght.
-     * 
-     * @param history DataElementHistory
-     * @return the highest entred value. If no value is entred
-     *         Double.NEGATIVE_INFINITY is returned
-     */
-    private Double getMaxValue( DataElementHistory history )
-    {
-        double value = Double.NEGATIVE_INFINITY;
-        List<DataElementHistoryPoint> historyPoints = history.getHistoryPoints();
-
-        for ( DataElementHistoryPoint DEPoint : historyPoints )
-        {
-            if ( DEPoint.getValue() != null )
-            {
-                if ( DEPoint.getValue() > value )
-                {
-                    value = DEPoint.getValue();
-                }
-            }
-        }
-
-        return value;
-    }
-
-    private Double getValue( DataElement dataElement, DataElementCategoryOptionCombo optionCombo,
-        OrganisationUnit organisationUnit, Period period )
-    {
-        DataValue dataValue = dataValueService.getDataValue( dataElement, period, organisationUnit, optionCombo );
-
-        if ( dataValue != null )
-        {
-            if ( dataValue.getValue() != null )
-            {
-                return parseValue( dataValue.getValue() );
-
-            }
-        }
-
-        return null;
-    }
-
-    private Double parseValue( String value )
-    {
-        try
-        {
-            return Double.parseDouble( value );
-        }
-        catch ( NumberFormatException e )
-        {
-            throw new RuntimeException( "Failed to parse double: " + value, e );
-        }
-    }
-}

=== removed file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/HistoryRetriever.java'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/HistoryRetriever.java	2013-08-23 16:05:01 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/java/org/hisp/dhis/de/history/HistoryRetriever.java	1970-01-01 00:00:00 +0000
@@ -1,47 +0,0 @@
-package org.hisp.dhis.de.history;
-
-/*
- * Copyright (c) 2004-2013, 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.dataelement.DataElement;
-import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.period.Period;
-
-/**
- * @author Torgeir Lorange Ostby
- * @version $Id: HistoryRetriever.java 4438 2008-01-26 16:35:24Z abyot $
- */
-public interface HistoryRetriever
-{
-    String ID = HistoryRetriever.class.getName();
-
-    DataElementHistory getHistory( DataElement dataElement, DataElementCategoryOptionCombo optionCombo, 
-        OrganisationUnit organisationUnit, Period lastPeriod, int historyLength );
-    
-}

=== 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	2013-12-21 17:59:39 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/resources/META-INF/dhis/beans.xml	2013-12-21 19:02:27 +0000
@@ -2,12 +2,6 @@
 <beans xmlns="http://www.springframework.org/schema/beans"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd";>
 
-  <bean id="org.hisp.dhis.de.history.HistoryRetriever" class="org.hisp.dhis.de.history.DefaultHistoryRetriever">
-    <property name="minMaxDataElementService" ref="org.hisp.dhis.minmax.MinMaxDataElementService" />
-    <property name="dataValueService" ref="org.hisp.dhis.datavalue.DataValueService" />
-    <property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
-  </bean>
-
   <!-- Actions -->
 
   <bean id="org.hisp.dhis.de.action.PageInitAction" class="org.hisp.dhis.de.action.PageInitAction" scope="prototype">
@@ -63,7 +57,7 @@
   </bean>
 
   <bean id="org.hisp.dhis.de.action.GetHistoryAction" class="org.hisp.dhis.de.action.GetHistoryAction" scope="prototype">
-    <property name="historyRetriever" ref="org.hisp.dhis.de.history.HistoryRetriever" />
+    <property name="historyRetriever" ref="org.hisp.dhis.dataelementhistory.HistoryRetriever" />
     <property name="dataElementService" ref="org.hisp.dhis.dataelement.DataElementService" />
     <property name="categoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" />
     <property name="dataValueService" ref="org.hisp.dhis.datavalue.DataValueService" />

=== modified file 'dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js'
--- dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js	2013-12-21 18:46:53 +0000
+++ dhis-2/dhis-web/dhis-web-dataentry/src/main/webapp/dhis-web-dataentry/javascript/form.js	2013-12-21 19:02:27 +0000
@@ -70,8 +70,6 @@
 
 // "organisationUnits" object inherited from ouwt.js
 
-// TODO remove all usage of name="entryfield" etc and migrate to class="entryfield" etc
-
 var COLOR_GREEN = '#b9ffb9';
 var COLOR_YELLOW = '#fffe8c';
 var COLOR_RED = '#ff8a8a';