001 /**
002 * Copyright 2005-2014 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.kew.attribute;
017
018 import org.apache.commons.lang.StringUtils;
019 import org.apache.log4j.Logger;
020 import org.kuali.rice.core.api.config.ConfigurationException;
021 import org.kuali.rice.core.api.uif.RemotableAttributeField;
022 import org.kuali.rice.core.api.uif.RemotableQuickFinder;
023 import org.kuali.rice.kns.lookup.LookupUtils;
024 import org.kuali.rice.kns.web.ui.Field;
025 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
026 import org.w3c.dom.NamedNodeMap;
027 import org.w3c.dom.Node;
028
029 import java.util.HashMap;
030 import java.util.Map;
031
032 /**
033 * This class provides some common shared utility methods shared by the XML-based
034 * attribute implementations.
035 *
036 * @author Kuali Rice Team (rice.collab@kuali.org)
037 *
038 */
039 public final class XMLAttributeUtils {
040
041 private static final Logger LOG = Logger.getLogger(XMLAttributeUtils.class);
042
043 private XMLAttributeUtils() {
044 throw new UnsupportedOperationException("do not call");
045 }
046
047 public static void establishFieldLookup(Field field, Node lookupNode) {
048 NamedNodeMap quickfinderAttributes = lookupNode.getAttributes();
049 String businessObjectClass = quickfinderAttributes.getNamedItem("businessObjectClass").getNodeValue();
050 field.setQuickFinderClassNameImpl(businessObjectClass);
051 Map<String, String> fieldConversionsMap = new HashMap<String, String>();
052 for (int lcIndex = 0; lcIndex < lookupNode.getChildNodes().getLength(); lcIndex++) {
053 Node fieldConversionsChildNode = lookupNode.getChildNodes().item(lcIndex);
054 if ("fieldConversions".equals(fieldConversionsChildNode.getNodeName())) {
055 for (int fcIndex = 0; fcIndex < fieldConversionsChildNode.getChildNodes().getLength(); fcIndex++) {
056 Node fieldConversionChildNode = fieldConversionsChildNode.getChildNodes().item(fcIndex);
057 if ("fieldConversion".equals(fieldConversionChildNode.getNodeName())) {
058 NamedNodeMap fieldConversionAttributes = fieldConversionChildNode.getAttributes();
059 String lookupFieldName = fieldConversionAttributes.getNamedItem("lookupFieldName").getNodeValue();
060 String localFieldName = fieldConversionAttributes.getNamedItem("localFieldName").getNodeValue();
061 fieldConversionsMap.put(lookupFieldName, localFieldName);
062 }
063 }
064 }
065 }
066 field.setFieldConversions(fieldConversionsMap);
067 }
068
069 public static void establishFieldLookup(RemotableAttributeField.Builder fieldBuilder, Node lookupNode) {
070 NamedNodeMap quickfinderAttributes = lookupNode.getAttributes();
071 Node dataObjectNode = quickfinderAttributes.getNamedItem("dataObjectClass");
072 if (dataObjectNode == null) {
073 // for legacy compatibility, though businessObjectClass is deprecated
074 dataObjectNode = quickfinderAttributes.getNamedItem("businessObjectClass");
075 if (dataObjectNode != null) {
076 LOG.warn("Field is using deprecated 'businessObjectClass' instead of 'dataObjectClass' for lookup definition, field name is: " + fieldBuilder.getName());
077 } else {
078 throw new ConfigurationException("Failed to locate 'dataObjectClass' for lookup definition.");
079 }
080 }
081 String dataObjectClass = dataObjectNode.getNodeValue();
082 String baseLookupUrl = LookupUtils.getBaseLookupUrl(false);
083 RemotableQuickFinder.Builder quickFinderBuilder = RemotableQuickFinder.Builder.create(baseLookupUrl, dataObjectClass);
084 for (int lcIndex = 0; lcIndex < lookupNode.getChildNodes().getLength(); lcIndex++) {
085 Map<String, String> fieldConversionsMap = new HashMap<String, String>();
086 Node fieldConversionsChildNode = lookupNode.getChildNodes().item(lcIndex);
087 if ("fieldConversions".equals(fieldConversionsChildNode)) {
088 for (int fcIndex = 0; fcIndex < fieldConversionsChildNode.getChildNodes().getLength(); fcIndex++) {
089 Node fieldConversionChildNode = fieldConversionsChildNode.getChildNodes().item(fcIndex);
090 if ("fieldConversion".equals(fieldConversionChildNode)) {
091 NamedNodeMap fieldConversionAttributes = fieldConversionChildNode.getAttributes();
092 String lookupFieldName = fieldConversionAttributes.getNamedItem("lookupFieldName").getNodeValue();
093 String localFieldName = fieldConversionAttributes.getNamedItem("localFieldName").getNodeValue();
094 fieldConversionsMap.put(lookupFieldName, localFieldName);
095 }
096 }
097 }
098 quickFinderBuilder.setFieldConversions(fieldConversionsMap);
099 fieldBuilder.getWidgets().add(quickFinderBuilder);
100 }
101 }
102
103 }