/* * SPDX-FileCopyrightText: 2023 The Refinery Authors * * SPDX-License-Identifier: EPL-2.0 */ package tools.refinery.store.reasoning.actions; import tools.refinery.store.dse.transition.actions.AbstractActionLiteral; import tools.refinery.store.dse.transition.actions.BoundActionLiteral; import tools.refinery.store.model.Model; import tools.refinery.store.query.term.NodeVariable; import tools.refinery.store.reasoning.ReasoningAdapter; import tools.refinery.store.reasoning.representation.PartialSymbol; import tools.refinery.store.tuple.Tuple; import java.util.List; public class MergeActionLiteral extends AbstractActionLiteral { private final PartialSymbol partialSymbol; private final List parameters; private final A value; public MergeActionLiteral(PartialSymbol partialSymbol, A value, List parameters) { if (partialSymbol.arity() != parameters.size()) { throw new IllegalArgumentException("Expected %d parameters for partial symbol %s, got %d instead" .formatted(partialSymbol.arity(), partialSymbol, parameters.size())); } this.partialSymbol = partialSymbol; this.parameters = parameters; this.value = value; } public PartialSymbol getPartialSymbol() { return partialSymbol; } public List getParameters() { return parameters; } public A getValue() { return value; } @Override public List getInputVariables() { return getParameters(); } @Override public List getOutputVariables() { return List.of(); } @Override public BoundActionLiteral bindToModel(Model model) { var refiner = model.getAdapter(ReasoningAdapter.class).getRefiner(partialSymbol); return tuple -> refiner.merge(tuple, value) ? Tuple.of() : null; } }