schematreemodel.java

来自「数据仓库展示程序」· Java 代码 · 共 344 行 · 第 1/2 页

JAVA
344
字号
    /** Returns the index of child in parent.  If <code>parent</code>
     * is <code>null</code> or <code>child</code> is <code>null</code>,
     * returns -1.
     *
     * @param parent a note in the tree, obtained from this data source
     * @param child the node we are interested in
     * @return the index of the child in the parent, or -1 if either
     *    <code>child</code> or <code>parent</code> are <code>null</code>
     *
     */
    public int getIndexOfChild(Object parent, Object child) {
        if (parent instanceof MondrianDef.Column) {
            return -1;
        } else if (parent instanceof MondrianDef.Cube) {
            MondrianDef.Cube c = (MondrianDef.Cube)parent;
            if (child instanceof MondrianDef.CubeDimension) {
                for (int i=0; i<c.dimensions.length; i++) {
                    if (c.dimensions[i].equals(child))
                        return i;
                }
                return -1;
            } else if (child instanceof MondrianDef.Measure) {
                for (int i=0; i<c.measures.length; i++) {
                    if (c.measures[i].equals(child))
                        return i + c.dimensions.length;
                }
                return -1;
            } else {
                return -1;
            }
        } else if (parent instanceof MondrianDef.Dimension) {
            MondrianDef.Dimension d = (MondrianDef.Dimension)parent;
            if (child instanceof MondrianDef.Hierarchy) {
                for (int i=0; i<d.hierarchies.length; i++) {
                    if (d.hierarchies[i].equals(child))
                        return i;
                }
                return -1;
            } else {
                return -1;
            }
        } else if (parent instanceof MondrianDef.ExpressionView) {
            MondrianDef.ExpressionView ev = (MondrianDef.ExpressionView)parent;
            if (child instanceof MondrianDef.SQL) {
                for (int i=0; i<ev.expressions.length; i++) {
                    if (ev.expressions[i].equals(child))
                        return i;
                }
                return -1;
            } else {
                return -1;
            }
        } else if (parent instanceof MondrianDef.Hierarchy) {
            MondrianDef.Hierarchy h = (MondrianDef.Hierarchy)parent;
            if (child instanceof MondrianDef.Level) {
                for (int i=0; i<h.levels.length; i++) {
                    if (h.levels[i].equals(child))
                        return i;
                }
                return -1;
            } else if (child instanceof MondrianDef.Parameter) {
                for (int i=0; i<h.memberReaderParameters.length; i++) {
                    if (h.memberReaderParameters[i].equals(child))
                        return i + h.levels.length;
                }
                return -1;
            } else {
                return -1;
            }
        } else if (parent instanceof MondrianDef.Level) {
            MondrianDef.Level l = (MondrianDef.Level)parent;
            if (child instanceof MondrianDef.Property) {
                for (int i=0; i<l.properties.length; i++) {
                    if (l.properties[i].equals(child))
                        return i;
                }
                return -1;
            } else {
                return -1;
            }
        } else if (parent instanceof MondrianDef.Measure) {
            MondrianDef.Measure m = (MondrianDef.Measure)parent;
            return -1;
        } else if (parent instanceof MondrianDef.Schema) {
            MondrianDef.Schema s = (MondrianDef.Schema)parent;
            //return children in this order: cubes, virtual cubes, dimensions
            if (child instanceof MondrianDef.Cube) {
                for (int i=0; i<s.cubes.length; i++) {
                    if (s.cubes[i].equals(child))
                        return i;
                }
                return -1;
            } else if (child instanceof MondrianDef.VirtualCube) {
                for (int i=0; i<s.virtualCubes.length; i++) {
                    if (s.virtualCubes[i].equals(child))
                        return i + s.cubes.length;
                }
                return -1;
            } else if (child instanceof MondrianDef.Dimension) {
                for (int i=0; i<s.dimensions.length; i++) {
                    if (s.dimensions[i].equals(child))
                        return i + s.cubes.length + s.dimensions.length;
                }
                return -1;
            } else {
                return -1;
            }
        } else if (parent instanceof MondrianDef.View) {
            MondrianDef.View v = (MondrianDef.View)parent;
            if (child instanceof MondrianDef.SQL) {
                for (int i=0; i<v.selects.length; i++) {
                    if (v.selects[i].equals(child)) {
                        return i;
                    }
                }
                return -1;
            }
            return -1;
        } else if (parent instanceof MondrianDef.VirtualCube) {
            MondrianDef.VirtualCube c = (MondrianDef.VirtualCube)parent;
            if (child instanceof MondrianDef.VirtualCubeDimension) {
                for (int i=0; i<c.dimensions.length; i++) {
                    if (c.dimensions[i].equals(child))
                        return i;
                }
                return -1;
            } else if (child instanceof MondrianDef.VirtualCubeMeasure) {
                for (int i=0; i<c.measures.length; i++) {
                    if (c.measures[i].equals(child))
                        return i + c.dimensions.length;
                }
                return -1;
            } else {
                return -1;
            }
        } else if (parent instanceof MondrianDef.VirtualCubeDimension) {
            MondrianDef.VirtualCubeDimension d = (MondrianDef.VirtualCubeDimension)parent;
            return -1;
        } else if (parent instanceof MondrianDef.VirtualCubeMeasure) {
            MondrianDef.VirtualCubeMeasure d = (MondrianDef.VirtualCubeMeasure)parent;
            return -1;
        } else {
            return -1;
        }
    }

    /** Returns the root of the tree.  Returns <code>null</code>
     * only if the tree has no nodes.
     *
     * @return  the root of the tree
     *
     */
    public Object getRoot() {
        return schema;
    }

    /** Returns <code>true</code> if <code>node</code> is a leaf.
     * It is possible for this method to return <code>false</code>
     * even if <code>node</code> has no children.
     * A directory in a filesystem, for example,
     * may contain no files; the node representing
     * the directory is not a leaf, but it also has no children.
     *
     * @param   node  a node in the tree, obtained from this data source
     * @return  true if <code>node</code> is a leaf
     *
     */
    public boolean isLeaf(Object node) {
        return getChildCount(node) == 0;
    }

}

⌨️ 快捷键说明

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