Package org.apache.oodt.cas.workflow.gui.util

Source Code of org.apache.oodt.cas.workflow.gui.util.GuiUtils

/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/

package org.apache.oodt.cas.workflow.gui.util;

//OODT imports
import org.apache.oodt.cas.workflow.gui.model.ModelGraph;
import org.apache.oodt.cas.workflow.gui.model.ModelNode;
import org.apache.oodt.cas.workflow.gui.perspective.view.ViewState;

//JDK imports
import java.io.File;
import java.util.List;
import java.util.Set;
import java.util.Stack;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicInteger;

/**
*
*
* Generic utility functions helpful for the Workflow Editor GUI.
*
* @author bfoster
* @author mattmann
*
*/
public class GuiUtils {

  protected static AtomicInteger untitledIter = new AtomicInteger(0);
  protected static AtomicInteger dummyUntitledIter = new AtomicInteger(0);

  public static boolean isSubGraph(ModelGraph graph, ModelGraph subGraph) {
    if (graph.equals(subGraph))
      return true;
    for (ModelGraph child : graph.getChildren())
      if (isSubGraph(child, subGraph))
        return true;
    if (graph.getPreConditions() != null)
      if (isSubGraph(graph.getPreConditions(), subGraph))
        return true;
    if (graph.getPostConditions() != null)
      if (isSubGraph(graph.getPostConditions(), subGraph))
        return true;
    return false;
  }

  public static void updateGraphModelId(ViewState state, String id,
      String newModelId) {
    ModelGraph graph = find(state.getGraphs(), id);
    if (graph.getParent() != null
        && graph.getParent().getModel().getExcusedSubProcessorIds()
            .contains(graph.getModel().getModelId())) {
      graph.getParent().getModel().getExcusedSubProcessorIds()
          .remove(graph.getModel().getModelId());
      graph.getParent().getModel().getExcusedSubProcessorIds().add(newModelId);
    }
    graph.getModel().setModelId(newModelId);
  }

  public static void addChild(List<ModelGraph> graphs, String parentId,
      ModelGraph child) {
    ModelGraph parent = find(graphs, parentId);
    if (parent != null)
      parent.addChild(child);
  }

  public static List<ModelGraph> findRootGraphs(List<ModelGraph> graphs) {
    List<ModelGraph> rootGraphs = new Vector<ModelGraph>();
    for (ModelGraph graph : graphs) {
      if (rootGraphs.size() == 0) {
        rootGraphs.add(graph);
      } else {
        if (find(rootGraphs, graph.getModel().getModelId()) == null) {
          rootGraphs.add(graph);
        }
      }
    }
    for (int i = 0; i < rootGraphs.size(); i++) {
      ModelGraph rootGraph = rootGraphs.get(i);
      for (int j = 0; j < rootGraphs.size(); j++) {
        if (i != j
            && rootGraphs.get(j).recursiveFind(
                rootGraph.getModel().getModelId()) != null) {
          rootGraphs.remove(i--);
          break;
        }
      }

    }
    return rootGraphs;
  }

  public static ModelGraph findRoot(List<ModelGraph> rootGraphs,
      ModelGraph graph) {
    for (ModelGraph rootGraph : rootGraphs) {
      if (graph.equals(rootGraph)) {
        return rootGraph;
      } else if (graph.getParent() != null) {
        ModelGraph root = findRoot(rootGraphs, graph.getParent());
        if (root != null)
          return root;
      }
    }
    return null;
  }

  public static List<ModelGraph> find(List<ModelGraph> graphs, Set<String> ids) {
    Vector<ModelGraph> foundGraphs = new Vector<ModelGraph>();
    for (String id : ids) {
      ModelGraph graph = find(graphs, id);
      if (graph != null)
        foundGraphs.add(graph);
    }
    return foundGraphs;
  }

  public static ModelGraph find(List<ModelGraph> graphs, String id) {
    for (ModelGraph graph : graphs) {
      ModelGraph found = graph.recursiveFind(id);
      if (found != null)
        return found;
    }
    return null;
  }

  public static ModelGraph removeNode(List<ModelGraph> graphs, ModelNode node) {
    for (int i = 0; i < graphs.size(); i++) {
      if (graphs.get(i).getModel().equals(node)) {
        return graphs.remove(i);
      } else {
        ModelGraph graph = removeNode(graphs.get(i), node);
        if (graph != null)
          return graph;
      }
    }
    return null;
  }

  public static ModelGraph removeNode(ModelGraph graph, ModelNode node) {
    Stack<ModelGraph> stack = new Stack<ModelGraph>();
    stack.add(graph);
    while (!stack.empty()) {
      ModelGraph curGraph = stack.pop();
      if (curGraph.getModel().equals(node)) {
        curGraph.setParent(null);
        return curGraph;
      } else {
        stack.addAll(curGraph.getChildren());
        if (curGraph.getPreConditions() != null)
          stack.add(curGraph.getPreConditions());
        if (curGraph.getPostConditions() != null)
          stack.add(curGraph.getPostConditions());
      }
    }
    return null;
  }

  public static List<Line> findSequentialLines(List<ModelGraph> graphs) {
    Vector<Line> lines = new Vector<Line>();
    for (ModelGraph graph : graphs)
      lines.addAll(findSequentialLines(graph));
    return lines;
  }

  public static List<Line> findSequentialLines(final ModelGraph graph) {
    Vector<Line> lines = new Vector<Line>();
    if (graph.getChildren().size() > 0) {
      Stack<ModelGraph> stack = new Stack<ModelGraph>();
      stack.add(graph);
      while (!stack.empty()) {
        ModelGraph curGraph = stack.pop();
        if (curGraph.getModel().getExecutionType().equals("sequential")) {
          for (int i = 0; i < curGraph.getChildren().size() - 1; i++)
            lines.add(new Line(curGraph.getChildren().get(i).getModel(),
                curGraph.getChildren().get(i + 1).getModel()));
        }
        stack.addAll(curGraph.getChildren());
      }
    }
    return lines;
  }

