------------------------------------------------------------ revno: 11494 committer: Lars Helge Ă˜verland <larshe...@gmail.com> branch nick: dhis2 timestamp: Tue 2013-07-23 19:21:14 +0200 message: Impl method fror adding item content for dashboard in web api modified: dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObjectManager.java dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/Dashboard.java dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardItem.java dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardService.java dhis-2/dhis-api/src/test/java/org/hisp/dhis/dashboard/DashboardTest.java dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultIdentifiableObjectManager.java 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/resources/META-INF/dhis/beans.xml dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DashboardController.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
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObjectManager.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObjectManager.java 2013-05-12 21:50:10 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObjectManager.java 2013-07-23 17:21:14 +0000 @@ -61,9 +61,9 @@ <T extends IdentifiableObject> Collection<T> getLikeName( Class<T> clazz, String name ); - <T extends IdentifiableObject> Collection<T> getBetween( Class<T> clazz, int first, int max ); + <T extends IdentifiableObject> List<T> getBetween( Class<T> clazz, int first, int max ); - <T extends IdentifiableObject> Collection<T> getBetweenByName( Class<T> clazz, String name, int first, int max ); + <T extends IdentifiableObject> List<T> getBetweenByName( Class<T> clazz, String name, int first, int max ); <T extends IdentifiableObject> Collection<T> getByLastUpdated( Class<T> clazz, Date lastUpdated ); === 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 2013-07-23 09:55:18 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/Dashboard.java 2013-07-23 17:21:14 +0000 @@ -99,6 +99,26 @@ return true; } + /** + * Returns an item from this dashboard of the given type which number of + * content is less than max. Returns null if no item matches the criteria. + * + * @param type the type of content to return. + * @return an item. + */ + public DashboardItem getAvailableItemByType( String type ) + { + for ( DashboardItem item : items ) + { + if ( type.equals( item.getType() ) && item.getContentCount() < DashboardItem.MAX_CONTENT ) + { + return item; + } + } + + return null; + } + // ------------------------------------------------------------------------- // Getters and setters // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardItem.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardItem.java 2013-07-23 10:10:48 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardItem.java 2013-07-23 17:21:14 +0000 @@ -53,6 +53,15 @@ public class DashboardItem extends BaseIdentifiableObject { + public static final int MAX_CONTENT = 9; + + public static final String TYPE_CHART = "chart"; + public static final String TYPE_MAP = "map"; + public static final String TYPE_USERS = "users"; + public static final String TYPE_REPORT_TABLES = "reportTables"; + public static final String TYPE_REPORTS = "reports"; + public static final String TYPE_RESOURCES = "resources"; + private Chart chart; private Map map; @@ -87,32 +96,42 @@ { if ( chart != null ) { - return "chart"; + return TYPE_CHART; } else if ( map != null ) { - return "map"; + return TYPE_MAP; } else if ( !users.isEmpty() ) { - return "users"; + return TYPE_USERS; } else if ( !reportTables.isEmpty() ) { - return "reportTables"; + return TYPE_REPORT_TABLES; } else if ( !reports.isEmpty() ) { - return "reports"; + return TYPE_REPORTS; } else if ( !resources.isEmpty() ) { - return "resources"; + return TYPE_RESOURCES; } return null; } + public int getContentCount() + { + int count = 0; + count += users.size(); + count += reportTables.size(); + count += reports.size(); + count += resources.size(); + return count; + } + // ------------------------------------------------------------------------- // Getters and setters // ------------------------------------------------------------------------- === 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 2013-07-23 09:55:18 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/dashboard/DashboardService.java 2013-07-23 17:21:14 +0000 @@ -41,6 +41,8 @@ DashboardSearchResult search( String query ); + void addItemContent( String dashboardUid, String type, String contentUid ); + void mergeDashboard( Dashboard dashboard ); void mergeDashboardItem( DashboardItem item ); === 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 2013-07-23 09:55:18 +0000 +++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/dashboard/DashboardTest.java 2013-07-23 17:21:14 +0000 @@ -30,7 +30,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import org.hisp.dhis.chart.Chart; +import org.hisp.dhis.document.Document; +import org.hisp.dhis.report.Report; import org.junit.Test; /** @@ -95,4 +99,33 @@ assertFalse( dashboard.moveItem( "A", 1 ) ); // Already at position assertFalse( dashboard.moveItem( "A", 2 ) ); // Pointless move } + + @Test + public void testGetAvailableItemByType() + { + 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" ); + + diA.setChart( new Chart( "A" ) ); + diB.getReports().add( new Report( "A", null, null, null ) ); + diB.getReports().add( new Report( "B", null, null, null ) ); + diC.getResources().add( new Document( "A", null, false, null ) ); + diC.getResources().add( new Document( "B", null, false, null ) ); + diC.getResources().add( new Document( "C", null, false, null ) ); + + dashboard.getItems().add( diA ); + dashboard.getItems().add( diB ); + dashboard.getItems().add( diC ); + + assertEquals( diB, dashboard.getAvailableItemByType( DashboardItem.TYPE_REPORTS ) ); + assertEquals( diC, dashboard.getAvailableItemByType( DashboardItem.TYPE_RESOURCES ) ); + assertNull( dashboard.getAvailableItemByType( DashboardItem.TYPE_REPORT_TABLES ) ); + } } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultIdentifiableObjectManager.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultIdentifiableObjectManager.java 2013-05-12 21:50:10 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultIdentifiableObjectManager.java 2013-07-23 17:21:14 +0000 @@ -240,7 +240,7 @@ @Override @SuppressWarnings("unchecked") - public <T extends IdentifiableObject> Collection<T> getBetween( Class<T> clazz, int first, int max ) + public <T extends IdentifiableObject> List<T> getBetween( Class<T> clazz, int first, int max ) { GenericIdentifiableObjectStore<IdentifiableObject> store = getIdentifiableObjectStore( clazz ); @@ -249,12 +249,12 @@ return new ArrayList<T>(); } - return (Collection<T>) store.getAllOrderedName( first, max ); + return (List<T>) store.getAllOrderedName( first, max ); } @Override @SuppressWarnings("unchecked") - public <T extends IdentifiableObject> Collection<T> getBetweenByName( Class<T> clazz, String name, int first, int max ) + public <T extends IdentifiableObject> List<T> getBetweenByName( Class<T> clazz, String name, int first, int max ) { GenericIdentifiableObjectStore<IdentifiableObject> store = getIdentifiableObjectStore( clazz ); @@ -263,7 +263,7 @@ return new ArrayList<T>(); } - return (Collection<T>) store.getAllLikeNameOrderedName( name, first, max ); + return (List<T>) store.getAllLikeNameOrderedName( name, first, max ); } @Override === 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 2013-07-23 09:55:18 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/java/org/hisp/dhis/dashboard/impl/DefaultDashboardService.java 2013-07-23 17:21:14 +0000 @@ -28,21 +28,28 @@ */ import static org.hisp.dhis.common.IdentifiableObjectUtils.getUids; +import static org.hisp.dhis.dashboard.DashboardItem.TYPE_CHART; +import static org.hisp.dhis.dashboard.DashboardItem.TYPE_MAP; +import static org.hisp.dhis.dashboard.DashboardItem.TYPE_REPORTS; +import static org.hisp.dhis.dashboard.DashboardItem.TYPE_REPORT_TABLES; +import static org.hisp.dhis.dashboard.DashboardItem.TYPE_RESOURCES; +import static org.hisp.dhis.dashboard.DashboardItem.TYPE_USERS; import java.util.List; -import org.hisp.dhis.chart.ChartService; +import org.hisp.dhis.chart.Chart; +import org.hisp.dhis.common.IdentifiableObjectManager; import org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectStore; import org.hisp.dhis.dashboard.Dashboard; import org.hisp.dhis.dashboard.DashboardItem; import org.hisp.dhis.dashboard.DashboardSearchResult; import org.hisp.dhis.dashboard.DashboardService; -import org.hisp.dhis.document.DocumentService; -import org.hisp.dhis.mapping.MappingService; -import org.hisp.dhis.report.ReportService; -import org.hisp.dhis.reporttable.ReportTableService; +import org.hisp.dhis.document.Document; +import org.hisp.dhis.mapping.Map; +import org.hisp.dhis.report.Report; +import org.hisp.dhis.reporttable.ReportTable; import org.hisp.dhis.user.User; -import org.hisp.dhis.user.UserService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; /** @@ -67,48 +74,9 @@ this.dashboardStore = dashboardStore; } - private UserService userService; - - public void setUserService( UserService userService ) - { - this.userService = userService; - } - - private ChartService chartService; - - public void setChartService( ChartService chartService ) - { - this.chartService = chartService; - } - - private MappingService mappingService; - - public void setMappingService( MappingService mappingService ) - { - this.mappingService = mappingService; - } - - private ReportService reportService; - - public void setReportService( ReportService reportService ) - { - this.reportService = reportService; - } - - private ReportTableService reportTableService; - - public void setReportTableService( ReportTableService reportTableService ) - { - this.reportTableService = reportTableService; - } - - private DocumentService documentService; - - public void setDocumentService( DocumentService documentService ) - { - this.documentService = documentService; - } - + @Autowired + private IdentifiableObjectManager objectManager; + // ------------------------------------------------------------------------- // DashboardService implementation // ------------------------------------------------------------------------- @@ -118,15 +86,64 @@ { DashboardSearchResult result = new DashboardSearchResult(); - result.setUsers( userService.getAllUsersBetweenByName( query, 0, MAX_PER_OBJECT ) ); - result.setCharts( chartService.getChartsBetweenByName( query, 0, MAX_PER_OBJECT ) ); - result.setMaps( mappingService.getMapsBetweenLikeName( query, 0, MAX_PER_OBJECT ) ); - result.setReportTables( reportTableService.getReportTablesBetweenByName( query, 0, MAX_PER_OBJECT ) ); - result.setReports( reportService.getReportsBetweenByName( query, 0, MAX_PER_OBJECT ) ); - result.setResources( documentService.getDocumentsBetweenByName( query, 0, MAX_PER_OBJECT ) ); + result.setUsers( objectManager.getBetweenByName( User.class, query, 0, MAX_PER_OBJECT ) ); + result.setCharts( objectManager.getBetweenByName( Chart.class, query, 0, MAX_PER_OBJECT ) ); + result.setMaps( objectManager.getBetweenByName( Map.class, query, 0, MAX_PER_OBJECT ) ); + result.setReportTables( objectManager.getBetweenByName( ReportTable.class, query, 0, MAX_PER_OBJECT ) ); + result.setReports( objectManager.getBetweenByName( Report.class, query, 0, MAX_PER_OBJECT ) ); + result.setResources( objectManager.getBetweenByName( Document.class, query, 0, MAX_PER_OBJECT ) ); return result; } + + @Override + public void addItemContent( String dashboardUid, String type, String contentUid ) + { + Dashboard dashboard = getDashboard( dashboardUid ); + + if ( TYPE_CHART.equals( type ) ) + { + DashboardItem item = new DashboardItem(); + item.setChart( objectManager.get( Chart.class, contentUid ) ); + dashboard.getItems().add( 0, item ); + } + else if ( TYPE_MAP.equals( type ) ) + { + DashboardItem item = new DashboardItem(); + item.setMap( objectManager.get( Map.class, contentUid ) ); + dashboard.getItems().add( 0, item ); + } + else // Link item + { + DashboardItem availableItem = dashboard.getAvailableItemByType( type ); + + DashboardItem item = availableItem == null ? new DashboardItem() : availableItem; + + if ( TYPE_USERS.equals( type ) ) + { + item.getUsers().add( objectManager.get( User.class, contentUid ) ); + } + else if ( TYPE_REPORT_TABLES.equals( type ) ) + { + item.getReportTables().add( objectManager.get( ReportTable.class, contentUid ) ); + } + else if ( TYPE_REPORTS.equals( type ) ) + { + item.getReports().add( objectManager.get( Report.class, contentUid ) ); + } + else if ( TYPE_RESOURCES.equals( type ) ) + { + item.getResources().add( objectManager.get( Document.class, contentUid ) ); + } + + if ( availableItem == null ) + { + dashboard.getItems().add( 0, item ); + } + } + + updateDashboard( dashboard ); + } public void mergeDashboard( Dashboard dashboard ) { @@ -143,32 +160,32 @@ { if ( item.getChart() != null ) { - item.setChart( chartService.getChart( item.getChart().getUid() ) ); + item.setChart( objectManager.get( Chart.class, item.getChart().getUid() ) ); } - if ( item.getChart() != null ) + if ( item.getMap() != null ) { - item.setMap( mappingService.getMap( item.getMap().getUid() ) ); + item.setMap( objectManager.get( Map.class, item.getMap().getUid() ) ); } if ( item.getUsers() != null ) { - item.setUsers( userService.getUsersByUid( getUids( item.getUsers() ) ) ); + item.setUsers( objectManager.getByUid( User.class, getUids( item.getUsers() ) ) ); } if ( item.getReportTables() != null ) { - item.setReportTables( reportTableService.getReportTablesByUid( getUids( item.getReportTables() ) ) ); + item.setReportTables( objectManager.getByUid( ReportTable.class, getUids( item.getReportTables() ) ) ); } if ( item.getReports() != null ) { - item.setReports( reportService.getReportsByUid( getUids( item.getReports() ) ) ); + item.setReports( objectManager.getByUid( Report.class, getUids( item.getReports() ) ) ); } if ( item.getResources() != null ) { - item.setResources( documentService.getDocumentsByUid( getUids( item.getResources() ) ) ); + item.setResources( objectManager.getByUid( Document.class, getUids( item.getResources() ) ) ); } } === 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-07-22 21:08:05 +0000 +++ dhis-2/dhis-services/dhis-service-reporting/src/main/resources/META-INF/dhis/beans.xml 2013-07-23 17:21:14 +0000 @@ -140,12 +140,6 @@ <bean id="org.hisp.dhis.dashboard.DashboardService" class="org.hisp.dhis.dashboard.impl.DefaultDashboardService"> <property name="dashboardStore" ref="org.hisp.dhis.dashboard.DashboardStore" /> - <property name="userService" ref="org.hisp.dhis.user.UserService" /> - <property name="chartService" ref="org.hisp.dhis.chart.ChartService" /> - <property name="mappingService" ref="org.hisp.dhis.mapping.MappingService" /> - <property name="reportService" ref="org.hisp.dhis.report.ReportService" /> - <property name="reportTableService" ref="org.hisp.dhis.reporttable.ReportTableService" /> - <property name="documentService" ref="org.hisp.dhis.document.DocumentService" /> </bean> <!-- Dashboard Content providers --> === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DashboardController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DashboardController.java 2013-07-23 10:27:03 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/DashboardController.java 2013-07-23 17:21:14 +0000 @@ -57,14 +57,12 @@ extends AbstractCrudController<Dashboard> { public static final String RESOURCE_PATH = "/dashboards"; - + @Autowired private DashboardService dashboardService; @RequestMapping( value = "/q/{query}", method = RequestMethod.GET ) - public String search( @PathVariable String query, - Model model, - HttpServletResponse response ) throws Exception + public String search( @PathVariable String query, Model model, HttpServletResponse response ) throws Exception { DashboardSearchResult result = dashboardService.search( query ); @@ -85,7 +83,7 @@ ContextUtils.createdResponse( response, "Dashboard created", RESOURCE_PATH + "/" + dashboard.getUid() ); } - + @Override @RequestMapping( value = "/{uid}", method = RequestMethod.PUT, consumes = "application/json" ) @ResponseStatus( value = HttpStatus.NO_CONTENT ) @@ -134,6 +132,15 @@ ContextUtils.createdResponse( response, "Dashboard item created", item.getUid() ); } + @RequestMapping( value = "/{uid}/items/content", method = RequestMethod.POST, consumes = "application/json" ) + public void postJsonItemContent( HttpServletResponse response, HttpServletRequest request, + @PathVariable String uid, @RequestParam String type, @RequestParam( "uid" ) String contentUid ) throws Exception + { + dashboardService.addItemContent( uid, type, contentUid ); + + ContextUtils.okResponse( response, "Dashboard item added" ); + } + @RequestMapping( value = "/{dashboardUid}/items/{itemUid}/move", method = RequestMethod.PUT, consumes = "application/json" ) public void moveItem( HttpServletResponse response, HttpServletRequest request, @PathVariable String dashboardUid, @PathVariable String itemUid, @RequestParam int position ) throws Exception
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : dhis2-devs@lists.launchpad.net Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp