View Javadoc

1   package org.cateproject.controller.flow.action;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import org.apache.log4j.Logger;
7   import org.cateproject.controller.GenericController;
8   import org.springframework.webflow.execution.RequestContext;
9   
10  import eu.etaxonomy.cdm.api.service.IIdentifiableEntityService;
11  import eu.etaxonomy.cdm.api.service.pager.Pager;
12  import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
13  import eu.etaxonomy.cdm.persistence.query.OrderHint;
14  import eu.etaxonomy.cdm.persistence.query.OrderHint.SortOrder;
15  
16  public abstract class AbstractSelectAction<T extends IdentifiableEntity, SERVICE extends IIdentifiableEntityService<T>> {
17  
18  	protected static Logger logger = Logger.getLogger(AbstractSelectAction.class);
19  	
20  	protected SERVICE service;
21  	protected Class<? extends T> type;
22  	
23  	public abstract void setService(SERVICE service);
24  
25  	public AbstractSelectAction(Class<? extends T> type) {
26  		this.type = type;
27  	}
28  	
29  	public abstract Pager<T> search(String query, Class rootClass, Class clazz, Integer pageSize, Integer pageNumber, OrderHint orderHint, RequestContext requestContext);
30  
31  	protected Pager<T> doSearch(String query,Class<? extends T> rootClass, Class<? extends T> clazz, Integer pageSize, Integer pageNumber, OrderHint orderHint, RequestContext requestContext) {
32  		
33  		if(rootClass == null) {
34  			rootClass = type;
35  			requestContext.getFlowScope().put("_class", rootClass);
36  		}
37  		
38  		requestContext.getViewScope().put("classes", getClasses(rootClass));
39  		
40  		if(clazz != null) {
41  			requestContext.getViewScope().put("_class", clazz);
42  		} else {
43  			clazz = rootClass;
44  		}
45  		
46  		if(pageSize == null) {
47  			pageSize = 20;
48  		}
49  		
50  		List<OrderHint> orderHints = new ArrayList<OrderHint>();
51  		
52  		if(orderHint != null) {
53  			orderHints.add(orderHint);
54  		} else {
55  			orderHints.add(new OrderHint("titleCache",SortOrder.ASCENDING));
56  		}
57  		
58  		if(!orderHints.isEmpty()) {
59  			requestContext.getViewScope().put(GenericController.ORDER_HINTS_KEY, orderHints);
60  		}
61  		
62  		if(query == null || query.equals("")) {
63  			logger.info("search: class " + clazz + " query " + query + " pageSize " + pageSize + " pageNumber " + pageNumber);
64  			return service.page(clazz,pageSize, pageNumber, orderHints, null);
65  	    } else {
66  	    	requestContext.getViewScope().put("query",query);
67  	    	logger.info("search: class " + clazz + " query " + query + " pageSize " + pageSize + " pageNumber " + pageNumber);
68  		    return service.search(clazz,query, pageSize, pageNumber, orderHints, null);
69  	    }
70  	}
71  	
72  	public abstract List<Class<? extends T>> getClasses(Class<? extends T> clazz);
73  
74  }