1 package org.kuali.ole.describe.krad; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.apache.log4j.Logger; 7 import org.kuali.ole.describe.bo.SearchResultDisplayFields; 8 import org.kuali.ole.describe.bo.SearchResultDisplayRow; 9 import org.kuali.ole.describe.form.OLESearchForm; 10 import org.kuali.ole.docstore.common.document.config.DocumentSearchConfig; 11 import org.kuali.ole.docstore.common.search.SearchParams; 12 import org.kuali.rice.core.api.util.ConcreteKeyValue; 13 import org.kuali.rice.core.api.util.KeyValue; 14 import org.kuali.rice.krad.uif.component.BindingInfo; 15 import org.kuali.rice.krad.uif.component.Component; 16 import org.kuali.rice.krad.uif.container.CollectionGroup; 17 import org.kuali.rice.krad.uif.container.Container; 18 import org.kuali.rice.krad.uif.element.Action; 19 import org.kuali.rice.krad.uif.field.Field; 20 import org.kuali.rice.krad.uif.field.FieldGroup; 21 import org.kuali.rice.krad.uif.layout.CollectionLayoutManager; 22 import org.kuali.rice.krad.uif.layout.LayoutManagerBase; 23 import org.kuali.rice.krad.uif.util.ComponentUtils; 24 import org.kuali.rice.krad.uif.view.View; 25 import org.kuali.rice.krad.uif.widget.Pager; 26 27 public class OleSearchLayout extends LayoutManagerBase implements 28 CollectionLayoutManager { 29 30 private static final long serialVersionUID = 5289870490845303915L; 31 private static final Logger LOG = Logger.getLogger(OleSearchLayout.class); 32 33 private List<OleSearchLine> searchLines = new ArrayList<OleSearchLine>(); 34 private int totalLines; 35 private int displayedLines; 36 37 private List<KeyValue> pageSizeOptions; 38 private int pageSize; 39 40 private SearchResultDisplayFields searchResultDisplayFields; 41 42 private Pager pager; 43 44 private void setUpPager(OLESearchForm form, CollectionGroup collection) { 45 pageSize = form.getPageSize(); 46 if (pager == null) 47 return; 48 49 if (pageSize == 0) { 50 pager.setNumberOfPages(0); 51 return; 52 } 53 54 totalLines = form.getTotalRecordCount(); 55 56 int lastPage = totalLines / pageSize 57 + (totalLines % pageSize == 0 ? 0 : 1); 58 59 SearchParams params = form.getSearchParams(); 60 int currentPage = ((params == null ? 0 : params.getStartIndex()) / pageSize) + 1; 61 String pageNumber = form.getPageNumber(); 62 63 if (LOG.isDebugEnabled()) 64 LOG.debug("Setting up pager with page size " + pageSize 65 + ", total lines " + totalLines + ", last page " + lastPage 66 + ", page number " + pageNumber + ", current page " 67 + currentPage); 68 69 pager.setCurrentPage(currentPage); 70 pager.setNumberOfPages(lastPage); 71 } 72 73 @Override 74 public void performApplyModel(View view, Object model, Container container) { 75 OLESearchForm form = (OLESearchForm) model; 76 CollectionGroup collection = (CollectionGroup) container; 77 78 searchResultDisplayFields = form.getSearchResultDisplayFields(); 79 80 List<Integer> pageSizes = DocumentSearchConfig.getPageSizes(); 81 List<KeyValue> pso = new ArrayList<>(pageSizes.size() + 1); 82 for (Integer ps : pageSizes) { 83 String pss = Integer.toString(ps); 84 pso.add(new ConcreteKeyValue(pss, pss)); 85 } 86 pageSizeOptions = pso; 87 88 setUpPager(form, collection); 89 90 super.performApplyModel(view, model, container); 91 } 92 93 @Override 94 public void buildLine(View view, Object model, 95 CollectionGroup collectionGroup, List<Field> lineFields, 96 List<FieldGroup> subCollectionFields, String bindingPath, 97 List<Action> actions, String idSuffix, Object currentLine, 98 int lineIndex) { 99 100 SearchResultDisplayRow row = (SearchResultDisplayRow) currentLine; 101 102 BindingInfo bi = new BindingInfo(); 103 bi.setBindByNamePrefix(bindingPath); 104 105 OleSearchLine line = new OleSearchLine(); 106 line.setLineNumber(lineIndex); 107 line.setLineId(collectionGroup.getBaseId() + idSuffix); 108 line.setBindPath(bi.getBindByNamePrefix()); 109 line.setRow(row); 110 111 synchronized (searchLines) { 112 searchLines.add(line); 113 } 114 115 if (LOG.isDebugEnabled()) 116 LOG.debug("SEARCH LINE: " + line); 117 118 displayedLines++; 119 } 120 121 @Override 122 public FieldGroup getSubCollectionFieldGroupPrototype() { 123 return null; 124 } 125 126 public SearchResultDisplayFields getSearchResultDisplayFields() { 127 return searchResultDisplayFields; 128 } 129 130 public int getPageSize() { 131 return pageSize; 132 } 133 134 public List<KeyValue> getPageSizeOptions() { 135 return pageSizeOptions; 136 } 137 138 public int getTotalLines() { 139 return totalLines; 140 } 141 142 public int getDisplayedLines() { 143 return displayedLines; 144 } 145 146 public List<OleSearchLine> getSearchLines() { 147 return searchLines; 148 } 149 150 public Pager getPager() { 151 return pager; 152 } 153 154 public void setPager(Pager pager) { 155 this.pager = pager; 156 } 157 158 @Override 159 public List<Component> getComponentsForLifecycle() { 160 List<Component> rv = super.getComponentsForLifecycle(); 161 if (pager != null) 162 rv.add(pager); 163 return rv; 164 } 165 166 @Override 167 protected <T> void copyProperties(T copy) { 168 super.copyProperties(copy); 169 170 OleSearchLayout c = (OleSearchLayout) copy; 171 if (pager != null) 172 c.setPager(ComponentUtils.copy(pager)); 173 } 174 175 } 176