/*
* 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.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.junit.Before;
import org.junit.Test;
import org.pcollections.ArrayPMap;
import org.pcollections.ArrayPSet;
import org.pcollections.ArrayPVector;
import org.pcollections.PMap;
import org.pcollections.PSet;
import org.pcollections.PVector;
import de.uni_koblenz.gremf.GrEMFIO;
import de.uni_koblenz.gremf.impl.GrEMFVertexImpl;
import de.uni_koblenz.gremf.schema.impl.GrEMFAttributeImpl;
import de.uni_koblenz.gremf.schema.impl.GrEMFEnumDomainImpl;
import de.uni_koblenz.gremf.schema.impl.GrEMFRecordDomainImpl;
import de.uni_koblenz.gremf.schema.impl.GrEMFVertexClassImpl;
import de.uni_koblenz.jgralab.Graph;
import de.uni_koblenz.jgralab.GraphIOException;
import de.uni_koblenz.jgralab.ImplementationType;
import de.uni_koblenz.jgralab.Record;
import de.uni_koblenz.jgralab.schema.Schema;
public class GrEMFCompositeAttributeTest {
private GrEMFEnumDomainImpl dayOfWeekED;
private GrEMFEnumDomainImpl buildingED;
private GrEMFEnumDomainImpl categoryED;
private GrEMFRecordDomainImpl slotRD;
private GrEMFVertexClassImpl courseVC;
private GrEMFAttributeImpl course_categories;
private GrEMFAttributeImpl course_slots;
private GrEMFAttributeImpl course_toDoLists;
private Graph graph;
private GrEMFVertexImpl courseVertex;
@Before
public void setUp() throws GraphIOException {
Schema schema = GrEMFIO.loadSchemaFromFile(System
.getProperty("user.dir")
+ File.separator
+ "models"
+ File.separator + "compositeAttributeTestSchema.tg");
this.dayOfWeekED = (GrEMFEnumDomainImpl) schema.getDomain("DayOfWeek");
this.buildingED = (GrEMFEnumDomainImpl) schema.getDomain("Building");
this.categoryED = (GrEMFEnumDomainImpl) schema.getDomain("Category");
this.slotRD = (GrEMFRecordDomainImpl) schema.getDomain("Slot");
this.courseVC = schema.getAttributedElementClass("Course");
this.course_categories = (GrEMFAttributeImpl) this.courseVC
.getAttribute("categories");
this.course_slots = (GrEMFAttributeImpl) this.courseVC
.getAttribute("slots");
this.course_toDoLists = (GrEMFAttributeImpl) this.courseVC
.getAttribute("toDoLists");
this.graph = schema.createGraph(ImplementationType.GENERIC);
this.courseVertex = this.graph.createVertex(this.courseVC);
this.courseVertex.setAttribute("name", "Business Processes");
ArrayPSet<Object> cateSet = ArrayPSet.empty();
cateSet = (ArrayPSet<Object>) cateSet.plus(this.graph.getEnumConstant(
this.categoryED, "COMPUTERS"));
cateSet = (ArrayPSet<Object>) cateSet.plus(this.graph.getEnumConstant(
this.categoryED, "ECONOMICS"));
this.courseVertex.setAttribute("categories", cateSet);
PMap<String, Object> recComp = ArrayPMap.empty();
recComp = recComp.plus("building",
this.graph.getEnumConstant(this.buildingED, "B"));
recComp = recComp.plus("dayOfWeek",
this.graph.getEnumConstant(this.dayOfWeekED, "MONDAY"));
recComp = recComp.plus("hours", 2);
recComp = recComp.plus("roomNumber", 16);
recComp = recComp.plus("startHour", 10);
Record slot1Rec = this.graph.createRecord(this.slotRD, recComp);
PMap<String, Object> recComp2 = ArrayPMap.empty();
recComp2 = recComp2.plus("building",
this.graph.getEnumConstant(this.buildingED, "A"));
recComp2 = recComp2.plus("dayOfWeek",
this.graph.getEnumConstant(this.dayOfWeekED, "FRIDAY"));
recComp2 = recComp2.plus("hours", 2);
recComp2 = recComp2.plus("roomNumber", 308);
recComp2 = recComp2.plus("startHour", 12);
Record slot2Rec = this.graph.createRecord(this.slotRD, recComp2);
ArrayPVector<Object> slotList = ArrayPVector.empty();
slotList = (ArrayPVector<Object>) slotList.plus(slot1Rec);
slotList = (ArrayPVector<Object>) slotList.plus(slot2Rec);
this.courseVertex.setAttribute("slots", slotList);
PVector<String> subList1 = ArrayPVector.empty();
subList1 = subList1.plus("List1 ToDo1");
subList1 = subList1.plus("List1 ToDo2");
subList1 = subList1.plus("List1 ToDo3");
PVector<String> subList2 = ArrayPVector.empty();
subList2 = subList2.plus("List2 ToDo1");
subList2 = subList2.plus("List2 ToDo2");
subList2 = subList2.plus("List2 ToDo3");
subList2 = subList2.plus("List2 ToDo4");
PVector<String> subList3 = ArrayPVector.empty();
subList3 = subList3.plus("List3 ToDo1");
PVector<PVector<String>> listOfLists = ArrayPVector.empty();
listOfLists = listOfLists.plus(subList1);
listOfLists = listOfLists.plus(subList2);
listOfLists = listOfLists.plus(subList3);
this.courseVertex.setAttribute("toDoLists", listOfLists);
}
@Test
public void testEGetAndGet() {
System.out.println(this.courseVertex.eGet(this.course_categories));
assertEquals(this.categoryED.getEEnumLiteral("COMPUTERS"),
((List<?>) this.courseVertex.eGet(this.course_categories))
.get(0));
assertEquals(this.categoryED.getEEnumLiteral("ECONOMICS"),
((List<?>) this.courseVertex.eGet(this.course_categories))
.get(1));
assertEquals(this.categoryED.getEEnumLiteral("COMPUTERS"),
((List<?>) this.courseVertex.eGet(this.course_categories))
.iterator().next());
}
@Test
public void testEGetAndGet2() {
System.out
.println(((List<?>) this.courseVertex.eGet(this.course_slots))
.get(0).getClass());
assertTrue(((List<?>) this.courseVertex.eGet(this.course_slots)).get(0) instanceof Map);
@SuppressWarnings("unchecked")
Map<String, ?> map = (Map<String, ?>) ((List<?>) this.courseVertex
.eGet(this.course_slots)).get(0);
assertEquals(this.buildingED.getEEnumLiteral("B"), map.get("building"));
}
@SuppressWarnings("unchecked")
@Test
public void testAdd() {
Map<String, Object> newSlot = new HashMap<String, Object>();
newSlot.put("building", this.buildingED.getEEnumLiteral("K"));
newSlot.put("dayOfWeek", this.dayOfWeekED.getEEnumLiteral("WEDNESDAY"));
newSlot.put("hours", 2);
newSlot.put("roomNumber", 1);
newSlot.put("startHour", 8);
((List<Object>) this.courseVertex.eGet(this.course_slots)).add(newSlot);
assertTrue(((List<Object>) this.courseVertex.eGet(this.course_slots))
.contains(newSlot));
}
@Test
public void testSet1() {
GrEMFVertexImpl o = (GrEMFVertexImpl) EcoreUtil.create(this.courseVC);
HashSet<Object> newValue = new HashSet<Object>();
newValue.add(this.categoryED.getEEnumLiteral("MATHEMATICS"));
o.eSet(this.course_categories, newValue);
assertEquals("MATHEMATICS", ((PSet<?>) o.getAttribute("categories"))
.iterator().next());
}
@Test
public void testSet2() {
GrEMFVertexImpl o = (GrEMFVertexImpl) EcoreUtil.create(this.courseVC);
ArrayList<Object> newValue = new ArrayList<Object>();
Map<String, Object> newSlot = new HashMap<String, Object>();
newSlot.put("building", this.buildingED.getEEnumLiteral("K"));
newSlot.put("dayOfWeek", this.dayOfWeekED.getEEnumLiteral("WEDNESDAY"));
newSlot.put("hours", 2);
newSlot.put("roomNumber", 1);
newSlot.put("startHour", 8);
Map<String, Object> newSlot2 = new HashMap<String, Object>();
newSlot2.put("building", this.buildingED.getEEnumLiteral("A"));
newSlot2.put("dayOfWeek", this.dayOfWeekED.getEEnumLiteral("WEDNESDAY"));
newSlot2.put("hours", 1);
newSlot2.put("roomNumber", 115);
newSlot2.put("startHour", 9);
newValue.add(newSlot);
newValue.add(newSlot2);
o.eSet(this.course_slots, newValue);
}
@SuppressWarnings("unchecked")
@Test
public void testGetListOfList() {
PVector<String> subList1 = ArrayPVector.empty();
subList1 = subList1.plus("List1 ToDo1");
subList1 = subList1.plus("List1 ToDo2");
subList1 = subList1.plus("List1 ToDo3");
PVector<String> subList2 = ArrayPVector.empty();
subList2 = subList2.plus("List2 ToDo1");
subList2 = subList2.plus("List2 ToDo2");
subList2 = subList2.plus("List2 ToDo3");
subList2 = subList2.plus("List2 ToDo4");
PVector<String> subList3 = ArrayPVector.empty();
subList3 = subList3.plus("List3 ToDo1");
PVector<PVector<String>> listOfLists = ArrayPVector.empty();
listOfLists = listOfLists.plus(subList1);
listOfLists = listOfLists.plus(subList2);
listOfLists = listOfLists.plus(subList3);
assertEquals(listOfLists, this.courseVertex.eGet(this.course_toDoLists));
assertEquals(subList1,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(0));
assertEquals(subList2,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(1));
assertEquals(subList3,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(2));
}
@SuppressWarnings("unchecked")
@Test
public void testAddToListOfLists() {
PVector<String> subList1 = ArrayPVector.empty();
subList1 = subList1.plus("List1 ToDo1");
subList1 = subList1.plus("List1 ToDo2");
subList1 = subList1.plus("List1 ToDo3");
PVector<String> subList2 = ArrayPVector.empty();
subList2 = subList2.plus("List2 ToDo1");
subList2 = subList2.plus("List2 ToDo2");
subList2 = subList2.plus("List2 ToDo3");
subList2 = subList2.plus("List2 ToDo4");
PVector<String> subList3 = ArrayPVector.empty();
subList3 = subList3.plus("List3 ToDo1");
PVector<String> subList4 = ArrayPVector.empty();
subList4 = subList4.plus("List4 ToDo1");
subList4 = subList4.plus("List4 ToDo2");
PVector<PVector<String>> listOfLists = ArrayPVector.empty();
listOfLists = listOfLists.plus(subList1);
listOfLists = listOfLists.plus(subList2);
listOfLists = listOfLists.plus(subList3);
listOfLists = listOfLists.plus(subList4);
((List<List<String>>) this.courseVertex.eGet(this.course_toDoLists))
.add(subList4);
assertEquals(listOfLists, this.courseVertex.eGet(this.course_toDoLists));
assertEquals(subList1,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(0));
assertEquals(subList2,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(1));
assertEquals(subList3,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(2));
assertEquals(subList4,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(3));
}
@SuppressWarnings("unchecked")
@Test
public void testSetListOfLists() {
PVector<String> subList1 = ArrayPVector.empty();
subList1 = subList1.plus("NewList1 ToDo1");
subList1 = subList1.plus("NewList1 ToDo2");
PVector<String> subList2 = ArrayPVector.empty();
subList2 = subList2.plus("NewList2 ToDo1");
subList2 = subList2.plus("NewList2 ToDo2");
subList2 = subList2.plus("NewList2 ToDo3");
PVector<PVector<String>> listOfLists = ArrayPVector.empty();
listOfLists = listOfLists.plus(subList1);
listOfLists = listOfLists.plus(subList2);
this.courseVertex.eSet(this.course_toDoLists, listOfLists);
assertEquals(listOfLists, this.courseVertex.eGet(this.course_toDoLists));
assertEquals(subList1,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(0));
assertEquals(subList2,
((List<String>) this.courseVertex.eGet(this.course_toDoLists))
.get(1));
}
}