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

📄 xmla_quaxuti.java

📁 OLAP 的客户端代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
   * @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 + -