aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java')
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java66
1 files changed, 66 insertions, 0 deletions
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java
new file mode 100644
index 00000000..ce8fda05
--- /dev/null
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyBuilder.java
@@ -0,0 +1,66 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.reasoning.translator.typehierarchy;
7
8import tools.refinery.store.reasoning.representation.PartialRelation;
9import tools.refinery.store.reasoning.translator.TranslationException;
10
11import java.util.*;
12
13@SuppressWarnings("UnusedReturnValue")
14public class TypeHierarchyBuilder {
15 protected final Map<PartialRelation, TypeInfo> typeInfoMap = new LinkedHashMap<>();
16
17 protected TypeHierarchyBuilder() {
18 }
19
20 public TypeHierarchyBuilder type(PartialRelation partialRelation, TypeInfo typeInfo) {
21 if (partialRelation.arity() != 1) {
22 throw new TranslationException(partialRelation,
23 "Only types of arity 1 are supported, got %s with %d instead"
24 .formatted(partialRelation, partialRelation.arity()));
25 }
26 var putResult = typeInfoMap.put(partialRelation, typeInfo);
27 if (putResult != null && !putResult.equals(typeInfo)) {
28 throw new TranslationException(partialRelation,
29 "Duplicate type info for partial relation: " + partialRelation);
30 }
31 return this;
32 }
33
34 public TypeHierarchyBuilder type(PartialRelation partialRelation, boolean abstractType,
35 PartialRelation... supertypes) {
36 return type(partialRelation, abstractType, Set.of(supertypes));
37 }
38
39 public TypeHierarchyBuilder type(PartialRelation partialRelation, boolean abstractType,
40 Collection<PartialRelation> supertypes) {
41 return type(partialRelation, new TypeInfo(supertypes, abstractType));
42 }
43
44 public TypeHierarchyBuilder type(PartialRelation partialRelation, PartialRelation... supertypes) {
45 return type(partialRelation, List.of(supertypes));
46 }
47
48 public TypeHierarchyBuilder type(PartialRelation partialRelation, Collection<PartialRelation> supertypes) {
49 return type(partialRelation, false, supertypes);
50 }
51
52 public TypeHierarchyBuilder types(Collection<Map.Entry<PartialRelation, TypeInfo>> entries) {
53 for (var entry : entries) {
54 type(entry.getKey(), entry.getValue());
55 }
56 return this;
57 }
58
59 public TypeHierarchyBuilder types(Map<PartialRelation, TypeInfo> map) {
60 return types(map.entrySet());
61 }
62
63 public TypeHierarchy build() {
64 return new TypeHierarchy(typeInfoMap);
65 }
66}