← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 22305: add stores for Chart, Report, ReportTable, Document

 

------------------------------------------------------------
revno: 22305
committer: Morten Olav Hansen <morten@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2016-03-15 14:24:23 +0700
message:
  add stores for Chart, Report, ReportTable, Document
added:
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/ChartStore.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/document/DocumentStore.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/report/ReportStore.java
  dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTableStore.java
  dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceFavoritesTest.java
  dhis-2/dhis-services/dhis-service-dxf2/src/test/resources/dxf2/metadata_with_charts1.json
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/hibernate/
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/hibernate/HibernateChartStore.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/hibernate/
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/hibernate/HibernateDocumentStore.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/hibernate/
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/hibernate/HibernateReportStore.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/hibernate/
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/hibernate/HibernateReportTableStore.java
modified:
  dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/QueryService.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/impl/DefaultDocumentService.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java
  dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml
  dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/chart/ChartStoreTest.java
  dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/document/DocumentStoreTest.java
  dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/report/ReportStoreTest.java
  dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/reporttable/ReportTableStoreTest.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
=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/ChartStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/ChartStore.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/chart/ChartStore.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,40 @@
+package org.hisp.dhis.chart;
+
+/*
+ * Copyright (c) 2004-2016, 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.AnalyticalObjectStore;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public interface ChartStore
+    extends AnalyticalObjectStore<Chart>
+{
+    String ID = ChartStore.class.getName();
+}

=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/document/DocumentStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/document/DocumentStore.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/document/DocumentStore.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,39 @@
+package org.hisp.dhis.document;
+
+/*
+ * Copyright (c) 2004-2016, 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.GenericIdentifiableObjectStore;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public interface DocumentStore
+    extends GenericIdentifiableObjectStore<Document>
+{
+}

=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/report/ReportStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/report/ReportStore.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/report/ReportStore.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,39 @@
+package org.hisp.dhis.report;
+
+/*
+ * Copyright (c) 2004-2016, 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.GenericIdentifiableObjectStore;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public interface ReportStore
+    extends GenericIdentifiableObjectStore<Report>
+{
+}

=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTableStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTableStore.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/reporttable/ReportTableStore.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,40 @@
+package org.hisp.dhis.reporttable;
+
+/*
+ * Copyright (c) 2004-2016, 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.AnalyticalObjectStore;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public interface ReportTableStore
+    extends AnalyticalObjectStore<ReportTable>
+{
+    String ID = ReportTableStore.class.getName();
+}

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/QueryService.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/QueryService.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/query/QueryService.java	2016-03-15 07:24:23 +0000
@@ -54,7 +54,7 @@
      * @param transformer ResultTransformer to use for mutating the result
      * @return Matching objects
      */
