/*******************************************************************************
* Copyright (c) 2008, 2012
* 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:
* Javier Canovas (javier.canovas@inria.fr)
*******************************************************************************/
package fr.inria.atlanmod.collaboro.examples.productionSystem;
import java.io.IOException;
import java.util.List;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.plugin.EcorePlugin;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.URIConverter;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
import fr.inria.atlanmod.collaboro.history.Add;
import fr.inria.atlanmod.collaboro.history.ConcreteSyntaxElement;
import fr.inria.atlanmod.collaboro.history.ExistingAbstractSyntaxElement;
import fr.inria.atlanmod.collaboro.history.History;
import fr.inria.atlanmod.collaboro.history.HistoryFactory;
import fr.inria.atlanmod.collaboro.history.HistoryPackage;
import fr.inria.atlanmod.collaboro.history.ModelChange;
import fr.inria.atlanmod.collaboro.history.NewAbstractSyntaxElement;
import fr.inria.atlanmod.collaboro.notation.NotationPackage;
import fr.inria.atlanmod.collaboro.notation.Rectangle;
public class Test {
private static void performChanges() {
ResourceSet rset = new ResourceSetImpl();
rset.getPackageRegistry().put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE);
rset.getPackageRegistry().put(HistoryPackage.eNS_URI, HistoryPackage.eINSTANCE);
rset.getPackageRegistry().put(NotationPackage.eNS_URI, NotationPackage.eINSTANCE);
rset.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new EcoreResourceFactoryImpl());
rset.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
EcorePlugin.getPlatformResourceMap().put("fr.inria.atlanmod.collaboro.examples.productionSystem", URI.createFileURI("/home/jcanovas/eclipses/eclipse-3.7.1-xtext/workspace/fr.inria.atlanmod.collaboro.examples.productionSystem/"));
Resource r1 = rset.getResource(URI.createPlatformResourceURI("/fr.inria.atlanmod.collaboro.examples.productionSystem/model/productionSystem-history1.ecore.xmi", true), true);
try {
r1.load(null);
} catch (Exception e) {
e.printStackTrace();
}
History history = (History) r1.getContents().get(0);
Resource r2 = rset.getResource(URI.createPlatformResourceURI("/fr.inria.atlanmod.collaboro.examples.productionSystem/model/productionSystem-notation.xmi", true), true);
try {
r2.load(null);
} catch (Exception e) {
e.printStackTrace();
}
Rectangle rectangle = (Rectangle) r2.getContents().get(0);
Resource r3 = rset.getResource(URI.createPlatformResourceURI("/fr.inria.atlanmod.collaboro.examples.productionSystem/model/productionSystem.ecore", true), true);
try {
r3.load(null);
} catch (Exception e) {
e.printStackTrace();
}
EPackage ePackage = (EPackage) r3.getContents().get(0);
List<ModelChange> changes = history.getHistories().get(0).getVersions().get(0).getProposals().get(0).getSols().get(0).getChanges();
for(ModelChange mc : changes) {
Add addChange = (Add) mc;
ExistingAbstractSyntaxElement ease = HistoryFactory.eINSTANCE.createExistingAbstractSyntaxElement();
EClass eClass = (EClass) ePackage.getEClassifiers().get(0);
ease.setElement(eClass);
addChange.setReferredElement(ease);
ConcreteSyntaxElement cse = HistoryFactory.eINSTANCE.createConcreteSyntaxElement();
cse.setElement(rectangle);
addChange.setTarget(cse);
}
try {
r1.save(null);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void checkChanges() {
ResourceSet rset = new ResourceSetImpl();
rset.getPackageRegistry().put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE);
rset.getPackageRegistry().put(HistoryPackage.eNS_URI, HistoryPackage.eINSTANCE);
rset.getPackageRegistry().put(NotationPackage.eNS_URI, NotationPackage.eINSTANCE);
rset.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new EcoreResourceFactoryImpl());
rset.getResourceFactoryRegistry().getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
EcorePlugin.getPlatformResourceMap().put("fr.inria.atlanmod.collaboro.examples.productionSystem", URI.createFileURI("/home/jcanovas/eclipses/eclipse-3.7.1-xtext/workspace/fr.inria.atlanmod.collaboro.examples.productionSystem/"));
Resource r1 = rset.getResource(URI.createPlatformResourceURI("/fr.inria.atlanmod.collaboro.examples.productionSystem/model/productionSystem-history1.ecore.xmi", true), true);
try {
r1.load(null);
} catch (Exception e) {
e.printStackTrace();
}
History history = (History) r1.getContents().get(0);
Resource r2 = rset.getResource(URI.createPlatformResourceURI("/fr.inria.atlanmod.collaboro.examples.productionSystem/model/productionSystem-notation.xmi", true), true);
try {
r2.load(null);
} catch (Exception e) {
e.printStackTrace();
}
Rectangle rectangle = (Rectangle) r2.getContents().get(0);
Resource r3 = rset.getResource(URI.createPlatformResourceURI("/fr.inria.atlanmod.collaboro.examples.productionSystem/model/productionSystem.ecore", true), true);
try {
r3.load(null);
} catch (Exception e) {
e.printStackTrace();
}
EPackage ePackage = (EPackage) r3.getContents().get(0);
List<ModelChange> changes = history.getHistories().get(0).getVersions().get(0).getProposals().get(0).getSols().get(0).getChanges();
for(ModelChange mc : changes) {
Add addChange = (Add) mc;
ExistingAbstractSyntaxElement ease = (ExistingAbstractSyntaxElement) addChange.getReferredElement();
System.out.println(ease.getElement().getClass().getName());
ConcreteSyntaxElement cse = (ConcreteSyntaxElement) addChange.getTarget();
System.out.println(cse.getElement().getClass().getName());
}
}
public static void main(String[] args) {
Test.performChanges();
Test.checkChanges();
}
}