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

📄 xmla_model.java

📁 OLAP 的客户端代码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:

      str = levit.getProperty("HIERARCHY_UNIQUE_NAME");
      if (str != null)
        lev.setHierUniqueName(str);

      str = levit.getProperty("LEVEL_NUMBER");
      if (str != null)
        lev.setNumber(Integer.parseInt(str));

      str = levit.getProperty("LEVEL_CARDINALITY");
      if (str != null)
        lev.setCardinality(Integer.parseInt(str));

      str = levit.getProperty("LEVEL_TYPE");
      if (str != null)
        lev.setType(Integer.parseInt(str));

      str = levit.getProperty("CUSTOM_ROLLUP_SETTINGS");
      if (str != null)
        lev.setCustomRollupSettings(Integer.parseInt(str));

      str = levit.getProperty("LEVEL_UNIQUE_SETTINGS");
      if (str != null)
        lev.setUniqueSettings(Integer.parseInt(str));

      str = levit.getProperty("LEVEL_IS_VISIBLE");
      if (str != null)
        lev.setVisible(str.equals("true"));

      str = levit.getProperty("LEVEL_ORDERING_PROPERTY");
      if (str != null)
        lev.setOrderingProperty(str);

      str = levit.getProperty("LEVEL_DBTYPE");
      if (str != null)
        lev.setDbType(Integer.parseInt(str));

      str = levit.getProperty("LEVEL_NAME_SQL_COLUMN_NAME");
      if (str != null)
        lev.setNameSqlColumnName(str);

      str = levit.getProperty("LEVEL_KEY_SQL_COLUMN_NAME");
      if (str != null)
        lev.setKeySqlColumnName(str);

      str = levit.getProperty("LEVEL_UNIQUE_NAME_SQL_COLUMN_NAME");
      if (str != null)
        lev.setUniqueNameSqlColumnName(str);

      aLevels.add(lev);
    }

  }

  /**
   * retrieve the cube's members for a given level
   * 
   * @throws OlapException
   */
  void completeLevel(XMLA_Level level) throws OlapException {

    List mems = soap.discoverMem(catalog, cube, null, level.getHierUniqueName(), level
        .getUniqueName());
    // evaluate
    ArrayList aNewMembers = new ArrayList();
    ArrayList aAllMembers = new ArrayList();
    evaluateMembers(mems, aNewMembers, aAllMembers);
    aMembers.addAll(aNewMembers);
    level.setMembers(aAllMembers);
  }

  /**
   * retrieve a members children
   * @throws OlapException
   */
  void retrieveMemberChildren(XMLA_Member member) throws OlapException {
    // potential killer

    // 1=children
    List mems = soap.discoverMemTree(catalog, cube, member.getUniqueName(), 1);

    // evaluate
    ArrayList aNewMembers = new ArrayList();
    ArrayList aAllMembers = new ArrayList();
    // one level, properties are delivered
    evaluateMembers(mems, aNewMembers, aAllMembers);

    aMembers.addAll(aNewMembers);
    // assign children 
    setMemberChildren(member, aAllMembers);

  }

  /**
   * retrieve a members parent
   * @throws OlapException
   */
  void retrieveMemberParent(XMLA_Member member) throws OlapException {

    member.setParentOk(true);
    if (((XMLA_Level) member.getLevel()).getDepth() == 0
        || ((XMLA_Level) member.getLevel()).getParentLevel() == null) {
      member.setParent(null);
      return;
    }

    if (member.isComplete()) {
      // we know, if there is no parent at all
      String pUname = member.getParentUniqueName();
      if (pUname == null || pUname.length() == 0) {
        member.setParent(null);
        return;
      }
    }

    // 4=parent
    // ###SAP### for a measure, the member itself is returned 
    List mems = soap.discoverMemTree(catalog, cube, member.getUniqueName(), 4);

    // for  SAP
    for (Iterator iter = mems.iterator(); iter.hasNext();) {
      OlapItem oli = (OlapItem) iter.next();
      if (oli.getUniqueName().equals(member.getUniqueName())) {
        // member itself
        member.setParent(null);
        return;
      }
    }

    if (mems.size() == 0) {
      member.setParent(null);
      return;
    }

    // evaluate
    ArrayList aNewMembers = new ArrayList();
    ArrayList aAllMembers = new ArrayList();
    // one level, properties are delivered
    evaluateMembers(mems, aNewMembers, aAllMembers);
    aMembers.addAll(aNewMembers);

    // assign parent
    XMLA_Member pmem = (XMLA_Member) aAllMembers.get(0);
    member.setParent(pmem);

  }

  /**
   * retrieve the cube's members for a given hierarchy
   * @throws OlapException
   */
  void completeMember(XMLA_Member member) throws OlapException {
    // 8 = self
    List mems = soap.discoverMemTree(catalog, cube, member.getUniqueName(), 8);
    // evaluate
    ArrayList aNewMembers = new ArrayList();
    ArrayList aAllMembers = new ArrayList();
    evaluateMembers(mems, aNewMembers, aAllMembers);

    /*
     // if this member is resulting from a "children" function call,
     //  then it is a good idea, to complete all its siblings in one call
     List mems;
     Member parent = member.getParent();
     boolean parentChildren = false;
     if (parent != null && queryAdapter.isChildrenOnAxis(parent)) {
     // 1 = children
     mems = soap.discoverMemTree(catalog, cube, parent.getUniqueName(), 1);
     parentChildren = true;
     } else {
     // 8 = self
     mems = soap.discoverMemTree(catalog, cube, member.getUniqueName(), 8);
     }
     // evaluate
     ArrayList aNewMembers = new ArrayList();
     ArrayList aAllMembers = new ArrayList();
     evaluateMembers(mems, aNewMembers, aAllMembers, true);
     
     if (parentChildren) {
     for (Iterator iter = aAllMembers.iterator(); iter.hasNext();) {
     XMLA_Member m = (XMLA_Member) iter.next();
     if (!m.isParentOk())
     m.setParent((XMLA_Member) parent);
     }
     }
     aMembers.addAll(aNewMembers);
     */
  }

  /**
   * retrieve a member by unique name
   * @throws OlapException
   */

  public void retrieveMember(String uniqueName) throws OlapException {

    // 8 = self
    List mems = soap.discoverMemTree(catalog, cube, uniqueName, 8);

    // evaluate
    ArrayList aNewMembers = new ArrayList();
    ArrayList aAllMembers = new ArrayList();
    evaluateMembers(mems, aNewMembers, aAllMembers);
    aMembers.addAll(aNewMembers);
    XMLA_Member member = (XMLA_Member) this.lookupMemberByUName(uniqueName);
    if (member == null) { throw new OlapException("could not find member " + uniqueName); }
  }

  /**
   * assign children member
   * @param member
   * @param aAllMembers
   */
  private void setMemberChildren(XMLA_Member member, ArrayList aAllMembers) {
    ArrayList aChildren = new ArrayList();

    for (Iterator iter = aAllMembers.iterator(); iter.hasNext();) {
      XMLA_Member mem = (XMLA_Member) iter.next();
      if (member.getUniqueName().equals(mem.getParentUniqueName()))
        aChildren.add(mem); // mem is a child
    }

    member.setChildren(aChildren);
    member.setChildrenOk(true);

    for (Iterator iter = aChildren.iterator(); iter.hasNext();) {
      XMLA_Member child = (XMLA_Member) iter.next();
      child.setParent(member);
      child.setParentOk(true);
    }
  }

  /**
   * assign children and parent to member
   * @param member
   * @param aAllMembers
   */
  /*
   private void setParentAndChildren(XMLA_Member member, ArrayList aAllMembers) {
   ArrayList aChildren = new ArrayList();
   
   for (Iterator iter = aAllMembers.iterator(); iter.hasNext();) {
   XMLA_Member mem = (XMLA_Member) iter.next();
   if (member.getUniqueName().equals(mem.getParentUniqueName()))
   aChildren.add(mem); // mem is a child
   
   if (mem.getUniqueName().equals(member.getParentUniqueName())) {
   
   member.setParent(mem); // mem is the parent
   }
   }
   
   member.setChildren(aChildren);
   
   for (Iterator iter = aChildren.iterator(); iter.hasNext();) {
   XMLA_Member child = (XMLA_Member) iter.next();
   child.setParent(member);
   }
   }
   */
  /**
   * Evaluate the result of Discovery MDSCHEMA_MEMBERS request
   * @param evalProps true, if properties should be evaluated
   * @param mems List of OlapItems
   */
  private void evaluateMembers(List mems, List aNewMembers, List aAllMembers) {

    MLoop: for (Iterator iter = mems.iterator(); iter.hasNext();) {
      OlapItem oi = (OlapItem) iter.next();

      String uName = oi.getUniqueName();
      XMLA_Member mem = (XMLA_Member) this.lookupMemberByUName(uName);
      if (mem != null) {
        aAllMembers.add(mem); // already there
      } else {
        // not there, create new
        String caption = oi.getCaption();
        String levUName = oi.getProperty("LEVEL_UNIQUE_NAME");
        //long levelNumber = Long.parseLong((String) hMemItems.get("LEVEL_NUMBER")); Microsoft
        //String hierUName = oi.getProperty("HIERARCHY_UNIQUE_NAME");
        XMLA_Level lev = this.lookupLevelByUName(levUName);
        boolean isCalc = isMemberInFormulas(uName);
        mem = new XMLA_Member(this, uName, caption, lev, isCalc);
        aNewMembers.add(mem);
        aAllMembers.add(mem);
      }
      if (!mem.isComplete()) {
        // set the secondary values (not gotten from result)
        long ordinal = 0;
        String sOrdinal = oi.getProperty("MEMBER_ORDINAL");
        if (sOrdinal != null)
          ordinal = Long.parseLong(sOrdinal);
        // not always there for SAP
        String name = oi.getName();
        int type = 0;
        String str = oi.getProperty("MEMBER_TYPE");
        if (str != null)
          type = Integer.parseInt(str);
        long childrenCard = 0;
        String sCard = oi.getProperty("CHILDREN_CARDINALITY");
        if (sCard != null)
          childrenCard = Long.parseLong(sCard);
        // not always there for SAP, default 0
        long parentLevel = 0;
        String sLev = oi.getProperty("PARENT_LEVEL");
        if (sLev != null)
          parentLevel = Long.parseLong(sLev);
        // not always there for SAP, default 0
        String parentUniqueName = oi.getProperty("PARENT_UNIQUE_NAME");
        String key = oi.getProperty("MEMBER_KEY");
        boolean isPlaceHolderMember = ("true".equals(oi.getProperty("IS_PLACEHOLDERMEMBER")));
        boolean isDataMember = ("true".equals(oi.getProperty("IS_DATAMEMBER")));
        mem.complete(name, type, ordinal, parentUniqueName, childrenCard, parentLevel,
            isDataMember, isPlaceHolderMember, key);
      }
      // properties gotten by result, DIMENSION PROPERTIES
      /*      
       if (!mem.isPropsOk() && evalProps) {
       mem.setPropsOk(true);
       XMLA_Level lev = (XMLA_Level) mem.getLevel();
       Map propMap = lev.getProps();
       Map oiProps = oi.getProperties();
       for (Iterator iterator = propMap.values().iterator(); iterator.hasNext();) {
       XMLA_MemberProp mProp = (XMLA_MemberProp) iterator.next();
       String xmlTag = mProp.getXmlTag();
       if (oiProps.containsKey(xmlTag)) {
       PropertyImpl prop = new PropertyImpl();
       prop.setName(mProp.getName());
       prop.setValue((String) oiProps.get(xmlTag));
       mem.addProp(prop);
       }
       }
       }
       */
    } // MLoop
  }

  /**
   * find out, whether a member is in the formulas
   * @param uName - unique name
   * @return
   */
  public boolean isMemberInFormulas(String uName) {
    if (pQuery == null)
      return false;
    Formula[] formulas = pQuery.getFormulas();
    for (int i = 0; i < formulas.length; i++) {
      if (formulas[i].isMember() && uName.equals(formulas[i].getUniqeName()))
        return true;
    }
    return false;
  }

  /**
   * Returns the catalog.
   * @return String
   */
  public String getCatalog() {
    return catalog;
  }

  /**
   * Returns the uri.
   * @return String
   */
  public String getUri() {
    return uri;
  }

  /**
   * Sets the catalog.
   * @param catalog The catalog to set
   */
  public void setCatalog(String catalog) {
    this.catalog = catalog;
  }

  /**
   * Returns the dataSource.
   * @return String
   */
  public String getDataSource() {
    return dataSource;
  }

  /**
   * Sets the dataSource.
   * @param dataSource The dataSource to set
   */
  public void setDataSource(String dataSource) {
    this.dataSource = dataSource;
  }

  /**
   * Sets the uri.
   * @param uri The uri to set
   */
  public void setUri(String uri) {
    this.uri = uri;
  }

  /**
   * Returns the pQuery.
   * @return ParsedQuery
   */
  public ParsedQuery getPQuery() {
    return pQuery;
  }

  /**
   * Returns the queryAdapter.
   * @return XMLA_QueryAdapter
   */
  public QueryAdapter getQueryAdapter() {
    return queryAdapter;
  }

  /**
   * @return ID
   */
  public String getID() {
    return ID;
  }

  /**
   * @param ID
   */
  public void setID(String string) {
    ID = string;
  }

  /**
   * @return user
   */
  public String getUser() {
    return user;
  }

  /**
   * @param user
   */
  public void setUser(String string) {
    user = string;
  }

  /**
   * @return
   */
  public String getPassword() {
    return password;
  }

  /**
   * @param string
   */
  public void setPassword(String string) {
    password = string;
  }

  public boolean isSAP() {
    return (soap.getProvider() == OlapDiscoverer.PROVIDER_SAP);
  }

  public boolean isMicrosoft() {
    return (soap.getProvider() == OlapDiscoverer.PROVIDER_MICROSOFT);
  }

  public boolean isMondrian() {
    return (soap.getProvider() == OlapDiscoverer.PROVIDER_MONDRIAN);
  }

  /**
   * @return cube name
   */
  public String getCube() {
    if (pQuery == null)
      return null;
    else
      return pQuery.getCube();
  }

  /**
   * @return calcMeasurePropMap
   */
  public Map getCalcMeasurePropMap() {
    return calcMeasurePropMap;
  }

  public void setServletContext(ServletContext servletContext) {
    // we don't need it
  }

} // End XMLA_Model

⌨️ 快捷键说明

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