=== 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 2012-06-06 13:31:45 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/IdentifiableObjectManager.java 2012-10-26 14:18:18 +0000 @@ -55,6 +55,8 @@ Collection getAllSorted( Class clazz ); + Collection getLikeName( Class clazz, String name ); + Collection getBetween( Class clazz, int first, int max ); Collection getBetweenByName( Class clazz, String name, int first, int max ); === 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 2012-10-26 12:49:31 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/common/DefaultIdentifiableObjectManager.java 2012-10-26 14:18:18 +0000 @@ -197,6 +197,20 @@ @Override @SuppressWarnings( "unchecked" ) + public Collection getLikeName( Class clazz, String name ) + { + GenericIdentifiableObjectStore store = getIdentifiableObjectStore( clazz ); + + if ( store == null ) + { + return new ArrayList(); + } + + return (Collection) store.getLikeName( name ); + } + + @Override + @SuppressWarnings( "unchecked" ) public Collection getBetween( Class clazz, int first, int max ) { GenericIdentifiableObjectStore store = getIdentifiableObjectStore( clazz ); === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AbstractCrudController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AbstractCrudController.java 2012-10-24 10:22:27 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/AbstractCrudController.java 2012-10-26 14:18:18 +0000 @@ -88,6 +88,26 @@ return StringUtils.uncapitalize( getEntitySimpleName() ) + "List"; } + @RequestMapping( value = "/query/{query}", method = RequestMethod.GET ) + public String query( @PathVariable String query, @RequestParam Map parameters, Model model, HttpServletRequest request ) throws Exception + { + WebOptions options = new WebOptions( parameters ); + WebMetaData metaData = new WebMetaData(); + List entityList = queryForEntityList( metaData, options, query ); + + ReflectionUtils.invokeSetterMethod( ExchangeClasses.getExportMap().get( getEntityClass() ), metaData, entityList ); + + if ( options.hasLinks() ) + { + WebUtils.generateLinks( metaData ); + } + + model.addAttribute( "model", metaData ); + model.addAttribute( "viewClass", options.getViewClass( "basic" ) ); + + return StringUtils.uncapitalize( getEntitySimpleName() ) + "List"; + } + @RequestMapping( value = "/{uid}", method = RequestMethod.GET ) public String getObject( @PathVariable( "uid" ) String uid, @RequestParam Map parameters, Model model, HttpServletRequest request, HttpServletResponse response ) throws Exception @@ -239,6 +259,27 @@ return entityList; } + protected List queryForEntityList( WebMetaData metaData, WebOptions options, String query ) + { + List entityList; + + if ( options.hasPaging() ) + { + int count = manager.getCount( getEntityClass() ); + + Pager pager = new Pager( options.getPage(), count ); + metaData.setPager( pager ); + + entityList = new ArrayList( manager.getBetweenByName( getEntityClass(), query, pager.getOffset(), pager.getPageSize() ) ); + } + else + { + entityList = new ArrayList( manager.getLikeName( getEntityClass(), query ) ); + } + + return entityList; + } + protected T getEntity( String uid ) { return manager.get( getEntityClass(), uid );