  public static List<Line> findLines(final List<ModelGraph> graphs) {
    Vector<Line> lines = new Vector<Line>();
    for (ModelGraph graph : graphs)
      lines.addAll(findLines(graph));
    return lines;
  }

  public static List<Line> findLines(final ModelGraph graph) {
    Vector<Line> lines = new Vector<Line>();
    if (graph.getChildren().size() > 0) {
      Stack<ModelGraph> graphs = new Stack<ModelGraph>();
      graphs.add(graph);
      while (!graphs.empty()) {
        ModelGraph curGraph = graphs.pop();
        if (curGraph.getModel().isParentType()) {

          if (curGraph.getChildren().size() == 0)
            curGraph.addChild(new ModelGraph(createDummyNode()));

          List<Line> relaventLines = getRelaventLines(lines, curGraph
              .getModel().getId());
          for (Line relaventLine : relaventLines) {
            int index = lines.indexOf(relaventLine);
            if (curGraph.getModel().getExecutionType().toLowerCase()
                .equals("sequential")) {
              lines.remove(index);
              if (curGraph.getChildren().size() > 0) {
                if (relaventLine.getFromModel().equals(curGraph.getModel()))
                  lines.add(new Line(curGraph.getChildren()
                      .get(curGraph.getChildren().size() - 1).getModel(),
                      relaventLine.getToModel()));
                else
                  lines.add(new Line(relaventLine.getFromModel(), curGraph
                      .getChildren().get(0).getModel()));
              }
            } else if (curGraph.getModel().getExecutionType().toLowerCase()
                .equals("parallel")) {
              lines.remove(index);
              if (relaventLine.getFromModel().equals(curGraph.getModel()))
                for (ModelGraph child : curGraph.getChildren())
                  lines.add(new Line(child.getModel(), relaventLine
                      .getToModel()));
              else
                for (ModelGraph child : curGraph.getChildren())
                  lines.add(new Line(relaventLine.getFromModel(), child
                      .getModel()));
            }
          }

          if (curGraph.getModel().getExecutionType().toLowerCase()
              .equals("sequential")) {
            for (int i = 0; i < curGraph.getChildren().size(); i++) {
              if (i == curGraph.getChildren().size() - 1)
                lines.add(new Line(curGraph.getChildren().get(i).getModel(),
                    null));
              else
                lines.add(new Line(curGraph.getChildren().get(i).getModel(),
                    curGraph.getChildren().get(i + 1).getModel()));
            }
          } else if (curGraph.getModel().getExecutionType().toLowerCase()
              .equals("parallel")) {
            for (int i = 0; i < curGraph.getChildren().size(); i++)
              lines
                  .add(new Line(curGraph.getChildren().get(i).getModel(), null));
          }
          graphs.addAll(curGraph.getChildren());
        }
      }
    } else {
      lines.add(new Line(graph.getModel(), null));
    }
    return lines;
  }

  public static boolean isDummyNode(ModelNode node) {
    return node.getModelId().startsWith("DUMMY-");
  }

  public static ModelNode createDummyNode() {
    ModelNode dummy = new ModelNode(null, "DUMMY-"
        + dummyUntitledIter.getAndIncrement());
    dummy.setTextVisible(false);
    return dummy;
  }

  public static List<ModelGraph> getGraphsInFile(File file,
      List<ModelGraph> graphs) {
    List<ModelGraph> graphsInFile = new Vector<ModelGraph>();
    for (ModelGraph graph : graphs) {
      if (graph.getModel().getFile().equals(file)) {
        graphsInFile.add(graph);
      } else {
        graphsInFile.addAll(getGraphsInFile(file, graph.getChildren()));
      }
    }
    return graphsInFile;
  }

  public static String createUniqueName() {
    return "Untitled-" + untitledIter.getAndIncrement();
  }

  public static Line getLine(List<Line> lines, ModelNode fromModel,
      ModelNode toModel) {
    for (Line line : lines)
      if (line.getFromModel().equals(fromModel)
          && line.getToModel().equals(toModel))
        return line;
    return null;
  }

  public static List<Line> getRelaventLines(List<Line> lines, String id) {
    List<Line> relaventLines = new Vector<Line>();
    for (Line line : lines)
      if ((line.getFromModel() != null && line.getFromModel().getId()
          .equals(id))
          || (line.getToModel() != null && line.getToModel().getId().equals(id)))
        relaventLines.add(line);
    return relaventLines;
  }

  public static List<Line> getChildrenLines(List<Line> lines, String id) {
    List<Line> relaventLines = new Vector<Line>();
    for (Line line : lines)
      if (line.getFromModel().getId().equals(id))
        relaventLines.add(line);
    return relaventLines;
  }

  public static List<Line> getParentLines(List<Line> lines, String id) {
    List<Line> relaventLines = new Vector<Line>();
    for (Line line : lines)
      if (line.getToModel().getId().equals(id))
        relaventLines.add(line);
    return relaventLines;
  }

  public static List<Line> getStartingLines(List<Line> lines) {
    Vector<Line> startingLines = new Vector<Line>();
    for (Line line : lines)
      if (getParentLines(lines, line.getFromModel().getId()).size() == 0)
        startingLines.add(line);
    return startingLines;
  }

}
TOP

Related Classes of org.apache.oodt.cas.workflow.gui.util.GuiUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.