-    List<? extends IdentifiableObject> query( Query query, ResultTransformer transformer );
+    List<? extends IdentifiableObject> query( Query query, ResultTransformer<?> transformer );
 
     /**
      * Returns how many objects matches the given query.

=== added file 'dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceFavoritesTest.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceFavoritesTest.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/test/java/org/hisp/dhis/dxf2/metadata2/objectbundle/ObjectBundleServiceFavoritesTest.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,106 @@
+package org.hisp.dhis.dxf2.metadata2.objectbundle;
+
+/*
+ * Copyright (c) 2004-2016, 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.DhisSpringTest;
+import org.hisp.dhis.chart.Chart;
+import org.hisp.dhis.common.IdentifiableObject;
+import org.hisp.dhis.common.IdentifiableObjectManager;
+import org.hisp.dhis.dataelement.DataElement;
+import org.hisp.dhis.dataset.DataSet;
+import org.hisp.dhis.importexport.ImportStrategy;
+import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.render.RenderFormat;
+import org.hisp.dhis.render.RenderService;
+import org.hisp.dhis.user.UserService;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class ObjectBundleServiceFavoritesTest
+    extends DhisSpringTest
+{
+    @Autowired
+    private ObjectBundleService objectBundleService;
+
+    @Autowired
+    private IdentifiableObjectManager manager;
+
+    @Autowired
+    private RenderService _renderService;
+
+    @Autowired
+    private UserService _userService;
+
+    @Override
+    protected void setUpTest() throws Exception
+    {
+        renderService = _renderService;
+        userService = _userService;
+    }
+
+    @Test
+    @Ignore
+    public void testCreateMetadataWithCharts1() throws IOException
+    {
+        Map<Class<? extends IdentifiableObject>, List<IdentifiableObject>> metadata = renderService.fromMetadata(
+            new ClassPathResource( "dxf2/metadata_with_charts1.json" ).getInputStream(), RenderFormat.JSON );
+
+        ObjectBundleParams params = new ObjectBundleParams();
+        params.setObjectBundleMode( ObjectBundleMode.COMMIT );
+        params.setImportMode( ImportStrategy.CREATE_AND_UPDATE );
+        params.setObjects( metadata );
+
+        ObjectBundle bundle = objectBundleService.create( params );
+        ObjectBundleValidation validate = objectBundleService.validate( bundle );
+        assertTrue( validate.getObjectErrorReports().isEmpty() );
+        objectBundleService.commit( bundle );
+
+        List<DataSet> dataSets = manager.getAll( DataSet.class );
+        List<OrganisationUnit> organisationUnits = manager.getAll( OrganisationUnit.class );
+        List<DataElement> dataElements = manager.getAll( DataElement.class );
+        List<Chart> charts = manager.getAll( Chart.class );
+
+        assertEquals( 2, dataSets.size() );
+        assertEquals( 1, organisationUnits.size() );
+        assertEquals( 4, dataElements.size() );
+        assertEquals( 2, charts.size() );
+    }
+}
\ No newline at end of file

=== added file 'dhis-2/dhis-services/dhis-service-dxf2/src/test/resources/dxf2/metadata_with_charts1.json'
--- dhis-2/dhis-services/dhis-service-dxf2/src/test/resources/dxf2/metadata_with_charts1.json	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/test/resources/dxf2/metadata_with_charts1.json	2016-03-15 07:24:23 +0000
@@ -0,0 +1,560 @@
+{
+  "organisationUnitLevels": [
+    {
+      "lastUpdated": "2016-03-14T10:31:05.867+0000",
+      "level": 1,
+      "name": "Level 1",
+      "id": "LEN4A8VwYz6",
+      "created": "2016-03-14T10:31:05.866+0000"
+    }
+  ],
+  "categoryOptionCombos": [
+    {
+      "categoryOptions": [
+        {
+          "id": "xYerKDKCefk"
+        }
+      ],
+      "name": "default",
+      "code": "default",
+      "created": "2016-03-14T10:26:13.837+0000",
+      "id": "HllvX50cXC0",
+      "ignoreApproval": false,
+      "categoryCombo": {
+        "id": "bjDvmb4bfuf"
+      },
+      "lastUpdated": "2016-03-14T10:26:13.837+0000"
+    }
+  ],
+  "categories": [
+    {
+      "dataDimensionType": "DISAGGREGATION",
+      "name": "default",
+      "categoryOptions": [
+        {
+          "id": "xYerKDKCefk"
+        }
+      ],
+      "lastUpdated": "2016-03-14T10:26:14.040+0000",
+      "publicAccess": "--------",
+      "dataDimension": true,
+      "code": "default",
+      "created": "2016-03-14T10:26:13.834+0000",
+      "userGroupAccesses": [ ],
+      "id": "GLevLNI9wkl"
+    }
+  ],
+  "dataElements": [
+    {
+      "zeroIsSignificant": false,
+      "domainType": "AGGREGATE",
+      "created": "2016-03-14T10:28:24.014+0000",
+      "code": "DataElementCodeA",
+      "aggregationType": "SUM",
+      "lastUpdated": "2016-03-14T10:28:24.019+0000",
+      "name": "DataElementA",
+      "userGroupAccesses": [ ],
+      "attributeValues": [ ],
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "id": "L5kP66sGI1q",
+      "aggregationLevels": [ ],
+      "categoryCombo": {
+        "id": "bjDvmb4bfuf"
+      },
+      "publicAccess": "rw------",
+      "shortName": "DataElementShortA",
+      "valueType": "NUMBER"
+    },
+    {
+      "name": "DataElementB",
+      "aggregationLevels": [ ],
+      "attributeValues": [ ],
+      "userGroupAccesses": [ ],
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "id": "c6CtsJCClHn",
+      "valueType": "NUMBER",
+      "shortName": "DataElementShortB",
+      "publicAccess": "rw------",
+      "categoryCombo": {
+        "id": "bjDvmb4bfuf"
+      },
+      "zeroIsSignificant": false,
+      "domainType": "AGGREGATE",
+      "created": "2016-03-14T10:28:44.117+0000",
+      "code": "DataElementCodeB",
+      "lastUpdated": "2016-03-14T10:28:44.118+0000",
+      "aggregationType": "SUM"
+    },
+    {
+      "code": "DataElementCodeC",
+      "created": "2016-03-14T10:29:04.513+0000",
+      "aggregationType": "SUM",
+      "lastUpdated": "2016-03-14T10:29:04.516+0000",
+      "zeroIsSignificant": false,
+      "domainType": "AGGREGATE",
+      "aggregationLevels": [ ],
+      "attributeValues": [ ],
+      "userGroupAccesses": [ ],
+      "id": "qjHP8fHrPtp",
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "shortName": "DataElementShortC",
+      "valueType": "NUMBER",
+      "categoryCombo": {
+        "id": "bjDvmb4bfuf"
+      },
+      "publicAccess": "rw------",
+      "name": "DataElementC"
+    },
+    {
+      "name": "DataElementD",
+      "categoryCombo": {
+        "id": "bjDvmb4bfuf"
+      },
+      "publicAccess": "rw------",
+      "shortName": "DataElementShortD",
+      "valueType": "NUMBER",
+      "userGroupAccesses": [ ],
+      "attributeValues": [ ],
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "id": "QvcHWEhvyJz",
+      "aggregationLevels": [ ],
+      "domainType": "AGGREGATE",
+      "zeroIsSignificant": false,
+      "aggregationType": "SUM",
+      "lastUpdated": "2016-03-14T10:29:20.649+0000",
+      "created": "2016-03-14T10:29:20.647+0000",
+      "code": "DataElementCodeD"
+    }
+  ],
+  "charts": [
+    {
+      "id": "LR06Bqu0Rur",
+      "organisationUnitGroups": [ ],
+      "categoryOptionGroups": [ ],
+      "regression": false,
+      "dataElementGroups": [ ],
+      "organisationUnits": [
+        {
+          "id": "Ku3wiLhVBkw"
+        }
+      ],
+      "categoryDimensions": [ ],
+      "dataDimensionItems": [
+        {
+          "dataElement": {
+            "id": "L5kP66sGI1q"
+          },
+          "dataDimensionItemType": "AGGREGATE_DATA_ELEMENT"
+        },
+        {
+          "dataDimensionItemType": "AGGREGATE_DATA_ELEMENT",
+          "dataElement": {
+            "id": "c6CtsJCClHn"
+          }
+        }
+      ],
+      "itemOrganisationUnitGroups": [ ],
+      "created": "2016-03-14T10:54:15.592+0000",
+      "externalAccess": false,
+      "hideSubtitle": false,
+      "periods": [ ],
+      "userOrganisationUnitGrandChildren": false,
+      "relativePeriods": {
+        "last12Months": false,
+        "monthsThisYear": false,
+        "lastWeek": false,
+        "thisMonth": false,
+        "last5Years": false,
+        "thisFinancialYear": false,
+        "last6Months": true,
+        "last4Quarters": false,
+        "quartersLastYear": false,
+        "last6BiMonths": false,
+        "lastMonth": false,
+        "last3Months": false,
+        "lastQuarter": false,
+        "monthsLastYear": false,
+        "lastSixMonth": false,
+        "lastBimonth": false,
+        "lastFinancialYear": false,
+        "thisQuarter": false,
+        "last2SixMonths": false,
+        "thisWeek": false,
+        "thisYear": false,
+        "lastYear": false,
+        "last52Weeks": false,
+        "quartersThisYear": false,
+        "last4Weeks": false,
+        "last12Weeks": false,
+        "thisSixMonth": false,
+        "thisBimonth": false,
+        "last5FinancialYears": false
+      },
+      "filterDimensions": [
+        "ou"
+      ],
+      "aggregationType": "DEFAULT",
+      "hideEmptyRows": false,
+      "completedOnly": false,
+      "organisationUnitLevels": [ ],
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "userGroupAccesses": [ ],
+      "hideLegend": false,
+      "sortOrder": 0,
+      "hideTitle": false,
+      "publicAccess": "rw------",
+      "type": "COLUMN",
+      "series": "dx",
+      "name": "ChartA",
+      "showData": true,
+      "category": "pe",
+      "lastUpdated": "2016-03-14T10:54:15.593+0000",
+      "userOrganisationUnitChildren": false,
+      "userOrganisationUnit": false
+    },
+    {
+      "hideSubtitle": false,
+      "externalAccess": false,
+      "created": "2016-03-14T10:54:39.655+0000",
+      "periods": [ ],
+      "relativePeriods": {
+        "last4Quarters": false,
+        "last6BiMonths": false,
+        "lastMonth": false,
+        "quartersLastYear": false,
+        "last3Months": false,
+        "lastQuarter": false,
+        "monthsLastYear": false,
+        "lastSixMonth": false,
+        "last2SixMonths": false,
+        "lastBimonth": false,
+        "lastFinancialYear": false,
+        "thisQuarter": false,
+        "thisWeek": false,
+        "lastYear": false,
+        "thisYear": false,
+        "last12Months": false,
+        "monthsThisYear": false,
+        "lastWeek": true,
+        "thisMonth": false,
+        "last5Years": false,
+        "thisFinancialYear": false,
+        "last6Months": false,
+        "last4Weeks": false,
+        "last12Weeks": false,
+        "thisSixMonth": false,
+        "thisBimonth": false,
+        "last5FinancialYears": false,
+        "last52Weeks": false,
+        "quartersThisYear": false
+      },
+      "userOrganisationUnitGrandChildren": false,
+      "aggregationType": "DEFAULT",
+      "filterDimensions": [
+        "ou"
+      ],
+      "hideEmptyRows": false,
+      "completedOnly": false,
+      "organisationUnitGroups": [ ],
+      "id": "y6lH8sHglwg",
+      "categoryOptionGroups": [ ],
+      "regression": false,
+      "organisationUnits": [
+        {
+          "id": "Ku3wiLhVBkw"
+        }
+      ],
+      "dataElementGroups": [ ],
+      "itemOrganisationUnitGroups": [ ],
+      "dataDimensionItems": [
+        {
+          "dataElement": {
+            "id": "qjHP8fHrPtp"
+          },
+          "dataDimensionItemType": "AGGREGATE_DATA_ELEMENT"
+        },
+        {
+          "dataDimensionItemType": "AGGREGATE_DATA_ELEMENT",
+          "dataElement": {
+            "id": "QvcHWEhvyJz"
+          }
+        }
+      ],
+      "categoryDimensions": [ ],
+      "category": "pe",
+      "lastUpdated": "2016-03-14T10:54:39.655+0000",
+      "userOrganisationUnitChildren": false,
+      "userOrganisationUnit": false,
+      "userGroupAccesses": [ ],
+      "organisationUnitLevels": [ ],
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "hideTitle": false,
+      "sortOrder": 0,
+      "hideLegend": false,
+      "publicAccess": "rw------",
+      "type": "COLUMN",
+      "name": "ChartB",
+      "series": "dx",
+      "showData": true
+    }
+  ],
+  "organisationUnits": [
+    {
+      "name": "Country",
+      "uuid": "7077b124-4e48-4f3c-adf8-e654eb7876a4",
+      "description": "",
+      "created": "2016-03-14T10:26:44.419+0000",
+      "attributeValues": [ ],
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "id": "Ku3wiLhVBkw",
+      "path": "/Ku3wiLhVBkw",
+      "featureType": "NONE",
+      "lastUpdated": "2016-03-14T10:26:44.434+0000",
+      "openingDate": "2016-03-14",
+      "shortName": "Country"
+    }
+  ],
+  "userRoles": [
+    {
+      "lastUpdated": "2016-03-14T10:26:27.162+0000",
+      "publicAccess": "--------",
+      "programs": [ ],
+      "code": "Superuser",
+      "created": "2016-03-14T10:26:27.162+0000",
+      "userGroupAccesses": [ ],
+      "id": "yrB6vc5Ip3r",
+      "dataSets": [ ],
+      "description": "Superuser",
+      "name": "Superuser",
+      "authorities": [
+        "F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS",
+        "ALL",
+        "F_USERGROUP_MANAGING_RELATIONSHIPS_ADD",
+        "F_REPORTTABLE_PUBLIC_ADD",
+        "F_TRACKED_ENTITY_INSTANCE_DELETE",
+        "F_USER_GROUPS_READ_ONLY_ADD_MEMBERS",
+        "F_MAP_PUBLIC_ADD",
+        "F_USER_ADD_WITHIN_MANAGED_GROUP",
+        "F_TRACKED_ENTITY_INSTANCE_SEARCH",
+        "F_PROGRAM_ENROLLMENT",
+        "F_REPORTTABLE_EXTERNAL",
+        "F_SQLVIEW_EXTERNAL",
+        "F_GIS_ADMIN",
+        "F_REPLICATE_USER",
+        "F_INSERT_CUSTOM_JS_CSS",
+        "F_DASHBOARD_PUBLIC_ADD",
+        "F_METADATA_IMPORT",
+        "F_CHART_PUBLIC_ADD",
+        "F_VIEW_UNAPPROVED_DATA",
+        "F_CHART_EXTERNAL",
+        "F_USERGROUP_MANAGING_RELATIONSHIPS_VIEW",
+        "F_METADATA_EXPORT",
+        "F_PROGRAM_UNENROLLMENT",
+        "F_APPROVE_DATA",
+        "F_ACCEPT_DATA_LOWER_LEVELS",
+        "F_TRACKED_ENTITY_INSTANCE_ADD",
+        "F_USERGROUP_PUBLIC_ADD",
+        "F_OAUTH2_CLIENT_MANAGE",
+        "F_TRACKED_ENTITY_DATAVALUE_ADD",
+        "F_PROGRAM_DASHBOARD_CONFIG_ADMIN",
+        "F_MAP_EXTERNAL",
+        "F_APPROVE_DATA_LOWER_LEVELS",
+        "F_TRACKED_ENTITY_DATAVALUE_DELETE"
+      ]
+    }
+  ],
+  "categoryOptions": [
+    {
+      "shortName": "default",
+      "lastUpdated": "2016-03-14T10:26:13.843+0000",
+      "publicAccess": "--------",
+      "code": "default",
+      "userGroupAccesses": [ ],
+      "attributeValues": [ ],
+      "id": "xYerKDKCefk",
+      "created": "2016-03-14T10:26:13.821+0000",
+      "organisationUnits": [ ],
+      "name": "default"
+    }
+  ],
+  "trackedEntities": [
+    {
+      "lastUpdated": "2016-03-13T17:00:00.000+0000",
+      "description": "Person",
+      "name": "Person",
+      "code": "Person",
+      "attributeValues": [ ],
+      "created": "2016-03-13T17:00:00.000+0000",
+      "id": "MCPQUTHX1Ze"
+    }
+  ],
+  "users": [
+    {
+      "surname": "admin",
+      "code": "admin",
+      "created": "2016-03-14T10:26:27.141+0000",
+      "id": "M5zQapPyTZI",
+      "attributeValues": [ ],
+      "lastUpdated": "2016-03-14T10:27:40.595+0000",
+      "organisationUnits": [
+        {
+          "id": "Ku3wiLhVBkw"
+        }
+      ],
+      "firstName": "admin",
+      "userCredentials": {
+        "created": "2016-03-14T10:26:27.177+0000",
+        "code": "admin",
+        "invitation": false,
+        "externalAuth": false,
+        "lastUpdated": "2016-03-14T10:27:40.592+0000",
+        "passwordLastUpdated": "2016-03-14T10:26:27.178+0000",
+        "catDimensionConstraints": [ ],
+        "username": "admin",
+        "disabled": false,
+        "selfRegistered": false,
+        "user": {
+          "id": "M5zQapPyTZI"
+        },
+        "id": "Wzwcfu5Wwvx",
+        "lastLogin": "2016-03-14T10:26:27.177+0000",
+        "cogsDimensionConstraints": [ ],
+        "userRoles": [
+          {
+            "id": "yrB6vc5Ip3r"
+          }
+        ],
+        "userInfo": {
+          "id": "M5zQapPyTZI"
+        }
+      },
+      "dataViewOrganisationUnits": [
+        {
+          "id": "Ku3wiLhVBkw"
+        }
+      ],
+      "teiSearchOrganisationUnits": [ ]
+    }
+  ],
+  "categoryCombos": [
+    {
+      "name": "default",
+      "skipTotal": false,
+      "dataDimensionType": "DISAGGREGATION",
+      "userGroupAccesses": [ ],
+      "created": "2016-03-14T10:26:13.836+0000",
+      "id": "bjDvmb4bfuf",
+      "code": "default",
+      "lastUpdated": "2016-03-14T10:26:13.839+0000",
+      "categories": [
+        {
+          "id": "GLevLNI9wkl"
+        }
+      ],
+      "publicAccess": "--------"
+    }
+  ],
+  "dataSets": [
+    {
+      "code": "DataSetCodeA",
+      "created": "2016-03-14T10:29:58.832+0000",
+      "version": 0,
+      "periodType": "Monthly",
+      "fieldCombinationRequired": false,
+      "lastUpdated": "2016-03-14T10:30:54.761+0000",
+      "mobile": false,
+      "dataElementDecoration": false,
+      "noValueRequiresComment": false,
+      "indicators": [ ],
+      "attributeValues": [ ],
+      "id": "EhbRc6ME5fb",
+      "userGroupAccesses": [ ],
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "validCompleteOnly": false,
+      "openFuturePeriods": 0,
+      "expiryDays": 0,
+      "publicAccess": "rw------",
+      "skipOffline": false,
+      "dataElements": [
+        {
+          "id": "c6CtsJCClHn"
+        },
+        {
+          "id": "L5kP66sGI1q"
+        }
+      ],
+      "shortName": "DataSetShortA",
+      "timelyDays": 0,
+      "renderAsTabs": false,
+      "organisationUnits": [
+        {
+          "id": "Ku3wiLhVBkw"
+        }
+      ],
+      "name": "DataSetA",
+      "notifyCompletingUser": false,
+      "renderHorizontally": false,
+      "compulsoryDataElementOperands": [ ]
+    },
+    {
+      "notifyCompletingUser": false,
+      "compulsoryDataElementOperands": [ ],
+      "renderHorizontally": false,
+      "timelyDays": 0,
+      "renderAsTabs": false,
+      "organisationUnits": [
+        {
+          "id": "Ku3wiLhVBkw"
+        }
+      ],
+      "name": "DataSetB",
+      "skipOffline": false,
+      "expiryDays": 0,
+      "publicAccess": "rw------",
+      "shortName": "DataSetShortB",
+      "dataElements": [
+        {
+          "id": "QvcHWEhvyJz"
+        },
+        {
+          "id": "qjHP8fHrPtp"
+        }
+      ],
+      "attributeValues": [ ],
+      "id": "kS0QOOZbxEe",
+      "userGroupAccesses": [ ],
+      "user": {
+        "id": "M5zQapPyTZI"
+      },
+      "validCompleteOnly": false,
+      "openFuturePeriods": 0,
+      "mobile": false,
+      "dataElementDecoration": false,
+      "indicators": [ ],
+      "noValueRequiresComment": false,
+      "lastUpdated": "2016-03-14T10:31:00.598+0000",
+      "code": "DataSetCodeB",
+      "created": "2016-03-14T10:29:58.832+0000",
+      "version": 0,
+      "periodType": "Monthly",
+      "fieldCombinationRequired": false
+    }
+  ],
+  "date": "2016-03-14T10:55:35.567+0000"
+}

=== added directory 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/hibernate'
=== added file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/hibernate/HibernateChartStore.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/hibernate/HibernateChartStore.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/hibernate/HibernateChartStore.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,42 @@
+package org.hisp.dhis.chart.hibernate;
+
+/*
+ * Copyright (c) 2004-2016, 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.chart.Chart;
+import org.hisp.dhis.chart.ChartStore;
+import org.hisp.dhis.common.hibernate.HibernateAnalyticalObjectStore;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class HibernateChartStore
+    extends HibernateAnalyticalObjectStore<Chart>
+    implements ChartStore
+{
+}

=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java	2016-01-06 14:25:55 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/chart/impl/DefaultChartService.java	2016-03-15 07:24:23 +0000
@@ -28,30 +28,17 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import static org.hisp.dhis.common.DimensionalObject.DIMENSION_SEP;
-import static org.hisp.dhis.commons.collection.ListUtils.getArray;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Font;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.commons.math3.exception.MathRuntimeException;
+import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.interpolation.SplineInterpolator;
-import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.interpolation.UnivariateInterpolator;
+import org.apache.commons.math3.exception.MathRuntimeException;
 import org.apache.commons.math3.stat.regression.SimpleRegression;
 import org.hisp.dhis.analytics.AnalyticsService;
 import org.hisp.dhis.analytics.event.EventAnalyticsService;
 import org.hisp.dhis.chart.BaseChart;
 import org.hisp.dhis.chart.Chart;
 import org.hisp.dhis.chart.ChartService;
+import org.hisp.dhis.chart.ChartStore;
 import org.hisp.dhis.chart.ChartType;
 import org.hisp.dhis.common.AnalyticalObjectStore;
 import org.hisp.dhis.common.AnalyticsType;
@@ -112,8 +99,21 @@
 import org.jfree.data.general.ValueDataset;
 import org.jfree.ui.RectangleInsets;
 import org.jfree.util.TableOrder;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import static org.hisp.dhis.common.DimensionalObject.DIMENSION_SEP;
+import static org.hisp.dhis.commons.collection.ListUtils.getArray;
+
 /**
  * @author Lars Helge Overland
  */
