Skip to content

Package: UpdateOperationsRunner

UpdateOperationsRunner

nameinstructionbranchcomplexitylinemethod
UpdateOperationsRunner(Logger)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
generateValueForProperty(OWLClassP, URI)
M: 7 C: 19
73%
M: 3 C: 3
50%
M: 3 C: 1
25%
M: 1 C: 4
80%
M: 0 C: 1
100%
initialize()
M: 0 C: 89
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
lambda$0(OWLClassA)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
modificationsOfCollectionAfterCascadeMergeAreWrittenOnCommit()
M: 0 C: 97
100%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 21
100%
M: 0 C: 1
100%
persistEntityWithList()
M: 0 C: 36
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 8
100%
M: 0 C: 1
100%
static {...}
M: 0 C: 1
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
testAddNewToProperties()
M: 0 C: 138
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 25
100%
M: 0 C: 1
100%
testAddNewTypedPropertyWithValues()
M: 0 C: 97
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testAddPropertiesWhenTheyWereNullOriginally()
M: 0 C: 76
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
testAddPropertyValue()
M: 1 C: 178
99%
M: 1 C: 7
88%
M: 1 C: 4
80%
M: 0 C: 30
100%
M: 0 C: 1
100%
testAddPropertyValueDetached()
M: 0 C: 90
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
testAddToReferencedList()
M: 0 C: 93
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
testAddToSimpleList()
M: 0 C: 126
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 23
100%
M: 0 C: 1
100%
testAddTypedPropertyValue()
M: 0 C: 86
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 15
100%
M: 0 C: 1
100%
testCascadeOfNewlyPersistedOnMerge()
M: 0 C: 110
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 21
100%
M: 0 C: 1
100%
testClearReferencedList()
M: 0 C: 77
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
testClearSimpleList()
M: 2 C: 83
98%
M: 2 C: 4
67%
M: 2 C: 2
50%
M: 0 C: 16
100%
M: 0 C: 1
100%
testMergeDetachedCascade()
M: 0 C: 97
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 21
100%
M: 0 C: 1
100%
testMergeDetachedWithChanges()
M: 0 C: 92
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 17
100%
M: 0 C: 1
100%
testMergeDetachedWithObjectPropertyChange()
M: 0 C: 108
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 19
100%
M: 0 C: 1
100%
testMergeSet()
M: 0 C: 59
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
testModifyAttributesOfBasicTypes()
M: 1 C: 100
99%
M: 1 C: 1
50%
M: 1 C: 1
50%
M: 0 C: 16
100%
M: 0 C: 1
100%
testModifyEnumAttribute()
M: 0 C: 61
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 13
100%
M: 0 C: 1
100%
testModifyInferredAttribute()
M: 8 C: 34
81%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 3 C: 6
67%
M: 0 C: 1
100%
testRemoveFromReferencedList()
M: 0 C: 107
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
testRemoveFromSimpleList()
M: 0 C: 104
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 18
100%
M: 0 C: 1
100%
testReplaceReferencedList()
M: 0 C: 127
100%
M: 2 C: 6
75%
M: 2 C: 3
60%
M: 0 C: 24
100%
M: 0 C: 1
100%
testReplaceSimpleList()
M: 0 C: 127
100%
M: 2 C: 6
75%
M: 2 C: 3
60%
M: 0 C: 24
100%
M: 0 C: 1
100%
testUpdateAnnotationPropertyWithUriValueToDifferentValue()
M: 0 C: 59
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 12
100%
M: 0 C: 1
100%
testUpdateDataLeaveLazy()
M: 0 C: 83
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 20
100%
M: 0 C: 1
100%
testUpdateDataPropertySetNull()
M: 0 C: 65
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
testUpdatePlainLiteralObjectPropertyValueToAnotherIndividual()
M: 0 C: 65
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
testUpdatePlainLiteralObjectPropertyValueToNull()
M: 0 C: 64
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
testUpdatePluralPlainLiteralObjectPropertyAttribute()
M: 0 C: 79
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 15
100%
M: 0 C: 1
100%
testUpdateReference()
M: 0 C: 138
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 25
100%
M: 0 C: 1
100%
testUpdateReferencedListByRemovingAndAddingItems()
M: 0 C: 79
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 13
100%
M: 0 C: 1
100%
testUpdateSimpleListOfIdentifiersByAddingNewItems()
M: 0 C: 78
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 13
100%
M: 0 C: 1
100%
testUpdateStringAnnotationPropertyValue()
M: 0 C: 57
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 12
100%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (C) 2016 Czech Technical University in Prague
3: *
4: * This program is free software: you can redistribute it and/or modify it under
5: * the terms of the GNU General Public License as published by the Free Software
6: * Foundation, either version 3 of the License, or (at your option) any
7: * later version.
8: *
9: * This program is distributed in the hope that it will be useful, but WITHOUT
10: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
12: * details. You should have received a copy of the GNU General Public License
13: * along with this program. If not, see <http://www.gnu.org/licenses/>.
14: */
15: package cz.cvut.kbss.jopa.test.runner;
16:
17: import cz.cvut.kbss.jopa.exceptions.OWLInferredAttributeModifiedException;
18: import cz.cvut.kbss.jopa.test.*;
19: import cz.cvut.kbss.jopa.test.environment.Generators;
20: import org.junit.Test;
21: import org.slf4j.Logger;
22:
23: import java.lang.reflect.Field;
24: import java.net.URI;
25: import java.net.URL;
26: import java.util.*;
27:
28: import static org.junit.Assert.*;
29:
30: public abstract class UpdateOperationsRunner extends BaseRunner {
31:
32: private OWLClassA entityA2;
33: private OWLClassF entityF;
34: private OWLClassJ entityJ;
35: private OWLClassO entityO;
36:
37: public UpdateOperationsRunner(Logger logger) {
38: super(logger);
39: initialize();
40: }
41:
42: private void initialize() {
43: this.entityF = new OWLClassF();
44: entityF.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityF"));
45: this.entityA2 = new OWLClassA();
46: entityA2.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityA2"));
47: this.entityJ = new OWLClassJ();
48: entityJ.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityJ"));
49: final Set<OWLClassA> set = new HashSet<>(2);
50: set.add(entityA);
51: set.add(entityA2);
52: entityJ.setOwlClassA(set);
53: this.entityO = new OWLClassO(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityO"));
54: final Set<OWLClassE> es = new HashSet<>();
55:• for (int i = 0; i < 5; i++) {
56: final OWLClassE e = new OWLClassE();
57: e.setStringAttribute("StringAttributeNo" + i);
58: es.add(e);
59: }
60: entityO.setOwlClassESet(es);
61: }
62:
63: @Test
64: public void testUpdateDataLeaveLazy() throws Exception {
65: logger.debug(
66: "Test: update data property. Leaves lazily loaded field empty and checks that after commit the field's value hasn't changed.");
67: this.em = getEntityManager("UpdateDataProperty", false);
68: entityB.setProperties(Generators.createProperties());
69: persist(entityB);
70:
71: em.getTransaction().begin();
72: final OWLClassB b = em.find(OWLClassB.class, entityB.getUri());
73: assertNotNull(b);
74: final Field propsField = OWLClassB.class.getDeclaredField("properties");
75: propsField.setAccessible(true);
76: assertNull(propsField.get(b));
77: final String newString = "NewString";
78: b.setStringAttribute(newString);
79: em.getTransaction().commit();
80:
81: final OWLClassB res = em.find(OWLClassB.class, entityB.getUri());
82: assertNotNull(res);
83: assertEquals(newString, res.getStringAttribute());
84: assertNotNull(res.getProperties());
85: assertEquals(entityB.getProperties(), res.getProperties());
86: }
87:
88: @Test
89: public void testUpdateDataPropertySetNull() {
90: logger.debug("Test: update data property. Set it to null.");
91: this.em = getEntityManager("UpdateDataPropertyToNull", true);
92: persist(entityA);
93:
94: em.getTransaction().begin();
95: final OWLClassA a = em.find(OWLClassA.class, entityA.getUri());
96: assertNotNull(a);
97: assertNotNull(a.getStringAttribute());
98: a.setStringAttribute(null);
99: em.getTransaction().commit();
100:
101: final OWLClassA res = em.find(OWLClassA.class, entityA.getUri());
102: assertNotNull(res);
103: assertNull(res.getStringAttribute());
104: assertEquals(entityA.getTypes(), res.getTypes());
105: }
106:
107: @Test
108: public void testUpdateReference() {
109: logger.debug("Test: update reference to entity.");
110: this.em = getEntityManager("UpdateReference", true);
111: persist(entityD, entityI);
112: // em.persist(entityA, ctx);
113:
114: final OWLClassA newA = new OWLClassA();
115: newA.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/newEntityA"));
116: newA.setStringAttribute("newA");
117: em.getTransaction().begin();
118: final OWLClassD d = em.find(OWLClassD.class, entityD.getUri());
119: assertNotNull(d.getOwlClassA());
120: d.setOwlClassA(newA);
121: final OWLClassI i = em.find(OWLClassI.class, entityI.getUri());
122: assertNotNull(i.getOwlClassA());
123: i.setOwlClassA(newA);
124: em.persist(newA);
125: em.getTransaction().commit();
126:
127: final OWLClassA resA1 = em.find(OWLClassA.class, newA.getUri());
128: assertNotNull(resA1);
129: final OWLClassD resD = em.find(OWLClassD.class, d.getUri());
130: assertEquals(resA1.getUri(), resD.getOwlClassA().getUri());
131: //                assertSame(resD.getOwlClassA(), resA1);
132: assertNotNull(em.find(OWLClassA.class, entityA.getUri()));
133: final OWLClassI resI = em.find(OWLClassI.class, i.getUri());
134: assertEquals(newA.getUri(), resI.getOwlClassA().getUri());
135: assertNotNull(em.find(OWLClassA.class, entityA.getUri()));
136: assertEquals(resA1.getUri(), resI.getOwlClassA().getUri());
137: //                assertEquals(resA1, resI.getOwlClassA());
138: }
139:
140: @Test
141: public void testMergeSet() throws Exception {
142: logger.debug("Test: merge set property.");
143: this.em = getEntityManager("MergeSet", false);
144: persist(entityJ);
145: em.clear();
146:
147: entityJ.getOwlClassA().forEach(a -> a.setStringAttribute("NEWVALUE"));
148:
149: em.getTransaction().begin();
150: OWLClassJ merged = em.merge(entityJ);
151:
152:• for (final OWLClassA a : merged.getOwlClassA()) {
153: assertEquals(a.getStringAttribute(), "NEWVALUE");
154: }
155: em.getTransaction().commit();
156: }
157:
158: @Test
159: public void testMergeDetachedWithChanges() {
160: logger.debug("Test: merge detached entity with changes.");
161: this.em = getEntityManager("UpdateDetached", true);
162: persist(entityA);
163:
164: final OWLClassA a = em.find(OWLClassA.class, entityA.getUri());
165: assertTrue(em.contains(a));
166: em.detach(a);
167: assertFalse(em.contains(a));
168: final String newType = "http://krizik.felk.cvut.cz/ontologies/jopa/entities#AddedType";
169: a.getTypes().add(newType);
170: em.getTransaction().begin();
171: final OWLClassA merged = em.merge(a);
172: assertTrue(merged.getTypes().contains(newType));
173: em.getTransaction().commit();
174:
175: final OWLClassA res = em.find(OWLClassA.class, a.getUri());
176: assertEquals(a.getTypes().size(), res.getTypes().size());
177: assertTrue(res.getTypes().containsAll(a.getTypes()));
178: }
179:
180: @Test
181: public void testMergeDetachedCascade() {
182: logger.debug("Test: merge detached with cascade.");
183: this.em = getEntityManager("UpdateCascade", true);
184: em.getTransaction().begin();
185: em.persist(entityH);
186: assertTrue(em.contains(entityA));
187: em.getTransaction().commit();
188:
189: em.getTransaction().begin();
190: final OWLClassH h = em.find(OWLClassH.class, entityH.getUri());
191: assertNotNull(h.getOwlClassA());
192: em.detach(h);
193: assertFalse(em.contains(h));
194: assertFalse(em.contains(h.getOwlClassA()));
195: final String newStr = "newStringAttribute";
196: h.getOwlClassA().setStringAttribute(newStr);
197: final OWLClassH merged = em.merge(h);
198: assertEquals(newStr, merged.getOwlClassA().getStringAttribute());
199: em.getTransaction().commit();
200:
201: final OWLClassA res = em.find(OWLClassA.class, entityA.getUri());
202: assertNotNull(res);
203: assertEquals(newStr, res.getStringAttribute());
204: }
205:
206: @Test
207: public void testMergeDetachedWithObjectPropertyChange() {
208: logger.debug("Test: merge detached with object property change.");
209: this.em = getEntityManager("UpdateDetachedWithOPChange", true);
210: persist(entityD, entityA);
211:
212: final OWLClassD d = em.find(OWLClassD.class, entityD.getUri());
213: em.detach(d);
214: d.setOwlClassA(entityA2);
215: em.getTransaction().begin();
216: em.merge(d);
217: em.persist(entityA2);
218: em.getTransaction().commit();
219:
220: final OWLClassD res = em.find(OWLClassD.class, entityD.getUri());
221: assertNotNull(res);
222: assertEquals(entityA2.getUri(), res.getOwlClassA().getUri());
223: assertEquals(entityA2.getStringAttribute(), res.getOwlClassA().getStringAttribute());
224: final OWLClassA resA = em.find(OWLClassA.class, entityA.getUri());
225: assertNotNull(resA);
226: assertEquals(entityA.getStringAttribute(), resA.getStringAttribute());
227: assertEquals(entityA.getTypes(), resA.getTypes());
228: }
229:
230: @Test
231: public void testRemoveFromSimpleList() {
232: logger.debug("Test: remove entity from simple list. (But keep it in the ontology.)");
233: this.em = getEntityManager("UpdateRemoveFromSimpleList", true);
234: entityC.setSimpleList(Generators.createSimpleList());
235: persistEntityWithList();
236:
237: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
238: assertNotNull(c);
239: em.getTransaction().begin();
240: final OWLClassA a = c.getSimpleList().get(1);
241: c.getSimpleList().remove(a);
242: em.getTransaction().commit();
243:
244: final OWLClassA resA = em.find(OWLClassA.class, a.getUri());
245: assertNotNull(resA);
246: final OWLClassC resC = em.find(OWLClassC.class, c.getUri());
247: assertEquals(c.getSimpleList().size(), resC.getSimpleList().size());
248: assertEquals(entityC.getSimpleList().size() - 1, resC.getSimpleList().size());
249:• for (OWLClassA aa : resC.getSimpleList()) {
250: assertFalse(resA.getUri().equals(aa.getUri()));
251: }
252: }
253:
254: private void persistEntityWithList() {
255: em.getTransaction().begin();
256: em.persist(entityC);
257:• if (entityC.getSimpleList() != null) {
258: entityC.getSimpleList().forEach(em::persist);
259: }
260:• if (entityC.getReferencedList() != null) {
261: entityC.getReferencedList().forEach(em::persist);
262: }
263: em.getTransaction().commit();
264: }
265:
266: @Test
267: public void testAddToSimpleList() {
268: logger.debug("Test: add entity to simple list.");
269: this.em = getEntityManager("UpdateAddToSimpleList", true);
270: entityC.setSimpleList(Generators.createSimpleList());
271: em.getTransaction().begin();
272: em.persist(entityC);
273: entityC.getSimpleList().forEach(em::persist);
274: em.persist(entityA);
275: em.getTransaction().commit();
276:
277: em.getTransaction().begin();
278: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
279: assertNotNull(c);
280: final OWLClassA a = em.find(OWLClassA.class, entityA.getUri());
281: assertNotNull(a);
282: assertFalse(c.getSimpleList().contains(a));
283: c.getSimpleList().add(a);
284: em.getTransaction().commit();
285:
286: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
287: assertEquals(c.getSimpleList().size(), resC.getSimpleList().size());
288: assertEquals(entityC.getSimpleList().size() + 1, resC.getSimpleList().size());
289: final OWLClassA resA = em.find(OWLClassA.class, entityA.getUri());
290: assertNotNull(resA);
291: assertTrue(resC.getSimpleList().contains(resA));
292: }
293:
294: @Test
295: public void testClearSimpleList() {
296: logger.debug("Test: clear a simple list (but keep the entities in ontology).");
297: this.em = getEntityManager("UpdateClearSimpleList", true);
298: entityC.setSimpleList(Generators.createSimpleList());
299: persistEntityWithList();
300:
301: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
302: assertNotNull(c);
303: assertFalse(c.getSimpleList().isEmpty());
304: em.getTransaction().begin();
305: c.getSimpleList().clear();
306: em.getTransaction().commit();
307:
308: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
309: assertNotNull(resC);
310:• assertTrue(resC.getSimpleList() == null || resC.getSimpleList().isEmpty());
311:• for (OWLClassA a : entityC.getSimpleList()) {
312: assertNotNull(em.find(OWLClassA.class, a.getUri()));
313: }
314: }
315:
316: @Test
317: public void testReplaceSimpleList() {
318: logger.debug("Test: replace simple list with a new one.");
319: this.em = getEntityManager("UpdateReplaceSimpleList", true);
320: entityC.setSimpleList(Generators.createSimpleList());
321: persistEntityWithList();
322:
323: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
324: final List<OWLClassA> newList = new ArrayList<>(1);
325: newList.add(entityA);
326: em.getTransaction().begin();
327: em.persist(entityA);
328: c.setSimpleList(newList);
329: em.getTransaction().commit();
330:
331: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
332: assertNotNull(resC);
333: assertEquals(newList.size(), resC.getSimpleList().size());
334: boolean found;
335:• for (OWLClassA a : newList) {
336: found = false;
337:• for (OWLClassA aa : resC.getSimpleList()) {
338:• if (a.getUri().equals(aa.getUri())) {
339: found = true;
340: break;
341: }
342: }
343: assertTrue(found);
344: }
345:• for (OWLClassA a : entityC.getSimpleList()) {
346: assertNotNull(em.find(OWLClassA.class, a.getUri()));
347: }
348: }
349:
350: @Test
351: public void testRemoveFromReferencedList() {
352: logger.debug("Test: remove entity from referenced list. (But keep it in the ontology.");
353: this.em = getEntityManager("UpdateRemoveFromReferencedList", true);
354: entityC.setReferencedList(Generators.createReferencedList());
355: persistEntityWithList();
356:
357: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
358: assertNotNull(c);
359: em.getTransaction().begin();
360: final OWLClassA a = c.getReferencedList().get(Generators.randomInt(c.getReferencedList().size()));
361: c.getReferencedList().remove(a);
362: em.getTransaction().commit();
363:
364: final OWLClassA resA = em.find(OWLClassA.class, a.getUri());
365: assertNotNull(resA);
366: final OWLClassC resC = em.find(OWLClassC.class, c.getUri());
367: assertEquals(c.getReferencedList().size(), resC.getReferencedList().size());
368: assertEquals(entityC.getReferencedList().size() - 1, resC.getReferencedList().size());
369:• for (OWLClassA aa : resC.getReferencedList()) {
370: assertFalse(resA.getUri().equals(aa.getUri()));
371: }
372: }
373:
374: @Test
375: public void testAddToReferencedList() {
376: logger.debug("Test: add entity to Referenced list.");
377: this.em = getEntityManager("UpdateAddToReferencedList", true);
378: entityC.setReferencedList(Generators.createReferencedList());
379: persistEntityWithList();
380:
381: em.getTransaction().begin();
382: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
383: assertNotNull(c);
384: em.persist(entityA);
385: c.getReferencedList().add(entityA);
386: em.getTransaction().commit();
387:
388: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
389: assertEquals(c.getReferencedList().size(), resC.getReferencedList().size());
390: assertEquals(entityC.getReferencedList().size() + 1, resC.getReferencedList().size());
391: final OWLClassA resA = em.find(OWLClassA.class, entityA.getUri());
392: assertNotNull(resA);
393: assertTrue(resC.getReferencedList().contains(resA));
394: }
395:
396: @Test
397: public void testClearReferencedList() {
398: logger.debug("Test: clear referenced list (but keep the entities in ontology).");
399: this.em = getEntityManager("UpdateClearReferencedList", true);
400: entityC.setReferencedList(Generators.createReferencedList());
401: persistEntityWithList();
402:
403: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
404: assertNotNull(c);
405: assertFalse(c.getReferencedList().isEmpty());
406: em.getTransaction().begin();
407: c.setReferencedList(null);
408: em.getTransaction().commit();
409:
410: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
411: assertNotNull(resC);
412: assertNull(resC.getReferencedList());
413:• for (OWLClassA a : entityC.getReferencedList()) {
414: assertNotNull(em.find(OWLClassA.class, a.getUri()));
415: }
416: }
417:
418: @Test
419: public void testReplaceReferencedList() {
420: logger.debug("Test: replace referenced list with a new one.");
421: this.em = getEntityManager("UpdateReplaceReferencedList", true);
422: entityC.setReferencedList(Generators.createReferencedList());
423: persistEntityWithList();
424:
425: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
426: final List<OWLClassA> newList = new ArrayList<>(1);
427: newList.add(entityA);
428: em.getTransaction().begin();
429: em.persist(entityA);
430: c.setReferencedList(newList);
431: em.getTransaction().commit();
432:
433: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
434: assertNotNull(resC);
435: assertEquals(newList.size(), resC.getReferencedList().size());
436: boolean found;
437:• for (OWLClassA a : newList) {
438: found = false;
439:• for (OWLClassA aa : resC.getReferencedList()) {
440:• if (a.getUri().equals(aa.getUri())) {
441: found = true;
442: break;
443: }
444: }
445: assertTrue(found);
446: }
447:• for (OWLClassA a : entityC.getReferencedList()) {
448: assertNotNull(em.find(OWLClassA.class, a.getUri()));
449: }
450: }
451:
452: @Test
453: public void testAddNewToProperties() {
454: logger.debug("Test: add a new property value to entity's properties.");
455: this.em = getEntityManager("UpdateAddNewToProperties", false);
456: entityB.setProperties(Generators.createProperties());
457: final Map<String, Set<String>> expected = new HashMap<>(entityB.getProperties().size() + 3);
458: expected.putAll(entityB.getProperties());
459: persist(entityB);
460: em.clear();
461:
462: final OWLClassB b = em.find(OWLClassB.class, entityB.getUri());
463: assertNotNull(b);
464: assertEquals(expected.size(), b.getProperties().size());
465: em.getTransaction().begin();
466: b.getProperties().put("http://krizik.felk.cvut.cz/ontologies/jopa/attributes#propertyFour",
467: Collections.singleton("http://krizik.felk.cvut.cz/ontologies/jopa/Stroustrup"));
468: expected.putAll(b.getProperties());
469: em.getTransaction().commit();
470:
471: final OWLClassB res = em.find(OWLClassB.class, b.getUri());
472: assertNotNull(res);
473: assertEquals(expected.size(), res.getProperties().size());
474:• for (Map.Entry<String, Set<String>> e : expected.entrySet()) {
475: assertTrue(res.getProperties().containsKey(e.getKey()));
476: final Set<String> s = e.getValue();
477: final Set<String> resS = res.getProperties().get(e.getKey());
478: assertEquals(s.size(), resS.size());
479: assertTrue(s.containsAll(resS));
480: }
481: }
482:
483: @Test
484: public void testAddPropertyValue() {
485: logger.debug("Test: add another value to an existing property.");
486: this.em = getEntityManager("UpdateAddPropertyValue", false);
487: entityB.setProperties(Generators.createProperties());
488: final Map<String, Set<String>> expected = new HashMap<>(entityB.getProperties().size() + 3);
489: final String prop = entityB.getProperties().keySet().iterator().next();
490: expected.putAll(entityB.getProperties());
491: persist(entityB);
492: em.clear();
493:
494: final OWLClassB b = em.find(OWLClassB.class, entityB.getUri());
495: assertNotNull(b);
496: assertEquals(expected.size(), b.getProperties().size());
497: em.getTransaction().begin();
498: b.getProperties().get(prop).add("http://krizik.felk.cvut.cz/ontologies/jopa/Stroustrup");
499: expected.putAll(b.getProperties());
500: em.getTransaction().commit();
501:
502: final OWLClassB res = em.find(OWLClassB.class, b.getUri());
503: assertNotNull(res);
504: assertEquals(expected.size(), res.getProperties().size());
505:• for (Map.Entry<String, Set<String>> e : expected.entrySet()) {
506: assertTrue(res.getProperties().containsKey(e.getKey()));
507: final Set<String> s = e.getValue();
508: final Set<String> resS = res.getProperties().get(e.getKey());
509: assertEquals(s.size(), resS.size());
510:• if (e.getKey().equals(prop)) {
511:• assertTrue(s.size() > 1);
512:• for (String val : s) {
513: assertTrue(resS.contains(val));
514: }
515: } else {
516: assertTrue(resS.contains(s.iterator().next()));
517: }
518: }
519: }
520:
521: @Test
522: public void testAddPropertyValueDetached() {
523: logger.debug("Test: add another value to an existing property.");
524: this.em = getEntityManager("UpdateAddPropertyValueDetached", false);
525: entityB.setProperties(Generators.createProperties());
526: final String prop = entityB.getProperties().keySet().iterator().next();
527: final String newPropertyValue = "http://krizik.felk.cvut.cz/ontologies/jopa#newPropertyValue";
528: persist(entityB);
529: em.clear();
530:
531: final OWLClassB b = em.find(OWLClassB.class, entityB.getUri());
532: b.getProperties().get(prop).add(newPropertyValue);
533: em.detach(b);
534: em.getTransaction().begin();
535: em.merge(b);
536: em.getTransaction().commit();
537:
538: final OWLClassB res = em.find(OWLClassB.class, entityB.getUri());
539: assertNotNull(res);
540: assertTrue(res.getProperties().get(prop).contains(newPropertyValue));
541: }
542:
543: @Test
544: public void testAddNewTypedPropertyWithValues() {
545: logger.debug("Test: add a new property with values. Typed.");
546: this.em = getEntityManager("UpdateAddNewToPropertiesTyped", false);
547: entityP.setProperties(Generators.createTypedProperties());
548: persist(entityP);
549: em.clear();
550:
551: final OWLClassP p = em.find(OWLClassP.class, entityP.getUri());
552: em.getTransaction().begin();
553: final URI property = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#newProperty");
554: p.getProperties().put(property, new HashSet<>(Arrays.asList(1, "Two", new Date())));
555: em.getTransaction().commit();
556:
557: em.clear();
558:
559: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
560: assertNotNull(res);
561: assertTrue(res.getProperties().containsKey(property));
562: assertEquals(p.getProperties(), res.getProperties());
563: }
564:
565: @Test
566: public void testAddTypedPropertyValue() {
567: logger.debug("Test: add an existing property value. Typed.");
568: this.em = getEntityManager("UpdateAddPropertyValueTyped", false);
569: entityP.setProperties(Generators.createTypedProperties());
570: persist(entityP);
571: em.clear();
572:
573: final OWLClassP p = em.find(OWLClassP.class, entityP.getUri());
574: em.getTransaction().begin();
575: final URI property = p.getProperties().keySet().iterator().next();
576: final Object value = generateValueForProperty(p, property);
577: p.getProperties().get(property).add(value);
578: em.getTransaction().commit();
579:
580: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
581: assertTrue(res.getProperties().get(property).contains(value));
582: assertEquals(p.getProperties(), res.getProperties());
583: }
584:
585: private Object generateValueForProperty(OWLClassP instance, URI property) {
586: final Set<Object> values = instance.getProperties().get(property);
587:• assert values != null && !values.isEmpty();
588:• if (values.iterator().next() instanceof URI) {
589: return URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#newPropertyValue");
590: } else {
591: return "StringValue";
592: }
593: }
594:
595: @Test(expected = OWLInferredAttributeModifiedException.class)
596: public void testModifyInferredAttribute() {
597: logger.debug("Test: modify an inferred attribute.");
598: this.em = getEntityManager("ModifyInferredAttribute", false);
599: persist(entityF);
600:
601: em.getTransaction().begin();
602: final OWLClassF f = em.find(OWLClassF.class, entityF.getUri());
603: assertNotNull(f);
604: f.setSecondStringAttribute("otherValue");
605: em.getTransaction().commit();
606: }
607:
608: @Test
609: public void testModifyAttributesOfBasicTypes() {
610: logger.debug("Test: modify attributes of basic Java types (Integer, Boolean etc.).");
611: this.em = getEntityManager("ModifyBasicTypeAttributes", false);
612: persist(entityM);
613:
614: em.getTransaction().begin();
615: final OWLClassM m = em.find(OWLClassM.class, entityM.getKey());
616:• m.setBooleanAttribute(!entityM.getBooleanAttribute());
617: m.setDoubleAttribute(m.getDoubleAttribute() - 100.0);
618: m.setLongAttribute(m.getLongAttribute() + 100L);
619: m.setDateAttribute(new Date(System.currentTimeMillis() + 10000));
620: em.getTransaction().commit();
621:
622: final OWLClassM res = em.find(OWLClassM.class, entityM.getKey());
623: assertEquals(m.getBooleanAttribute(), res.getBooleanAttribute());
624: assertEquals(m.getLongAttribute(), res.getLongAttribute());
625: assertEquals(m.getDoubleAttribute(), res.getDoubleAttribute());
626: assertEquals(m.getDateAttribute(), res.getDateAttribute());
627: }
628:
629: @Test
630: public void testModifyEnumAttribute() {
631: logger.debug("Test: modify enum attribute.");
632: this.em = getEntityManager("ModifyEnumAttribute", false);
633: assertNotNull(entityM.getEnumAttribute());
634: persist(entityM);
635:
636: final OWLClassM.Severity updated = OWLClassM.Severity.LOW;
637: em.getTransaction().begin();
638: final OWLClassM m = em.find(OWLClassM.class, entityM.getKey());
639: m.setEnumAttribute(updated);
640: em.getTransaction().commit();
641:
642: final OWLClassM res = em.find(OWLClassM.class, entityM.getKey());
643: assertNotNull(res);
644: assertEquals(updated, res.getEnumAttribute());
645: }
646:
647: @Test
648: public void testCascadeOfNewlyPersistedOnMerge() {
649: logger.debug("Test: cascade merging of an object that has been just persisted.");
650: this.em = getEntityManager("CascadeMergeWithNewlyPersisted", true);
651: em.getTransaction().begin();
652: em.persist(entityO);
653: entityO.getOwlClassESet().forEach(em::persist);
654: em.getTransaction().commit();
655:
656: final OWLClassE newE = new OWLClassE();
657: newE.setStringAttribute("NewlyAddedE");
658: final OWLClassO toUpdate = em.find(OWLClassO.class, entityO.getUri());
659: em.detach(toUpdate);
660:
661: em.getTransaction().begin();
662: toUpdate.getOwlClassESet().add(newE);
663: em.persist(newE);
664: final OWLClassO merged = em.merge(toUpdate);
665: assertTrue(merged.getOwlClassESet().contains(newE));
666: em.getTransaction().commit();
667:
668: final OWLClassE resE = em.find(OWLClassE.class, newE.getUri());
669: assertNotNull(resE);
670: final OWLClassO resO = em.find(OWLClassO.class, entityO.getUri());
671: assertEquals(entityO.getOwlClassESet().size() + 1, resO.getOwlClassESet().size());
672: }
673:
674: @Test
675: public void modificationsOfCollectionAfterCascadeMergeAreWrittenOnCommit() {
676: logger.debug(
677: "Test: modify collection after cascade merge and check that the changes have been propagated on commit.");
678: this.em = getEntityManager("ModifyCollectionAfterCascadeMerge", true);
679: em.getTransaction().begin();
680: em.persist(entityJ);
681: em.getTransaction().commit();
682:
683: final OWLClassA newA = new OWLClassA(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/newEntityA"));
684: em.getTransaction().begin();
685: final OWLClassJ merged = em.merge(entityJ);
686: merged.getOwlClassA().add(newA);
687: em.persist(newA);
688: em.getTransaction().commit();
689:
690: final OWLClassJ result = em.find(OWLClassJ.class, entityJ.getUri());
691: assertEquals(merged.getOwlClassA().size(), result.getOwlClassA().size());
692: boolean found = false;
693:• for (OWLClassA a : result.getOwlClassA()) {
694:• if (a.getUri().equals(newA.getUri())) {
695: found = true;
696: break;
697: }
698: }
699: assertTrue(found);
700: }
701:
702: @Test
703: public void testAddPropertiesWhenTheyWereNullOriginally() throws Exception {
704: logger.debug("Test: add properties on update when the field was originally null.");
705: this.em = getEntityManager("AddPropertiesToNullOriginals", true);
706: em.getTransaction().begin();
707: assertNull(entityB.getProperties());
708: em.persist(entityB);
709: em.getTransaction().commit();
710:
711: final OWLClassB update = em.find(OWLClassB.class, entityB.getUri());
712: em.detach(update);
713: final Map<String, Set<String>> properties = Generators.createProperties(2);
714: update.setProperties(properties);
715: em.getTransaction().begin();
716: em.merge(update);
717: em.getTransaction().commit();
718:
719: final OWLClassB result = em.find(OWLClassB.class, entityB.getUri());
720: assertNotNull(result.getProperties());
721: assertEquals(properties, result.getProperties());
722: }
723:
724: @Test
725: public void testUpdatePlainLiteralObjectPropertyValueToAnotherIndividual() throws Exception {
726: logger.debug("Test: update plain literal object property value to a different individual.");
727: this.em = getEntityManager("UpdatePlainLiteralObjectPropertyValue", true);
728: em.getTransaction().begin();
729: entityP.setIndividualUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#oldIndividual"));
730: em.persist(entityP);
731: em.getTransaction().commit();
732:
733: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
734: final URI newValue = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#newIndividual");
735: em.getTransaction().begin();
736: update.setIndividualUri(newValue);
737: em.getTransaction().commit();
738:
739: final OWLClassP result = em.find(OWLClassP.class, entityP.getUri());
740: assertEquals(newValue, result.getIndividualUri());
741: }
742:
743: @Test
744: public void testUpdatePlainLiteralObjectPropertyValueToNull() throws Exception {
745: logger.debug("Test: update plain literal object property value to null.");
746: this.em = getEntityManager("UpdatePlainLiteralObjectPropertyValueToNull", true);
747: em.getTransaction().begin();
748: entityP.setIndividualUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#SomeIndividual"));
749: em.persist(entityP);
750: em.getTransaction().commit();
751:
752: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
753: assertNotNull(update.getIndividualUri());
754: em.getTransaction().begin();
755: update.setIndividualUri(null);
756: em.getTransaction().commit();
757:
758: final OWLClassP result = em.find(OWLClassP.class, entityP.getUri());
759: assertNull(result.getIndividualUri());
760: }
761:
762: @Test
763: public void testUpdatePluralPlainLiteralObjectPropertyAttribute() throws Exception {
764: logger.debug("Test: update plural plain literal object property attribute.");
765: this.em = getEntityManager("UpdatePluralPlainLiteralObjectPropertyValue", true);
766: entityP.setIndividuals(Generators.createUrls());
767: persist(entityP);
768:
769: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
770: em.getTransaction().begin();
771: final URL added = new URL("http://krizik.felk.cvut.cz/ontologies/jopa#added");
772: final URL removed = entityP.getIndividuals().iterator().next();
773: update.getIndividuals().add(added);
774: update.getIndividuals().remove(removed);
775: em.getTransaction().commit();
776:
777: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
778: assertNotNull(res);
779: assertEquals(update.getIndividuals(), res.getIndividuals());
780: }
781:
782: @Test
783: public void testUpdateSimpleListOfIdentifiersByAddingNewItems() throws Exception {
784: this.em = getEntityManager("UpdateSimpleListOfIdentifiersByAddingItems", true);
785: entityP.setSimpleList(Generators.createListOfIdentifiers());
786: persist(entityP);
787:
788: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
789: em.getTransaction().begin();
790:• for (int i = 0; i < Generators.randomPositiveInt(10); i++) {
791: final URI u = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#Added-" + i);
792: // Insert at random position
793: update.getSimpleList().add(Generators.randomInt(update.getSimpleList().size()), u);
794: }
795: em.getTransaction().commit();
796:
797: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
798: assertNotNull(res);
799: assertEquals(update.getSimpleList(), res.getSimpleList());
800: }
801:
802: @Test
803: public void testUpdateReferencedListByRemovingAndAddingItems() throws Exception {
804: this.em = getEntityManager("UpdateReferencedListByRemovingAndAddingItems", true);
805: entityP.setReferencedList(Generators.createListOfIdentifiers());
806: persist(entityP);
807:
808: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
809: em.getTransaction().begin();
810:• for (int i = 0; i < Generators.randomPositiveInt(10); i++) {
811: final URI u = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#Added-" + i);
812: // We might even overwrite items set in previous iterations, but it does not matter. JOPA should handle it
813: update.getReferencedList().set(Generators.randomInt(update.getReferencedList().size()), u);
814: }
815: em.getTransaction().commit();
816:
817: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
818: assertNotNull(res);
819: assertEquals(update.getReferencedList(), res.getReferencedList());
820: }
821:
822: @Test
823: public void testUpdateStringAnnotationPropertyValue() throws Exception {
824: this.em = getEntityManager("UpdateStringAnnotationPropertyValue", true);
825: entityN.setAnnotationProperty("PropertyValue");
826: persist(entityN);
827:
828: final String newValue = "newValue";
829: final OWLClassN update = em.find(OWLClassN.class, entityN.getId());
830: assertNotNull(update);
831: em.getTransaction().begin();
832: update.setAnnotationProperty(newValue);
833: em.getTransaction().commit();
834:
835: final OWLClassN res = em.find(OWLClassN.class, entityN.getId());
836: assertEquals(newValue, res.getAnnotationProperty());
837: }
838:
839: @Test
840: public void testUpdateAnnotationPropertyWithUriValueToDifferentValue() throws Exception {
841: this.em = getEntityManager("UpdateAnnotationPropertyWithUriValueToDifferentValue", true);
842: entityN.setAnnotationUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#value"));
843: persist(entityN);
844:
845: final OWLClassN update = em.find(OWLClassN.class, entityN.getId());
846: assertNotNull(update);
847: em.getTransaction().begin();
848: final URI newUri = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#newValue");
849: update.setAnnotationUri(newUri);
850: em.getTransaction().commit();
851:
852: final OWLClassN res = em.find(OWLClassN.class, entityN.getId());
853: assertEquals(newUri, res.getAnnotationUri());
854: }
855: }