rolaplevel.java
来自「数据仓库展示程序」· Java 代码 · 共 429 行 · 第 1/2 页
JAVA
429 行
}
public MondrianDef.Expression getCaptionExp() {
return captionExp;
}
public boolean hasCaptionColumn(){
return captionExp != null;
}
int getFlags() {
return flags;
}
HideMemberCondition getHideMemberCondition() {
return hideMemberCondition;
}
boolean isUnique() {
return unique;
}
RolapProperty[] getRolapProperties() {
return properties;
}
String getNullParentValue() {
return nullParentValue;
}
MondrianDef.Expression getParentExp() {
return parentExp;
}
MondrianDef.Expression getNameExp() {
return nameExp;
}
private Property lookupProperty(List list, String propertyName) {
Property existingProperty = null;
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Property property = (Property) iterator.next();
if (property.getName().equals(propertyName)) {
existingProperty = property;
break;
}
}
return existingProperty;
}
RolapLevel(RolapHierarchy hierarchy, int depth, MondrianDef.Level xmlLevel) {
this(
hierarchy, depth, xmlLevel.name, xmlLevel.getKeyExp(),
xmlLevel.getNameExp(), xmlLevel.getCaptionExp(), xmlLevel.getOrdinalExp(),
xmlLevel.getParentExp(), xmlLevel.nullParentValue,
xmlLevel.closure, createProperties(xmlLevel),
(xmlLevel.type.equals("Numeric") ? NUMERIC : 0) |
(xmlLevel.uniqueMembers.booleanValue() ? UNIQUE : 0),
HideMemberCondition.lookup(xmlLevel.hideMemberIf),
LevelType.lookup(xmlLevel.levelType));
if (!Util.isEmpty(xmlLevel.caption)) {
setCaption(xmlLevel.caption);
}
if (!Util.isEmpty(xmlLevel.formatter)) {
// there is a special member formatter class
try {
Class clazz = Class.forName(xmlLevel.formatter);
Constructor ctor = clazz.getConstructor(new Class[0]);
memberFormatter = (MemberFormatter) ctor.newInstance(new Object[0]);
} catch (Exception e) {
throw MondrianResource.instance().MemberFormatterLoadFailed.ex(
xmlLevel.formatter, getUniqueName(), e);
}
}
}
// helper for constructor
private static RolapProperty[] createProperties(
MondrianDef.Level xmlLevel) {
List list = new ArrayList();
final MondrianDef.Expression nameExp = xmlLevel.getNameExp();
if (nameExp != null) {
list.add(new RolapProperty(
Property.NAME.name, Property.TYPE_STRING,
nameExp, null, null));
}
for (int i = 0; i < xmlLevel.properties.length; i++) {
MondrianDef.Property property = xmlLevel.properties[i];
list.add(new RolapProperty(
property.name,
convertPropertyTypeNameToCode(property.type),
xmlLevel.getPropertyExp(i),
property.formatter, property.caption));
}
return (RolapProperty[]) list.toArray(RolapProperty.emptyArray);
}
private static int convertPropertyTypeNameToCode(String type) {
if (type.equals("String")) {
return Property.TYPE_STRING;
} else if (type.equals("Numeric")) {
return Property.TYPE_NUMERIC;
} else if (type.equals("Boolean")) {
return Property.TYPE_BOOLEAN;
} else {
throw Util.newError("Unknown property type '" + type + "'");
}
}
private void checkColumn(MondrianDef.Column nameColumn) {
final RolapHierarchy rolapHierarchy = (RolapHierarchy) hierarchy;
if (nameColumn.table == null) {
final MondrianDef.Relation table = rolapHierarchy.getUniqueTable();
if (table == null) {
throw Util.newError(
"must specify a table for level " +
getUniqueName() +
" because hierarchy has more than one table");
}
nameColumn.table = table.getAlias();
} else {
Util.assertTrue(rolapHierarchy.tableExists(nameColumn.table));
}
}
void init(RolapCube cube, MondrianDef.CubeDimension xmlDimension) {
if (xmlClosure != null) {
final RolapDimension dimension = ((RolapHierarchy) hierarchy)
.createClosedPeerDimension(this, xmlClosure, cube, xmlDimension);
dimension.init(cube, xmlDimension);
cube.registerDimension(dimension);
this.closedPeer = (RolapLevel) dimension.getHierarchies()[0].getLevels()[1];
}
}
public boolean isAll() {
return hierarchy.hasAll() && (depth == 0);
}
public boolean areMembersUnique() {
return (depth == 0) || (depth == 1) && hierarchy.hasAll();
}
public String getTableAlias() {
return keyExp.getTableAlias();
}
public Property[] getProperties() {
return properties;
}
public Property[] getInheritedProperties() {
return inheritedProperties;
}
/**
* Conditions under which a level's members may be hidden (thereby creating
* a <dfn>ragged hierarchy</dfn>).
*/
public static class HideMemberCondition extends EnumeratedValues.BasicValue {
private HideMemberCondition(String name, int ordinal) {
super(name, ordinal, null);
}
public static final int NeverORDINAL = 0;
/** A member always appears. */
public static final HideMemberCondition Never =
new HideMemberCondition("Never", NeverORDINAL);
public static final int IfBlankNameORDINAL = 1;
/** A member doesn't appear if its name is null or empty. */
public static final HideMemberCondition IfBlankName =
new HideMemberCondition("IfBlankName", IfBlankNameORDINAL);
public static final int IfParentsNameORDINAL = 2;
/** A member appears unless its name matches its parent's. */
public static final HideMemberCondition IfParentsName =
new HideMemberCondition("IfParentsName", IfParentsNameORDINAL);
public static final EnumeratedValues enumeration =
new EnumeratedValues(
new HideMemberCondition[] {
Never, IfBlankName, IfParentsName
}
);
public static HideMemberCondition lookup(String s) {
return (HideMemberCondition) enumeration.getValue(s, true);
}
}
public OlapElement lookupChild(SchemaReader schemaReader, String name) {
Member[] levelMembers = schemaReader.getLevelMembers(this);
for (int idx = 0; idx < levelMembers.length; idx++) {
if (levelMembers[idx].getName().equals(name)) {
return levelMembers[idx];
}
}
return null;
}
/** true when the level is part of a parent/child hierarchy and has an equivalent
* closed level
*/
boolean hasClosedPeer() {
return (parentExp != null) && (closedPeer != null);
}
/**
* When the level is part of a parent/child hierarchy and was provided with
* a closure, returns the equivalent closed level.
*/
RolapLevel getClosedPeer() {
return closedPeer;
}
}
// End RolapLevel.java
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?