diff options
Diffstat (limited to 'subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/annotations')
2 files changed, 124 insertions, 0 deletions
diff --git a/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/annotations/PAnnotation.java b/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/annotations/PAnnotation.java new file mode 100644 index 00000000..c4fbe0e9 --- /dev/null +++ b/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/annotations/PAnnotation.java | |||
@@ -0,0 +1,94 @@ | |||
1 | /******************************************************************************* | ||
2 | * Copyright (c) 2010-2014, Zoltan Ujhelyi, Istvan Rath and Daniel Varro | ||
3 | * This program and the accompanying materials are made available under the | ||
4 | * terms of the Eclipse Public License v. 2.0 which is available at | ||
5 | * http://www.eclipse.org/legal/epl-v20.html. | ||
6 | * | ||
7 | * SPDX-License-Identifier: EPL-2.0 | ||
8 | *******************************************************************************/ | ||
9 | package tools.refinery.viatra.runtime.matchers.psystem.annotations; | ||
10 | |||
11 | import java.util.List; | ||
12 | import java.util.Optional; | ||
13 | import java.util.Set; | ||
14 | import java.util.function.BiConsumer; | ||
15 | |||
16 | import org.eclipse.collections.api.multimap.MutableMultimap; | ||
17 | import org.eclipse.collections.impl.multimap.list.FastListMultimap; | ||
18 | |||
19 | /** | ||
20 | * A container describing query annotations | ||
21 | * @author Zoltan Ujhelyi | ||
22 | * | ||
23 | */ | ||
24 | public class PAnnotation { | ||
25 | |||
26 | private final String name; | ||
27 | private MutableMultimap<String, Object> attributes = FastListMultimap.newMultimap(); | ||
28 | |||
29 | public PAnnotation(String name) { | ||
30 | this.name = name; | ||
31 | |||
32 | } | ||
33 | |||
34 | /** | ||
35 | * Adds an attribute to the annotation | ||
36 | * @param attributeName | ||
37 | * @param value | ||
38 | */ | ||
39 | public void addAttribute(String attributeName, Object value) { | ||
40 | attributes.put(attributeName, value); | ||
41 | } | ||
42 | |||
43 | /** | ||
44 | * Return the name of the annotation | ||
45 | */ | ||
46 | public String getName() { | ||
47 | return name; | ||
48 | } | ||
49 | |||
50 | /** | ||
51 | * Returns the value of the first occurrence of an attribute | ||
52 | * @param attributeName | ||
53 | * @return the attribute value, or null, if attribute is not available | ||
54 | * @since 2.0 | ||
55 | */ | ||
56 | public Optional<Object> getFirstValue(String attributeName) { | ||
57 | return getAllValues(attributeName).stream().findFirst(); | ||
58 | } | ||
59 | |||
60 | /** | ||
61 | * Returns the value of the first occurrence of an attribute | ||
62 | * @param attributeName | ||
63 | * @return the attribute value, or null, if attribute is not available | ||
64 | * @since 2.0 | ||
65 | */ | ||
66 | public <T> Optional<T> getFirstValue(String attributeName, Class<T> clazz) { | ||
67 | return getAllValues(attributeName).stream().filter(clazz::isInstance).map(clazz::cast).findFirst(); | ||
68 | } | ||
69 | |||
70 | /** | ||
71 | * Returns all values of a selected attribute | ||
72 | * @param attributeName | ||
73 | * @return a non-null, but possibly empty list of attributes | ||
74 | */ | ||
75 | public List<Object> getAllValues(String attributeName) { | ||
76 | return attributes.get(attributeName).toList(); | ||
77 | } | ||
78 | |||
79 | /** | ||
80 | * Executes a consumer over all attributes. A selected attribute name (key) can appear (and thus consumed) multiple times. | ||
81 | * @since 2.0 | ||
82 | */ | ||
83 | public void forEachValue(BiConsumer<String, Object> consumer) { | ||
84 | attributes.forEachKeyValue(consumer::accept); | ||
85 | } | ||
86 | |||
87 | /** | ||
88 | * Returns a set of all attribute names used in this annotation | ||
89 | * @since 2.1 | ||
90 | */ | ||
91 | public Set<String> getAllAttributeNames() { | ||
92 | return attributes.keySet().toSet(); | ||
93 | } | ||
94 | } | ||
diff --git a/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/annotations/ParameterReference.java b/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/annotations/ParameterReference.java new file mode 100644 index 00000000..c67e9046 --- /dev/null +++ b/subprojects/viatra-runtime/src/main/java/tools/refinery/viatra/runtime/matchers/psystem/annotations/ParameterReference.java | |||
@@ -0,0 +1,30 @@ | |||
1 | /******************************************************************************* | ||
2 | * Copyright (c) 2010-2014, Zoltan Ujhelyi, Istvan Rath and Daniel Varro | ||
3 | * This program and the accompanying materials are made available under the | ||
4 | * terms of the Eclipse Public License v. 2.0 which is available at | ||
5 | * http://www.eclipse.org/legal/epl-v20.html. | ||
6 | * | ||
7 | * SPDX-License-Identifier: EPL-2.0 | ||
8 | *******************************************************************************/ | ||
9 | package tools.refinery.viatra.runtime.matchers.psystem.annotations; | ||
10 | |||
11 | /** | ||
12 | * An annotation parameter referencing a query parameter by name. Does not check whether the parameter exists. | ||
13 | * | ||
14 | * @author Zoltan Ujhelyi | ||
15 | * | ||
16 | */ | ||
17 | public class ParameterReference { | ||
18 | |||
19 | final String name; | ||
20 | |||
21 | public ParameterReference(String name) { | ||
22 | super(); | ||
23 | this.name = name; | ||
24 | } | ||
25 | |||
26 | public String getName() { | ||
27 | return name; | ||
28 | } | ||
29 | |||
30 | } | ||