⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resultbase.java

📁 OLAP 的客户端代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    });

    printPosList(posList, new PrintWriter(System.out), "Step 3 sortPosList " + iDim);

    // last step
    // sort sublists next hierarchy
    if (iDim == nDim - 1)
      return posList;
    List newPosList = new ArrayList();
    List subList = new ArrayList();
    Member first = null;
    for (Iterator iter = posList.iterator(); iter.hasNext();) {
      PositionBase pb = (PositionBase) iter.next();
      if (first == null) {
        first = pb.getMembers()[iDim];
        subList.add(pb);
      } else {
        Member current = pb.getMembers()[iDim];
        if (current.equals(first)) {
          subList.add(pb);
        } else {
          subList = sortPosList(subList, iDim + 1, nDim);
          newPosList.addAll(subList);
          subList.clear();
          first = current;
          subList.add(pb);
        }
      }
    }
    if (subList.size() > 1) {
      subList = sortPosList(subList, iDim + 1, nDim);
    }
    newPosList.addAll(subList);

    printPosList(newPosList, new PrintWriter(System.out), "End sortPosList " + iDim);

    return newPosList;
  }

  /**
   * print position list for debugging
   */
  private void printPosList(List posList, PrintWriter wout, String label) {
    wout.println(label);
    int n = 0;
    for (Iterator iter = posList.iterator(); iter.hasNext(); n++) {
      PositionBase pb = (PositionBase) iter.next();
      Member[] members = pb.getMembers();
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < members.length; i++) {
        if (i == 0) {
          sb.append(n);
          sb.append(" ");
          sb.append(pb.number);
          sb.append(" ");
        } else {
          sb.append(" * ");
        }

        sb.append(members[i].getLabel());
      }
      wout.println(sb.toString());
    }
    wout.flush();
  }

  /**
   * @param iFull
   *            full index array
   * @param iSlice
   *            slice index array
   * @param iAxis -
   *            index beeing omitted
   */
  private void full2slice(int[] iFull, int[] iSlice, int iAxis) {
    if (iSlice.length == 0)
      return; // 1-dimensional
    int j = 0;
    for (int i = 0; i < iFull.length; i++) {
      if (i != iAxis)
        iSlice[j++] = iFull[i];
    }
  }

  /**
   * @param iFull
   *            full index array
   * @param iSlice
   *            slice index array
   * @param iAxis -
   *            index beeing omitted
   */
  private void slice2full(int[] iSlice, int[] iFull, int iAxis, int iAxisVal) {
    if (iSlice.length == 0) {
      iFull[0] = iAxisVal;
      return;
    }

    int j = 0;
    for (int i = 0; i < iFull.length; i++) {
      if (i != iAxis)
        iFull[i] = iSlice[j++];
      else
        iFull[i] = iAxisVal;
    }
  }

  /**
   * linear index from index array
   * 
   * @param iar
   * @return
   */
  private int lindex(int[] iar, int[] ni) {

    // 3 dim sample
    // c000 c001 ... c00n ck00 ck01 ... ck01
    // c010 c011 ... c01n ---> ck10 ck11 ... ck1n
    // ...
    // c0m1 c0m2 ... c0mn ckm1 ckm2 ckmn

    /* kk*(n+1)*(m+1) + mm*(n+1) +nn */

    int k = iar[0];
    for (int j = 1; j < iar.length; j++)
      k = k * (ni[j - 1] + 1) + iar[j];

    return k;
  }

  /**
   * @see com.tonbeller.jpivot.olap.model.Decorator#getRootDecoree()
   */
  public Object getRootDecoree() {
    return this;
  }

  /**
   * @see com.tonbeller.jpivot.olap.model.Visitable#accept
   */

  public void accept(Visitor visitor) {
    visitor.visitResult(this);
  }

  /**
   * Render Test Output to HTML
   */
  public static void renderHtml(Result result, String mdx, String outfile) throws IOException {
    int i;

    PrintWriter wout = new PrintWriter(new BufferedWriter(new FileWriter(outfile)));

    Axis[] axes = result.getAxes();

    wout.println("<HTML>");
    wout.println("<HEAD>");
    wout.println("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">");
    wout.println("<TITLE>Result from MDX Query</TITLE>");
    wout.println("</HEAD>");
    wout.println("<BODY>");

    wout.println("<h1>MDX Query Result</h1>");

    //String mdx = ((MdxOlapModel) model).getCurrentMdx();
    if (mdx != null ) {
      wout.println("<p>");
      wout.println(mdx);
      wout.println("</p>");
    }
    wout.println("<table border=\"3\">");
    wout.println("<thead><tr>");

    if (axes.length == 0) {
      // result is 0 dimensional
      wout.println("<th>Slicer</th><th>Result</th>");
      wout.println("</thead><tbody><tr>");

      // slicer members as row header
      renderSlicerRowHeader(result.getSlicer(), wout);

      Cell cell = (Cell) result.getCells().get(0);
      String value = cell.getFormattedValue();
      wout.println("<td>" + value + "</td>");
      wout.println("</tr>");
    } else if (axes.length == 1) {
      // result is 1 dimensional
      // print position of axis 0 as column headers
      renderColHeaders(wout, axes[0]);
      wout.println("</tr></thead>");

      wout.println("<tbody><tr>");
      // slicer members as row header
      renderSlicerRowHeader(result.getSlicer(), wout);

      int n = 0;
      for (i = 0; i < axes[0].getPositions().size(); i++) {
        Cell cell = (Cell) result.getCells().get(n++);
        String value = cell.getFormattedValue();
        wout.println("<td>" + value + "</td>");
      }
      wout.println("</tr>");
    } else if( axes.length == 2 ) {
      // assume 2 dimensional
      // print position of axis 0 as column headers
      renderColHeaders(wout, axes[0]);

      wout.println("</tr></thead>");

      // print rows, each one starting with row headers
      wout.println("<tbody>");
      Position[] positions = (Position[]) axes[1].getPositions().toArray(new Position[0]);
      int n = 0;
      for (i = 0; i < positions.length; i++) {
        wout.println("<tr>");
        Member[] members = positions[i].getMembers();

        String caption = "";
        for (int j = 0; j < members.length; j++) {
          if (j > 0)
            caption = caption + "<br>" + members[j].getLabel();
          else
            caption = members[j].getLabel();
        }
        wout.println("<th>" + caption + "</th>");
        for (int j = 0; j < axes[0].getPositions().size(); j++) {
          Cell cell = (Cell) result.getCells().get(n++);
          String value = cell.getFormattedValue();
          wout.println("<td>" + value + "</td>");
        }
        wout.println("</tr>");
      }
    } else {
      // cannot handle more than 2 axes
      throw new IllegalArgumentException("ResultBase.renderHtml cannot handle more than 2 axes");
    }

    wout.println("</tbody>");

    wout.println("</BODY></HTML>");
    wout.close();
  }

  /**
   * print column headers from axis
   */
  private static void renderColHeaders(PrintWriter wout, Axis axis) {
    // print position of axis as column headers
    wout.println("<th></th>");
    Position[] positions = (Position[]) axis.getPositions().toArray(new Position[0]);
    for (int i = 0; i < positions.length; i++) {
      Member[] members = positions[i].getMembers();

      String caption = "";
      for (int j = 0; j < members.length; j++) {
        if (j > 0)
          caption = caption + "<br>" + members[j].getLabel();
        else
          caption = members[j].getLabel();
      }
      wout.println("<th>" + caption + "</th>");
    }
  }

  /**
   * print row header from slicer axis
   */
  private static void renderSlicerRowHeader(Axis slicerax, PrintWriter wout) {
    Position[] positions = (Position[]) slicerax.getPositions().toArray(new Position[0]);
    String caption = "";
    for (int i = 0; i < positions.length; i++) {
      Member[] members = positions[i].getMembers();
      for (int j = 0; j < members.length; j++) {
        if (j == 0 && i == 0)
          caption = members[j].getLabel();
        else
          caption = caption + "<br>" + members[j].getLabel();
      }
    }
    wout.println("<th>" + caption + "</th>");
  }

  /**
   * print Result to print stream
   * 
   * @param ps
   *            Output Print Stream
   */
  public void printOut(java.io.PrintStream ps) {
    Axis[] axes = this.getAxes();
    for (int i = 0; i < axes.length; i++) {
      Axis a = axes[i];
      ps.println("Axis " + i);
      printAxis(ps, a);
    }

    Axis slicer = this.getSlicer();
    ps.println("Slicer Axis ");
    printAxis(ps, slicer);

    Iterator it = aCells.iterator();
    int ic = 0;
    while (it.hasNext()) {
      Cell c = (Cell) it.next();
      String val = c.getFormattedValue();
      ps.println("Cell " + ic++ + " Value=" + val);
    }
  }

  /**
   * print axis to standard out
   */
  private void printAxis(java.io.PrintStream ps, Axis a) {
    List positions = a.getPositions();
    Iterator it = positions.iterator();

    int ip = 0;
    while (it.hasNext()) {
      Position p = (Position) it.next();
      ps.println("Position " + ip++);
      Member[] members = p.getMembers();
      for (int j = 0; j < members.length; j++) {
        Member m = members[j];
        String mcap = m.getLabel();
        int idep = m.getRootDistance();
        ps.println("Member " + mcap + " depth=" + idep);
      }
    }
  }

  /**
   * @return true, if the result was rolled back due to overflow condition
   */
  public boolean isOverflowOccured() {
    return overflow;
  }
  
  /**
   * @return true, if the result was rolled back due to overflow condition
   */
  public void setOverflowOccured(boolean overflow) {
    this.overflow = overflow;
  }

} // ResultBase

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -