blob: 618d544a919a37a26cd887d4fa877b7b9428645c [file] [log] [blame]
/**
* Copyright (c) 2005-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.xsd.ecore.exporter;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.ENamedElement;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
import org.eclipse.emf.ecore.xml.type.util.XMLTypeValidator;
import org.eclipse.xsd.XSDImport;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDSchemaDirective;
import org.eclipse.xsd.ecore.EcoreXMISchemaBuilder;
import org.eclipse.xsd.ecore.EcoreXMLSchemaBuilder;
/**
* @since 2.2.0
*/
public class XMIExporter extends XSDExporter
{
@Override
public String getID()
{
return "org.eclipse.xsd.ecore.exporter.xmi";
}
@Override
protected String getDefaultArtifactLocation(EPackage ePackage)
{
return getDefaultArtifactFileName(ePackage) + "XMI.xsd";
}
@Override
protected XSDSchema getSchema(EPackage ePackage)
{
if (mapBuilder == null)
{
mapBuilder = new EcoreXMISchemaBuilder();
}
return
(XSDSchema)((EcoreXMISchemaBuilder)mapBuilder).generate
(ePackage,
new EcoreXMLSchemaBuilder.QNameMap()
{
ExtendedMetaData extendedMetaData = genModel.getExtendedMetaData();
public String getName(ENamedElement element)
{
if (element instanceof EStructuralFeature)
{
String name = extendedMetaData.getName((EStructuralFeature)element);
if (XMLTypeValidator.INSTANCE.validateNCName(name, null, null))
{
return name;
}
}
else if (element instanceof EClassifier)
{
String name = extendedMetaData.getName((EClassifier)element);
if (XMLTypeValidator.INSTANCE.validateNCName(name, null, null))
{
return name;
}
}
return element.getName();
}
}).iterator().next();
}
@Override
protected String computeSchemaLocation(XSDSchemaDirective xsdSchemaDirective, URI artifactURI)
{
if (artifactURI != null)
{
return artifactURI.toString();
}
else if ("XMI.xsd".equals(xsdSchemaDirective.getSchemaLocation()) &&
xsdSchemaDirective instanceof XSDImport &&
ExtendedMetaData.XMI_URI.equals(((XSDImport)xsdSchemaDirective).getNamespace()) &&
!EcorePackage.eNS_URI.equals(xsdSchemaDirective.getSchema().getTargetNamespace()))
{
return "platform:/plugin/org.eclipse.emf.ecore/model/XMI.xsd";
}
else if (EcorePackage.eNS_URI.equals(xsdSchemaDirective.getSchemaLocation()))
{
return "platform:/plugin/org.eclipse.emf.ecore/model/EcoreXMI.xsd";
}
else
{
return xsdSchemaDirective.getSchemaLocation();
}
}
}