All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.resys.wrench.assets.flow.spi.log.FlowLogger Maven / Gradle / Ivy

package io.resys.wrench.assets.flow.spi.log;

/*-
 * #%L
 * wrench-assets-flow
 * %%
 * Copyright (C) 2016 - 2018 Copyright 2016 ReSys OÜ
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;

import io.resys.wrench.assets.flow.api.model.Flow;
import io.resys.wrench.assets.flow.api.model.Flow.FlowHistory;
import io.resys.wrench.assets.flow.api.model.Flow.FlowTask;
import io.resys.wrench.assets.flow.api.model.FlowModel.FlowTaskModel;
import io.resys.wrench.assets.flow.api.model.FlowModel.FlowTaskType;

public class FlowLogger {

  private Flow flow;

  public FlowLogger flow(Flow flow) {
    this.flow = flow;
    return this;
  }

  public Map build() {
    Map result = new HashMap<>();
    BiConsumer parent = (key, value) -> result.put(key, value);
    for(FlowHistory history : flow.getContext().getHistory()) {
      FlowTask task = flow.getContext().getTask(history.getId());
      FlowTaskModel taskModel = flow.getModel().getTasks().stream().filter(t -> t.getId().equals(task.getModelId())).findFirst().get();
      if(taskModel.getType() == FlowTaskType.DT || taskModel.getType() == FlowTaskType.SERVICE) {
        parent = createTaskLog(parent, task);
      }
    }

    return result;
  }

  protected BiConsumer createTaskLog(BiConsumer parent, FlowTask task) {
    Map taskLog = new HashMap<>();
    if(!task.getInputs().isEmpty()) {
      taskLog.put("inputs", task.getInputs());
    }
    taskLog.put("output", task.getVariables().get(task.getModelId()));
    parent.accept(task.getModelId(), taskLog);

    BiConsumer current = (key, value) -> {
      Map next = new HashMap<>();
      next.put(key, value);
      taskLog.put("next", next);
    };

    return current;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy