/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.sys.spring.datadictionary; import java.util.ArrayList; import org.kuali.rice.krad.datadictionary.PrimitiveAttributeDefinition; import org.kuali.rice.krad.datadictionary.SupportAttributeDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.util.StringUtils; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class RelationshipBeanDefinitionParser extends KualiBeanDefinitionParserBase { @Override protected String getBaseBeanTypeParent(Element element) { return "RelationshipDefinition"; } @Override protected void doParse(Element element, ParserContext context, BeanDefinitionBuilder bean) { // get all attributes String objectAttribute = element.getAttribute("objectAttribute"); String targetClass = element.getAttribute("targetClass"); // now, set on the bean definition if ( StringUtils.hasText(objectAttribute) ) { bean.addPropertyValue("objectAttributeName", objectAttribute); } if ( StringUtils.hasText(targetClass) ) { bean.addPropertyValue("targetClass", targetClass); } NodeList children = element.getChildNodes(); ArrayList<PrimitiveAttributeDefinition> pDefs = new ArrayList<PrimitiveAttributeDefinition>(); ArrayList<SupportAttributeDefinition> sDefs = new ArrayList<SupportAttributeDefinition>(); for ( int i = 0; i < children.getLength(); i++ ) { Node child = children.item(i); String nodeName = child.getLocalName(); if ( nodeName == null ) continue; if ( nodeName.equals("primitiveAttribute") ) { NamedNodeMap attributes = child.getAttributes(); String source = attributes.getNamedItem("source").getNodeValue(); String target = attributes.getNamedItem("target").getNodeValue(); PrimitiveAttributeDefinition pad = new PrimitiveAttributeDefinition(); pad.setSourceName(source); pad.setTargetName(target); pDefs.add(pad); } else if ( nodeName.equals("supportAttribute") ) { NamedNodeMap attributes = child.getAttributes(); String source = attributes.getNamedItem("source").getNodeValue(); String target = attributes.getNamedItem("target").getNodeValue(); boolean identifier = false; String identifierStr = attributes.getNamedItem("identifier").getNodeValue(); if ( identifierStr != null ) { identifier = Boolean.valueOf( identifierStr ); } SupportAttributeDefinition pad = new SupportAttributeDefinition(); pad.setSourceName(source); pad.setTargetName(target); pad.setIdentifier(identifier); sDefs.add(pad); } bean.addPropertyValue("primitiveAttributes", pDefs); bean.addPropertyValue("supportAttributes", sDefs); } } }