/* * grEMF * * Copyright (C) 2006-2012 Institute for Software Technology * University of Koblenz-Landau, Germany * ist@uni-koblenz.de * * For bug reports, documentation and further information, visit * * https://github.com/jgralab/gremf * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, see <http://www.gnu.org/licenses>. * * Additional permission under GNU GPL version 3 section 7 * * If you modify this Program, or any covered work, by linking or combining * it with Eclipse (or a modified version of that program or an Eclipse * plugin), containing parts covered by the terms of the Eclipse Public * License (EPL), the licensors of this Program grant you additional * permission to convey the resulting work. Corresponding Source for a * non-source form of such a combination shall include the source code for * the parts of JGraLab used as well as that of the covered work. */ package de.uni_koblenz.gremftest; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Vector; 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.EStructuralFeature; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import org.junit.Test; import de.uni_koblenz.gremf.GrEMFIO; import de.uni_koblenz.gremf.impl.GrEMFVertexImpl; import de.uni_koblenz.gremf.resource.GrEMFResourceFactoryImpl; import de.uni_koblenz.gremf.schema.impl.GrEMFPackageImpl; import de.uni_koblenz.gremf.schema.impl.GrEMFSchemaImpl; import de.uni_koblenz.gremftest.notifications.TestAdapter; import de.uni_koblenz.jgralab.Edge; import de.uni_koblenz.jgralab.Graph; import de.uni_koblenz.jgralab.GraphIO; import de.uni_koblenz.jgralab.GraphIOException; import de.uni_koblenz.jgralab.ImplementationType; import de.uni_koblenz.jgralab.Vertex; import de.uni_koblenz.jgralab.schema.Attribute; import de.uni_koblenz.jgralab.schema.EdgeClass; import de.uni_koblenz.jgralab.schema.Schema; import de.uni_koblenz.jgralab.schema.VertexClass; public class GrEMFIOTest { @Test public void schemaTest() throws GraphIOException { System.out.println("-----------------------------------------"); System.out.println(); System.out.println("Test load Schema and print Classes of Elements\n"); Schema schem = GrEMFIO.loadSchemaFromFile(System .getProperty("user.dir") + File.separator + "models" + File.separator + "university_graph.tg"); System.out.println(schem.getQualifiedName()); System.out.println(((GrEMFPackageImpl) schem.getDefaultPackage()) .getNsPrefix()); System.out.println(((GrEMFPackageImpl) schem.getDefaultPackage()) .getNsURI()); System.out.println(schem + " : " + schem.getClass()); System.out.println(schem.getGraphClass() + " : " + schem.getGraphClass().getClass()); for (VertexClass vc : schem.getGraphClass().getVertexClasses()) { System.out.println(vc + " : " + vc.getClass()); for (Attribute a : vc.getAttributeList()) { System.out.println(" - " + a + " : " + a.getClass() + " : " + a.getDomain().getClass()); } } for (EdgeClass ec : schem.getGraphClass().getEdgeClasses()) { System.out.println(ec + " : " + ec.getClass()); } Vector<de.uni_koblenz.jgralab.schema.Package> packages = new Vector<de.uni_koblenz.jgralab.schema.Package>(); for (de.uni_koblenz.jgralab.schema.Package p : packages) { System.out.println(p + " : " + p.getClass()); } System.out.println(); } public void getPackages( Vector<de.uni_koblenz.jgralab.schema.Package> packages, de.uni_koblenz.jgralab.schema.Package defpack) { packages.add(defpack); for (de.uni_koblenz.jgralab.schema.Package p : defpack.getSubPackages()) { this.getPackages(packages, p); } } @Test public void instanceTest() throws GraphIOException { System.out.println("-----------------------------------------"); System.out.println(); System.out.println("Test load Graph and print Classes of Elements\n"); Schema schema = GrEMFIO .loadSchemaFromFile("models/university_graph.tg"); System.out.println(schema.getClass()); Graph g = GraphIO.loadGraphFromFile("models/university_graph.tg", schema, ImplementationType.GENERIC, null); System.out.println(((GrEMFPackageImpl) schema.getDefaultPackage()) .getNsURI()); System.out.println(g.getClass()); for (Vertex v : g.vertices()) { System.out.println(v + " ::: " + v.getClass()); for (Attribute a : v.getAttributedElementClass().getAttributeList()) { System.out.println(" - " + a.getName() + " : " + a.getDomain() + " : " + a.getDomain().getClass()); } } for (Edge e : g.edges()) { System.out.println(e + " ::: " + e.getClass()); System.out.println(e.getReversedEdge() + " ::: " + e.getReversedEdge().getClass()); } GrEMFVertexImpl vertex = (GrEMFVertexImpl) g.getFirstVertex(schema .getGraphClass().getVertexClasses().get(0)); System.out.println("Cross References of " + vertex + ": " + vertex.eCrossReferences()); System.out.println(); } @Test public void testSchemaTraversingEMF() throws GraphIOException { System.out.println("-----------------------------------------"); System.out.println(); System.out.println("Test traverse schema with EMF methods\n"); Schema schem = GrEMFIO.loadSchemaFromFile("models/university_graph.tg"); for (VertexClass v : schem.getGraphClass().getVertexClasses()) { EClass eclass = (EClass) v; System.out.println(eclass.getName()); for (EStructuralFeature feature : eclass .getEAllStructuralFeatures()) { System.out.println(" -- " + feature.getName() + " : " + feature.getEType()); } } for (EdgeClass ec : schem.getGraphClass().getEdgeClasses()) { if (ec instanceof EClass) { EClass eclass = (EClass) ec; System.out.println(eclass.getName()); for (EStructuralFeature feature : eclass .getEAllStructuralFeatures()) { System.out.println(" -- " + feature.getName() + " : " + feature.getEType()); } } } System.out.println(); } @SuppressWarnings("unchecked") @Test public void testInstanceTraversingEMF() throws GraphIOException { System.out.println("-----------------------------------------"); System.out.println(); System.out.println("Test traversing Graph with EMF methods\n"); Schema schema = GrEMFIO .loadSchemaFromFile("models/university_graph.tg"); System.out.println(schema.getClass()); Graph g = GraphIO.loadGraphFromFile("models/university_graph.tg", schema, ImplementationType.GENERIC, null); EObject graphEObject = (EObject) g; for (EObject o : (Iterable<EObject>) graphEObject.eGet(graphEObject .eClass().getEStructuralFeature("vertices"))) { System.out.println(o); for (EStructuralFeature feature : o.eClass() .getEAllStructuralFeatures()) { System.out.println(" -- " + feature.getName() + " : " + o.eGet(feature)); } } for (Edge e : g.edges()) { if (e.getAttributedElementClass() instanceof EClass) { EObject o = (EObject) e; System.out.println(o); for (EStructuralFeature feature : o.eClass() .getEAllStructuralFeatures()) { System.out.println(" -- " + feature.getName() + " : " + o.eGet(feature)); } } } System.out.println(); } @SuppressWarnings("unchecked") @Test public void testUseEMF() throws GraphIOException { System.out.println("-----------------------------------------"); System.out.println(); System.out.println("Test use EMF methods to build graph\n"); Schema schema = GrEMFIO .loadSchemaFromFile("models/university_graph.tg"); EPackage pack = (EPackage) (schema.getPackage("courses")); EClass lectureEClass = (EClass) pack.getEClassifier("Lecture"); System.out.println(schema.isFinished()); EObject ob = pack.getEFactoryInstance().create(lectureEClass); System.out.println(ob + " : " + ob.getClass()); System.out.println(((GrEMFVertexImpl) ob).getGraph()); EPackage personsPack = (EPackage) (schema.getPackage("persons")); EClass professorEClass = (EClass) personsPack .getEClassifier("Professor"); EObject prof = personsPack.getEFactoryInstance() .create(professorEClass); System.out.println(prof + " : " + prof.getClass()); EStructuralFeature lecture = professorEClass .getEStructuralFeature("lecture"); ((List<EObject>) prof.eGet(lecture)).add(ob); EObject lect2 = pack.getEFactoryInstance().create(lectureEClass); ((List<EObject>) prof.eGet(lecture)).add(lect2); EObject lect3 = pack.getEFactoryInstance().create(lectureEClass); ((List<EObject>) prof.eGet(lecture)).add(lect3); System.out.println(prof.eGet(lecture)); System.out.println(((List<EObject>) prof.eGet(lecture)).subList(0, 1)); } @SuppressWarnings("unchecked") @Test public void testEMF2() throws GraphIOException { Schema schema = GrEMFIO.loadSchemaFromFile("models/citymapschema.tg"); EPackage pack = (EPackage) (schema.getDefaultPackage()); EClass inersec = (EClass) pack.getEClassifier("Intersection"); EObject ob = pack.getEFactoryInstance().create(inersec); ob.eAdapters().add(new TestAdapter()); EClass superJunc = (EClass) pack.getEClassifier("Junction"); EStructuralFeature feat = superJunc.getEStructuralFeature("test"); System.out.println(feat + " : " + feat.getClass()); System.out.println(ob.eGet(feat)); ArrayList<String> list = new ArrayList<String>(); list.add("hut"); list.add("tut"); list.add("guck"); ob.eSet(feat, list); System.out.println(ob.eGet(feat)); ((List<String>) ob.eGet(feat)).add("hans"); System.out.println(ob.eGet(feat)); ((List<String>) ob.eGet(feat)).add(1, "indTest"); System.out.println(ob.eGet(feat)); ((List<String>) ob.eGet(feat)).remove(0); System.out.println(ob.eGet(feat)); ((List<String>) ob.eGet(feat)).remove("indTest"); System.out.println(ob.eGet(feat)); GraphIO.saveGraphToFile(((GrEMFVertexImpl) ob).getGraph(), "models" + File.separator + "generated" + File.separator + "citymaptestgraph.tg", null); } @Test public void testLoadWithDate() throws GraphIOException { Schema schema = GrEMFIO .loadSchemaFromFile("models/citymapgraph_modified.tg"); GraphIO.loadGraphFromFile("models/citymapgraph_modified.tg", schema, ImplementationType.GENERIC, null); } @Test public void testUniversitySchema() throws GraphIOException { ResourceSet load_resourceSet = new ResourceSetImpl(); load_resourceSet.getResourceFactoryRegistry() .getExtensionToFactoryMap() .put("gremf", new GrEMFResourceFactoryImpl()); Resource schemaRes = load_resourceSet.getResource( URI.createURI("models" + File.separator + "university.gremf"), true); GrEMFSchemaImpl schema = (GrEMFSchemaImpl) ((GrEMFPackageImpl) schemaRes .getContents().get(0)).getSchema(); Graph g = schema.createGraph(ImplementationType.GENERIC); g.save("models/generated/jgraviewuni.tg"); } }