Esempio n. 1
0
  private static View copyChildView(
      GroupByView groupView,
      String[] propertyNames,
      Object groupByValues,
      AgentInstanceViewFactoryChainContext agentInstanceContext,
      View originalChildView) {
    if (originalChildView instanceof MergeView) {
      String message = "Unexpected merge view as child of group-by view";
      log.fatal(".copySubViews " + message);
      throw new EPException(message);
    }

    if (!(originalChildView instanceof CloneableView)) {
      throw new EPException(
          "Unexpected error copying subview " + originalChildView.getClass().getName());
    }
    CloneableView cloneableView = (CloneableView) originalChildView;

    // Copy child node
    View copyChildView = cloneableView.cloneView();
    copyChildView.setParent(groupView);

    // Make the sub views for child copying from the original to the child
    copySubViews(
        groupView.getCriteriaExpressions(),
        propertyNames,
        groupByValues,
        originalChildView,
        copyChildView,
        agentInstanceContext);

    return copyChildView;
  }
Esempio n. 2
0
  private static void copySubViews(
      ExprNode[] criteriaExpressions,
      String[] propertyNames,
      Object groupByValues,
      View originalView,
      View copyView,
      AgentInstanceViewFactoryChainContext agentInstanceContext) {
    for (View subView : originalView.getViews()) {
      // Determine if view is our merge view
      if (subView instanceof MergeViewMarker) {
        MergeViewMarker mergeView = (MergeViewMarker) subView;
        if (ExprNodeUtility.deepEquals(mergeView.getGroupFieldNames(), criteriaExpressions)) {
          // We found our merge view - install a new data merge view on top of it
          AddPropertyValueView mergeDataView =
              new AddPropertyValueView(
                  agentInstanceContext, propertyNames, groupByValues, mergeView.getEventType());

          // Add to the copied parent subview the view merge data view
          copyView.addView(mergeDataView);

          // Add to the new merge data view the actual single merge view instance that clients may
          // attached to
          mergeDataView.addView(mergeView);

          // Add a parent view to the single merge view instance
          mergeView.addParentView(mergeDataView);

          continue;
        }
      }

      if (!(subView instanceof CloneableView)) {
        throw new EPException("Unexpected error copying subview");
      }
      CloneableView cloneableView = (CloneableView) subView;
      View copiedChild = cloneableView.cloneView();
      copyView.addView(copiedChild);

      // Make the sub views for child
      copySubViews(
          criteriaExpressions,
          propertyNames,
          groupByValues,
          subView,
          copiedChild,
          agentInstanceContext);
    }
  }