/* * 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.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.Vector; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.EReference; 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 org.pcollections.ArrayPMap; import de.uni_koblenz.gremf.GrEMFIO; import de.uni_koblenz.gremf.resource.GrEMFResourceFactoryImpl; 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.EnumDomain; import de.uni_koblenz.jgralab.schema.RecordDomain; import de.uni_koblenz.jgralab.schema.Schema; import de.uni_koblenz.jgralab.schema.VertexClass; public class Demo { @Test public void loadModelWithJGraLabAPI() throws GraphIOException { Schema schema = GrEMFIO.loadSchemaFromFile(System .getProperty("user.dir") + File.separator + "models" + File.separator + "university_graph.tg"); this.printSchemaJGraLab(schema); Graph g = GraphIO.loadGraphFromFile(System.getProperty("user.dir") + File.separator + "models" + File.separator + "university_graph.tg", schema, ImplementationType.GENERIC, null); this.printModelJGraLab(g); } private void printModelJGraLab(Graph g) { System.out .println("----------------- Printing Graph ---------------------"); System.out.println("Graph: " + g + " : " + g.getClass()); for (Vertex v : g.vertices()) { System.out.println(" - " + v + " : " + v.getClass()); for (Attribute a : v.getAttributedElementClass().getAttributeList()) { System.out.println(" + " + a.getName() + " : " + v.getAttribute(a.getName())); } } for (Edge e : g.edges()) { System.out.println(" - " + e + " : " + e.getClass()); for (Attribute a : e.getAttributedElementClass().getAttributeList()) { System.out.println(" + " + a.getName() + " : " + e.getAttribute(a.getName())); } } System.out.println(); } private void printSchemaJGraLab(Schema schem) { System.out .println("----------------- Printing Schema -------------------"); System.out.println("Schema: "); System.out.println(" - Qualified name: " + schem.getQualifiedName()); System.out.println(" - Class of Schema: " + schem.getClass()); System.out.println(); System.out.println("GraphClass: "); System.out.println(" - " + schem.getGraphClass() + " : " + schem.getGraphClass().getClass()); System.out.println(" - Attributes: "); for (Attribute at : schem.getGraphClass().getAttributeList()) { System.out.println(" + " + at.getName() + " : " + at.getClass() + " with Domain of Class " + at.getDomain().getClass()); } System.out.println(); System.out.println("VertexClasses:"); for (VertexClass vc : schem.getGraphClass().getVertexClasses()) { System.out.println(" - " + vc + " : " + vc.getClass()); for (Attribute at : vc.getAttributeList()) { System.out.println(" + " + at.getName() + " : " + at.getClass() + " with Domain of Class " + at.getDomain().getClass()); } } System.out.println(); System.out.println("EdgeClasses:"); for (EdgeClass ec : schem.getGraphClass().getEdgeClasses()) { System.out.println(" - " + ec + " : " + ec.getClass()); for (Attribute at : ec.getAttributeList()) { System.out.println(" + " + at.getName() + " : " + at.getClass() + " with Domain of Class " + at.getDomain().getClass()); } } System.out.println(); System.out.println("Packages"); 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("\n\n"); } 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 loadModelWithEMFAPI() { ResourceSet rs = new ResourceSetImpl(); rs.getResourceFactoryRegistry().getExtensionToFactoryMap() .put("*", new GrEMFResourceFactoryImpl()); Resource schemaResource = rs.getResource( URI.createURI(System.getProperty("user.dir") + File.separator + "models" + File.separator + "universityExt.gremf"), true); this.printSchemaEMF(schemaResource); Resource instance = rs.getResource( URI.createURI(System.getProperty("user.dir") + File.separator + "models" + File.separator + "model1.universityExt"), true); this.printModelEMF(instance); } private void printModelEMF(Resource instance) { System.out .println("----------------- Printing model with EMF -------------------"); TreeIterator<EObject> i = instance.getAllContents(); System.out.println("EObjects in resource: "); while (i.hasNext()) { EObject eObj = i.next(); System.out.println(" - " + eObj + " : " + eObj.getClass()); for (EStructuralFeature feat : eObj.eClass() .getEAllStructuralFeatures()) { System.out.println(" + " + feat.getName() + " = " + eObj.eGet(feat)); } } System.out.println(); } private void printSchemaEMF(Resource resource) { System.out .println("----------------- Printing Ecore model -------------------"); EPackage pack = (EPackage) resource.getContents().get(0); this.printEPackage(pack); System.out.println(); } private void printEPackage(EPackage pack) { System.out.println("EPackage " + pack.getName()); for (EClassifier ec : pack.getEClassifiers()) { if (ec instanceof EClass) { System.out.println(" - EClass: " + ec + " : " + ec.getClass()); for (EAttribute eat : ((EClass) ec).getEAttributes()) { System.out.println(" + " + eat.getName() + " : " + eat.getClass() + " with EDataType " + eat.getEType()); } for (EReference eref : ((EClass) ec).getEReferences()) { System.out.println(" + " + eref.getName() + " : " + eref.getClass() + " links to " + eref.getEType()); } } else { System.out.println(" - EDataType: " + ec + " : " + ec.getClass()); } } for (EPackage sub : pack.getESubpackages()) { this.printEPackage(sub); } } @Test public void buildModelWithJGraLabAPI() throws GraphIOException { Schema schema = GrEMFIO.loadSchemaFromFile(System .getProperty("user.dir") + File.separator + "models" + File.separator + "university_graph.tg"); Graph graph = schema.createGraph(ImplementationType.GENERIC); Vertex vLecture1 = graph.createVertex(schema.getGraphClass() .getVertexClass("courses.Lecture")); vLecture1.setAttribute("semester", graph.getEnumConstant( (EnumDomain) schema.getDomain("organisation.Semester"), "SS")); vLecture1.setAttribute("year", 2012); Vertex vStudent1 = graph.createVertex(schema.getGraphClass() .getVertexClass("persons.Student")); vStudent1.setAttribute("name", "Hugo"); vStudent1.setAttribute("matriculationNumber", 12455); graph.createEdge( schema.getGraphClass().getEdgeClass("courses.AttendsLecture"), vStudent1, vLecture1); Vertex vExam1 = graph.createVertex(schema.getGraphClass() .getVertexClass("courses.Exam")); ArrayPMap<String, Object> datecomps = ArrayPMap.empty(); datecomps = datecomps.plus("day", 2); datecomps = datecomps.plus("month", 3); datecomps = datecomps.plus("year", 2012); vExam1.setAttribute("date", graph.createRecord( (RecordDomain) schema.getDomain("organisation.Date"), datecomps)); EdgeClass writesExamEC = schema.getGraphClass().getEdgeClass( "courses.WritesExam"); Edge eWritesExam = graph.createEdge(writesExamEC, vStudent1, vExam1); eWritesExam.setAttribute("mark", 2); this.printModelJGraLab(graph); } @SuppressWarnings("unchecked") @Test public void buildModelWithEMFAPI() throws IOException { ResourceSet rs = new ResourceSetImpl(); rs.getResourceFactoryRegistry().getExtensionToFactoryMap() .put("*", new GrEMFResourceFactoryImpl()); Resource schemaResource = rs.getResource( URI.createURI(System.getProperty("user.dir") + File.separator + "models" + File.separator + "universityExt.gremf"), true); EPackage rootPackage = (EPackage) schemaResource.getContents().get(0); EPackage administrationPackage = null; EPackage peoplePackage = null; EPackage connectionPackage = null; for (EPackage sub : rootPackage.getESubpackages().get(0) .getESubpackages()) { if (sub.getName().equals("administration")) { administrationPackage = sub; } else if (sub.getName().equals("people")) { peoplePackage = sub; } else if (sub.getName().equals("connection")) { connectionPackage = sub; } } EClass studentEClass = (EClass) peoplePackage.getEClassifier("Student"); EClass personEClass = (EClass) peoplePackage.getEClassifier("Person"); EObject eobStudent1 = peoplePackage.getEFactoryInstance().create( studentEClass); eobStudent1.eSet( studentEClass.getEStructuralFeature("matriculationnumber"), 123456l); eobStudent1.eSet(personEClass.getEStructuralFeature("name"), "Hugo"); EClass courseEClass = (EClass) administrationPackage .getEClassifier("Course"); EObject eobCourse1 = administrationPackage.getEFactoryInstance() .create(courseEClass); eobCourse1.eSet(courseEClass.getEStructuralFeature("title"), "A very interesting course"); eobCourse1.eSet(courseEClass.getEStructuralFeature("startOfCourse"), new Date(323423)); eobCourse1.eSet(courseEClass.getEStructuralFeature("endOfCourse"), new Date(12345678)); ((EList<EObject>) eobStudent1.eGet(studentEClass .getEStructuralFeature("grEMF_courseVisit"))).add(eobCourse1); EObject eobVisits = ((EList<EObject>) eobStudent1.eGet(studentEClass .getEStructuralFeature("courseVisit"))).get(0); EEnum motEEnum = (EEnum) connectionPackage.getEClassifier("Motivation"); EClass visitsEClass = (EClass) connectionPackage .getEClassifier("Visits"); eobVisits.eSet(visitsEClass.getEStructuralFeature("motivation"), motEEnum.getEEnumLiteral("HIGH_INTEREST")); EClass lectureEClass = (EClass) administrationPackage .getEClassifier("Lecture"); EObject eobLecture1 = administrationPackage.getEFactoryInstance() .create(lectureEClass); eobLecture1.eSet(lectureEClass.getEStructuralFeature("title"), "Something around"); ArrayList<String> caplist = new ArrayList<String>(); caplist.add("Cap1"); caplist.add("Cap2"); caplist.add("Cap3"); eobLecture1.eSet(lectureEClass.getEStructuralFeature("captions"), caplist); ((EList<String>) eobLecture1.eGet(lectureEClass .getEStructuralFeature("captions"))).add("Cap4"); eobCourse1.eSet(courseEClass.getEStructuralFeature("lecture"), eobLecture1); Resource instance = rs.createResource(URI.createURI(System .getProperty("user.dir") + File.separator + "models" + File.separator + "generated" + File.separator + "modelTest_universityExt.xmi")); instance.getContents().add(eobStudent1); instance.getContents().add(eobCourse1); instance.getContents().add(eobVisits); instance.getContents().add(eobLecture1); this.printModelEMF(instance); instance.save(null); } }