package org.occiware.clouddesigner.occi.emfgen.tests;
import java.io.File;
import java.io.IOException;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.occiware.clouddesigner.occi.Extension;
import org.occiware.clouddesigner.occi.OCCIPackage;
import org.occiware.clouddesigner.occi.emfgen.ConverterUtils;
import org.occiware.clouddesigner.occi.emfgen.tests.extensions.ConvertDocker;
import org.occiware.clouddesigner.occi.emfgen.tests.extensions.ConvertDockerConfig;
public class OCCI2Ecore implements IConverterPaths {
private static final boolean PERSIST_METAMODELS = true;
public static ResourceSet resourceSet = new ResourceSetImpl();
static {
resourceSet.getPackageRegistry().put(OCCIPackage.eNS_URI, OCCIPackage.eINSTANCE);
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("*", new XMIResourceFactoryImpl());
}
public static void main(String[] args) throws IOException {
EPackage infraEPackage = convertExtension(INFRA_EXT_PATH, INFRA_MM_PATH);
resourceSet.getPackageRegistry().put(infraEPackage.getNsURI(), infraEPackage);
EPackage dockerEPackage = convertExtension(DOCKER_EXT_PATH, DOCKER_MM_PATH);
// Convert Docker configurations
ConvertDockerConfig dockerConfigConverter = new ConvertDockerConfig(infraEPackage, dockerEPackage);
dockerConfigConverter.convertConfiguration("file:/" + DOCKER_SAMPLE1_OCCI_PATH,
"file:/" + DOCKER_SAMPLE1_DSL_PATH);
dockerConfigConverter.convertConfiguration("file:/" + DOCKER_SAMPLE2_OCCI_PATH,
"file:/" + DOCKER_SAMPLE2_DSL_PATH);
}
protected static EPackage convertExtension(String extensionPath, String metamodelPath) throws IOException {
Extension dockerExt = (Extension) ConverterUtils.getRootElement(resourceSet, "file:/" + extensionPath);
EPackage dockerEPackage = new ConvertDocker().convertExtension(dockerExt);
if (PERSIST_METAMODELS) {
ConverterUtils.persistMetamodel(resourceSet, dockerEPackage, metamodelPath);
fixMetamodelRefs(new File(metamodelPath));
}
return dockerEPackage;
}
public static void fixMetamodelRefs(File metamodelFile) throws IOException {
String content = ConverterUtils.readFileAsString(metamodelFile);
content = content.replaceAll("../../../metamodel/OCCI.ecore#",
"../../org.occiware.clouddesigner.occi/model/OCCI.ecore#");
content = content.replaceAll("output/Infrastructure.ecore#",
"../../org.occiware.clouddesigner.occi.infrastructure/model/Infrastructure.ecore#");
content = content.replaceAll("http://schemas.ogf.org/occi#",
"../../org.occiware.clouddesigner.occi/model/OCCI.ecore#");
content = content.replaceAll("http://schemas.ogf.org/occi/infrastructure#",
"../../org.occiware.clouddesigner.occi.infrastructure/model/Infrastructure.ecore#");
ConverterUtils.writeStringToFile(metamodelFile, content);
}
}