@@ -141,12 +141,8 @@
     // Dependencies
     // -------------------------------------------------------------------------
 
-    private AnalyticalObjectStore<Chart> chartStore;
-
-    public void setChartStore( AnalyticalObjectStore<Chart> chartStore )
-    {
-        this.chartStore = chartStore;
-    }
+    @Autowired
+    private ChartStore chartStore;
 
     private PeriodService periodService;
 
@@ -189,14 +185,14 @@
     {
         this.analyticsService = analyticsService;
     }
-    
+
     private EventAnalyticsService eventAnalyticsService;
-    
+
     public void setEventAnalyticsService( EventAnalyticsService eventAnalyticsService )
     {
         this.eventAnalyticsService = eventAnalyticsService;
     }
-    
+
     // -------------------------------------------------------------------------
     // ChartService implementation
     // -------------------------------------------------------------------------
@@ -206,7 +202,7 @@
     {
         return chartStore;
     }
-    
+
     @Override
     public JFreeChart getJFreeChart( int id, I18nFormat format )
     {
@@ -591,7 +587,7 @@
         {
             Number number = dataSet.getValue( 0, 0 );
             ValueDataset valueDataSet = new DefaultValueDataset( number );
-            
+
             return getGaugeChart( chart, valueDataSet );
         }
         else
@@ -608,7 +604,7 @@
         JFreeChart jFreeChart = new JFreeChart( chart.getName(), TITLE_FONT, plot, !chart.isHideLegend() );
 
         setBasicConfig( jFreeChart, chart );
-        
+
         if ( chart.isTargetLine() )
         {
             plot.addRangeMarker( getMarker( chart.getTargetLineValue(), chart.getTargetLineLabel() ) );
@@ -683,22 +679,22 @@
 
         CategoryAxis xAxis = plot.getDomainAxis();
         xAxis.setCategoryLabelPositions( CategoryLabelPositions.UP_45 );
-        
+
         return stackedBarChart;
     }
-    
+
     private JFreeChart getMultiplePieChart( BaseChart chart, CategoryDataset[] dataSets )
     {
         JFreeChart multiplePieChart = ChartFactory.createMultiplePieChart( chart.getName(), dataSets[0], TableOrder.BY_ROW,
             !chart.isHideLegend(), false, false );
 
         setBasicConfig( multiplePieChart, chart );
-        
+
         if ( multiplePieChart.getLegend() != null )
         {
             multiplePieChart.getLegend().setItemFont( SUB_TITLE_FONT );
         }
-        
+
         MultiplePiePlot multiplePiePlot = (MultiplePiePlot) multiplePieChart.getPlot();
         JFreeChart pieChart = multiplePiePlot.getPieChart();
         pieChart.setBackgroundPaint( COLOR_TRANSPARENT );
@@ -722,24 +718,24 @@
 
         return multiplePieChart;
     }
-    
+
     private JFreeChart getGaugeChart( BaseChart chart, ValueDataset dataSet )
     {
         MeterPlot meterPlot = new MeterPlot( dataSet );
 
         meterPlot.setUnits( "" );
         meterPlot.setRange( new Range( 0.0d, 100d ) );
-                
+
         for ( int i = 0; i < 10; i++ )
         {
             double start = i * 10;
             double end = start + 10;
             String label = String.valueOf( start );
-            
+
             meterPlot.addInterval( new MeterInterval( label, new Range( start, end ), COLOR_LIGHT_GRAY, null, COLOR_LIGHT_GRAY ) );
         }
-        
-        meterPlot.setMeterAngle(180);
+
+        meterPlot.setMeterAngle( 180 );
         meterPlot.setDialBackgroundPaint( COLOR_LIGHT_GRAY );
         meterPlot.setDialShape( DialShape.CHORD );
         meterPlot.setNeedlePaint( COLORS[0] );
@@ -749,11 +745,11 @@
         meterPlot.setTickPaint( COLOR_LIGHTER_GRAY );
         meterPlot.setValueFont( TITLE_FONT );
         meterPlot.setValuePaint( Color.BLACK );
-        
+
         JFreeChart meterChart = new JFreeChart( chart.getName(), meterPlot );
         setBasicConfig( meterChart, chart );
         meterChart.removeLegend();
-        
+
         return meterChart;
     }
 
@@ -761,18 +757,18 @@
      * Sets basic configuration including title font, subtitle, background paint and
      * anti-alias on the given JFreeChart.
      */
-    private void setBasicConfig( JFreeChart jFreeChart, BaseChart chart)
+    private void setBasicConfig( JFreeChart jFreeChart, BaseChart chart )
     {
         jFreeChart.getTitle().setFont( TITLE_FONT );
-        
+
         jFreeChart.setBackgroundPaint( COLOR_TRANSPARENT );
         jFreeChart.setAntiAlias( true );
-        
+
         if ( !chart.isHideTitle() )
         {
             jFreeChart.addSubtitle( getSubTitle( chart ) );
         }
-        
+
         Plot plot = jFreeChart.getPlot();
         plot.setBackgroundPaint( COLOR_TRANSPARENT );
         plot.setOutlinePaint( COLOR_TRANSPARENT );
@@ -783,17 +779,17 @@
         TextTitle textTitle = new TextTitle();
 
         String title = chart.hasTitle() ? chart.getTitle() : chart.generateTitle();
-        
+
         textTitle.setFont( SUB_TITLE_FONT );
         textTitle.setText( title );
-        
+
         return textTitle;
     }
 
     private CategoryDataset[] getCategoryDataSet( BaseChart chart )
     {
         Map<String, Object> valueMap = new HashMap<>();
-        
+
         if ( chart.isAnalyticsType( AnalyticsType.AGGREGATE ) )
         {
             valueMap = analyticsService.getAggregatedDataValueMapping( chart, chart.getFormat() );
@@ -801,10 +797,10 @@
         else if ( chart.isAnalyticsType( AnalyticsType.EVENT ) )
         {
             Grid grid = eventAnalyticsService.getAggregatedEventData( chart, chart.getFormat() );
-                        
+
             chart.setDataItemGrid( grid );
-                        
-            valueMap = GridUtils.getMetaValueMapping( grid, ( grid.getWidth() - 1 ) );
+
+            valueMap = GridUtils.getMetaValueMapping( grid, (grid.getWidth() - 1) );
         }
 
         DefaultCategoryDataset regularDataSet = new DefaultCategoryDataset();
@@ -813,27 +809,27 @@
         SimpleRegression regression = new SimpleRegression();
 
         BaseAnalyticalObject.sortKeys( valueMap );
-        
+
         List<NameableObject> seriez = new ArrayList<>( chart.series() );
         List<NameableObject> categories = new ArrayList<>( chart.category() );
-        
+
         if ( chart.hasSortOrder() )
         {
             categories = getSortedCategories( categories, chart, valueMap );
         }
-        
+
         for ( NameableObject series : seriez )
         {
             double categoryIndex = 0;
-            
+
             for ( NameableObject category : categories )
             {
                 categoryIndex++;
 
                 String key = getKey( series, category, chart.getAnalyticsType() );
-                
+
                 Object object = valueMap.get( key );
-                
+
                 Number value = object != null && object instanceof Number ? (Number) object : null;
 
                 regularDataSet.addValue( value, series.getShortName(), category.getShortName() );
@@ -864,7 +860,7 @@
 
         return new CategoryDataset[]{ regularDataSet, regressionDataSet };
     }
-    
+
     /**
      * Creates a key based on the given input. Sorts the key on its components
      * to remove significance of column order.
@@ -875,10 +871,10 @@
 
         // Replace potential operand separator with dimension separator
 
-        key = AnalyticsType.AGGREGATE.equals( analyticsType ) ? key.replace( DataElementOperand.SEPARATOR, DIMENSION_SEP ) : key; 
-        
+        key = AnalyticsType.AGGREGATE.equals( analyticsType ) ? key.replace( DataElementOperand.SEPARATOR, DIMENSION_SEP ) : key;
+
         // TODO fix issue with keys including -.
-        
+
         return BaseAnalyticalObject.sortKey( key );
     }
 
@@ -889,28 +885,28 @@
     private List<NameableObject> getSortedCategories( List<NameableObject> categories, BaseChart chart, Map<String, Object> valueMap )
     {
         NameableObject series = chart.series().get( 0 );
-        
+
         int sortOrder = chart.getSortOrder();
-        
+
         List<NumericSortWrapper<NameableObject>> list = new ArrayList<>();
-        
+
         for ( NameableObject category : categories )
         {
             String key = getKey( series, category, chart.getAnalyticsType() );
-            
+
             Object value = valueMap.get( key );
-            
+
             if ( value != null && value instanceof Number )
             {
-                list.add( new NumericSortWrapper<NameableObject>( category, (Double ) value, sortOrder ) );
+                list.add( new NumericSortWrapper<NameableObject>( category, (Double) value, sortOrder ) );
             }
         }
-        
+
         Collections.sort( list );
-        
+
         return NumericSortWrapper.getObjectList( list );
     }
-    
+
     // -------------------------------------------------------------------------
     // CRUD operations
     // -------------------------------------------------------------------------

=== added directory 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/hibernate'
=== added file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/hibernate/HibernateDocumentStore.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/hibernate/HibernateDocumentStore.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/hibernate/HibernateDocumentStore.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,42 @@
+package org.hisp.dhis.document.hibernate;
+
+/*
+ * Copyright (c) 2004-2016, 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.hibernate.HibernateIdentifiableObjectStore;
+import org.hisp.dhis.document.Document;
+import org.hisp.dhis.document.DocumentStore;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class HibernateDocumentStore
+    extends HibernateIdentifiableObjectStore<Document>
+    implements DocumentStore
+{
+}

=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/impl/DefaultDocumentService.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/impl/DefaultDocumentService.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/document/impl/DefaultDocumentService.java	2016-03-15 07:24:23 +0000
@@ -28,16 +28,16 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import java.util.List;
-
-import org.hisp.dhis.common.GenericIdentifiableObjectStore;
 import org.hisp.dhis.document.Document;
 import org.hisp.dhis.document.DocumentService;
+import org.hisp.dhis.document.DocumentStore;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+
 /**
  * @author Lars Helge Overland
- * @version $Id$
  */
 @Transactional
 public class DefaultDocumentService
@@ -47,12 +47,8 @@
     // Dependencies
     // -------------------------------------------------------------------------
 
-    private GenericIdentifiableObjectStore<Document> documentStore;
-
-    public void setDocumentStore( GenericIdentifiableObjectStore<Document> documentStore )
-    {
-        this.documentStore = documentStore;
-    }
+    @Autowired
+    private DocumentStore documentStore;
 
     // -------------------------------------------------------------------------
     // DocumentService implementation
@@ -117,7 +113,7 @@
     {
         return documentStore.getAllLikeName( name, first, max );
     }
-    
+
     @Override
     public List<Document> getDocumentsByUid( List<String> uids )
     {

=== added directory 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/hibernate'
=== added file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/hibernate/HibernateReportStore.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/hibernate/HibernateReportStore.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/hibernate/HibernateReportStore.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,42 @@
+package org.hisp.dhis.report.hibernate;
+
+/*
+ * Copyright (c) 2004-2016, 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.hibernate.HibernateIdentifiableObjectStore;
+import org.hisp.dhis.report.Report;
+import org.hisp.dhis.report.ReportStore;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class HibernateReportStore
+    extends HibernateIdentifiableObjectStore<Report>
+    implements ReportStore
+{
+}

=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/report/impl/DefaultReportService.java	2016-03-15 07:24:23 +0000
@@ -28,30 +28,13 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import static org.hisp.dhis.common.IdentifiableObjectUtils.getIdentifiers;
-import static org.hisp.dhis.commons.util.TextUtils.getCommaDelimitedString;
-
-import java.io.OutputStream;
-import java.io.Writer;
-import java.nio.charset.StandardCharsets;
-import java.sql.Connection;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.sql.DataSource;
-
 import net.sf.jasperreports.engine.JasperCompileManager;
 import net.sf.jasperreports.engine.JasperFillManager;
 import net.sf.jasperreports.engine.JasperPrint;
 import net.sf.jasperreports.engine.JasperReport;
-
 import org.apache.commons.io.IOUtils;
 import org.apache.velocity.VelocityContext;
 import org.hisp.dhis.calendar.Calendar;
-import org.hisp.dhis.common.GenericIdentifiableObjectStore;
 import org.hisp.dhis.common.Grid;
 import org.hisp.dhis.common.IdentifiableObjectUtils;
 import org.hisp.dhis.commons.util.Encoder;
@@ -64,14 +47,30 @@
 import org.hisp.dhis.period.PeriodType;
 import org.hisp.dhis.report.Report;
 import org.hisp.dhis.report.ReportService;
+import org.hisp.dhis.report.ReportStore;
 import org.hisp.dhis.reporttable.ReportTable;
 import org.hisp.dhis.reporttable.ReportTableService;
 import org.hisp.dhis.system.util.DateUtils;
 import org.hisp.dhis.system.util.JRExportUtils;
 import org.hisp.dhis.system.velocity.VelocityManager;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.jdbc.datasource.DataSourceUtils;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.sql.DataSource;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.hisp.dhis.common.IdentifiableObjectUtils.getIdentifiers;
+import static org.hisp.dhis.commons.util.TextUtils.getCommaDelimitedString;
+
 /**
  * @author Lars Helge Overland
  */
@@ -88,12 +87,8 @@
     // Dependencies
     // -------------------------------------------------------------------------
 
-    private GenericIdentifiableObjectStore<Report> reportStore;
-
-    public void setReportStore( GenericIdentifiableObjectStore<Report> reportStore )
-    {
-        this.reportStore = reportStore;
-    }
+    @Autowired
+    private ReportStore reportStore;
 
     private ReportTableService reportTableService;
 

=== added directory 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/hibernate'
=== added file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/hibernate/HibernateReportTableStore.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/hibernate/HibernateReportTableStore.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/reporttable/hibernate/HibernateReportTableStore.java	2016-03-15 07:24:23 +0000
@@ -0,0 +1,42 @@
+package org.hisp.dhis.reporttable.hibernate;
+
+/*
+ * Copyright (c) 2004-2016, 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.hibernate.HibernateAnalyticalObjectStore;
+import org.hisp.dhis.reporttable.ReportTable;
+import org.hisp.dhis.reporttable.ReportTableStore;
+
+/**
+ * @author Morten Olav Hansen <mortenoh@xxxxxxxxx>
+ */
+public class HibernateReportTableStore
+    extends HibernateAnalyticalObjectStore<ReportTable>
+    implements ReportTableStore
+{
+}

=== 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	2016-03-08 15:34:53 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml	2016-03-15 07:24:23 +0000
@@ -6,7 +6,7 @@
 
   <!-- ReportTable -->
 
-  <bean id="org.hisp.dhis.reporttable.ReportTableStore" class="org.hisp.dhis.common.hibernate.HibernateAnalyticalObjectStore">
+  <bean id="org.hisp.dhis.reporttable.ReportTableStore" class="org.hisp.dhis.reporttable.hibernate.HibernateReportTableStore">
     <property name="clazz" value="org.hisp.dhis.reporttable.ReportTable" />
     <property name="sessionFactory" ref="sessionFactory" />
     <property name="cacheable" value="true" />
@@ -22,14 +22,13 @@
 
   <!-- Report -->
 
-  <bean id="org.hisp.dhis.report.ReportStore" class="org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectStore">
+  <bean id="org.hisp.dhis.report.ReportStore" class="org.hisp.dhis.report.hibernate.HibernateReportStore">
     <property name="clazz" value="org.hisp.dhis.report.Report" />
     <property name="sessionFactory" ref="sessionFactory" />
     <property name="cacheable" value="true" />
   </bean>
 
   <bean id="org.hisp.dhis.report.ReportService" class="org.hisp.dhis.report.impl.DefaultReportService">
-    <property name="reportStore" ref="org.hisp.dhis.report.ReportStore" />
     <property name="reportTableService" ref="org.hisp.dhis.reporttable.ReportTableService" />
     <property name="constantService" ref="org.hisp.dhis.constant.ConstantService" />
     <property name="organisationUnitService" ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
@@ -39,14 +38,13 @@
 
   <!-- Chart -->
 
-  <bean id="org.hisp.dhis.chart.ChartStore" class="org.hisp.dhis.common.hibernate.HibernateAnalyticalObjectStore">
+  <bean id="org.hisp.dhis.chart.ChartStore" class="org.hisp.dhis.chart.hibernate.HibernateChartStore">
     <property name="clazz" value="org.hisp.dhis.chart.Chart" />
     <property name="sessionFactory" ref="sessionFactory" />
     <property name="cacheable" value="true" />
   </bean>
 
   <bean id="org.hisp.dhis.chart.ChartService" class="org.hisp.dhis.chart.impl.DefaultChartService">
-    <property name="chartStore" ref="org.hisp.dhis.chart.ChartStore" />
     <property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
     <property name="dataValueService" ref="org.hisp.dhis.datavalue.DataValueService" />
     <property name="minMaxDataElementService" ref="org.hisp.dhis.minmax.MinMaxDataElementService" />
@@ -58,15 +56,13 @@
 
   <!-- Document -->
 
-  <bean id="org.hisp.dhis.document.DocumentStore" class="org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectStore">
+  <bean id="org.hisp.dhis.document.DocumentStore" class="org.hisp.dhis.document.hibernate.HibernateDocumentStore">
     <property name="clazz" value="org.hisp.dhis.document.Document" />
     <property name="sessionFactory" ref="sessionFactory" />
     <property name="cacheable" value="true" />
   </bean>
 
-  <bean id="org.hisp.dhis.document.DocumentService" class="org.hisp.dhis.document.impl.DefaultDocumentService">
-    <property name="documentStore" ref="org.hisp.dhis.document.DocumentStore" />
-  </bean>
+  <bean id="org.hisp.dhis.document.DocumentService" class="org.hisp.dhis.document.impl.DefaultDocumentService" />
 
   <!-- DataSetCompleteness -->
 
@@ -178,9 +174,9 @@
         <entry key="analyticsLast3YearsTask" value-ref="analyticsLast3YearsTask" />
         <entry key="monitoringLastDayTask" value-ref="monitoringLastDayTask" />
         <entry key="dataSynchTask" value-ref="dataSynchTask" />
-        <entry key="smsSchedulerTask" value-ref="smsSchedulerTask" />    
-        <entry key="sendScheduledMessageTask" value-ref="sendScheduledMessageTask" />  
-        <entry key="sendScheduledMessageTaskNow" value-ref="sendScheduledMessageTaskNow" />  
+        <entry key="smsSchedulerTask" value-ref="smsSchedulerTask" />
+        <entry key="sendScheduledMessageTask" value-ref="sendScheduledMessageTask" />
+        <entry key="sendScheduledMessageTaskNow" value-ref="sendScheduledMessageTaskNow" />
       </map>
     </property>
   </bean>
@@ -210,7 +206,7 @@
       </list>
     </property>
   </bean>
-    
+
   <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
     <property name="targetObject" ref="org.hisp.dhis.system.startup.StartupRoutineExecutor" />
     <property name="targetMethod" value="addStartupRoutines" />
@@ -222,7 +218,7 @@
       </list>
     </property>
   </bean>
-  
+
   <!-- DeletionHandler -->
 
   <bean id="org.hisp.dhis.report.ReportDeletionHandler" class="org.hisp.dhis.report.ReportDeletionHandler">

=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/chart/ChartStoreTest.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/chart/ChartStoreTest.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/chart/ChartStoreTest.java	2016-03-15 07:24:23 +0000
@@ -28,18 +28,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Resource;
-
 import org.hisp.dhis.DhisSpringTest;
-import org.hisp.dhis.common.GenericIdentifiableObjectStore;
 import org.hisp.dhis.indicator.Indicator;
 import org.hisp.dhis.indicator.IndicatorService;
 import org.hisp.dhis.indicator.IndicatorType;
@@ -52,6 +41,11 @@
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
 /**
  * @author Lars Helge Overland
  * @version $Id$
@@ -59,9 +53,9 @@
 public class ChartStoreTest
     extends DhisSpringTest
 {
-    @Resource(name="org.hisp.dhis.chart.ChartStore")
-    private GenericIdentifiableObjectStore<Chart> chartStore;
-    
+    @Autowired
+    private ChartStore chartStore;
+
     @Autowired
     private IndicatorService indicatorService;
 
@@ -71,7 +65,6 @@
     @Autowired
     private OrganisationUnitService organisationUnitService;
 
-    
     private Indicator indicatorA;
     private Indicator indicatorB;
     private Indicator indicatorC;

=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/document/DocumentStoreTest.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/document/DocumentStoreTest.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/document/DocumentStoreTest.java	2016-03-15 07:24:23 +0000
@@ -28,36 +28,30 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-
-import javax.annotation.Resource;
-
 import org.hisp.dhis.DhisSpringTest;
-import org.hisp.dhis.common.GenericIdentifiableObjectStore;
 import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+import static org.junit.Assert.*;
 
 /**
  * @author Lars Helge Overland
- * @version $Id$
  */
 public class DocumentStoreTest
     extends DhisSpringTest
 {
-    @Resource(name="org.hisp.dhis.document.DocumentStore")
-    private GenericIdentifiableObjectStore<Document> documentStore;
-    
+    @Autowired
+    private DocumentStore documentStore;
+
     private Document documentA;
     private Document documentB;
     private Document documentC;
-    
+
     @Override
     public void setUpTest()
-    {  
+    {
         documentA = new Document( "DocumentA", "UrlA", true, null );
         documentB = new Document( "DocumentB", "UrlB", true, null );
         documentC = new Document( "DocumentC", "UrlC", false, null );
@@ -67,7 +61,7 @@
     public void testSaveGet()
     {
         int id = documentStore.save( documentA );
-        
+
         assertEquals( documentA, documentStore.get( id ) );
     }
 
@@ -76,15 +70,15 @@
     {
         int idA = documentStore.save( documentA );
         int idB = documentStore.save( documentB );
-        
+
         assertNotNull( documentStore.get( idA ) );
         assertNotNull( documentStore.get( idB ) );
-        
+
         documentStore.delete( documentA );
-        
+
         assertNull( documentStore.get( idA ) );
         assertNotNull( documentStore.get( idB ) );
-        
+
         documentStore.delete( documentB );
 
         assertNull( documentStore.get( idA ) );
@@ -97,13 +91,13 @@
         documentStore.save( documentA );
         documentStore.save( documentB );
         documentStore.save( documentC );
-        
+
         List<Document> actual = documentStore.getAll();
-        
+
         assertEquals( 3, actual.size() );
         assertTrue( actual.contains( documentA ) );
         assertTrue( actual.contains( documentB ) );
-        assertTrue( actual.contains( documentC ) );        
+        assertTrue( actual.contains( documentC ) );
     }
 
     @Test
@@ -112,7 +106,7 @@
         documentStore.save( documentA );
         documentStore.save( documentB );
         documentStore.save( documentC );
-        
+
         assertEquals( documentA, documentStore.getByName( "DocumentA" ) );
     }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/report/ReportStoreTest.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/report/ReportStoreTest.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/report/ReportStoreTest.java	2016-03-15 07:24:23 +0000
@@ -28,34 +28,28 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.List;
-
-import javax.annotation.Resource;
-
 import org.hisp.dhis.DhisSpringTest;
-import org.hisp.dhis.common.GenericStore;
 import org.hisp.dhis.reporttable.ReportTable;
 import org.hisp.dhis.reporttable.ReportTableService;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+
+import static org.junit.Assert.*;
+
 /**
  * @author Lars Helge Overland
  */
 public class ReportStoreTest
     extends DhisSpringTest
 {
-    @Resource(name="org.hisp.dhis.report.ReportStore")
-    private GenericStore<Report> reportStore;
-    
+    @Autowired
+    private ReportStore reportStore;
+
     @Autowired
     private ReportTableService reportTableService;
-    
+
     private ReportTable reportTableA;
 
     // -------------------------------------------------------------------------
@@ -80,10 +74,10 @@
     {
         Report reportA = new Report( "ReportA", ReportType.JASPER_REPORT_TABLE, "DesignA", reportTableA );
         Report reportB = new Report( "ReportB", ReportType.JASPER_REPORT_TABLE, "DesignB", reportTableA );
-        
+
         int idA = reportStore.save( reportA );
         int idB = reportStore.save( reportB );
-        
+
         assertEquals( reportA, reportStore.get( idA ) );
         assertEquals( reportB, reportStore.get( idB ) );
     }
@@ -93,22 +87,22 @@
     {
         Report reportA = new Report( "ReportA", ReportType.JASPER_REPORT_TABLE, "DesignA", reportTableA );
         Report reportB = new Report( "ReportB", ReportType.JASPER_REPORT_TABLE, "DesignB", reportTableA );
-        
+
         int idA = reportStore.save( reportA );
         int idB = reportStore.save( reportB );
-        
+
         assertEquals( reportA, reportStore.get( idA ) );
         assertEquals( reportB, reportStore.get( idB ) );
-        
+
         reportA.setDesignContent( "UpdatedDesignA" );
         reportB.setDesignContent( "UpdatedDesignB" );
-        
+
         int updatedIdA = reportStore.save( reportA );
         int updatedIdB = reportStore.save( reportB );
-        
+
         assertEquals( idA, updatedIdA );
         assertEquals( idB, updatedIdB );
-        
+
         assertEquals( "UpdatedDesignA", reportStore.get( updatedIdA ).getDesignContent() );
         assertEquals( "UpdatedDesignB", reportStore.get( updatedIdB ).getDesignContent() );
     }
@@ -118,13 +112,13 @@
     {
         Report reportA = new Report( "ReportA", ReportType.JASPER_REPORT_TABLE, "DesignA", reportTableA );
         Report reportB = new Report( "ReportB", ReportType.JASPER_REPORT_TABLE, "DesignB", reportTableA );
-        
+
         int idA = reportStore.save( reportA );
         int idB = reportStore.save( reportB );
-        
+
         assertNotNull( reportStore.get( idA ) );
         assertNotNull( reportStore.get( idB ) );
-        
+
         reportStore.delete( reportA );
 
         assertNull( reportStore.get( idA ) );
@@ -141,15 +135,15 @@
     {
         Report reportA = new Report( "ReportA", ReportType.JASPER_REPORT_TABLE, "DesignA", reportTableA );
         Report reportB = new Report( "ReportB", ReportType.JASPER_REPORT_TABLE, "DesignB", reportTableA );
-        
+
         reportStore.save( reportA );
         reportStore.save( reportB );
-        
+
         List<Report> reports = reportStore.getAll();
-        
+
         assertNotNull( reports );
         assertEquals( 2, reports.size() );
         assertTrue( reports.contains( reportA ) );
-        assertTrue( reports.contains( reportB ) );        
+        assertTrue( reports.contains( reportB ) );
     }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/reporttable/ReportTableStoreTest.java'
--- dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/reporttable/ReportTableStoreTest.java	2016-01-04 02:27:49 +0000
+++ dhis-2/dhis-services/dhis-service-reporting/src/test/java/org/hisp/dhis/reporttable/ReportTableStoreTest.java	2016-03-15 07:24:23 +0000
@@ -28,18 +28,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.annotation.Resource;
-
 import org.hisp.dhis.DhisSpringTest;
-import org.hisp.dhis.common.GenericIdentifiableObjectStore;
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.dataelement.DataElementService;
 import org.hisp.dhis.dataset.DataSet;
@@ -57,6 +46,11 @@
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.*;
+
 /**
  * @author Lars Helge Overland
  * @version $Id$
@@ -64,8 +58,8 @@
 public class ReportTableStoreTest
     extends DhisSpringTest
 {
-    @Resource( name = "org.hisp.dhis.reporttable.ReportTableStore" )
-    private GenericIdentifiableObjectStore<ReportTable> reportTableStore;
+    @Autowired
+    private ReportTableStore reportTableStore;
 
     @Autowired
     private DataElementService dataElementService;
@@ -80,8 +74,8 @@
     private PeriodService periodService;
 
     @Autowired
-    private OrganisationUnitService  organisationUnitService ;
-    
+    private OrganisationUnitService organisationUnitService;
+
     private IndicatorType indicatorType;
 
     private List<DataElement> dataElements;
@@ -89,28 +83,28 @@
     private List<DataSet> dataSets;
     private List<Period> periods;
     private List<OrganisationUnit> units;
-    
+
     private PeriodType periodType;
 
     private DataElement dataElementA;
     private DataElement dataElementB;
-        
+
     private Indicator indicatorA;
     private Indicator indicatorB;
-    
+
     private DataSet dataSetA;
     private DataSet dataSetB;
-    
+
     private Period periodA;
     private Period periodB;
-    
+
     private OrganisationUnit unitA;
     private OrganisationUnit unitB;
 
     private RelativePeriods relativesA;
     private RelativePeriods relativesB;
     private RelativePeriods relativesC;
-        
+
     @Override
     public void setUpTest()
         throws Exception
@@ -120,69 +114,69 @@
         dataSets = new ArrayList<>();
         periods = new ArrayList<>();
         units = new ArrayList<>();
-       
+
         indicatorType = createIndicatorType( 'A' );
-        
+
         indicatorService.addIndicatorType( indicatorType );
-        
+
         periodType = PeriodType.getPeriodTypeByName( MonthlyPeriodType.NAME );
 
         dataElementA = createDataElement( 'A' );
         dataElementB = createDataElement( 'B' );
-        
+
         dataElementService.addDataElement( dataElementA );
         dataElementService.addDataElement( dataElementB );
-                
+
         dataElements.add( dataElementA );
         dataElements.add( dataElementB );
-        
+
         indicatorA = createIndicator( 'A', indicatorType );
         indicatorB = createIndicator( 'B', indicatorType );
-        
+
         indicatorService.addIndicator( indicatorA );
         indicatorService.addIndicator( indicatorB );
-        
+
         indicators.add( indicatorA );
         indicators.add( indicatorB );
-        
+
         dataSetA = createDataSet( 'A', periodType );
         dataSetB = createDataSet( 'B', periodType );
-        
+
         dataSetService.addDataSet( dataSetA );
         dataSetService.addDataSet( dataSetB );
-        
+
         dataSets.add( dataSetA );
         dataSets.add( dataSetB );
-        
+
         periodA = createPeriod( periodType, getDate( 2000, 1, 1 ), getDate( 2000, 1, 31 ) );
         periodB = createPeriod( periodType, getDate( 2000, 2, 1 ), getDate( 2000, 2, 28 ) );
-        
+
         periodService.addPeriod( periodA );
         periodService.addPeriod( periodB );
-        
+
         periods.add( periodA );
-        periods.add( periodB );        
+        periods.add( periodB );
 
         unitA = createOrganisationUnit( 'A' );
-        unitB = createOrganisationUnit( 'B' );        
-        
+        unitB = createOrganisationUnit( 'B' );
+
         organisationUnitService.addOrganisationUnit( unitA );
         organisationUnitService.addOrganisationUnit( unitB );
-        
+
         units.add( unitA );
         units.add( unitB );
 
-        relativesA = new RelativePeriods();        
+        relativesA = new RelativePeriods();
         relativesA.setLastMonth( true );
         relativesA.setThisYear( true );
 
-        relativesB = new RelativePeriods();        
+        relativesB = new RelativePeriods();
         relativesB.setLastMonth( true );
         relativesB.setThisYear( true );
 
-        relativesC = new RelativePeriods();        
+        relativesC = new RelativePeriods();
         relativesC.setLastMonth( true );
-        relativesC.setThisYear( true );    
+        relativesC.setThisYear( true );
     }
 
     @Test
@@ -190,28 +184,28 @@
     {
         ReportTable reportTableA = new ReportTable( "Immunization",
             new ArrayList<>(), indicators, new ArrayList<>(), periods, units,
-            true, true, false, relativesA, null, "january_2000" );        
+            true, true, false, relativesA, null, "january_2000" );
         ReportTable reportTableB = new ReportTable( "Prescriptions",
             dataElements, new ArrayList<>(), new ArrayList<>(), periods, units,
             false, false, true, relativesB, null, "january_2000" );
         ReportTable reportTableC = new ReportTable( "Assualt",
             new ArrayList<>(), new ArrayList<>(), dataSets, periods, units,
             false, false, true, relativesC, null, "january_2000" );
-        
+
         int idA = reportTableStore.save( reportTableA );
         int idB = reportTableStore.save( reportTableB );
         int idC = reportTableStore.save( reportTableC );
-        
+
         reportTableA = reportTableStore.get( idA );
         reportTableB = reportTableStore.get( idB );
         reportTableC = reportTableStore.get( idC );
-        
+
         assertEquals( "Immunization", reportTableA.getName() );
         assertEquals( indicators, reportTableA.getIndicators() );
         assertEquals( periods, reportTableA.getPeriods() );
         assertEquals( units, reportTableA.getOrganisationUnits() );
         assertEquals( relativesA, reportTableA.getRelatives() );
-        
+
         assertEquals( "Prescriptions", reportTableB.getName() );
         assertEquals( dataElements, reportTableB.getDataElements() );
         assertEquals( periods, reportTableB.getPeriods() );
@@ -229,22 +223,22 @@
     {
         ReportTable reportTableA = new ReportTable( "Immunization",
             new ArrayList<>(), indicators, new ArrayList<>(), periods, units,
-            true, true, false, relativesA, null, "january_2000" );        
+            true, true, false, relativesA, null, "january_2000" );
         ReportTable reportTableB = new ReportTable( "Prescriptions",
             dataElements, new ArrayList<>(), new ArrayList<>(), periods, units,
             false, false, true, relativesB, null, "january_2000" );
-        
+
         int idA = reportTableStore.save( reportTableA );
         int idB = reportTableStore.save( reportTableB );
-        
+
         assertNotNull( reportTableStore.get( idA ) );
         assertNotNull( reportTableStore.get( idB ) );
-        
+
         reportTableStore.delete( reportTableA );
 
         assertNull( reportTableStore.get( idA ) );
         assertNotNull( reportTableStore.get( idB ) );
-        
+
         reportTableStore.delete( reportTableB );
 
         assertNull( reportTableStore.get( idA ) );
@@ -256,16 +250,16 @@
     {
         ReportTable reportTableA = new ReportTable( "Immunization",
             new ArrayList<>(), indicators, new ArrayList<>(), periods, units,
-            true, true, false, relativesA, null, "january_2000" );        
+            true, true, false, relativesA, null, "january_2000" );
         ReportTable reportTableB = new ReportTable( "Prescriptions",
             dataElements, new ArrayList<>(), new ArrayList<>(), periods, units,
             false, false, true, relativesB, null, "january_2000" );
-        
+
         reportTableStore.save( reportTableA );
         reportTableStore.save( reportTableB );
-        
+
         List<ReportTable> reportTables = reportTableStore.getAll();
-        
+
         assertTrue( reportTables.contains( reportTableA ) );
         assertTrue( reportTables.contains( reportTableB ) );
     }
@@ -275,16 +269,16 @@
     {
         ReportTable reportTableA = new ReportTable( "Immunization",
             new ArrayList<>(), indicators, new ArrayList<>(), periods, units,
-            true, true, false, relativesA, null, "january_2000" );        
+            true, true, false, relativesA, null, "january_2000" );
         ReportTable reportTableB = new ReportTable( "Prescriptions",
             dataElements, new ArrayList<>(), new ArrayList<>(), periods, units,
             false, false, true, relativesB, null, "january_2000" );
-        
+
         reportTableStore.save( reportTableA );
         reportTableStore.save( reportTableB );
-        
+
         ReportTable receivedReportTableA = reportTableStore.getByName( "Immunization" );
-        
+
         assertNotNull( receivedReportTableA );
         assertEquals( reportTableA.getName(), receivedReportTableA.getName() );
     }