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%
addingValuesToDatatypePropertyCollectionAddsThemIntoRepository()
M: 0 C: 54
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 9
100%
M: 0 C: 1
100%
generateValueForProperty(OWLClassP, URI)
M: 6 C: 20
77%
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%
mergeDetachedRemovesObsoleteDescriptorInSecondLevelCache()
M: 0 C: 106
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 19
100%
M: 0 C: 1
100%
mergeMergesUpdateToObjectPropertyField()
M: 0 C: 90
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 13
100%
M: 0 C: 1
100%
mergeMergesUpdatedDataPropertyFields()
M: 0 C: 76
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
mergeReplacesReferenceWithInstanceFromRepository()
M: 0 C: 62
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 11
100%
M: 0 C: 1
100%
mergeUpdatesCacheEventWhenDescriptorContainsOnlyAttributeLanguageSetting()
M: 0 C: 72
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 12
100%
M: 0 C: 1
100%
mergedInstanceWithChangesInCascadedPluralReferenceAttributeContainsUpdatedValues()
M: 0 C: 55
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 10
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%
removingValuesFromDatatypePropertyCollectionRemovesThemFromRepository()
M: 0 C: 68
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 14
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%
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: 80
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: 79
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%
testUpdateUriTypes()
M: 0 C: 81
100%
M: 0 C: 4
100%
M: 0 C: 3
100%
M: 0 C: 16
100%
M: 0 C: 1
100%
updateSupportsSavingStringLiteralWithDifferentLanguageTag()
M: 0 C: 76
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 14
100%
M: 0 C: 1
100%
updateWithInvalidInstanceThrowsIntegrityConstraintsViolation()
M: 5 C: 38
88%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 2 C: 7
78%
M: 0 C: 1
100%

Coverage

