-
Notifications
You must be signed in to change notification settings - Fork 188
/
AxiomTypeDefinitionImpl.java
57 lines (46 loc) · 2.13 KB
/
AxiomTypeDefinitionImpl.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.evolveum.axiom.lang.impl;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import com.evolveum.axiom.api.AxiomIdentifier;
import com.evolveum.axiom.lang.api.AxiomBuiltIn;
import com.evolveum.axiom.lang.api.AxiomItemDefinition;
import com.evolveum.axiom.lang.api.AxiomTypeDefinition;
import com.evolveum.axiom.lang.api.Identifiable;
import com.evolveum.axiom.lang.api.stmt.AxiomStatement;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.Multimap;
import static com.evolveum.axiom.lang.api.AxiomBuiltIn.Item.*;
public class AxiomTypeDefinitionImpl extends AbstractAxiomBaseDefinition implements AxiomTypeDefinition {
public static final Factory<AxiomIdentifier, AxiomTypeDefinitionImpl> FACTORY =AxiomTypeDefinitionImpl::new;
private final Map<AxiomIdentifier, AxiomItemDefinition> items;
private final Optional<AxiomTypeDefinition> superType;
private Optional<AxiomItemDefinition> argument;
public AxiomTypeDefinitionImpl(AxiomIdentifier keyword, AxiomIdentifier value, List<AxiomStatement<?>> children,
Multimap<AxiomIdentifier, AxiomStatement<?>> keywordMap) {
super(keyword, value, children, keywordMap);
ImmutableMap.Builder<AxiomIdentifier, AxiomItemDefinition> builder = ImmutableMap.builder();
putAll(builder, children(ITEM_DEFINITION.name(), AxiomItemDefinition.class));
items = builder.build();
superType = first(SUPERTYPE_REFERENCE.name(), AxiomTypeDefinition.class);
argument = firstValue(ARGUMENT.name(), AxiomIdentifier.class)
.flatMap((AxiomIdentifier k) -> item(k));
}
@Override
public Optional<AxiomItemDefinition> argument() {
if (!argument.isPresent() && superType().isPresent()) {
return superType().get().argument();
}
return argument;
}
@Override
public Optional<AxiomTypeDefinition> superType() {
return superType;
}
@Override
public Map<AxiomIdentifier, AxiomItemDefinition> items() {
return items;
}
}