/*
* 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.processors;
import org.mule.runtime.config.spring.parsers.PreProcessor;
import org.mule.runtime.config.spring.parsers.assembly.configuration.PropertyConfiguration;
import org.mule.runtime.config.spring.util.SpringXMLUtils;
import java.util.LinkedList;
import java.util.List;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
/**
* If this attribute is present, no other can be
*/
public class CheckExclusiveAttributeAndText implements PreProcessor {
public static final int NONE = -1;
private String attribute;
public CheckExclusiveAttributeAndText(String attribute) {
this.attribute = attribute;
}
public void preProcess(PropertyConfiguration config, Element element) {
List foundAttributes = new LinkedList();
boolean found = false;
NamedNodeMap attributes = element.getAttributes();
for (int i = 0; i < attributes.getLength(); i++) {
String alias = SpringXMLUtils.attributeName((Attr) attributes.item(i));
if (!config.isIgnored(alias)) {
if (attribute.equals(alias)) {
found = true;
} else {
foundAttributes.add(alias);
}
}
}
if (found && !element.getTextContent().isEmpty()) {
StringBuilder message = new StringBuilder("The attribute '");
message.append(attribute);
message.append("' cannot be used with text content");
message.append(" in element ");
message.append(SpringXMLUtils.elementToString(element));
message.append(".");
throw new CheckExclusiveAttributeException(message.toString());
}
}
public static class CheckExclusiveAttributeException extends IllegalStateException {
private CheckExclusiveAttributeException(String message) {
super(message);
}
}
}