1: /**
2: * Copyright (C) 2016 Czech Technical University in Prague
3: * <p>
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: * <p>
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.IntegrityConstraintViolatedException;
18: import cz.cvut.kbss.jopa.exceptions.OWLInferredAttributeModifiedException;
19: import cz.cvut.kbss.jopa.exceptions.RollbackException;
20: import cz.cvut.kbss.jopa.model.descriptors.Descriptor;
21: import cz.cvut.kbss.jopa.model.descriptors.EntityDescriptor;
22: import cz.cvut.kbss.jopa.test.*;
23: import cz.cvut.kbss.jopa.test.environment.Generators;
24: import cz.cvut.kbss.jopa.test.environment.TestEnvironmentUtils;
25: import org.junit.Test;
26: import org.slf4j.Logger;
27:
28: import java.lang.reflect.Field;
29: import java.net.MalformedURLException;
30: import java.net.URI;
31: import java.net.URL;
32: import java.util.*;
33: import java.util.stream.Collectors;
34: import java.util.stream.IntStream;
35:
36: import static org.hamcrest.core.Is.isA;
37: import static org.junit.Assert.*;
38:
39: public abstract class UpdateOperationsRunner extends BaseRunner {
40:
41: private OWLClassA entityA2;
42: private OWLClassF entityF;
43: private OWLClassJ entityJ;
44: private OWLClassO entityO;
45:
46: public UpdateOperationsRunner(Logger logger) {
47: super(logger);
48: initialize();
49: }
50:
51: private void initialize() {
52: this.entityF = new OWLClassF();
53: entityF.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityF"));
54: this.entityA2 = new OWLClassA();
55: entityA2.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityA2"));
56: this.entityJ = new OWLClassJ();
57: entityJ.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityJ"));
58: final Set<OWLClassA> set = new HashSet<>(2);
59: set.add(entityA);
60: set.add(entityA2);
61: entityJ.setOwlClassA(set);
62: this.entityO = new OWLClassO(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/entityO"));
63: final Set<OWLClassE> es = new HashSet<>();
64:• for (int i = 0; i < 5; i++) {
65: final OWLClassE e = new OWLClassE();
66: e.setStringAttribute("StringAttributeNo" + i);
67: es.add(e);
68: }
69: entityO.setOwlClassESet(es);
70: }
71:
72: @Test
73: public void testUpdateDataLeaveLazy() throws Exception {
74: logger.debug(
75: "Test: update data property. Leaves lazily loaded field empty and checks that after commit the field's value hasn't changed.");
76: this.em = getEntityManager("UpdateDataProperty", false);
77: entityB.setProperties(Generators.createProperties());
78: persist(entityB);
79:
80: em.getTransaction().begin();
81: final OWLClassB b = em.find(OWLClassB.class, entityB.getUri());
82: assertNotNull(b);
83: final Field propsField = OWLClassB.class.getDeclaredField("properties");
84: propsField.setAccessible(true);
85: assertNull(propsField.get(b));
86: final String newString = "NewString";
87: b.setStringAttribute(newString);
88: em.getTransaction().commit();
89:
90: final OWLClassB res = em.find(OWLClassB.class, entityB.getUri());
91: assertNotNull(res);
92: assertEquals(newString, res.getStringAttribute());
93: assertNotNull(res.getProperties());
94: assertEquals(entityB.getProperties(), res.getProperties());
95: }
96:
97: @Test
98: public void testUpdateDataPropertySetNull() {
99: logger.debug("Test: update data property. Set it to null.");
100: this.em = getEntityManager("UpdateDataPropertyToNull", true);
101: persist(entityA);
102:
103: em.getTransaction().begin();
104: final OWLClassA a = em.find(OWLClassA.class, entityA.getUri());
105: assertNotNull(a);
106: assertNotNull(a.getStringAttribute());
107: a.setStringAttribute(null);
108: em.getTransaction().commit();
109:
110: final OWLClassA res = em.find(OWLClassA.class, entityA.getUri());
111: assertNotNull(res);
112: assertNull(res.getStringAttribute());
113: assertEquals(entityA.getTypes(), res.getTypes());
114: }
115:
116: @Test
117: public void testUpdateReference() {
118: logger.debug("Test: update reference to entity.");
119: this.em = getEntityManager("UpdateReference", true);
120: persist(entityD, entityI);
121: // em.persist(entityA, ctx);
122:
123: final OWLClassA newA = new OWLClassA();
124: newA.setUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/newEntityA"));
125: newA.setStringAttribute("newA");
126: em.getTransaction().begin();
127: final OWLClassD d = em.find(OWLClassD.class, entityD.getUri());
128: assertNotNull(d.getOwlClassA());
129: d.setOwlClassA(newA);
130: final OWLClassI i = em.find(OWLClassI.class, entityI.getUri());
131: assertNotNull(i.getOwlClassA());
132: i.setOwlClassA(newA);
133: em.persist(newA);
134: em.getTransaction().commit();
135:
136: final OWLClassA resA1 = em.find(OWLClassA.class, newA.getUri());
137: assertNotNull(resA1);
138: final OWLClassD resD = em.find(OWLClassD.class, d.getUri());
139: assertEquals(resA1.getUri(), resD.getOwlClassA().getUri());
140: //                assertSame(resD.getOwlClassA(), resA1);
141: assertNotNull(em.find(OWLClassA.class, entityA.getUri()));
142: final OWLClassI resI = em.find(OWLClassI.class, i.getUri());
143: assertEquals(newA.getUri(), resI.getOwlClassA().getUri());
144: assertNotNull(em.find(OWLClassA.class, entityA.getUri()));
145: assertEquals(resA1.getUri(), resI.getOwlClassA().getUri());
146: //                assertEquals(resA1, resI.getOwlClassA());
147: }
148:
149: @Test
150: public void mergedInstanceWithChangesInCascadedPluralReferenceAttributeContainsUpdatedValues()
151: throws Exception {
152: this.em = getEntityManager("MergeSet", false);
153: persist(entityJ);
154: em.clear();
155:
156: entityJ.getOwlClassA().forEach(a -> a.setStringAttribute("NEWVALUE"));
157:
158: em.getTransaction().begin();
159: OWLClassJ merged = em.merge(entityJ);
160:
161:• for (final OWLClassA a : merged.getOwlClassA()) {
162: assertEquals(a.getStringAttribute(), "NEWVALUE");
163: }
164: em.getTransaction().commit();
165: }
166:
167: @Test
168: public void testMergeDetachedWithChanges() {
169: logger.debug("Test: merge detached entity with changes.");
170: this.em = getEntityManager("UpdateDetached", true);
171: persist(entityA);
172:
173: final OWLClassA a = em.find(OWLClassA.class, entityA.getUri());
174: assertTrue(em.contains(a));
175: em.detach(a);
176: assertFalse(em.contains(a));
177: final String newType = "http://krizik.felk.cvut.cz/ontologies/jopa/entities#AddedType";
178: a.getTypes().add(newType);
179: em.getTransaction().begin();
180: final OWLClassA merged = em.merge(a);
181: assertTrue(merged.getTypes().contains(newType));
182: em.getTransaction().commit();
183:
184: final OWLClassA res = em.find(OWLClassA.class, a.getUri());
185: assertEquals(a.getTypes().size(), res.getTypes().size());
186: assertTrue(res.getTypes().containsAll(a.getTypes()));
187: }
188:
189: @Test
190: public void testMergeDetachedCascade() {
191: logger.debug("Test: merge detached with cascade.");
192: this.em = getEntityManager("UpdateCascade", true);
193: em.getTransaction().begin();
194: em.persist(entityH);
195: assertTrue(em.contains(entityA));
196: em.getTransaction().commit();
197:
198: em.getTransaction().begin();
199: final OWLClassH h = em.find(OWLClassH.class, entityH.getUri());
200: assertNotNull(h.getOwlClassA());
201: em.detach(h);
202: assertFalse(em.contains(h));
203: assertFalse(em.contains(h.getOwlClassA()));
204: final String newStr = "newStringAttribute";
205: h.getOwlClassA().setStringAttribute(newStr);
206: final OWLClassH merged = em.merge(h);
207: assertEquals(newStr, merged.getOwlClassA().getStringAttribute());
208: em.getTransaction().commit();
209:
210: final OWLClassA res = em.find(OWLClassA.class, entityA.getUri());
211: assertNotNull(res);
212: assertEquals(newStr, res.getStringAttribute());
213: }
214:
215: @Test
216: public void testMergeDetachedWithObjectPropertyChange() {
217: logger.debug("Test: merge detached with object property change.");
218: this.em = getEntityManager("UpdateDetachedWithOPChange", true);
219: persist(entityD, entityA);
220:
221: final OWLClassD d = em.find(OWLClassD.class, entityD.getUri());
222: em.detach(d);
223: d.setOwlClassA(entityA2);
224: em.getTransaction().begin();
225: em.merge(d);
226: em.persist(entityA2);
227: em.getTransaction().commit();
228:
229: final OWLClassD res = em.find(OWLClassD.class, entityD.getUri());
230: assertNotNull(res);
231: assertEquals(entityA2.getUri(), res.getOwlClassA().getUri());
232: assertEquals(entityA2.getStringAttribute(), res.getOwlClassA().getStringAttribute());
233: final OWLClassA resA = em.find(OWLClassA.class, entityA.getUri());
234: assertNotNull(resA);
235: assertEquals(entityA.getStringAttribute(), resA.getStringAttribute());
236: assertEquals(entityA.getTypes(), resA.getTypes());
237: }
238:
239: @Test
240: public void testRemoveFromSimpleList() {
241: logger.debug("Test: remove entity from simple list. (But keep it in the ontology.)");
242: this.em = getEntityManager("UpdateRemoveFromSimpleList", true);
243: entityC.setSimpleList(Generators.createSimpleList());
244: persistEntityWithList();
245:
246: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
247: assertNotNull(c);
248: em.getTransaction().begin();
249: final OWLClassA a = c.getSimpleList().get(1);
250: c.getSimpleList().remove(a);
251: em.getTransaction().commit();
252:
253: final OWLClassA resA = em.find(OWLClassA.class, a.getUri());
254: assertNotNull(resA);
255: final OWLClassC resC = em.find(OWLClassC.class, c.getUri());
256: assertEquals(c.getSimpleList().size(), resC.getSimpleList().size());
257: assertEquals(entityC.getSimpleList().size() - 1, resC.getSimpleList().size());
258:• for (OWLClassA aa : resC.getSimpleList()) {
259: assertFalse(resA.getUri().equals(aa.getUri()));
260: }
261: }
262:
263: private void persistEntityWithList() {
264: em.getTransaction().begin();
265: em.persist(entityC);
266:• if (entityC.getSimpleList() != null) {
267: entityC.getSimpleList().forEach(em::persist);
268: }
269:• if (entityC.getReferencedList() != null) {
270: entityC.getReferencedList().forEach(em::persist);
271: }
272: em.getTransaction().commit();
273: }
274:
275: @Test
276: public void testAddToSimpleList() {
277: logger.debug("Test: add entity to simple list.");
278: this.em = getEntityManager("UpdateAddToSimpleList", true);
279: entityC.setSimpleList(Generators.createSimpleList());
280: em.getTransaction().begin();
281: em.persist(entityC);
282: entityC.getSimpleList().forEach(em::persist);
283: em.persist(entityA);
284: em.getTransaction().commit();
285:
286: em.getTransaction().begin();
287: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
288: assertNotNull(c);
289: final OWLClassA a = em.find(OWLClassA.class, entityA.getUri());
290: assertNotNull(a);
291: assertFalse(c.getSimpleList().contains(a));
292: c.getSimpleList().add(a);
293: em.getTransaction().commit();
294:
295: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
296: assertEquals(c.getSimpleList().size(), resC.getSimpleList().size());
297: assertEquals(entityC.getSimpleList().size() + 1, resC.getSimpleList().size());
298: final OWLClassA resA = em.find(OWLClassA.class, entityA.getUri());
299: assertNotNull(resA);
300: assertTrue(resC.getSimpleList().contains(resA));
301: }
302:
303: @Test
304: public void testClearSimpleList() {
305: logger.debug("Test: clear a simple list (but keep the entities in ontology).");
306: this.em = getEntityManager("UpdateClearSimpleList", true);
307: entityC.setSimpleList(Generators.createSimpleList());
308: persistEntityWithList();
309:
310: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
311: assertNotNull(c);
312: assertFalse(c.getSimpleList().isEmpty());
313: em.getTransaction().begin();
314: c.getSimpleList().clear();
315: em.getTransaction().commit();
316:
317: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
318: assertNotNull(resC);
319:• assertTrue(resC.getSimpleList() == null || resC.getSimpleList().isEmpty());
320:• for (OWLClassA a : entityC.getSimpleList()) {
321: assertNotNull(em.find(OWLClassA.class, a.getUri()));
322: }
323: }
324:
325: @Test
326: public void testReplaceSimpleList() {
327: logger.debug("Test: replace simple list with a new one.");
328: this.em = getEntityManager("UpdateReplaceSimpleList", true);
329: entityC.setSimpleList(Generators.createSimpleList());
330: persistEntityWithList();
331:
332: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
333: final List<OWLClassA> newList = new ArrayList<>(1);
334: newList.add(entityA);
335: em.getTransaction().begin();
336: em.persist(entityA);
337: c.setSimpleList(newList);
338: em.getTransaction().commit();
339:
340: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
341: assertNotNull(resC);
342: assertEquals(newList.size(), resC.getSimpleList().size());
343: boolean found;
344:• for (OWLClassA a : newList) {
345: found = false;
346:• for (OWLClassA aa : resC.getSimpleList()) {
347:• if (a.getUri().equals(aa.getUri())) {
348: found = true;
349: break;
350: }
351: }
352: assertTrue(found);
353: }
354:• for (OWLClassA a : entityC.getSimpleList()) {
355: assertNotNull(em.find(OWLClassA.class, a.getUri()));
356: }
357: }
358:
359: @Test
360: public void testRemoveFromReferencedList() {
361: logger.debug("Test: remove entity from referenced list. (But keep it in the ontology.");
362: this.em = getEntityManager("UpdateRemoveFromReferencedList", true);
363: entityC.setReferencedList(Generators.createReferencedList());
364: persistEntityWithList();
365:
366: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
367: assertNotNull(c);
368: em.getTransaction().begin();
369: final OWLClassA a = c.getReferencedList().get(Generators.randomInt(c.getReferencedList().size()));
370: c.getReferencedList().remove(a);
371: em.getTransaction().commit();
372:
373: final OWLClassA resA = em.find(OWLClassA.class, a.getUri());
374: assertNotNull(resA);
375: final OWLClassC resC = em.find(OWLClassC.class, c.getUri());
376: assertEquals(c.getReferencedList().size(), resC.getReferencedList().size());
377: assertEquals(entityC.getReferencedList().size() - 1, resC.getReferencedList().size());
378:• for (OWLClassA aa : resC.getReferencedList()) {
379: assertFalse(resA.getUri().equals(aa.getUri()));
380: }
381: }
382:
383: @Test
384: public void testAddToReferencedList() {
385: logger.debug("Test: add entity to Referenced list.");
386: this.em = getEntityManager("UpdateAddToReferencedList", true);
387: entityC.setReferencedList(Generators.createReferencedList());
388: persistEntityWithList();
389:
390: em.getTransaction().begin();
391: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
392: assertNotNull(c);
393: em.persist(entityA);
394: c.getReferencedList().add(entityA);
395: em.getTransaction().commit();
396:
397: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
398: assertEquals(c.getReferencedList().size(), resC.getReferencedList().size());
399: assertEquals(entityC.getReferencedList().size() + 1, resC.getReferencedList().size());
400: final OWLClassA resA = em.find(OWLClassA.class, entityA.getUri());
401: assertNotNull(resA);
402: assertTrue(resC.getReferencedList().contains(resA));
403: }
404:
405: @Test
406: public void testClearReferencedList() {
407: logger.debug("Test: clear referenced list (but keep the entities in ontology).");
408: this.em = getEntityManager("UpdateClearReferencedList", true);
409: entityC.setReferencedList(Generators.createReferencedList());
410: persistEntityWithList();
411:
412: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
413: assertNotNull(c);
414: assertFalse(c.getReferencedList().isEmpty());
415: em.getTransaction().begin();
416: c.setReferencedList(null);
417: em.getTransaction().commit();
418:
419: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
420: assertNotNull(resC);
421: assertNull(resC.getReferencedList());
422:• for (OWLClassA a : entityC.getReferencedList()) {
423: assertNotNull(em.find(OWLClassA.class, a.getUri()));
424: }
425: }
426:
427: @Test
428: public void testReplaceReferencedList() {
429: logger.debug("Test: replace referenced list with a new one.");
430: this.em = getEntityManager("UpdateReplaceReferencedList", true);
431: entityC.setReferencedList(Generators.createReferencedList());
432: persistEntityWithList();
433:
434: final OWLClassC c = em.find(OWLClassC.class, entityC.getUri());
435: final List<OWLClassA> newList = new ArrayList<>(1);
436: newList.add(entityA);
437: em.getTransaction().begin();
438: em.persist(entityA);
439: c.setReferencedList(newList);
440: em.getTransaction().commit();
441:
442: final OWLClassC resC = em.find(OWLClassC.class, entityC.getUri());
443: assertNotNull(resC);
444: assertEquals(newList.size(), resC.getReferencedList().size());
445: boolean found;
446:• for (OWLClassA a : newList) {
447: found = false;
448:• for (OWLClassA aa : resC.getReferencedList()) {
449:• if (a.getUri().equals(aa.getUri())) {
450: found = true;
451: break;
452: }
453: }
454: assertTrue(found);
455: }
456:• for (OWLClassA a : entityC.getReferencedList()) {
457: assertNotNull(em.find(OWLClassA.class, a.getUri()));
458: }
459: }
460:
461: @Test
462: public void testAddNewToProperties() {
463: logger.debug("Test: add a new property value to entity's properties.");
464: this.em = getEntityManager("UpdateAddNewToProperties", false);
465: entityB.setProperties(Generators.createProperties());
466: final Map<String, Set<String>> expected = new HashMap<>(entityB.getProperties().size() + 3);
467: expected.putAll(entityB.getProperties());
468: persist(entityB);
469: em.clear();
470:
471: final OWLClassB b = em.find(OWLClassB.class, entityB.getUri());
472: assertNotNull(b);
473: assertEquals(expected.size(), b.getProperties().size());
474: em.getTransaction().begin();
475: b.getProperties().put("http://krizik.felk.cvut.cz/ontologies/jopa/attributes#propertyFour",
476: Collections.singleton("http://krizik.felk.cvut.cz/ontologies/jopa/Stroustrup"));
477: expected.putAll(b.getProperties());
478: em.getTransaction().commit();
479:
480: final OWLClassB res = em.find(OWLClassB.class, b.getUri());
481: assertNotNull(res);
482: assertEquals(expected.size(), res.getProperties().size());
483:• for (Map.Entry<String, Set<String>> e : expected.entrySet()) {
484: assertTrue(res.getProperties().containsKey(e.getKey()));
485: final Set<String> s = e.getValue();
486: final Set<String> resS = res.getProperties().get(e.getKey());
487: assertEquals(s.size(), resS.size());
488: assertTrue(s.containsAll(resS));
489: }
490: }
491:
492: @Test
493: public void testAddPropertyValue() {
494: logger.debug("Test: add another value to an existing property.");
495: this.em = getEntityManager("UpdateAddPropertyValue", false);
496: entityB.setProperties(Generators.createProperties());
497: final Map<String, Set<String>> expected = new HashMap<>(entityB.getProperties().size() + 3);
498: final String prop = entityB.getProperties().keySet().iterator().next();
499: expected.putAll(entityB.getProperties());
500: persist(entityB);
501: em.clear();
502:
503: final OWLClassB b = em.find(OWLClassB.class, entityB.getUri());
504: assertNotNull(b);
505: assertEquals(expected.size(), b.getProperties().size());
506: em.getTransaction().begin();
507: b.getProperties().get(prop).add("http://krizik.felk.cvut.cz/ontologies/jopa/Stroustrup");
508: expected.putAll(b.getProperties());
509: em.getTransaction().commit();
510:
511: final OWLClassB res = em.find(OWLClassB.class, b.getUri());
512: assertNotNull(res);
513: assertEquals(expected.size(), res.getProperties().size());
514:• for (Map.Entry<String, Set<String>> e : expected.entrySet()) {
515: assertTrue(res.getProperties().containsKey(e.getKey()));
516: final Set<String> s = e.getValue();
517: final Set<String> resS = res.getProperties().get(e.getKey());
518: assertEquals(s.size(), resS.size());
519:• if (e.getKey().equals(prop)) {
520:• assertTrue(s.size() > 1);
521:• for (String val : s) {
522: assertTrue(resS.contains(val));
523: }
524: } else {
525: assertTrue(resS.contains(s.iterator().next()));
526: }
527: }
528: }
529:
530: @Test
531: public void testAddPropertyValueDetached() {
532: logger.debug("Test: add another value to an existing property.");
533: this.em = getEntityManager("UpdateAddPropertyValueDetached", false);
534: entityB.setProperties(Generators.createProperties());
535: final String prop = entityB.getProperties().keySet().iterator().next();
536: final String newPropertyValue = "http://krizik.felk.cvut.cz/ontologies/jopa#newPropertyValue";
537: persist(entityB);
538: em.clear();
539:
540: final OWLClassB b = em.find(OWLClassB.class, entityB.getUri());
541: b.getProperties().get(prop).add(newPropertyValue);
542: em.detach(b);
543: em.getTransaction().begin();
544: em.merge(b);
545: em.getTransaction().commit();
546:
547: final OWLClassB res = em.find(OWLClassB.class, entityB.getUri());
548: assertNotNull(res);
549: assertTrue(res.getProperties().get(prop).contains(newPropertyValue));
550: }
551:
552: @Test
553: public void testAddNewTypedPropertyWithValues() {
554: logger.debug("Test: add a new property with values. Typed.");
555: this.em = getEntityManager("UpdateAddNewToPropertiesTyped", false);
556: entityP.setProperties(Generators.createTypedProperties());
557: persist(entityP);
558: em.clear();
559:
560: final OWLClassP p = em.find(OWLClassP.class, entityP.getUri());
561: em.getTransaction().begin();
562: final URI property = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#newProperty");
563: p.getProperties().put(property, new HashSet<>(Arrays.asList(1, "Two", new Date())));
564: em.getTransaction().commit();
565:
566: em.clear();
567:
568: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
569: assertNotNull(res);
570: assertTrue(res.getProperties().containsKey(property));
571: assertEquals(p.getProperties(), res.getProperties());
572: }
573:
574: @Test
575: public void testAddTypedPropertyValue() {
576: logger.debug("Test: add an existing property value. Typed.");
577: this.em = getEntityManager("UpdateAddPropertyValueTyped", false);
578: entityP.setProperties(Generators.createTypedProperties());
579: persist(entityP);
580: em.clear();
581:
582: final OWLClassP p = em.find(OWLClassP.class, entityP.getUri());
583: em.getTransaction().begin();
584: final URI property = p.getProperties().keySet().iterator().next();
585: final Object value = generateValueForProperty(p, property);
586: p.getProperties().get(property).add(value);
587: em.getTransaction().commit();
588:
589: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
590: assertTrue(res.getProperties().get(property).contains(value));
591: assertEquals(p.getProperties(), res.getProperties());
592: }
593:
594: private Object generateValueForProperty(OWLClassP instance, URI property) {
595: final Set<Object> values = instance.getProperties().get(property);
596:• assert values != null && !values.isEmpty();
597:• if (values.iterator().next() instanceof URI) {
598: return URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#newPropertyValue");
599: } else {
600: return "StringValue";
601: }
602: }
603:
604: @Test(expected = OWLInferredAttributeModifiedException.class)
605: public void testModifyInferredAttribute() {
606: logger.debug("Test: modify an inferred attribute.");
607: this.em = getEntityManager("ModifyInferredAttribute", false);
608: persist(entityF);
609:
610: em.getTransaction().begin();
611: final OWLClassF f = em.find(OWLClassF.class, entityF.getUri());
612: assertNotNull(f);
613: f.setSecondStringAttribute("otherValue");
614: em.getTransaction().commit();
615: }
616:
617: @Test
618: public void testModifyAttributesOfBasicTypes() {
619: logger.debug("Test: modify attributes of basic Java types (Integer, Boolean etc.).");
620: this.em = getEntityManager("ModifyBasicTypeAttributes", false);
621: persist(entityM);
622:
623: em.getTransaction().begin();
624: final OWLClassM m = em.find(OWLClassM.class, entityM.getKey());
625:• m.setBooleanAttribute(!entityM.getBooleanAttribute());
626: m.setDoubleAttribute(m.getDoubleAttribute() - 100.0);
627: m.setLongAttribute(m.getLongAttribute() + 100L);
628: m.setDateAttribute(new Date(System.currentTimeMillis() + 10000));
629: em.getTransaction().commit();
630:
631: final OWLClassM res = em.find(OWLClassM.class, entityM.getKey());
632: assertEquals(m.getBooleanAttribute(), res.getBooleanAttribute());
633: assertEquals(m.getLongAttribute(), res.getLongAttribute());
634: assertEquals(m.getDoubleAttribute(), res.getDoubleAttribute());
635: assertEquals(m.getDateAttribute(), res.getDateAttribute());
636: }
637:
638: @Test
639: public void testModifyEnumAttribute() {
640: logger.debug("Test: modify enum attribute.");
641: this.em = getEntityManager("ModifyEnumAttribute", false);
642: assertNotNull(entityM.getEnumAttribute());
643: persist(entityM);
644:
645: final OWLClassM.Severity updated = OWLClassM.Severity.LOW;
646: em.getTransaction().begin();
647: final OWLClassM m = em.find(OWLClassM.class, entityM.getKey());
648: m.setEnumAttribute(updated);
649: em.getTransaction().commit();
650:
651: final OWLClassM res = em.find(OWLClassM.class, entityM.getKey());
652: assertNotNull(res);
653: assertEquals(updated, res.getEnumAttribute());
654: }
655:
656: @Test
657: public void testCascadeOfNewlyPersistedOnMerge() {
658: logger.debug("Test: cascade merging of an object that has been just persisted.");
659: this.em = getEntityManager("CascadeMergeWithNewlyPersisted", true);
660: em.getTransaction().begin();
661: em.persist(entityO);
662: entityO.getOwlClassESet().forEach(em::persist);
663: em.getTransaction().commit();
664:
665: final OWLClassE newE = new OWLClassE();
666: newE.setStringAttribute("NewlyAddedE");
667: final OWLClassO toUpdate = em.find(OWLClassO.class, entityO.getUri());
668: em.detach(toUpdate);
669:
670: em.getTransaction().begin();
671: toUpdate.getOwlClassESet().add(newE);
672: em.persist(newE);
673: final OWLClassO merged = em.merge(toUpdate);
674: assertTrue(merged.getOwlClassESet().contains(newE));
675: em.getTransaction().commit();
676:
677: final OWLClassE resE = em.find(OWLClassE.class, newE.getUri());
678: assertNotNull(resE);
679: final OWLClassO resO = em.find(OWLClassO.class, entityO.getUri());
680: assertEquals(entityO.getOwlClassESet().size() + 1, resO.getOwlClassESet().size());
681: }
682:
683: @Test
684: public void modificationsOfCollectionAfterCascadeMergeAreWrittenOnCommit() {
685: logger.debug(
686: "Test: modify collection after cascade merge and check that the changes have been propagated on commit.");
687: this.em = getEntityManager("ModifyCollectionAfterCascadeMerge", true);
688: em.getTransaction().begin();
689: em.persist(entityJ);
690: em.getTransaction().commit();
691:
692: final OWLClassA newA = new OWLClassA(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa/tests/newEntityA"));
693: em.getTransaction().begin();
694: final OWLClassJ merged = em.merge(entityJ);
695: merged.getOwlClassA().add(newA);
696: em.persist(newA);
697: em.getTransaction().commit();
698:
699: final OWLClassJ result = em.find(OWLClassJ.class, entityJ.getUri());
700: assertEquals(merged.getOwlClassA().size(), result.getOwlClassA().size());
701: boolean found = false;
702:• for (OWLClassA a : result.getOwlClassA()) {
703:• if (a.getUri().equals(newA.getUri())) {
704: found = true;
705: break;
706: }
707: }
708: assertTrue(found);
709: }
710:
711: @Test
712: public void testAddPropertiesWhenTheyWereNullOriginally() {
713: logger.debug("Test: add properties on update when the field was originally null.");
714: this.em = getEntityManager("AddPropertiesToNullOriginals", true);
715: em.getTransaction().begin();
716: assertNull(entityB.getProperties());
717: em.persist(entityB);
718: em.getTransaction().commit();
719:
720: final OWLClassB update = em.find(OWLClassB.class, entityB.getUri());
721: em.detach(update);
722: final Map<String, Set<String>> properties = Generators.createProperties(2);
723: update.setProperties(properties);
724: em.getTransaction().begin();
725: em.merge(update);
726: em.getTransaction().commit();
727:
728: final OWLClassB result = em.find(OWLClassB.class, entityB.getUri());
729: assertNotNull(result.getProperties());
730: assertEquals(properties, result.getProperties());
731: }
732:
733: @Test
734: public void testUpdatePlainLiteralObjectPropertyValueToAnotherIndividual() {
735: logger.debug("Test: update plain literal object property value to a different individual.");
736: this.em = getEntityManager("UpdatePlainLiteralObjectPropertyValue", true);
737: em.getTransaction().begin();
738: entityP.setIndividualUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#oldIndividual"));
739: em.persist(entityP);
740: em.getTransaction().commit();
741:
742: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
743: final URI newValue = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#newIndividual");
744: em.getTransaction().begin();
745: update.setIndividualUri(newValue);
746: em.getTransaction().commit();
747:
748: final OWLClassP result = em.find(OWLClassP.class, entityP.getUri());
749: assertEquals(newValue, result.getIndividualUri());
750: }
751:
752: @Test
753: public void testUpdatePlainLiteralObjectPropertyValueToNull() {
754: logger.debug("Test: update plain literal object property value to null.");
755: this.em = getEntityManager("UpdatePlainLiteralObjectPropertyValueToNull", true);
756: em.getTransaction().begin();
757: entityP.setIndividualUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#SomeIndividual"));
758: em.persist(entityP);
759: em.getTransaction().commit();
760:
761: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
762: assertNotNull(update.getIndividualUri());
763: em.getTransaction().begin();
764: update.setIndividualUri(null);
765: em.getTransaction().commit();
766:
767: final OWLClassP result = em.find(OWLClassP.class, entityP.getUri());
768: assertNull(result.getIndividualUri());
769: }
770:
771: @Test
772: public void testUpdatePluralPlainLiteralObjectPropertyAttribute() throws MalformedURLException {
773: logger.debug("Test: update plural plain literal object property attribute.");
774: this.em = getEntityManager("UpdatePluralPlainLiteralObjectPropertyValue", true);
775: entityP.setIndividuals(Generators.createUrls());
776: persist(entityP);
777:
778: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
779: em.getTransaction().begin();
780: final URL added = new URL("http://krizik.felk.cvut.cz/ontologies/jopa#added");
781: final URL removed = entityP.getIndividuals().iterator().next();
782: update.getIndividuals().add(added);
783: update.getIndividuals().remove(removed);
784: em.getTransaction().commit();
785:
786: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
787: assertNotNull(res);
788: assertEquals(update.getIndividuals(), res.getIndividuals());
789: }
790:
791: @Test
792: public void testUpdateSimpleListOfIdentifiersByAddingNewItems() {
793: this.em = getEntityManager("UpdateSimpleListOfIdentifiersByAddingItems", true);
794: entityP.setSimpleList(Generators.createListOfIdentifiers());
795: persist(entityP);
796:
797: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
798: em.getTransaction().begin();
799:• for (int i = 0; i < Generators.randomPositiveInt(5, 10); i++) {
800: final URI u = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#Added-" + i);
801: // Insert at random position
802: update.getSimpleList().add(Generators.randomInt(update.getSimpleList().size()), u);
803: }
804: em.getTransaction().commit();
805:
806: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
807: assertNotNull(res);
808: assertEquals(update.getSimpleList(), res.getSimpleList());
809: }
810:
811: @Test
812: public void testUpdateReferencedListByRemovingAndAddingItems() {
813: this.em = getEntityManager("UpdateReferencedListByRemovingAndAddingItems", true);
814: entityP.setReferencedList(Generators.createListOfIdentifiers());
815: persist(entityP);
816:
817: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
818: em.getTransaction().begin();
819:• for (int i = 0; i < Generators.randomPositiveInt(5, 10); i++) {
820: final URI u = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#Added-" + i);
821: // We might even overwrite items set in previous iterations, but it does not matter. JOPA should handle it
822: update.getReferencedList().set(Generators.randomInt(update.getReferencedList().size()), u);
823: }
824: em.getTransaction().commit();
825:
826: final OWLClassP res = em.find(OWLClassP.class, entityP.getUri());
827: assertNotNull(res);
828: assertEquals(update.getReferencedList(), res.getReferencedList());
829: }
830:
831: @Test
832: public void testUpdateStringAnnotationPropertyValue() {
833: this.em = getEntityManager("UpdateStringAnnotationPropertyValue", true);
834: entityN.setAnnotationProperty("PropertyValue");
835: persist(entityN);
836:
837: final String newValue = "newValue";
838: final OWLClassN update = em.find(OWLClassN.class, entityN.getId());
839: assertNotNull(update);
840: em.getTransaction().begin();
841: update.setAnnotationProperty(newValue);
842: em.getTransaction().commit();
843:
844: final OWLClassN res = em.find(OWLClassN.class, entityN.getId());
845: assertEquals(newValue, res.getAnnotationProperty());
846: }
847:
848: @Test
849: public void testUpdateAnnotationPropertyWithUriValueToDifferentValue() {
850: this.em = getEntityManager("UpdateAnnotationPropertyWithUriValueToDifferentValue", true);
851: entityN.setAnnotationUri(URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#value"));
852: persist(entityN);
853:
854: final OWLClassN update = em.find(OWLClassN.class, entityN.getId());
855: assertNotNull(update);
856: em.getTransaction().begin();
857: final URI newUri = URI.create("http://krizik.felk.cvut.cz/ontologies/jopa#newValue");
858: update.setAnnotationUri(newUri);
859: em.getTransaction().commit();
860:
861: final OWLClassN res = em.find(OWLClassN.class, entityN.getId());
862: assertEquals(newUri, res.getAnnotationUri());
863: }
864:
865: @Test
866: public void testUpdateUriTypes() {
867: this.em = getEntityManager("UpdateUriTypes", true);
868: entityP.setTypes(Generators.createUriTypes());
869: persist(entityP);
870:
871: em.getTransaction().begin();
872: final OWLClassP update = em.find(OWLClassP.class, entityP.getUri());
873: final Iterator<URI> it = update.getTypes().iterator();
874:• while (it.hasNext()) {
875: it.next();
876:• if (Generators.randomBoolean()) {
877: it.remove();
878: }
879: }
880: update.getTypes().addAll(Generators.createUriTypes());
881: em.getTransaction().commit();
882:
883: final OWLClassP result = em.find(OWLClassP.class, entityP.getUri());
884: assertEquals(update.getTypes().size(), result.getTypes().size());
885: assertTrue(update.getTypes().containsAll(result.getTypes()));
886: }
887:
888: @Test
889: public void updateWithInvalidInstanceThrowsIntegrityConstraintsViolation() {
890: thrown.expect(RollbackException.class);
891: thrown.expectCause(isA(IntegrityConstraintViolatedException.class));
892:
893: this.em = getEntityManager("UpdateWithInvalidInstanceThrowsICViolation", true);
894: persist(entityN);
895:
896: entityN.setStringAttribute(null);
897: em.getTransaction().begin();
898: em.merge(entityN);
899: em.getTransaction().commit();
900: }
901:
902: @Test
903: public void addingValuesToDatatypePropertyCollectionAddsThemIntoRepository() {
904: this.em = getEntityManager("addingValuesToDatatypePropertyCollectionAddsThemIntoRepository", false);
905: persist(entityM);
906:
907: IntStream.generate(Generators::randomInt).limit(7).forEach(entityM.getIntegerSet()::add);
908: em.getTransaction().begin();
909: em.merge(entityM);
910: em.getTransaction().commit();
911:
912: final OWLClassM result = em.find(OWLClassM.class, entityM.getKey());
913: assertEquals(entityM.getIntegerSet(), result.getIntegerSet());
914: }
915:
916: @Test
917: public void removingValuesFromDatatypePropertyCollectionRemovesThemFromRepository() {
918: this.em = getEntityManager("removingValuesFromDatatypePropertyCollectionRemovesThemFromRepository", false);
919: persist(entityM);
920:
921: final Iterator<Integer> it = entityM.getIntegerSet().iterator();
922:• while (it.hasNext()) {
923: it.next();
924:• if (Generators.randomBoolean()) {
925: it.remove();
926: }
927: }
928: // Make sure there is at least one element
929: entityM.getIntegerSet().add(Generators.randomInt());
930:
931: em.getTransaction().begin();
932: em.merge(entityM);
933: em.getTransaction().commit();
934:
935: final OWLClassM result = em.find(OWLClassM.class, entityM.getKey());
936: assertEquals(entityM.getIntegerSet(), result.getIntegerSet());
937: }
938:
939: @Test
940: public void mergeReplacesReferenceWithInstanceFromRepository() {
941: this.em = getEntityManager("mergeReplacesReferenceWithInstanceFromRepository", true);
942: persist(entityD, entityA);
943:
944: final String originalString = entityA.getStringAttribute();
945: entityA.setStringAttribute("updatedStringAttribute");
946: em.getTransaction().begin();
947: final OWLClassD merged = em.merge(entityD);
948: assertEquals(originalString, merged.getOwlClassA().getStringAttribute());
949: em.getTransaction().commit();
950:
951: final OWLClassA result = em.find(OWLClassA.class, entityA.getUri());
952: assertEquals(originalString, result.getStringAttribute());
953: }
954:
955: @Test
956: public void mergeMergesUpdatedDataPropertyFields() {
957: this.em = getEntityManager("mergeMergesUpdatedDataPropertyFields", true);
958: persist(entityA);
959: final Set<String> newTypes =
960: Generators.createUriTypes().stream().map(URI::toString).collect(Collectors.toSet());
961: entityA.setTypes(newTypes);
962: final String newStringAtt = "newStringAttribute";
963: entityA.setStringAttribute(newStringAtt);
964:
965: em.getTransaction().begin();
966: final OWLClassA merged = em.merge(entityA);
967: assertEquals(newStringAtt, merged.getStringAttribute());
968: assertTrue(TestEnvironmentUtils.typesEqual(newTypes, merged.getTypes()));
969: em.getTransaction().commit();
970:
971: final OWLClassA result = em.find(OWLClassA.class, entityA.getUri());
972: assertEquals(newStringAtt, result.getStringAttribute());
973: assertTrue(TestEnvironmentUtils.typesEqual(newTypes, result.getTypes()));
974: }
975:
976: @Test
977: public void mergeMergesUpdateToObjectPropertyField() {
978: this.em = getEntityManager("mergeMergesUpdateToObjectPropertyField", true);
979: persist(entityD, entityA, entityA2);
980:
981: em.getTransaction().begin();
982: entityD.setOwlClassA(entityA2);
983: final OWLClassD merged = em.merge(entityD);
984: assertEquals(entityA2.getUri(), merged.getOwlClassA().getUri());
985: em.getTransaction().commit();
986:
987: final OWLClassD dResult = em.find(OWLClassD.class, entityD.getUri());
988: assertEquals(entityA2.getUri(), dResult.getOwlClassA().getUri());
989: final OWLClassA aReference = em.find(OWLClassA.class, entityA2.getUri());
990: assertSame(dResult.getOwlClassA(), aReference);
991: assertNotNull(em.find(OWLClassA.class, entityA.getUri()));
992: }
993:
994: @Test
995: public void updateSupportsSavingStringLiteralWithDifferentLanguageTag() throws Exception {
996: this.em = getEntityManager("updateSupportsSavingStringLiteralWithDifferentLanguageTag", false);
997: persist(entityA);
998:
999: entityA.setStringAttribute("hodnota v cestine");
1000: final Descriptor descriptor = new EntityDescriptor();
1001: descriptor.setAttributeLanguage(OWLClassA.class.getDeclaredField("stringAttribute"), "cs");
1002: em.getTransaction().begin();
1003: em.merge(entityA, descriptor);
1004: em.getTransaction().commit();
1005:
1006: final OWLClassA resultOne = em.find(OWLClassA.class, entityA.getUri());
1007: assertNull(resultOne.getStringAttribute());
1008: em.clear();
1009: final OWLClassA resultTwo = em.find(OWLClassA.class, entityA.getUri(), descriptor);
1010: assertEquals(entityA.getStringAttribute(), resultTwo.getStringAttribute());
1011: }
1012:
1013: @Test
1014: public void mergeDetachedRemovesObsoleteDescriptorInSecondLevelCache() throws Exception {
1015: this.em = getEntityManager("mergeDetachedReplacesObsoleteDescriptorInSecondLevelCache", true);
1016: final Descriptor descriptorOne = new EntityDescriptor();
1017: descriptorOne.setLanguage("en");
1018: em.getTransaction().begin();
1019: em.persist(entityA, descriptorOne);
1020: em.getTransaction().commit();
1021: assertTrue(em.getEntityManagerFactory().getCache().contains(OWLClassA.class, entityA.getUri(), descriptorOne));
1022:
1023: final Descriptor descriptorTwo = new EntityDescriptor();
1024: descriptorTwo.setLanguage("cs");
1025: assertNotEquals(descriptorOne, descriptorTwo);
1026: entityA.setStringAttribute("cesky");
1027: em.getTransaction().begin();
1028: em.merge(entityA, descriptorTwo);
1029: em.getTransaction().commit();
1030:
1031: assertFalse(em.getEntityManagerFactory().getCache().contains(OWLClassA.class, entityA.getUri(), descriptorOne));
1032: final OWLClassA result = em.find(OWLClassA.class, entityA.getUri(), descriptorTwo);
1033: assertEquals(entityA.getStringAttribute(), result.getStringAttribute());
1034: assertTrue(em.getEntityManagerFactory().getCache().contains(OWLClassA.class, entityA.getUri(), descriptorTwo));
1035: }
1036:
1037: @Test
1038: public void mergeUpdatesCacheEventWhenDescriptorContainsOnlyAttributeLanguageSetting() throws Exception {
1039: this.em = getEntityManager("mergeUpdatesCacheEventWhenDescriptorContainsOnlyAttributeLanguageSetting", true);
1040: persist(entityA);
1041:
1042: final Descriptor descriptorTwo = new EntityDescriptor();
1043: descriptorTwo.setAttributeLanguage(OWLClassA.class.getDeclaredField("stringAttribute"), "cs");
1044: entityA.setStringAttribute("cesky");
1045: em.getTransaction().begin();
1046: em.merge(entityA, descriptorTwo);
1047: em.getTransaction().commit();
1048:
1049: final OWLClassA result = em.find(OWLClassA.class, entityA.getUri(), descriptorTwo);
1050: assertEquals(entityA.getStringAttribute(), result.getStringAttribute());
1051: assertTrue(em.getEntityManagerFactory().getCache().contains(OWLClassA.class, entityA.getUri(), descriptorTwo));
1052: }
1053: }