📄 mementotest.java
字号:
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 + -