1 package org.kuali.ole.select.document.krad;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.apache.log4j.Logger;
8 import org.kuali.ole.module.purap.businessobject.options.DiscountTypeValuesFinder;
9 import org.kuali.ole.select.businessobject.OlePurchaseOrderItem;
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.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.container.Group;
19 import org.kuali.rice.krad.uif.element.Action;
20 import org.kuali.rice.krad.uif.field.Field;
21 import org.kuali.rice.krad.uif.field.FieldGroup;
22 import org.kuali.rice.krad.uif.layout.CollectionLayoutManager;
23 import org.kuali.rice.krad.uif.layout.LayoutManagerBase;
24 import org.kuali.rice.krad.uif.util.ComponentUtils;
25 import org.kuali.rice.krad.uif.view.View;
26
27 public class OleInvoicePOCurrentItemsLayout extends LayoutManagerBase implements
28 CollectionLayoutManager {
29
30 private static final long serialVersionUID = 5289870490845303915L;
31 private static final Logger LOG = Logger
32 .getLogger(OleInvoicePOCurrentItemsLayout.class);
33
34 @SuppressWarnings("unchecked")
35 private static final List<KeyValue> DISCOUNT_KEY_VALUES = new DiscountTypeValuesFinder()
36 .getKeyValues();
37
38 private List<OleInvoicePOCurrentItemsLine> currentItemLines = new ArrayList<OleInvoicePOCurrentItemsLine>();
39 private Group rowDetailsGroup;
40 private boolean foreignCurrency;
41
42 private List<Component> components = new ArrayList<Component>();
43
44 @Override
45 public void performApplyModel(View view, Object model, Container container) {
46 if (LOG.isDebugEnabled())
47 LOG.debug(container
48 + " ro is "
49 + container.isReadOnly()
50 + " "
51 + ((CollectionGroup) container).isRenderAddLine()
52 + " "
53 + ((CollectionGroup) container)
54 .isRenderAddBlankLineButton());
55
56 foreignCurrency = ((OleInvoiceDocument) ((OLEInvoiceForm) model)
57 .getDocument()).isForeignCurrencyFlag();
58
59 super.performApplyModel(view, model, container);
60 }
61
62 private Group getRowDetails(OLEInvoiceForm form, String idSuffix,
63 int lineIndex, CollectionGroup collection, View view,
64 String bindingPath, OlePurchaseOrderItem item) {
65 String lineId = collection.getBaseId() + idSuffix;
66 String selectedRowDetails = form.getSelectRowDetails();
67 String extensionKey = lineId + ".rowDetails";
68 Map<String, Object> extension = form.getExtensionData();
69 if (lineId.equals(selectedRowDetails))
70 synchronized (extension) {
71 if (form.isShowSelectedRowDetails())
72 extension.put(extensionKey, true);
73 else
74 extension.remove(extensionKey);
75 }
76
77 if (!Boolean.TRUE.equals(extension.get(extensionKey))) {
78 if (LOG.isDebugEnabled())
79 LOG.debug("Omitting row details " + extensionKey + ", "
80 + form.getSelectRowDetails() + " "
81 + form.isShowSelectedRowDetails());
82 return null;
83 }
84
85 if (LOG.isDebugEnabled())
86 LOG.debug("Including row details " + extensionKey + ", "
87 + form.getSelectRowDetails() + " "
88 + form.isShowSelectedRowDetails());
89
90 Group rowDetails = ComponentUtils.copy(rowDetailsGroup, idSuffix);
91 rowDetails.setFieldBindByNamePrefix(bindingPath);
92 ComponentUtils.updateContextForLine(rowDetails, item, lineIndex,
93 idSuffix);
94 view.getViewHelperService().spawnSubLifecyle(view, form, rowDetails,
95 collection, null, UifConstants.ViewPhases.INITIALIZE);
96
97 synchronized (components) {
98 components.add(rowDetails);
99 }
100
101 return rowDetails;
102 }
103
104 @Override
105 public void buildLine(View view, Object model,
106 CollectionGroup collectionGroup, List<Field> lineFields,
107 List<FieldGroup> subCollectionFields, String bindingPath,
108 List<Action> actions, String idSuffix, Object currentLine,
109 int lineIndex) {
110 OlePurchaseOrderItem poItem = (OlePurchaseOrderItem) currentLine;
111 OleInvoicePOCurrentItemsLine line = new OleInvoicePOCurrentItemsLine();
112 line.setLineId(collectionGroup.getBaseId() + idSuffix);
113 line.setBindPath(bindingPath
114 .startsWith(UifPropertyPaths.NEW_COLLECTION_LINES) ? bindingPath
115 : view.getDefaultBindingObjectPath() + '.' + bindingPath);
116 line.setPoItem(poItem);
117 line.setRowDetails(getRowDetails((OLEInvoiceForm) model, idSuffix,
118 lineIndex, collectionGroup, view, bindingPath, poItem));
119
120 synchronized (currentItemLines) {
121 currentItemLines.add(line);
122 }
123 }
124
125 @Override
126 public FieldGroup getSubCollectionFieldGroupPrototype() {
127 return null;
128 }
129
130 public List<KeyValue> getDiscountKeyValues() {
131 return DISCOUNT_KEY_VALUES;
132 }
133
134 public List<OleInvoicePOCurrentItemsLine> getCurrentItemLines() {
135 return currentItemLines;
136 }
137
138 public void setCurrentItemLines(
139 List<OleInvoicePOCurrentItemsLine> currentItemLines) {
140 this.currentItemLines = currentItemLines;
141 }
142
143 public boolean isForeignCurrency() {
144 return foreignCurrency;
145 }
146
147 public void setForeignCurrency(boolean foreignCurrency) {
148 this.foreignCurrency = foreignCurrency;
149 }
150
151 public Group getRowDetailsGroup() {
152 return rowDetailsGroup;
153 }
154
155 public void setRowDetailsGroup(Group rowDetailsGroup) {
156 this.rowDetailsGroup = rowDetailsGroup;
157 }
158
159 @Override
160 public List<Component> getComponentPrototypes() {
161 List<Component> rv = super.getComponentPrototypes();
162 rv.add(rowDetailsGroup);
163 return rv;
164 }
165
166 @Override
167 public List<Component> getComponentsForLifecycle() {
168 List<Component> rv = super.getComponentsForLifecycle();
169 if (components != null)
170 rv.addAll(components);
171 return rv;
172 }
173
174 @Override
175 protected <T> void copyProperties(T copy) {
176 super.copyProperties(copy);
177
178 OleInvoicePOCurrentItemsLayout c = (OleInvoicePOCurrentItemsLayout) copy;
179 if (rowDetailsGroup != null)
180 c.setRowDetailsGroup(ComponentUtils.copy(rowDetailsGroup));
181
182 }
183
184 }
185