@Override
  public Object getLog() {

    if (PipelineNodeUtil.isLoggable.apply(node.getNode())) {
      return new LogResource(node.getNode().getAction(LogAction.class).getLogText());
    }
    return null;
  }
 @Override
 public Collection<BlueActionProxy> getActions() {
   return PipelineImpl.getActionProxies(node.getNode().getActions(), this);
 }
 @Override
 public Date getStartTime() {
   return new Date(node.getTiming().getStartTimeMillis());
 }
 @Override
 public Long getDurationInMillis() {
   return node.getTiming().getTotalDurationMillis();
 }
 @Override
 public BlueRun.BlueRunState getStateObj() {
   return node.getStatus().getState();
 }
 @Override
 public BlueRun.BlueRunResult getResult() {
   return node.getStatus().getResult();
 }
 @Override
 public String getDisplayName() {
   return node.getNode().getDisplayName();
 }
 @Override
 public String getId() {
   return node.getId();
 }
 public PipelineStepImpl(FlowNodeWrapper node, Link parent) {
   assert node != null;
   this.self = parent.rel(node.getId());
   this.node = node;
 }