Skip to content

Method: IntegrityConstraintSet()

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.owl2java;
16:
17: import cz.cvut.kbss.jopa.ic.api.AtomicSubClassConstraint;
18: import cz.cvut.kbss.jopa.ic.api.DataDomainConstraint;
19: import cz.cvut.kbss.jopa.ic.api.DataParticipationConstraint;
20: import cz.cvut.kbss.jopa.ic.api.DataRangeConstraint;
21: import cz.cvut.kbss.jopa.ic.api.IntegrityConstraint;
22: import cz.cvut.kbss.jopa.ic.api.IntegrityConstraintFactory;
23: import cz.cvut.kbss.jopa.ic.api.IntegrityConstraintVisitor;
24: import cz.cvut.kbss.jopa.ic.api.ObjectDomainConstraint;
25: import cz.cvut.kbss.jopa.ic.api.ObjectParticipationConstraint;
26: import cz.cvut.kbss.jopa.ic.api.ObjectRangeConstraint;
27: import cz.cvut.kbss.jopa.ic.impl.IntegrityConstraintFactoryImpl;
28: import java.util.ArrayList;
29: import java.util.Collection;
30: import java.util.Collections;
31: import java.util.HashMap;
32: import java.util.HashSet;
33: import java.util.List;
34: import java.util.Map;
35: import org.semanticweb.owlapi.model.OWLClass;
36: import org.semanticweb.owlapi.model.OWLDataProperty;
37: import org.semanticweb.owlapi.model.OWLObjectProperty;
38:
39: public class IntegrityConstraintSet {
40: private Map<OWLClass, List<IntegrityConstraint>> cConstraints = new HashMap<>();
41: private Map<OWLClass, Map<OWLObjectProperty, Collection<IntegrityConstraint>>> opConstraints = new HashMap<>();
42: private Map<OWLClass, Map<OWLDataProperty, Collection<IntegrityConstraint>>> dpConstraints = new HashMap<>();
43:
44: private IntegrityConstraintFactory integrityConstraintFactory = new IntegrityConstraintFactoryImpl();
45:
46: private <K, V> void addToMap(final K key, final V value, final Map<K, Collection<V>> map) {
47: if (!map.containsKey(key)) {
48: map.put(key, new HashSet<>());
49: }
50: map.get(key).add(value);
51: }
52:
53: public void addIntegrityConstraint(final IntegrityConstraint ic) {
54: ic.accept(new IntegrityConstraintVisitor() {
55: @Override
56: public void visit(AtomicSubClassConstraint cpc) {
57: List<IntegrityConstraint> setC = cConstraints
58: .get(cpc.getSubClass());
59: if (setC == null) {
60: setC = new ArrayList<>();
61: cConstraints.put(cpc.getSubClass(), setC);
62: }
63: setC.add(cpc);
64: }
65:
66: @Override
67: public void visit(DataParticipationConstraint cpc) {
68: addToClassDataIntegrityConstraintSet(cpc.getSubject(), cpc.getPredicate(), cpc);
69: }
70:
71: @Override
72: public void visit(ObjectParticipationConstraint cpc) {
73: addToClassObjectIntegrityConstraintSet(cpc.getSubject(), cpc.getPredicate(), cpc);
74: }
75:
76: @Override
77: public void visit(ObjectDomainConstraint cpc) {
78: addToClassObjectIntegrityConstraintSet(cpc.getDomain(), cpc.getProperty(), cpc);
79: }
80:
81: @Override
82: public void visit(ObjectRangeConstraint cpc) {
83: addToClassObjectIntegrityConstraintSet(cpc.getOWLClass(), cpc.getProperty(), cpc);
84: }
85:
86: @Override
87: public void visit(DataDomainConstraint cpc) {
88: addToClassDataIntegrityConstraintSet(cpc.getDomain(), cpc.getProperty(), cpc);
89: }
90:
91: @Override
92: public void visit(DataRangeConstraint cpc) {
93: addToClassDataIntegrityConstraintSet(cpc.getOWLClass(), cpc.getProperty(), cpc);
94: }
95: });
96: }
97:
98: private Map<OWLObjectProperty, Collection<IntegrityConstraint>> addToClassObjectIntegrityConstraintSet(final OWLClass subjClass, final OWLObjectProperty p, final IntegrityConstraint ic) {
99: Map<OWLObjectProperty, Collection<IntegrityConstraint>> map = opConstraints
100: .get(subjClass);
101: if (map == null) {
102: map = new HashMap<>();
103: opConstraints.put(subjClass, map);
104: }
105: addToMap(p, ic, map);
106: return map;
107: }
108:
109: private Map<OWLDataProperty, Collection<IntegrityConstraint>> addToClassDataIntegrityConstraintSet(final OWLClass subjClass, final OWLDataProperty p, final IntegrityConstraint ic) {
110: Map<OWLDataProperty, Collection<IntegrityConstraint>> map = dpConstraints
111: .get(subjClass);
112: if (map == null) {
113: map = new HashMap<>();
114: dpConstraints.put(subjClass, map);
115: }
116: addToMap(p, ic, map);
117: return map;
118: }
119:
120: public List<IntegrityConstraint> getClassIntegrityConstraints(final OWLClass cls) {
121: if (cConstraints.containsKey(cls)) {
122: return cConstraints.get(cls);
123: } else {
124: return Collections.emptyList();
125: }
126: }
127:
128: public Collection<IntegrityConstraint> getClassObjectIntegrityConstraints(
129: final OWLClass clazz,
130: final OWLObjectProperty prop) {
131:
132: final Map<OWLObjectProperty, Collection<IntegrityConstraint>> constraints = opConstraints
133: .get(clazz);
134:
135: if (constraints != null && constraints.containsKey(prop)) {
136: return constraints.get(prop);
137: } else {
138: return Collections.emptyList();
139: }
140: }
141:
142: public Collection<IntegrityConstraint> getClassDataIntegrityConstraints(
143: final OWLClass clazz,
144: final OWLDataProperty prop) {
145:
146: final Map<OWLDataProperty, Collection<IntegrityConstraint>> constraints = dpConstraints
147: .get(clazz);
148:
149: if (constraints != null && constraints.containsKey(prop)) {
150: return constraints.get(prop);
151: } else {
152: return Collections.emptyList();
153: }
154: }
155: }