@Override
  public void handle(Object request, RequestData data) {
    super.handle(request, data);

    // also determine the sub operation
    FeatureMap elements = (FeatureMap) EMFUtils.get((EObject) request, "group");
    if (elements == null) {
      return;
    }

    ListIterator i = elements.valueListIterator();
    int flag = 0;
    while (i.hasNext()) {
      Object e = i.next();
      if (e.getClass().getSimpleName().startsWith("Insert")) {
        flag |= 1;
      } else if (e.getClass().getSimpleName().startsWith("Update")) {
        flag |= 2;
      } else if (e.getClass().getSimpleName().startsWith("Delete")) {
        flag |= 4;
      } else {
        flag |= 8;
      }
    }

    StringBuffer sb = new StringBuffer();
    if ((flag & 1) == 1) sb.append("I");
    if ((flag & 2) == 2) sb.append("U");
    if ((flag & 4) == 4) sb.append("D");
    if ((flag & 8) == 8) sb.append("O");
    data.setSubOperation(sb.toString());
  }