Skip to contentMethod: static {...}
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.oom;
16:
17: import cz.cvut.kbss.jopa.model.annotations.CascadeType;
18: import cz.cvut.kbss.jopa.model.annotations.OWLObjectProperty;
19: import cz.cvut.kbss.jopa.model.metamodel.EntityType;
20: import cz.cvut.kbss.jopa.model.metamodel.FieldSpecification;
21: import cz.cvut.kbss.jopa.oom.exceptions.EntityDeconstructionException;
22: import cz.cvut.kbss.jopa.utils.EntityPropertiesUtils;
23:
24: import java.lang.reflect.Field;
25: import java.net.URI;
26:
27: class PersistCascadeResolver extends CascadeResolver {
28:
29: PersistCascadeResolver(ObjectOntologyMapperImpl mapper) {
30: super(mapper);
31: }
32:
33: @Override
34: protected void resolveFieldCascading(FieldSpecification<?, ?> fieldSpec, Object fieldValue, URI context) {
35: OWLObjectProperty ann = fieldSpec.getJavaField().getAnnotation(OWLObjectProperty.class);
36: assert ann != null;
37:
38: for (CascadeType c : ann.cascade()) {
39: if (c == CascadeType.ALL || c == CascadeType.PERSIST) {
40: return;
41: }
42: }
43: final EntityType<?> et = mapper.getEntityType(fieldValue.getClass());
44: final Field idField = et.getIdentifier().getJavaField();
45: if (!idField.isAccessible()) {
46: idField.setAccessible(true);
47: }
48: try {
49: final URI id = EntityPropertiesUtils.getPrimaryKey(fieldValue, et);
50: mapper.registerPendingPersist(id, fieldValue, context);
51: } catch (IllegalArgumentException e) {
52: throw new EntityDeconstructionException("Unable to check field cascading.", e);
53: }
54: }
55: }