blob: d2d31572f426e6077675c33b9c7c676d6c7a75ab [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008 The University of York.
* 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:
* Dimitrios Kolovos - initial API and implementation
******************************************************************************/
package org.eclipse.epsilon.emc.emf.xml;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.xmi.impl.GenericXMLResourceFactoryImpl;
import org.eclipse.epsilon.common.util.StringProperties;
import org.eclipse.epsilon.emc.emf.CachedResourceSet;
import org.eclipse.epsilon.emc.emf.EmfModel;
import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;
import org.eclipse.epsilon.eol.execute.operations.contributors.IOperationContributorProvider;
import org.eclipse.epsilon.eol.execute.operations.contributors.OperationContributor;
import org.eclipse.epsilon.eol.models.IRelativePathResolver;
import org.eclipse.xsd.ecore.XSDEcoreBuilder;
public class XmlModel extends EmfModel implements IOperationContributorProvider {
public static String PROPERTY_XSD_FILE = "xsdFile";
protected MixedElementOperationContributor mixedElementOperationContributor = new MixedElementOperationContributor();
protected String xsdFile = "";
@Override
public void load(StringProperties properties, IRelativePathResolver resolver) throws EolModelLoadingException {
this.xsdFile = resolver.resolve(properties.getProperty(PROPERTY_XSD_FILE));
super.load(properties, resolver);
}
@Override
protected void determinePackagesFrom(ResourceSet resourceSet)
throws EolModelLoadingException {
super.determinePackagesFrom(resourceSet);
if (xsdFile != null && xsdFile.endsWith("xsd")) {
XSDEcoreBuilder xsdEcoreBuilder = new XSDEcoreBuilder();
Collection<EObject> ePackages = xsdEcoreBuilder.generate(URI.createFileURI(xsdFile));
for (Iterator<EObject> iter = ePackages.iterator(); iter.hasNext();) {
EPackage ePackage = (EPackage) iter.next();
if (ePackage.getNsURI() == null || ePackage.getNsURI().length() == 0) {
ePackage.setNsURI(ePackage.getName());
}
packages.add(ePackage);
}
}
}
@Override
protected ResourceSet createResourceSet() {
return new CachedResourceSet() {
@Override
public Resource createNewResource(URI uri, String contentType) {
return new GenericXMLResourceFactoryImpl().createResource(uri);
}
};
}
@Override
public XmlPropertySetter getPropertySetter() {
return new XmlPropertySetter();
}
@Override
public OperationContributor getOperationContributor() {
return mixedElementOperationContributor;
}
}