| /** |
| * Copyright (c) 2002-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 v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * IBM - Initial API and implementation |
| */ |
| package org.eclipse.emf.ecore.xmi; |
| |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.emf.common.util.EMap; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.EClassifier; |
| import org.eclipse.emf.ecore.EDataType; |
| import org.eclipse.emf.ecore.EFactory; |
| import org.eclipse.emf.ecore.ENamedElement; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EPackage; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.emf.ecore.util.ExtendedMetaData; |
| |
| /** |
| * Configuration class for XML. It holds the EPackage to |
| * use when XML namespaces are not used in an XML file. It also |
| * holds the XMLMap to be used when serializing an XML file. |
| * The XML deserializer and serializer uses this class when |
| * an XML file is loaded and saved. |
| */ |
| public interface XMLHelper |
| { |
| /** |
| * Sets various resource options on the helper |
| */ |
| public void setOptions(Map<?, ?> options); |
| |
| /** |
| * Sets the package to use when there is no XML namespace in an XML |
| * file. |
| */ |
| public void setNoNamespacePackage(EPackage pkg); |
| |
| /** |
| * Gets the package to use when there is no XML namespace in an |
| * XML file. |
| */ |
| public EPackage getNoNamespacePackage(); |
| |
| /** |
| * Sets the any simple type class. |
| * @see XMLResource#OPTION_ANY_SIMPLE_TYPE |
| */ |
| public void setAnySimpleType(EClass type); |
| |
| /** |
| * Sets the XMLMap to use when serializing an XML file. |
| */ |
| public void setXMLMap(XMLResource.XMLMap map); |
| |
| /** |
| * Gets the XMLMap to use when serializing an XML file. |
| */ |
| public XMLResource.XMLMap getXMLMap(); |
| |
| /** |
| * Sets the ExtendedMetaData to use when serializing an XML file. |
| */ |
| public void setExtendedMetaData(ExtendedMetaData extendedMetaData); |
| |
| /** |
| * Gets the ExtendedMetaData to use when serializing an XML file. |
| */ |
| public ExtendedMetaData getExtendedMetaData(); |
| |
| /** |
| * Returns the resource |
| */ |
| XMLResource getResource(); |
| |
| /** |
| * Returns the XMI value of the EObject's feature |
| */ |
| Object getValue(EObject eObject, EStructuralFeature eStructuralFeature); |
| |
| /** |
| * Returns the XML name of the ENamedElement |
| */ |
| String getName(ENamedElement eNamedElement); |
| |
| /** |
| * Returns the nsName:name |
| * c.ePackage().nsName() : |
| * c.eName() |
| * |
| * If there is an XMLMap, and the target namespace is null |
| * for this eClass, just the name is returned. If the map |
| * has a target namespace specified, that target namespace is |
| * used rather than the namespace from the EPackage. |
| */ |
| String getQName(EClass eClass); |
| |
| /** |
| * This method populates the given {@link NameInfo} with name information, resetting all the current |
| * values in the <tt>nameInfo</tt> |
| * @param nameInfo the name information to populate |
| * @param eClass the EClass for which name has to be computed |
| * @see XMLHelper#getQName(EClass) |
| * @since 2.1.0 |
| */ |
| void populateNameInfo(NameInfo nameInfo, EClass eClass); |
| |
| /** |
| * Returns the nsName:name |
| * c.ePackage().nsName() : |
| * c.eName() |
| * |
| * If there is an XMLMap, and the target namespace is null |
| * for this eClass, just the name is returned. If the map |
| * has a target namespace specified, that target namespace is |
| * used rather than the namespace from the EPackage. |
| */ |
| String getQName(EDataType eDataType); |
| |
| /** |
| * This method populates the given {@link NameInfo} with name information, resetting all the current |
| * values in the <tt>nameInfo</tt> |
| * @param nameInfo the name information to fill in |
| * @param eDataType the EDataType for which name has to be computed |
| * @see XMLHelper#getQName(EDataType) |
| * @since 2.1.0 |
| */ |
| void populateNameInfo(NameInfo nameInfo, EDataType eDataType); |
| |
| /** |
| * By default, this method returns the name of the feature. |
| * However, if there is an XMLMap, and the map specifies a |
| * target namespace, the nsPrefix:name is returned. |
| */ |
| String getQName(EStructuralFeature feature); |
| |
| /** |
| * This method populates the given {@link NameInfo} with name information, resetting all the current |
| * values in the <tt>nameInfo</tt> |
| * @param nameInfo the name information to fill in |
| * @param feature the EStructuralFeature for which name has to be computed |
| * @see #getQName(EStructuralFeature) |
| * @since 2.1.0 |
| */ |
| void populateNameInfo(NameInfo nameInfo, EStructuralFeature feature); |
| |
| String getPrefix(String namespaceURI); |
| |
| /** |
| * Return the prefix used for this package. |
| */ |
| String getPrefix(EPackage ePackage); |
| |
| /** |
| * Returns the namespaceURI in scope for the prefix. |
| */ |
| String getNamespaceURI(String prefix); |
| |
| /** |
| * Return all the prefixes used for this package. |
| */ |
| List<String> getPrefixes(EPackage ePackage); |
| |
| /** |
| * Returns the xmi:id or null to supress |
| */ |
| String getID(EObject eObject); |
| |
| /** |
| * Returns an IDREF to this object |
| */ |
| String getIDREF(EObject eObject); |
| |
| /** |
| * Returns an HREF to this object from this resource |
| */ |
| String getHREF(EObject eObject); |
| |
| /** |
| * Returns a relative URI if necessary and if possible. |
| */ |
| URI deresolve(URI uri); |
| |
| /** |
| * Returns the packages in getQName() |
| */ |
| EPackage[] packages(); |
| |
| /** |
| * Create an object given an EFactory and a type name. |
| * @deprecated since 2.2. Instead use #createObject(EFactory, EClassifier) and #getType(EFactory, String) |
| */ |
| @Deprecated |
| EObject createObject(EFactory eFactory, String name); |
| |
| /** Create an object given an EFactory and a type |
| * @since 2.2 |
| * @param eFactory |
| * @param type |
| * @return the created object. |
| * @see #createObject(EFactory, String) |
| */ |
| EObject createObject(EFactory eFactory, EClassifier type); |
| |
| /** |
| * Given an EFactory and a type name, find and return the type |
| * @since 2.2 |
| * @param eFactory |
| * @param typeName |
| * @see #createObject(EFactory, String) |
| */ |
| public EClassifier getType(EFactory eFactory, String typeName); |
| |
| /** |
| * Set the value of the feature for the object. |
| */ |
| void setValue(EObject eObject, EStructuralFeature eStructuralFeature, Object value, int position); |
| |
| /** |
| * Returns the structural feature for the XML element/attribute with the given namespaceURI and name. |
| */ |
| EStructuralFeature getFeature(EClass eClass, String namespaceURI, String name); |
| |
| /** |
| * Returns the structural feature for the XML element/attribute with the given namespaceURI and name. |
| */ |
| EStructuralFeature getFeature(EClass eClass, String namespaceURI, String name, boolean isElement); |
| |
| /** |
| * These are the kinds of features that are important |
| * when loading XMI files. |
| */ |
| int DATATYPE_SINGLE = 1; |
| int DATATYPE_IS_MANY = 2; |
| int IS_MANY_ADD = 3; |
| int IS_MANY_MOVE = 4; |
| int OTHER = 5; |
| |
| /** |
| * Return the kind of feature. |
| */ |
| int getFeatureKind(EStructuralFeature feature); |
| |
| /** |
| * Return an XML encoding corresponding to the given Java encoding. |
| * By default, the Java encoding is returned. |
| */ |
| String getXMLEncoding(String javaEncoding); |
| |
| /** |
| * Return a Java encoding corresponding to the given XML encoding. |
| * By default, the XML encoding is returned. |
| */ |
| String getJavaEncoding(String xmlEncoding); |
| |
| interface ManyReference |
| { |
| EObject getObject(); |
| EStructuralFeature getFeature(); |
| Object[] getValues(); |
| int[] getPositions(); |
| int getLineNumber(); |
| int getColumnNumber(); |
| } |
| |
| List<XMIException> setManyReference(ManyReference reference, String location); |
| |
| void setCheckForDuplicates(boolean checkForDuplicates); |
| |
| void setProcessDanglingHREF(String value); |
| |
| DanglingHREFException getDanglingHREFException(); |
| |
| URI resolve(URI relative, URI base); |
| |
| /** |
| * Records the prefix to URI mapping while loading an XML document. |
| */ |
| void addPrefix(String prefix, String uri); |
| |
| /** |
| * Returns a map of prefixes to URI mapping for elements with any content |
| */ |
| Map<String, String> getAnyContentPrefixToURIMapping(); |
| |
| /** |
| * Must be called during endDocument to record all the prefix to URI mappings that have |
| * been seen in the document during loading |
| */ |
| void recordPrefixToURIMapping(); |
| |
| /** |
| * Returns the namespace prefix that's in effect while loading an XML document. |
| */ |
| String getURI(String prefix); |
| |
| /** |
| * Starts a new namespace context while loading an XML document. |
| * <p> |
| * A new context should be pushed at the beginning of each XML element. |
| * The new context will automatically inherit the declarations of its parent context, |
| * but it will also keep track of which declarations were made within this context. |
| * </p> |
| */ |
| public void pushContext(); |
| |
| /** |
| * Reverts to the previous namespace context while loading XML document. |
| * <p> |
| * The context should be popped at the end of each XML element. |
| * After popping the context, all namespace prefix mappings that were previously in scope are restored. |
| * </p> |
| */ |
| public void popContext(); |
| |
| /** |
| * Reverts to the previous namespace context while loading XML document and removes from the map, prefixes that have gone out of scope. |
| * <p> |
| * The context should be popped at the end of each XML element. |
| * After popping the context, all namespace prefix mappings that were previously in scope are restored. |
| * </p> |
| */ |
| public void popContext(Map<String, EFactory> prefixesToFactories); |
| |
| /** |
| * Converts the given data value to a string while saving an XML document. |
| */ |
| public String convertToString(EFactory factory, EDataType dataType, Object data); |
| |
| EMap<String, String> getPrefixToNamespaceMap(); |
| void setPrefixToNamespaceMap(EMap<String, String> prefixToNamespaceMap); |
| |
| /** |
| * Specify if qualified names must have a prefix or could use default namespace (if possible) |
| * @param mustHavePrefix |
| */ |
| void setMustHavePrefix(boolean mustHavePrefix); |
| |
| } |