Example #1
0
  public VariableLike getVariableByName(Referable referable, String variableName)
      throws NavigationException {
    Objects.requireNonNull(variableName, "VariableName must not be null!");

    NodeHelper element = new NodeHelper(referable);
    String elementName = element.getLocalName();

    if ("scope".equals(elementName) || "process".equals(elementName)) {
      Nodes variable =
          element
              .toXOM()
              .query("./bpel:variables/bpel:variable[@name='" + variableName + "']", CONTEXT);
      if (variable != null && !variable.isEmpty()) {
        return new VariableElement(variable.get(0), processContainer);
      }
      if ("process".equals(elementName)) {
        throw new NavigationException("Variable does not exist.");
      }
    }

    if ("onEvent".equals(elementName)) {
      if (variableName.equals(element.getAttribute("variable"))) {
        return new OnEventElement(element.toXOM(), processContainer);
      }
    }
    if ("catch".equals(elementName)) {
      if (variableName.equals(element.getAttribute("faultVariable"))) {
        return new CatchElement(element.toXOM(), processContainer);
      }
    }
    if ("forEach".equals(elementName)) {
      if (variableName.equals(element.getAttribute("counterName"))) {
        return new ForEachVariable(element.toXOM(), processContainer);
      }
    }

    return getVariableByName(element.getParent(), variableName);
  }