private void addStep(InteractionUnit interactionUnit)
{
InteractionCoordinator coordinator = context.get(ContextKey.COORDINATOR);
final StatementContext delegate = coordinator.getStatementScope().getContext(interactionUnit.getId());
assert delegate != null : "StatementContext not provided";
DMRMapping mapping = (DMRMapping) interactionUnit.findMapping(DMR, new Predicate<DMRMapping>()
{
@Override
public boolean appliesTo(final DMRMapping candidate)
{
// the read-resource operation only needs the address of a resource
// hence we can skip mapping without address declarations (i.e. just attributes)
return candidate.getAddress() != null;
}
});
if (mapping != null)
{
String address = mapping.getAddress();
if (!resolvedAdresses.contains(address))
{
AddressMapping addressMapping = AddressMapping.fromString(address);
ModelNode op = addressMapping.asResource(new DelegatingStatementContext()
{
@Override
public String resolve(String key)
{
// fallback strategy for values that are created at runtime, i.e. datasource={selected.entity}
String resolved = delegate.resolve(key);
if (null == resolved) { resolved = "*"; }
return resolved;
}
@Override
public String[] resolveTuple(String key)
{
return delegate.resolveTuple(key);
}
@Override
public LinkedList<String> collect(String key) {
LinkedList<String> items = new LinkedList<String>();