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 }