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