/* * 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.editors; import java.beans.PropertyEditorSupport; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; import javax.xml.namespace.QName; /** * This handles qname{....} syntax as used in stockquote-soap-config.xml */ public class QNamePropertyEditor extends PropertyEditorSupport { private boolean explicit = false; public QNamePropertyEditor() { super(); } public QNamePropertyEditor(boolean explicit) { this(); this.explicit = explicit; } @Override public void setAsText(String text) throws IllegalArgumentException { if (text.startsWith("qname{")) { setValue(parseQName(text.substring(6, text.length() - 1))); } else if (!explicit) { setValue(parseQName(text)); } else { setValue(new QName(text)); } } protected QName parseQName(String val) { StringTokenizer st = new StringTokenizer(val, ":"); List<String> elements = new ArrayList<String>(); while (st.hasMoreTokens()) { elements.add(st.nextToken()); } switch (elements.size()) { case 0: { return null; } case 1: { return new QName(elements.get(0)); } case 2: { return new QName(elements.get(0), elements.get(1)); } case 3: { return new QName(elements.get(1) + ":" + elements.get(2), elements.get(0)); } default: { String prefix = elements.get(0); String local = elements.get(1); // namespace can have multiple colons in it, so just assume the rest // is a namespace String ns = val.substring(prefix.length() + local.length() + 2); return new QName(ns, local, prefix); } } } public static QName convert(String value) { QNamePropertyEditor editor = new QNamePropertyEditor(); editor.setAsText(value); return (QName) editor.getValue(); } }