📄 xmla_quaxuti.java
字号:
* @return a members hierarchy
* @see QuaxUti#hierForMember(com.tonbeller.jpivot.olap.model.Member)
*/
public Hierarchy hierForMember(Member member) {
XMLA_Member xm = (XMLA_Member) member;
return xm.getHierarchy();
}
/**
* return a members dimension
* @see QuaxUti#dimForMember(com.tonbeller.jpivot.olap.model.Member)
*/
public Dimension dimForMember(Member member) {
XMLA_Member xm = (XMLA_Member) member;
return xm.getHierarchy().getDimension();
}
/**
* @return a members unique name
* @see QuaxUti#getMemberUniqueName(java.lang.Object)
*/
public String getMemberUniqueName(Object oExp) {
XMLA_Member m = (XMLA_Member) oExp;
return m.getUniqueName();
}
/**
* @return true, if an expression is a FunCall to e specific function
* @see QuaxUti#funCallTo(java.lang.Object, java.lang.String)
*/
public boolean isFunCallTo(Object oExp, String function) {
return ((FunCall) oExp).isCallTo(function);
}
/**
* return a FunCalls argument of given index
* @see QuaxUti#funCallArg(java.lang.Object, int)
*/
public Object funCallArg(Object oExp, int index) {
return ((FunCall) oExp).getArgs()[index];
}
/**
* @return funcall name
* @see com.tonbeller.jpivot.olap.query.QuaxUti#funCallName(java.lang.Object)
*/
public String funCallName(Object oFun) {
return ((FunCall) oFun).getFunction();
}
/**
* @return true if member (2.arg) is child of Member (1.arg)
* @see com.tonbeller.jpivot.olap.query.QuaxUti#checkParent
*/
public boolean checkParent(Member pMember, Object cMemObj) {
// check by unique name, if possible
XMLA_Member pm = (XMLA_Member) pMember;
XMLA_Member cm = (XMLA_Member) cMemObj;
if (pm.isMicrosoft()) {
String pUName = cm.getParentUniqueName();
return ((XMLA_Member) pMember).getUniqueName().equals(pUName);
} else {
// SAP - unique name does not contain parent
try {
return (pm.equals(cm.getParent()));
} catch (OlapException e) {
return false; // should not occur
}
}
}
/**
* @return true if member (1.arg) is child of Member (2.arg)
* @see com.tonbeller.jpivot.olap.query.QuaxUti#checkParent
*/
public boolean checkChild(Member cMember, Object pMemObj) {
return checkParent((XMLA_Member) pMemObj, cMember);
}
/**
* @return true if member (2.arg) is descendant of Member (1.arg)
* @see QuaxUti.checkDescendant
*/
public boolean checkDescendantM(Member aMember, Member dMember) {
return XMLA_Util.isDescendant((XMLA_Member) aMember, (XMLA_Member) dMember);
}
/**
* @return true if member object (2.arg) is descendant of Member (1.arg)
* @see QuaxUti.checkDescendantO
*/
public boolean checkDescendantO(Member aMember, Object oMember) {
return XMLA_Util.isDescendant((XMLA_Member) aMember, (XMLA_Member) oMember);
}
/**
* @return exp object for member
* @see QuaxUti#objForMember(com.tonbeller.jpivot.olap.model.Member)
*/
public Object objForMember(Member member) {
return member;
}
/**
* @return exp object for dimension
* @see com.tonbeller.jpivot.olap.query.QuaxUti#objForDim(com.tonbeller.jpivot.olap.model.Dimension)
*/
public Object objForDim(Dimension dim) {
return dim; //(Exp)((XMLA_Dimension)dim);
}
/**
* return member for exp object
* @see QuaxUti#memberForObj(java.lang.Object)
*/
public Member memberForObj(Object oExp) {
return (Member) oExp;
}
/**
* display member array for debugging purposes
* @param member
* @return
*/
public String memberString(Member[] mPath) {
if (mPath == null || mPath.length == 0)
return "";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < mPath.length; i++) {
if (i > 0)
sb.append(" ");
sb.append(((XMLA_Member) mPath[i]).getUniqueName());
}
return sb.toString();
}
/**
* generate an object for a list of members
* @param mList list of members
* @return null for empty lis, single member or set function otherwise
* @see com.tonbeller.jpivot.olap.query.QuaxUti#createMemberSet
*/
public Object createMemberSet(List mList) {
if (mList.size() == 0)
return null;
else if (mList.size() == 1)
return (Exp) mList.get(0);
else {
Exp[] remExps = (Exp[]) mList.toArray(new Exp[0]);
return new FunCall("{}", remExps, FunCall.TypeBraces);
}
}
/**
* check whether a Funcall does NOT resolve to top level of hierarchy
* @param f
* @return
*/
public boolean isFunCallNotTopLevel(Object oExp) throws CannotHandleException {
FunCall f = (FunCall) oExp;
if (f.isCallTo("Children")) {
return true; // children *not* top level
} else if (f.isCallTo("Descendants")) {
return true; // descendants*not* top level
} else if (f.isCallTo("Members")) {
XMLA_Level lev = (XMLA_Level) f.getArgs()[0];
return (lev.getDepth() > 0);
} else if (f.isCallTo("Union")) {
if (isFunCallNotTopLevel(f.getArgs()[0]))
return true;
return isFunCallNotTopLevel(f.getArgs()[1]);
} else if (f.isCallTo("{}")) {
for (int i = 0; i < f.getArgs().length; i++) {
if (!isMemberOnToplevel(f.getArgs()[i]))
return true;
}
return false;
}
throw new Quax.CannotHandleException(f.getFunction());
}
/**
* @return true if member is on top level (has no parent)
* @see com.tonbeller.jpivot.olap.query.QuaxUti#isMemberOnToplevel
*/
public boolean isMemberOnToplevel(Object oMem) {
XMLA_Member m = (XMLA_Member) oMem;
if (((XMLA_Level) m.getLevel()).getDepth() > 0)
return false;
else
return true;
}
/**
* @return the depth of a member's level
* @see QuaxUti#levelDepthForMember(java.lang.Object)
*/
public int levelDepthForMember(Object oExp) {
XMLA_Member m = (XMLA_Member) oExp;
XMLA_Level level = (XMLA_Level) m.getLevel();
return level.getDepth();
}
/**
* @return an Expression Object for the top level members of an hierarchy
* @see QuaxUti#topLevelMembers(com.tonbeller.jpivot.olap.model.Hierarchy)
*/
public Object topLevelMembers(Hierarchy hier, boolean expandAllMember) {
return XMLA_Util.topLevelMembers(hier, expandAllMember);
}
/**
* @return count of a FunCall's arguments
* @see QuaxUti#funCallArgCount(java.lang.Object)
*/
public int funCallArgCount(Object oFun) {
FunCall f = (FunCall) oFun;
return f.getArgs().length;
}
/**
* @param oLevel expression object representing level
* @return Level for given Expression Object
* @see QuaxUti#LevelForObj(java.lang.Object)
*/
public Level LevelForObj(Object oLevel) {
return (Level) oLevel;
}
/**
* @return the parent level of a given level
* @see QuaxUti#getParentLevel(com.tonbeller.jpivot.olap.model.Level)
*/
public Level getParentLevel(Level level) {
return ((XMLA_Level) level).getParentLevel();
}
/**
* create FunCall
* @see QuaxUti#createFunCall(java.lang.String, java.lang.Object[], int)
*/
public Object createFunCall(String function, Object[] args, int funType) {
Exp[] expArgs = new Exp[args.length];
for (int i = 0; i < expArgs.length; i++) {
expArgs[i] = (Exp) args[i];
}
int type;
switch (funType) {
case QuaxUti.FUNTYPE_BRACES:
type = FunCall.TypeBraces;
break;
case QuaxUti.FUNTYPE_PROPERTY:
type = FunCall.TypeProperty;
break;
case QuaxUti.FUNTYPE_TUPLE:
type = FunCall.TypeParentheses;
break;
case QuaxUti.FUNTYPE_INFIX:
type = FunCall.TypeInfix;
break;
default:
type = FunCall.TypeFunction;
}
return new FunCall(function, expArgs, type);
}
/**
* check an expression whether we can handle it (expand, collapse)
* currently we can basically handle following FunCalls
* member.children, member.descendants, level.members
* @see com.tonbeller.jpivot.olap.query.QuaxUti#canHandle(java.lang.Object)
*/
public boolean canHandle(Object oExp) {
if (oExp instanceof Member)
return true;
FunCall f = (FunCall) oExp;
if (f.isCallTo("children"))
return true;
if (f.isCallTo("descendants"))
return true;
if (f.isCallTo("members"))
return true;
if (f.isCallTo("{}"))
return true;
if (f.isCallTo("union")) {
for (int i = 0; i < f.getArgs().length; i++) {
if (!canHandle(f.getArgs()[i]))
return false;
}
return true;
}
return false;
}
/**
* @return member children
* @see com.tonbeller.jpivot.olap.query.QuaxUti#getChildren(java.lang.Object)
*/
public Object[] getChildren(Object oMember) {
XMLA_Member[] mChildren;
try {
mChildren = ((XMLA_Member) oMember).getChildren();
} catch (OlapException e) {
// should not occur
logger.fatal("unexpected exception", e);
return null;
}
return mChildren;
}
/**
* get the members of a level
*/
public Object[] getLevelMembers(Level level) {
XMLA_Member[] members;
try {
members = ((XMLA_Level)level).getMembers();
} catch (OlapException e) {
logger.fatal("unexpected failure level members", e);
return null;
}
return members;
}
} //XMLA_QuaxUti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -