=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/Dashboard.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/Dashboard.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/Dashboard.java 2015-01-22 11:23:36 +0000 @@ -28,22 +28,22 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.util.ArrayList; +import java.util.List; + +import org.hisp.dhis.common.BaseIdentifiableObject; +import org.hisp.dhis.common.DxfNamespaces; +import org.hisp.dhis.common.IdentifiableObject; +import org.hisp.dhis.common.annotation.Scanned; +import org.hisp.dhis.common.view.DetailedView; +import org.hisp.dhis.common.view.ExportView; + import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonView; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; -import org.hisp.dhis.common.BaseIdentifiableObject; -import org.hisp.dhis.common.DxfNamespaces; -import org.hisp.dhis.common.IdentifiableObject; -import org.hisp.dhis.common.annotation.Scanned; -import org.hisp.dhis.common.view.DetailedView; -import org.hisp.dhis.common.view.ExportView; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; /** * @author Lars Helge Overland @@ -110,27 +110,6 @@ } /** - * Removes the item with the given identifier from this dashboard. - * - * @param uid the item uid. - */ - public boolean removeItem( String uid ) - { - Iterator iter = items.iterator(); - - while ( iter.hasNext() ) - { - if ( uid.equals( iter.next().getUid() ) ) - { - iter.remove(); - return true; - } - } - - return false; - } - - /** * Returns the item with the given uid, or null if no item with the given * uid is present for this dashboard. * @@ -163,6 +142,14 @@ return null; } + + /** + * Indicates whether this dashboard has at least one item. + */ + public boolean hasItems() + { + return items != null && !items.isEmpty(); + } @JsonProperty @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 ) === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardService.java 2015-01-21 09:30:45 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardService.java 2015-01-22 11:23:36 +0000 @@ -43,6 +43,10 @@ { final String ID = DashboardService.class.getName(); + // ------------------------------------------------------------------------- + // Dashboard + // ------------------------------------------------------------------------- + DashboardSearchResult search( String query ); DashboardSearchResult search( String query, Set maxTypes ); @@ -63,10 +67,16 @@ Dashboard getDashboard( String uid ); + // ------------------------------------------------------------------------- + // DashboardItem + // ------------------------------------------------------------------------- + void updateDashboardItem( DashboardItem item ); DashboardItem getDashboardItem( String uid ); + void deleteDashboardItem( DashboardItem item ); + int countMapDashboardItems( Map map ); int countChartDashboardItems( Chart chart ); === modified file 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/dashboard/DashboardTest.java' --- dhis-2/dhis-api/src/test/java/org/hisp/dhis/dashboard/DashboardTest.java 2015-01-17 07:41:26 +0000 +++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/dashboard/DashboardTest.java 2015-01-22 11:23:36 +0000 @@ -131,30 +131,6 @@ } @Test - public void testRemoveItem() - { - Dashboard dashboard = new Dashboard(); - - DashboardItem diA = new DashboardItem(); - DashboardItem diB = new DashboardItem(); - DashboardItem diC = new DashboardItem(); - - diA.setUid( "A" ); - diB.setUid( "B" ); - diC.setUid( "C" ); - - dashboard.getItems().add( diA ); - dashboard.getItems().add( diB ); - dashboard.getItems().add( diC ); - - assertEquals( 3, dashboard.getItems().size() ); - assertTrue( dashboard.removeItem( "B" ) ); - assertEquals( 2, dashboard.getItems().size() ); - assertFalse( dashboard.removeItem( "X" ) ); - assertEquals( 2, dashboard.getItems().size() ); - } - - @Test public void testGetItem() { Dashboard dashboard = new Dashboard(); === modified file 'dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dashboard/impl/DefaultDashboardService.java' --- dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dashboard/impl/DefaultDashboardService.java 2015-01-21 09:30:45 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dashboard/impl/DefaultDashboardService.java 2015-01-22 11:23:36 +0000 @@ -304,6 +304,12 @@ { return dashboardItemStore.getByUid( uid ); } + + @Override + public void deleteDashboardItem( DashboardItem item ) + { + dashboardItemStore.delete( item ); + } @Override public int countMapDashboardItems( Map map ) === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DashboardController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DashboardController.java 2015-01-21 09:30:45 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/DashboardController.java 2015-01-22 11:23:36 +0000 @@ -201,8 +201,17 @@ return; } - if ( dashboard.removeItem( itemUid ) ) - { + DashboardItem item = dashboardService.getDashboardItem( itemUid ); + + if ( item == null ) + { + ContextUtils.notFoundResponse( response, "Dashboard item does not exist: " + itemUid ); + return; + } + + if ( dashboard.hasItems() && dashboard.getItems().remove( item ) ) + { + dashboardService.deleteDashboardItem( item ); dashboardService.updateDashboard( dashboard ); ContextUtils.okResponse( response, "Dashboard item removed" ); @@ -231,9 +240,9 @@ if ( item.removeItemContent( contentUid ) ) { - if ( item.getContentCount() == 0 ) + if ( item.getContentCount() == 0 && dashboard.getItems().remove( item ) ) { - dashboard.removeItem( item.getUid() ); // Remove if empty + dashboardService.deleteDashboardItem( item ); // Delete if empty } dashboardService.updateDashboard( dashboard );