private NetworkDataAnalysisEvent getInitialEvent() {
   NetworkDataAnalysisEvent initialEvent = new NetworkDataAnalysisEvent();
   initialEvent.setLabel("Initial State");
   initialEvent.setVertices(file.getVertexDataTable().getCaseQuantity());
   initialEvent.setEdges(file.getEdgeDataTable().getCaseQuantity());
   return initialEvent;
 }
  public String undo_action() throws Exception {
    networkDataService.undoLastEvent();
    NetworkDataAnalysisEvent lastEvent = getLastEvent();
    if (lastEvent.getAddedAttribute() != null) {
      for (SelectItem selectItem : vertexAttributeSelectItems) {
        if (lastEvent.getAddedAttribute().equals(selectItem.getValue())) {
          vertexAttributeSelectItems.remove(selectItem);
          break;
        }
      }
    }

    events.remove(getLastEvent());
    canUndo = false;

    return null;
  }
  public String networkMeasure_action() {
    try {
      String result =
          networkDataService.runNetworkMeasure(networkMeasureType, networkMeasureParamterList);

      NetworkDataAnalysisEvent event = new NetworkDataAnalysisEvent();
      event.setLabel("Network Measure");
      event.setAttributeSet("N/A");
      event.setQuery(
          friendlyNameMap.get(networkMeasureType)
              + " ("
              + getNetworkMeasureParametersAsString(networkMeasureParamterList)
              + ")");
      event.setVertices(getLastEvent().getVertices());
      event.setEdges(getLastEvent().getEdges());
      event.setAddedAttribute(result); // in case we need to undo later
      events.add(event);

      // add measure to attributeList
      vertexAttributeSelectItems.add(new SelectItem(result));
      canUndo = true;

    } catch (Exception e) {
      FacesMessage message = new FacesMessage(e.getMessage());
      getFacesContext().addMessage(networkMeasureError.getClientId(getFacesContext()), message);
    }

    return null;
  }
  public String automaticQuery_action() {
    try {
      int queryValue = 1;
      if (!StringUtil.isEmpty(automaticQueryNthValue)) {
        queryValue = Integer.valueOf(automaticQueryNthValue).intValue();
      }
      NetworkDataSubsetResult result =
          networkDataService.runAutomaticQuery(automaticQueryType, queryValue);

      NetworkDataAnalysisEvent event = new NetworkDataAnalysisEvent();
      event.setLabel("Automatic Query");
      event.setAttributeSet("N/A");
      event.setQuery(
          friendlyNameMap.get(automaticQueryType)
              + " ("
              + (StringUtil.isEmpty(automaticQueryNthValue) ? "1" : automaticQueryNthValue)
              + ")");
      event.setVertices(result.getVertices());
      event.setEdges(result.getEdges());
      events.add(event);
      canUndo = true;

    } catch (Exception e) {
      FacesMessage message = new FacesMessage(e.getMessage());
      getFacesContext().addMessage(automaticQueryError.getClientId(getFacesContext()), message);
    }

    return null;
  }
  public String manualQuery_action() {
    try {
      NetworkDataSubsetResult result =
          networkDataService.runManualQuery(
              manualQueryType, manualQuery, eliminateDisconnectedVertices);

      NetworkDataAnalysisEvent event = new NetworkDataAnalysisEvent();
      event.setLabel("Manual Query");
      event.setAttributeSet(manualQueryType);
      event.setQuery(manualQuery);
      event.setVertices(result.getVertices());
      event.setEdges(result.getEdges());
      events.add(event);
      canUndo = true;

    } catch (SQLException e) {
      FacesMessage message = new FacesMessage("Error executing query: " + e.getMessage());
      getFacesContext().addMessage(manualQueryError.getClientId(getFacesContext()), message);
    }

    return null;
  }