From aae76b6376718464213c6950c6a4a33ad10f7459 Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Thu, 21 May 2020 12:14:38 +0200 Subject: [PATCH] Axiom: Renamed reactor context to reflect Item & Value terminology Signed-off-by: Tony Tkacik --- .../evolveum/axiom/lang/api/AxiomItem.java | 1 + .../axiom/lang/api/AxiomItemFactory.java | 9 ++++ .../axiom/lang/api/AxiomItemValue.java | 4 +- .../axiom/lang/api/AxiomItemValueBuilder.java | 51 +++++++++++++++++++ .../axiom/lang/api/AxiomItemValueFactory.java | 9 ++++ .../axiom/lang/api/AxiomTypeDefinition.java | 5 +- .../axiom/lang/impl/StatementContextImpl.java | 14 ++--- ...t.java => StatementResultContextImpl.java} | 4 +- .../lang/spi/AxiomTypeDefinitionImpl.java | 4 -- 9 files changed, 85 insertions(+), 16 deletions(-) create mode 100644 infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemFactory.java create mode 100644 infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValueBuilder.java create mode 100644 infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValueFactory.java rename infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/{StatementContextResult.java => StatementResultContextImpl.java} (91%) diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItem.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItem.java index a1619605719..03401b6e040 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItem.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItem.java @@ -17,4 +17,5 @@ default AxiomItemValue onlyValue() { return Iterables.getOnlyElement(values()); } + } diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemFactory.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemFactory.java new file mode 100644 index 00000000000..69131b6268a --- /dev/null +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemFactory.java @@ -0,0 +1,9 @@ +package com.evolveum.axiom.lang.api; + +import java.util.Collection; + +public interface AxiomItemFactory { + + AxiomItem create(AxiomItemDefinition def, Collection> axiomItem); + +} diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValue.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValue.java index 69db2849773..dc5c840c478 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValue.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValue.java @@ -21,8 +21,10 @@ default Collection> items(AxiomIdentifier name) { return Collections2.filter(items(), value -> name.equals(value.name())); } - @Override V get(); + interface Factory> { + T create(AxiomTypeDefinition def, V value, Collection> items); + } } diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValueBuilder.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValueBuilder.java new file mode 100644 index 00000000000..a56f3467022 --- /dev/null +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValueBuilder.java @@ -0,0 +1,51 @@ +package com.evolveum.axiom.lang.api; + +import com.evolveum.axiom.concepts.Lazy; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.function.Supplier; + +import javax.annotation.concurrent.NotThreadSafe; + +import com.evolveum.axiom.api.AxiomIdentifier; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; + +@NotThreadSafe +public class AxiomItemValueBuilder> implements Lazy.Supplier { + + private final AxiomTypeDefinition type; + + private final AxiomItemValueFactory factory; + private Map>> children = new LinkedHashMap<>(); + private V value; + + public AxiomItemValueBuilder(AxiomTypeDefinition type, AxiomItemValueFactory factory) { + this.type = type; + this.factory = factory; + } + + public V getValue() { + return value; + } + + public void setValue(V value) { + this.value = value; + } + + public void add(AxiomIdentifier name, Supplier> child) { + children.put(name, child); + } + + @Override + public T get() { + Builder> builder = ImmutableMap.builder(); + for(Entry>> entry : children.entrySet()) { + builder.put(entry.getKey(), entry.getValue().get()); + } + return factory.create(type, value, builder.build().values()); + } + +} diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValueFactory.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValueFactory.java new file mode 100644 index 00000000000..e19da1881c8 --- /dev/null +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomItemValueFactory.java @@ -0,0 +1,9 @@ +package com.evolveum.axiom.lang.api; + +import java.util.Collection; + +public interface AxiomItemValueFactory> { + + T create(AxiomTypeDefinition def, V value, Collection> items); +} + diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomTypeDefinition.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomTypeDefinition.java index 230e2cbda68..80bc9c7e3d5 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomTypeDefinition.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/api/AxiomTypeDefinition.java @@ -14,11 +14,12 @@ import com.evolveum.axiom.api.AxiomIdentifier; import com.google.common.collect.ImmutableMap; -public interface AxiomTypeDefinition extends AxiomNamedDefinition, AxiomItemValue { +public interface AxiomTypeDefinition extends AxiomNamedDefinition { public final AxiomIdentifier IDENTIFIER_MEMBER = AxiomIdentifier.axiom("name"); public final AxiomIdentifier IDENTIFIER_SPACE = AxiomIdentifier.axiom("AxiomTypeDefinition"); + /* @Override default AxiomTypeDefinition get() { return this; @@ -27,7 +28,7 @@ default AxiomTypeDefinition get() { @Override default Optional definition() { return Optional.empty(); - } + }*/ Optional argument(); diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementContextImpl.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementContextImpl.java index 5ac07225cad..10d0045b627 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementContextImpl.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementContextImpl.java @@ -44,7 +44,7 @@ public abstract class StatementContextImpl implements AxiomStatementContext builder = new AxiomStatementBuilder<>(definition.name(), typeFactory(definition.type())); - this.result = new StatementContextResult<>(definition, builder); + this.result = new StatementResultContextImpl<>(definition, builder); } protected Factory> typeFactory(AxiomTypeDefinition type) { @@ -56,9 +56,9 @@ public void setValue(Object value) { mutableResult().setValue((V) value); } - private StatementContextResult mutableResult() { - if(result instanceof StatementContextResult) { - return (StatementContextResult) result; + private StatementResultContextImpl mutableResult() { + if(result instanceof StatementResultContextImpl) { + return (StatementResultContextImpl) result; } return null; } @@ -159,7 +159,7 @@ public void setValue(Object value, SourceLocation loc) { } public Dependency> asRequirement() { - if (result instanceof StatementContextResult) { + if (result instanceof StatementResultContextImpl) { return Dependency.deffered(result); } return result; @@ -217,8 +217,8 @@ private void registerLocalParent(AxiomIdentifier space, IdentifierSpaceKey key) @Override public V requireValue(Class type) { - if(result instanceof StatementContextResult) { - return type.cast(((StatementContextResult) result).value()); + if(result instanceof StatementResultContextImpl) { + return type.cast(((StatementResultContextImpl) result).value()); } return null; } diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementContextResult.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementResultContextImpl.java similarity index 91% rename from infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementContextResult.java rename to infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementResultContextImpl.java index ca7156d97b0..0758eb9c9ac 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementContextResult.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/impl/StatementResultContextImpl.java @@ -13,7 +13,7 @@ import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -class StatementContextResult implements Dependency> { +class StatementResultContextImpl implements Dependency> { private V value; private final List> childrenList = new ArrayList<>(); @@ -22,7 +22,7 @@ class StatementContextResult implements Dependency> { private final List> rules = new ArrayList<>(); - public StatementContextResult(AxiomItemDefinition definition, AxiomStatementBuilder builder) { + public StatementResultContextImpl(AxiomItemDefinition definition, AxiomStatementBuilder builder) { super(); this.builder = builder; } diff --git a/infra/axiom/src/main/java/com/evolveum/axiom/lang/spi/AxiomTypeDefinitionImpl.java b/infra/axiom/src/main/java/com/evolveum/axiom/lang/spi/AxiomTypeDefinitionImpl.java index c91e0e3f340..ddade1fa76d 100644 --- a/infra/axiom/src/main/java/com/evolveum/axiom/lang/spi/AxiomTypeDefinitionImpl.java +++ b/infra/axiom/src/main/java/com/evolveum/axiom/lang/spi/AxiomTypeDefinitionImpl.java @@ -7,17 +7,13 @@ import java.util.Set; import java.util.stream.Collectors; -import org.checkerframework.checker.units.qual.K; import com.evolveum.axiom.api.AxiomIdentifier; -import com.evolveum.axiom.concepts.Identifiable; -import com.evolveum.axiom.lang.api.AxiomBuiltIn; import com.evolveum.axiom.lang.api.AxiomIdentifierDefinition; import com.evolveum.axiom.lang.api.AxiomItemDefinition; import com.evolveum.axiom.lang.api.AxiomTypeDefinition; import com.evolveum.axiom.lang.api.AxiomBuiltIn.Item; 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.*;