1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kew.attribute;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.apache.log4j.Logger;
20 import org.kuali.rice.core.api.config.ConfigurationException;
21 import org.kuali.rice.core.api.uif.RemotableAttributeField;
22 import org.kuali.rice.core.api.uif.RemotableQuickFinder;
23 import org.kuali.rice.kns.lookup.LookupUtils;
24 import org.kuali.rice.kns.web.ui.Field;
25 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
26 import org.w3c.dom.NamedNodeMap;
27 import org.w3c.dom.Node;
28
29 import java.util.HashMap;
30 import java.util.Map;
31
32
33
34
35
36
37
38
39 public final class XMLAttributeUtils {
40
41 private static final Logger LOG = Logger.getLogger(XMLAttributeUtils.class);
42
43 private XMLAttributeUtils() {
44 throw new UnsupportedOperationException("do not call");
45 }
46
47 public static void establishFieldLookup(Field field, Node lookupNode) {
48 NamedNodeMap quickfinderAttributes = lookupNode.getAttributes();
49 String businessObjectClass = quickfinderAttributes.getNamedItem("businessObjectClass").getNodeValue();
50 field.setQuickFinderClassNameImpl(businessObjectClass);
51 for (int lcIndex = 0; lcIndex < lookupNode.getChildNodes().getLength(); lcIndex++) {
52 Map<String, String> fieldConversionsMap = new HashMap<String, String>();
53 Node fieldConversionsChildNode = lookupNode.getChildNodes().item(lcIndex);
54 if ("fieldConversions".equals(fieldConversionsChildNode)) {
55 for (int fcIndex = 0; fcIndex < fieldConversionsChildNode.getChildNodes().getLength(); fcIndex++) {
56 Node fieldConversionChildNode = fieldConversionsChildNode.getChildNodes().item(fcIndex);
57 if ("fieldConversion".equals(fieldConversionChildNode)) {
58 NamedNodeMap fieldConversionAttributes = fieldConversionChildNode.getAttributes();
59 String lookupFieldName = fieldConversionAttributes.getNamedItem("lookupFieldName").getNodeValue();
60 String localFieldName = fieldConversionAttributes.getNamedItem("localFieldName").getNodeValue();
61 fieldConversionsMap.put(lookupFieldName, localFieldName);
62 }
63 }
64 }
65 field.setFieldConversions(fieldConversionsMap);
66 }
67 }
68
69 public static void establishFieldLookup(RemotableAttributeField.Builder fieldBuilder, Node lookupNode) {
70 NamedNodeMap quickfinderAttributes = lookupNode.getAttributes();
71 Node dataObjectNode = quickfinderAttributes.getNamedItem("dataObjectClass");
72 if (dataObjectNode == null) {
73
74 dataObjectNode = quickfinderAttributes.getNamedItem("businessObjectClass");
75 if (dataObjectNode != null) {
76 LOG.warn("Field is using deprecated 'businessObjectClass' instead of 'dataObjectClass' for lookup definition, field name is: " + fieldBuilder.getName());
77 } else {
78 throw new ConfigurationException("Failed to locate 'dataObjectClass' for lookup definition.");
79 }
80 }
81 String dataObjectClass = dataObjectNode.getNodeValue();
82 String baseLookupUrl = LookupUtils.getBaseLookupUrl(false);
83 RemotableQuickFinder.Builder quickFinderBuilder = RemotableQuickFinder.Builder.create(baseLookupUrl, dataObjectClass);
84 for (int lcIndex = 0; lcIndex < lookupNode.getChildNodes().getLength(); lcIndex++) {
85 Map<String, String> fieldConversionsMap = new HashMap<String, String>();
86 Node fieldConversionsChildNode = lookupNode.getChildNodes().item(lcIndex);
87 if ("fieldConversions".equals(fieldConversionsChildNode)) {
88 for (int fcIndex = 0; fcIndex < fieldConversionsChildNode.getChildNodes().getLength(); fcIndex++) {
89 Node fieldConversionChildNode = fieldConversionsChildNode.getChildNodes().item(fcIndex);
90 if ("fieldConversion".equals(fieldConversionChildNode)) {
91 NamedNodeMap fieldConversionAttributes = fieldConversionChildNode.getAttributes();
92 String lookupFieldName = fieldConversionAttributes.getNamedItem("lookupFieldName").getNodeValue();
93 String localFieldName = fieldConversionAttributes.getNamedItem("localFieldName").getNodeValue();
94 fieldConversionsMap.put(lookupFieldName, localFieldName);
95 }
96 }
97 }
98 quickFinderBuilder.setFieldConversions(fieldConversionsMap);
99 fieldBuilder.getWidgets().add(quickFinderBuilder);
100 }
101 }
102
103 }