/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.config.spring.parsers.generic; import org.w3c.dom.Element; import org.w3c.dom.Node; /** * Same as ChildDefinitionParser but injects the child element into the grandparent object (2 levels up in the XML tree). */ public class GrandchildDefinitionParser extends ChildDefinitionParser { public GrandchildDefinitionParser(String setterMethod, Class clazz) { super(setterMethod, clazz); } public GrandchildDefinitionParser(String setterMethod, Class clazz, Class constraint, boolean allowClassAttribute) { super(setterMethod, clazz, constraint, allowClassAttribute); } @Override protected String getParentBeanName(Element element) { return getGrandparentBeanName(element); } protected String getGrandparentBeanName(Element element) { Node parent = element.getParentNode(); if (parent == null) { logger.error("No parent node found for element " + element); return null; } Node grandparent = parent.getParentNode(); if (grandparent == null) { logger.error("No parent node found for element " + parent); return null; } Node grandparentNameAttribute = grandparent.getAttributes().getNamedItem("name"); if (grandparentNameAttribute == null) { logger.error("Grandparent node has no 'name' attribute: " + grandparent); return null; } return grandparentNameAttribute.getNodeValue(); } }