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 + -
显示快捷键?