Skip to contentMethod: visit(DataParticipationConstraint)
1: /*
2: * JOPA
3: * Copyright (C) 2024 Czech Technical University in Prague
4: *
5: * This library is free software; you can redistribute it and/or
6: * modify it under the terms of the GNU Lesser General Public
7: * License as published by the Free Software Foundation; either
8: * version 3.0 of the License, or (at your option) any later version.
9: *
10: * This library is distributed in the hope that it will be useful,
11: * but WITHOUT ANY WARRANTY; without even the implied warranty of
12: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: * Lesser General Public License for more details.
14: *
15: * You should have received a copy of the GNU Lesser General Public
16: * License along with this library.
17: */
18: package cz.cvut.kbss.jopa.owl2java;
19:
20: import cz.cvut.kbss.jopa.ic.api.*;
21: import org.semanticweb.owlapi.model.OWLClass;
22: import org.semanticweb.owlapi.model.OWLDataProperty;
23: import org.semanticweb.owlapi.model.OWLObjectProperty;
24:
25: import java.util.*;
26:
27: public class IntegrityConstraintSet {
28: private final Map<OWLClass, List<IntegrityConstraint>> cConstraints = new HashMap<>();
29: private final Map<OWLClass, Map<OWLObjectProperty, Collection<IntegrityConstraint>>> opConstraints = new HashMap<>();
30: private final Map<OWLClass, Map<OWLDataProperty, Collection<IntegrityConstraint>>> dpConstraints = new HashMap<>();
31:
32: private static <K, V> void addToMap(final K key, final V value, final Map<K, Collection<V>> map) {
33: if (!map.containsKey(key)) {
34: map.put(key, new HashSet<>());
35: }
36: map.get(key).add(value);
37: }
38:
39: public void addIntegrityConstraint(final IntegrityConstraint ic) {
40: ic.accept(new IntegrityConstraintVisitor() {
41: @Override
42: public void visit(AtomicSubClassConstraint cpc) {
43: List<IntegrityConstraint> setC =
44: cConstraints.computeIfAbsent(cpc.getSubClass(), k -> new ArrayList<>());
45: setC.add(cpc);
46: }
47:
48: @Override
49: public void visit(DataParticipationConstraint cpc) {
50: addToClassDataIntegrityConstraintSet(cpc.getSubject(), cpc.getPredicate(), cpc);
51: }
52:
53: @Override
54: public void visit(ObjectParticipationConstraint cpc) {
55: addToClassObjectIntegrityConstraintSet(cpc.getSubject(), cpc.getPredicate(), cpc);
56: }
57:
58: @Override
59: public void visit(ObjectDomainConstraint cpc) {
60: addToClassObjectIntegrityConstraintSet(cpc.getDomain(), cpc.getProperty(), cpc);
61: }
62:
63: @Override
64: public void visit(ObjectRangeConstraint cpc) {
65: addToClassObjectIntegrityConstraintSet(cpc.getOWLClass(), cpc.getProperty(), cpc);
66: }
67:
68: @Override
69: public void visit(DataDomainConstraint cpc) {
70: addToClassDataIntegrityConstraintSet(cpc.getDomain(), cpc.getProperty(), cpc);
71: }
72:
73: @Override
74: public void visit(DataRangeConstraint cpc) {
75: addToClassDataIntegrityConstraintSet(cpc.getOWLClass(), cpc.getProperty(), cpc);
76: }
77: });
78: }
79:
80: private Map<OWLObjectProperty, Collection<IntegrityConstraint>> addToClassObjectIntegrityConstraintSet(
81: final OWLClass subjClass, final OWLObjectProperty p, final IntegrityConstraint ic) {
82: Map<OWLObjectProperty, Collection<IntegrityConstraint>> map = opConstraints
83: .computeIfAbsent(subjClass, k -> new HashMap<>());
84: addToMap(p, ic, map);
85: return map;
86: }
87:
88: private Map<OWLDataProperty, Collection<IntegrityConstraint>> addToClassDataIntegrityConstraintSet(
89: final OWLClass subjClass, final OWLDataProperty p, final IntegrityConstraint ic) {
90: Map<OWLDataProperty, Collection<IntegrityConstraint>> map = dpConstraints
91: .computeIfAbsent(subjClass, k -> new HashMap<>());
92: addToMap(p, ic, map);
93: return map;
94: }
95:
96: public List<IntegrityConstraint> getClassIntegrityConstraints(final OWLClass cls) {
97: return cConstraints.getOrDefault(cls, Collections.emptyList());
98: }
99:
100: public Collection<IntegrityConstraint> getClassObjectIntegrityConstraints(
101: final OWLClass clazz,
102: final OWLObjectProperty prop) {
103:
104: final Map<OWLObjectProperty, Collection<IntegrityConstraint>> constraints = opConstraints
105: .get(clazz);
106:
107: if (constraints != null && constraints.containsKey(prop)) {
108: return constraints.get(prop);
109: } else {
110: return Collections.emptyList();
111: }
112: }
113:
114: public Collection<IntegrityConstraint> getClassDataIntegrityConstraints(
115: final OWLClass clazz,
116: final OWLDataProperty prop) {
117:
118: final Map<OWLDataProperty, Collection<IntegrityConstraint>> constraints = dpConstraints
119: .get(clazz);
120:
121: if (constraints != null && constraints.containsKey(prop)) {
122: return constraints.get(prop);
123: } else {
124: return Collections.emptyList();
125: }
126: }
127: }