001/* 002 * Copyright 2008 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 */ 016package org.kuali.ole.sys.spring.datadictionary; 017 018import java.util.ArrayList; 019 020import org.kuali.rice.krad.datadictionary.PrimitiveAttributeDefinition; 021import org.kuali.rice.krad.datadictionary.SupportAttributeDefinition; 022import org.springframework.beans.factory.support.BeanDefinitionBuilder; 023import org.springframework.beans.factory.xml.ParserContext; 024import org.springframework.util.StringUtils; 025import org.w3c.dom.Element; 026import org.w3c.dom.NamedNodeMap; 027import org.w3c.dom.Node; 028import org.w3c.dom.NodeList; 029 030public class RelationshipBeanDefinitionParser extends KualiBeanDefinitionParserBase { 031 032 @Override 033 protected String getBaseBeanTypeParent(Element element) { 034 return "RelationshipDefinition"; 035 } 036 037 @Override 038 protected void doParse(Element element, ParserContext context, BeanDefinitionBuilder bean) { 039 // get all attributes 040 String objectAttribute = element.getAttribute("objectAttribute"); 041 String targetClass = element.getAttribute("targetClass"); 042 043 // now, set on the bean definition 044 if ( StringUtils.hasText(objectAttribute) ) { 045 bean.addPropertyValue("objectAttributeName", objectAttribute); 046 } 047 if ( StringUtils.hasText(targetClass) ) { 048 bean.addPropertyValue("targetClass", targetClass); 049 } 050 051 NodeList children = element.getChildNodes(); 052 ArrayList<PrimitiveAttributeDefinition> pDefs = new ArrayList<PrimitiveAttributeDefinition>(); 053 ArrayList<SupportAttributeDefinition> sDefs = new ArrayList<SupportAttributeDefinition>(); 054 055 for ( int i = 0; i < children.getLength(); i++ ) { 056 Node child = children.item(i); 057 String nodeName = child.getLocalName(); 058 if ( nodeName == null ) continue; 059 060 if ( nodeName.equals("primitiveAttribute") ) { 061 NamedNodeMap attributes = child.getAttributes(); 062 String source = attributes.getNamedItem("source").getNodeValue(); 063 String target = attributes.getNamedItem("target").getNodeValue(); 064 PrimitiveAttributeDefinition pad = new PrimitiveAttributeDefinition(); 065 pad.setSourceName(source); 066 pad.setTargetName(target); 067 pDefs.add(pad); 068 } else if ( nodeName.equals("supportAttribute") ) { 069 NamedNodeMap attributes = child.getAttributes(); 070 String source = attributes.getNamedItem("source").getNodeValue(); 071 String target = attributes.getNamedItem("target").getNodeValue(); 072 boolean identifier = false; 073 String identifierStr = attributes.getNamedItem("identifier").getNodeValue(); 074 if ( identifierStr != null ) { 075 identifier = Boolean.valueOf( identifierStr ); 076 } 077 SupportAttributeDefinition pad = new SupportAttributeDefinition(); 078 pad.setSourceName(source); 079 pad.setTargetName(target); 080 pad.setIdentifier(identifier); 081 sDefs.add(pad); 082 } 083 bean.addPropertyValue("primitiveAttributes", pDefs); 084 bean.addPropertyValue("supportAttributes", sDefs); 085 } 086 } 087 088 089}