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

📄 mementotest.java

📁 OLAP 的客户端代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    Position pos = (Position) positions.get(positions.size() - 5);
    assertTrue(mdep.canCollapse(pos, pos.getMembers()[3]));
    mdep.collapse(pos, pos.getMembers()[3]); // All Products

    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");
    positions = result.getAxes()[1].getPositions();

    assertPosition(result, positions.size() - 2, new String[] { "F", "S", "WA", "All Products" });

    // collapse All Marital Status
    pos = (Position) positions.get(1);
    assertTrue(mdep.canCollapse(pos, pos.getMembers()[1]));
    mdep.collapse(pos, pos.getMembers()[1]); // All Marital Status

    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");
    positions = result.getAxes()[1].getPositions();

    assertPosition(result, 8, new String[] { "F", "All Marital Status", "CA", "All Products" });

    // collapse All Gender
    pos = (Position) positions.get(0);
    assertTrue(mdep.canCollapse(pos, pos.getMembers()[0]));
    mdep.collapse(pos, pos.getMembers()[0]); // All Gender

    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");
    positions = result.getAxes()[1].getPositions();
    assertEquals(positions.size(), 1);
  }

  public String createMementoDrill() throws Exception {

    String renderFile = null; // "d:\\x\\createMementoDrill";
    int renderNum = 0;

    /*
    select {[Measures].[Unit Sales], [Measures].[Store Cost], [Measures].[Store Sales]} on columns,
    CrossJoin(  [Store].[USA].children, [Product].[All Products].[Drink].children) on rows
    from Sales  where ([Time].[1997])
    */
    String mdxQuery =
      "select {[Measures].[Unit Sales], [Measures].[Store Cost], [Measures].[Store Sales]} on columns, "
        + "CrossJoin(  [Store].[USA].children, [Product].[All Products].[Drink].children) on rows "
        + "from Sales  where ([Time].[1997])";

    Result result;

    URL confUrl = XMLA_Model.class.getResource("config.xml");
    XMLA_Model model = (XMLA_Model) ModelFactory.instance(confUrl);

    model.setMdxQuery(mdxQuery);
    TestConnection.initModel(model);

    // first step
    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");

    assertPosition(result, 1, new String[] { "CA", "Beverages" });
    assertPosition(result, 6, new String[] { "WA", "Alcoholic Beverages" });

    DrillReplaceExt mdrep = (DrillReplaceExt) model.getExtension(DrillReplace.ID);

    // Drill down CA
    Axis[] axes = result.getAxes();
    List positions = axes[1].getPositions();
    Position pos1 = (Position) positions.get(1); // (CA,Beverages)

    assertTrue(mdrep.canDrillDown(pos1.getMembers()[0]));
    mdrep.drillDown(pos1.getMembers()[0]); // drilldown CA

    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");
    assertPosition(result, 6, new String[] { "Los Angeles", "Alcoholic Beverages" });
    assertPosition(result, 10, new String[] { "San Diego", "Beverages" });
    assertPosition(result, 14, new String[] { "San Francisco", "Dairy" });

    // drill up the Store hierarchy
    axes = result.getAxes();
    positions = axes[1].getPositions();
    Position pos0 = (Position) positions.get(0); // no matter what it is
    Hierarchy hier = pos0.getMembers()[0].getLevel().getHierarchy();

    assertTrue(mdrep.canDrillUp(hier));
    mdrep.drillUp(hier); // drill up "Store"

    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");

    assertPosition(result, 2, new String[] { "CA", "Dairy" });
    assertPosition(result, 7, new String[] { "WA", "Beverages" });

    // another drill up of the Store hierarchy
    axes = result.getAxes();
    positions = axes[1].getPositions();
    pos0 = (Position) positions.get(0); // no matter what it is
    hier = pos0.getMembers()[0].getLevel().getHierarchy();

    assertTrue(mdrep.canDrillUp(hier));
    mdrep.drillUp(hier); // drill up "Store"

    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");

    assertPosition(result, 7, new String[] { "USA", "Beverages" });

    // create Memento and write it to xml string
    XMLA_Memento memento = (XMLA_Memento) model.getBookmarkState(Bookmarkable.EXTENSIONAL);
    ByteArrayOutputStream outs = new ByteArrayOutputStream();
    XMLEncoder e = new XMLEncoder(outs);
    e.writeObject(memento);
    e.close();

    String xml = outs.toString();
    Document dom = buildDomTree(xml);
    System.out.println(xml);

    // make dom tree from xml and do some testing
    // select <object class="com.tonbeller.jpivot.mondrian.MondrianMemento"> 
    XPath xpath =
      new DOMXPath("/java/object[@class='com.tonbeller.jpivot.xmla.XMLA_Memento'");
    List results = xpath.selectNodes(dom);
    assertEquals(results.size(), 1); // there is only one memento
    Node node = (Node) results.get(0);
    // we have 2 QuaxBeans
    // <object class="com.tonbeller.jpivot.mondrian.MondrianQuaxBean"> 
    xpath = new DOMXPath("//object[@class='com.tonbeller.jpivot.olap.query.QuaxBean'");
    results = xpath.selectNodes(node);
    assertEquals(results.size(), 2); // expecting 2 QuaxBeans
    // select QuaxBean for "rows" axis
    node = (Node) results.get(1);
    /* old stuff mdx version 2
    // this QuaxBean node is expected to have 2 Member Sets
    xpath = new DOMXPath("//object[@class='com.tonbeller.jpivot.mondrian.MondrianMemberSetBean'");
    results = xpath.selectNodes(node);
    assertEquals(results.size(), 2); // expecting 2 MemberSetBeans
    */
    // expect one node under root, [Store].[All Stores].Children
    xpath =
      new DOMXPath(
        "./void[@property='posTreeRoot']/object"
          + CLASS_POSITIONNODEBEAN
          + "/void[@property='children']/array"
          + CLASS_POSITIONNODEBEAN
          + "/void[@index='0']/object"
          + CLASS_POSITIONNODEBEAN
          + "/void[@property='reference']/object"
          + CLASS_EXPBEAN);
    results = xpath.selectNodes(node);
    node = (Node) results.get(0);
    // should be Exp bean for  tree root [Store].[All Stores].Children

    xpath =
      new DOMXPath(
        "./void[@property='args']/array"
          + CLASS_EXPBEAN
          + "/void[@index='0']/object"
          + CLASS_EXPBEAN
          + "/void[@property='name']/string");
    results = xpath.selectNodes(node);
    node = (Node) results.get(0);
    // should be Exp bean for  tree root [Store].[All Stores].Children
    String text = ((Element) node).getFirstChild().getNodeValue();
    assertEquals(text, "[Store].[All Stores]");

    return xml;

  }

  public void setMementoDrill(String xml) throws Exception {

    String renderFile = null; // "d:\\x\\setMementoDrill";
    int renderNum = 0;
    //String renderFile = null;

    Result result;

    URL confUrl = XMLA_Model.class.getResource("config.xml");
    XMLA_Model model = (XMLA_Model) ModelFactory.instance(confUrl);

    DrillReplaceExt mdrep = (DrillReplaceExt) model.getExtension(DrillReplace.ID);

    // restore memento
    XMLDecoder d = new XMLDecoder(new ByteArrayInputStream(xml.getBytes()));
    Object mo = d.readObject();
    d.close();
    model.setBookmarkState(mo);

    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");

    // last drill up of the Store hierarchy reaching "All Stores"
    Axis[] axes = result.getAxes();
    List positions = axes[1].getPositions();
    Position pos0 = (Position) positions.get(0); // no matter what it is
    Hierarchy hier = pos0.getMembers()[0].getLevel().getHierarchy();

    assertTrue(mdrep.canDrillUp(hier));
    mdrep.drillUp(hier); // drill up "Store"

    result = model.getResult();
    if (renderFile != null)
       ResultBase.renderHtml(result, model.getCurrentMdx(), renderFile + renderNum++ +".html");

    assertPosition(result, 2, new String[] { "All Stores", "Dairy" });

    // now drill up is not possible any more
    assertTrue(!mdrep.canDrillUp(hier));

  }

  /**
   * assert position
   */
  private void assertPosition(Result result, int iPos, String[] posMembers) {
    Position pos = (Position) result.getAxes()[1].getPositions().get(iPos);
    for (int i = 0; i < posMembers.length; i++) {
      String str = pos.getMembers()[i].getLabel();
      assertEquals(str, posMembers[i]);
    }
  }

  /**
   * Build Dom Tree from XML Source String
   */
  private Document buildDomTree(String source)
    throws ParserConfigurationException, IOException, SAXException {
    Document xmlDoc = null;

    //Instantiate a DocumentBuilderFactory.
    DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
    //Use the DocumentBuilderFactory to create a DocumentBuilder.
    DocumentBuilder dBuilder = dFactory.newDocumentBuilder();
    //Use the DocumentBuilder to parse the XML input.
    if (source != null && source.compareTo("") != 0)
      // xmlDoc = dBuilder.parse(new StringBufferInputStream(source));
      xmlDoc = dBuilder.parse(new InputSource(new StringReader(source)));
    else
      xmlDoc = dBuilder.newDocument();

    return xmlDoc;
  }

} // End MementoExpandTest

⌨️ 快捷键说明

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