1 package org.kuali.ole.select.document.krad; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.apache.log4j.Logger; 7 import org.kuali.ole.coa.businessobject.options.SimpleChartValuesFinder; 8 import org.kuali.ole.module.purap.businessobject.InvoiceAccount; 9 import org.kuali.ole.select.businessobject.OlePurchaseOrderAccount; 10 import org.kuali.ole.select.document.OleInvoiceDocument; 11 import org.kuali.ole.select.form.OLEInvoiceForm; 12 import org.kuali.rice.core.api.util.KeyValue; 13 import org.kuali.rice.krad.uif.UifConstants; 14 import org.kuali.rice.krad.uif.UifPropertyPaths; 15 import org.kuali.rice.krad.uif.component.BindingInfo; 16 import org.kuali.rice.krad.uif.component.Component; 17 import org.kuali.rice.krad.uif.container.CollectionGroup; 18 import org.kuali.rice.krad.uif.container.Container; 19 import org.kuali.rice.krad.uif.container.Group; 20 import org.kuali.rice.krad.uif.element.Action; 21 import org.kuali.rice.krad.uif.field.Field; 22 import org.kuali.rice.krad.uif.field.FieldGroup; 23 import org.kuali.rice.krad.uif.layout.CollectionLayoutManager; 24 import org.kuali.rice.krad.uif.layout.LayoutManagerBase; 25 import org.kuali.rice.krad.uif.util.ComponentUtils; 26 import org.kuali.rice.krad.uif.view.View; 27 import org.kuali.rice.krad.uif.widget.QuickFinder; 28 29 public class OleInvoiceAccountingLinesLayout extends LayoutManagerBase 30 implements CollectionLayoutManager { 31 32 private static final long serialVersionUID = 5289870490845303915L; 33 private static final Logger LOG = Logger 34 .getLogger(OleInvoiceAccountingLinesLayout.class); 35 36 private List<OleInvoiceAccountingLine> accountingLines = new ArrayList<OleInvoiceAccountingLine>(); 37 private boolean foreignCurrency; 38 private List<KeyValue> chartKeyValues; 39 40 private QuickFinder accountNumberQuickfinder; 41 private QuickFinder subAccountNumberQuickfinder; 42 private QuickFinder financialObjectCodeQuickfinder; 43 private QuickFinder financialSubObjectCodeQuickfinder; 44 private QuickFinder projectCodeQuickfinder; 45 46 private List<Component> components = new ArrayList<Component>(); 47 48 @Override 49 public void performApplyModel(View view, Object model, Container container) { 50 if (LOG.isDebugEnabled()) 51 LOG.debug(container 52 + " ro is " 53 + container.isReadOnly() 54 + " " 55 + ((CollectionGroup) container).isRenderAddLine() 56 + " " 57 + ((CollectionGroup) container) 58 .isRenderAddBlankLineButton()); 59 60 chartKeyValues = new SimpleChartValuesFinder().getKeyValues(); 61 foreignCurrency = ((OleInvoiceDocument) ((OLEInvoiceForm) model) 62 .getDocument()).isForeignCurrencyFlag(); 63 64 super.performApplyModel(view, model, container); 65 } 66 67 private <T extends Component> T createComponent(T prototype, View view, 68 Object model, CollectionGroup collectionGroup, 69 BindingInfo bindingInfo, String idSuffix, Object currentLine, 70 int lineIndex) { 71 72 T rv = ComponentUtils.copy(prototype, idSuffix); 73 74 if (rv instanceof Group) 75 ((Group) rv).setFieldBindByNamePrefix(bindingInfo 76 .getBindByNamePrefix()); 77 78 if (rv instanceof QuickFinder) { 79 QuickFinder qf = (QuickFinder) rv; 80 qf.updateFieldConversions(bindingInfo); 81 qf.updateLookupParameters(bindingInfo); 82 qf.updateReferencesToRefresh(bindingInfo); 83 } 84 85 ComponentUtils.updateContextForLine(rv, currentLine, lineIndex, 86 idSuffix); 87 view.getViewHelperService().spawnSubLifecyle(view, model, rv, 88 collectionGroup, null, UifConstants.ViewPhases.INITIALIZE); 89 90 synchronized (components) { 91 components.add(rv); 92 } 93 94 return rv; 95 } 96 97 @Override 98 public void buildLine(View view, Object model, 99 CollectionGroup collectionGroup, List<Field> lineFields, 100 List<FieldGroup> subCollectionFields, String bindingPath, 101 List<Action> actions, String idSuffix, Object currentLine, 102 int lineIndex) { 103 104 BindingInfo bi = new BindingInfo(); 105 bi.setBindByNamePrefix(bindingPath 106 .startsWith(UifPropertyPaths.NEW_COLLECTION_LINES) ? bindingPath 107 : view.getDefaultBindingObjectPath() + '.' + bindingPath); 108 109 OleInvoiceAccountingLine line = new OleInvoiceAccountingLine(); 110 line.setLineId(collectionGroup.getId() + idSuffix); 111 line.setBindPath(bi.getBindByNamePrefix()); 112 113 if (currentLine instanceof OlePurchaseOrderAccount) 114 line.setPoAccount((OlePurchaseOrderAccount) currentLine); 115 else if (currentLine instanceof InvoiceAccount) 116 line.setInvoiceAccount((InvoiceAccount) currentLine); 117 else 118 throw new UnsupportedOperationException("Unsupported data object " 119 + currentLine.getClass()); 120 121 line.setAccountNumberQuickfinder(createComponent( 122 accountNumberQuickfinder, view, model, collectionGroup, bi, 123 idSuffix, currentLine, lineIndex)); 124 line.setSubAccountNumberQuickfinder(createComponent( 125 subAccountNumberQuickfinder, view, model, collectionGroup, bi, 126 idSuffix, currentLine, lineIndex)); 127 line.setFinancialObjectCodeQuickfinder(createComponent( 128 financialObjectCodeQuickfinder, view, model, collectionGroup, 129 bi, idSuffix, currentLine, lineIndex)); 130 line.setFinancialSubObjectCodeQuickfinder(createComponent( 131 financialSubObjectCodeQuickfinder, view, model, 132 collectionGroup, bi, idSuffix, currentLine, lineIndex)); 133 line.setProjectCodeQuickfinder(createComponent(projectCodeQuickfinder, 134 view, model, collectionGroup, bi, idSuffix, currentLine, 135 lineIndex)); 136 137 line.setActions(actions); 138 139 synchronized (components) { 140 components.addAll(actions); 141 } 142 143 synchronized (accountingLines) { 144 accountingLines.add(line); 145 } 146 } 147 148 public List<KeyValue> getChartKeyValues() { 149 return chartKeyValues; 150 } 151 152 public boolean isForeignCurrency() { 153 return foreignCurrency; 154 } 155 156 public void setForeignCurrency(boolean foreignCurrency) { 157 this.foreignCurrency = foreignCurrency; 158 } 159 160 public QuickFinder getAccountNumberQuickfinder() { 161 return accountNumberQuickfinder; 162 } 163 164 public void setAccountNumberQuickfinder(QuickFinder accountNumberQuickfinder) { 165 this.accountNumberQuickfinder = accountNumberQuickfinder; 166 } 167 168 public QuickFinder getSubAccountNumberQuickfinder() { 169 return subAccountNumberQuickfinder; 170 } 171 172 public void setSubAccountNumberQuickfinder( 173 QuickFinder subAccountNumberQuickfinder) { 174 this.subAccountNumberQuickfinder = subAccountNumberQuickfinder; 175 } 176 177 public QuickFinder getFinancialObjectCodeQuickfinder() { 178 return financialObjectCodeQuickfinder; 179 } 180 181 public void setFinancialObjectCodeQuickfinder( 182 QuickFinder financialObjectCodeQuickfinder) { 183 this.financialObjectCodeQuickfinder = financialObjectCodeQuickfinder; 184 } 185 186 public QuickFinder getFinancialSubObjectCodeQuickfinder() { 187 return financialSubObjectCodeQuickfinder; 188 } 189 190 public void setFinancialSubObjectCodeQuickfinder( 191 QuickFinder financialSubObjectCodeQuickfinder) { 192 this.financialSubObjectCodeQuickfinder = financialSubObjectCodeQuickfinder; 193 } 194 195 public QuickFinder getProjectCodeQuickfinder() { 196 return projectCodeQuickfinder; 197 } 198 199 public void setProjectCodeQuickfinder(QuickFinder projectCodeQuickfinder) { 200 this.projectCodeQuickfinder = projectCodeQuickfinder; 201 } 202 203 public List<OleInvoiceAccountingLine> getAccountingLines() { 204 return accountingLines; 205 } 206 207 public void setAccountingLines( 208 List<OleInvoiceAccountingLine> accountingLines) { 209 this.accountingLines = accountingLines; 210 } 211 212 @Override 213 public FieldGroup getSubCollectionFieldGroupPrototype() { 214 return null; 215 } 216 217 @Override 218 public List<Component> getComponentPrototypes() { 219 List<Component> rv = super.getComponentPrototypes(); 220 rv.add(accountNumberQuickfinder); 221 rv.add(subAccountNumberQuickfinder); 222 rv.add(financialObjectCodeQuickfinder); 223 rv.add(financialSubObjectCodeQuickfinder); 224 rv.add(projectCodeQuickfinder); 225 return rv; 226 } 227 228 @Override 229 public List<Component> getComponentsForLifecycle() { 230 List<Component> rv = super.getComponentsForLifecycle(); 231 if (components != null) 232 rv.addAll(components); 233 return rv; 234 } 235 236 @Override 237 protected <T> void copyProperties(T copy) { 238 super.copyProperties(copy); 239 240 OleInvoiceAccountingLinesLayout c = (OleInvoiceAccountingLinesLayout) copy; 241 if (accountNumberQuickfinder != null) 242 c.setAccountNumberQuickfinder(ComponentUtils 243 .copy(accountNumberQuickfinder)); 244 if (subAccountNumberQuickfinder != null) 245 c.setSubAccountNumberQuickfinder(ComponentUtils 246 .copy(subAccountNumberQuickfinder)); 247 if (financialObjectCodeQuickfinder != null) 248 c.setFinancialObjectCodeQuickfinder(ComponentUtils 249 .copy(financialObjectCodeQuickfinder)); 250 if (financialSubObjectCodeQuickfinder != null) 251 c.setFinancialSubObjectCodeQuickfinder(ComponentUtils 252 .copy(financialSubObjectCodeQuickfinder)); 253 if (projectCodeQuickfinder != null) 254 c.setProjectCodeQuickfinder(ComponentUtils 255 .copy(projectCodeQuickfinder)); 256 257 } 258 259 } 260