/**
* Copyright (c) 2004-2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.ecore.xml.type.internal;
import org.eclipse.emf.ecore.xml.type.InvalidDatatypeValueException;
import org.eclipse.emf.ecore.xml.type.internal.DataValue.XMLChar;
/**
* An internal extension of Java's QName that allows the prefix to be updated.
* If not specified, the prefix is set to empty string ("").
* If not specified, the namespace uri is set to empty string ("");
* <p>
* NOTE: this class is for internal use only.
*/
public final class QName extends javax.xml.namespace.QName
{
private static final long serialVersionUID = 1L;
private String prefix;
/**
* Constructs a QName.
* @param qname a <a href="http://www.w3.org/TR/REC-xml-names/#dt-qname">qualified name</a>
* Throws Exception if value is not legal qualified name
*/
public QName(String qname)
{
super(null, qname.indexOf(':') != -1 ? qname.substring(qname.indexOf(':') + 1) : qname, qname.indexOf(':') != -1 ? qname.substring(0, qname.indexOf(':')) : "");
setPrefix(super.getPrefix());
// both prefix (if any) a localpart must be valid NCName
if (prefix.length() > 0 && !XMLChar.isValidNCName(prefix))
throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1: invalid QName: "+qname);
if(!XMLChar.isValidNCName(getLocalPart()))
throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1: invalid QName: "+qname);
}
/**
* Constructs a QName with the specified values.
*/
public QName(String namespaceURI, String localPart, String prefix)
{
super(namespaceURI, localPart, prefix = prefix == null ? "" : prefix);
setPrefix(prefix);
if (prefix.length() > 0 && !XMLChar.isValidNCName(prefix))
throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1: invalid QName: "+prefix);
if (!XMLChar.isValidNCName(localPart))
throw new InvalidDatatypeValueException("cvc-datatype-valid.1.2.1: invalid QName: "+localPart);
}
/**
* @return Returns the prefix.
*/
@Override
public String getPrefix()
{
return prefix;
}
/**
* @param prefix The prefix to set.
*/
public void setPrefix(String prefix)
{
if (prefix == null)
{
this.prefix = "";
}
else
{
this.prefix = prefix;
}
}
}