schemaexplorer.java

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

JAVA
669
字号
/*
 * SchemaExplorer.java
 *
 * This software is subject to the terms of the Common Public License
 * Agreement, available at the following URL:
 * http://www.opensource.org/licenses/cpl.html.
 * Copyright (C) 1999-2005 Kana Software, Inc. and others.
 * All Rights Reserved.
 * You must accept the terms of that agreement to use this software.
 *
 * Created on October 2, 2002, 5:42 PM
 * Modified on 15-Jun-2003 by ebengtso
 *
 */

package mondrian.gui;

import mondrian.olap.MondrianDef;
import mondrian.olap.MondrianDef.Schema;

import javax.swing.*;
import javax.swing.border.EtchedBorder;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.tree.TreePath;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ResourceBundle;

import org.eigenbase.xom.XOMUtil;
import org.eigenbase.xom.Parser;
import org.eigenbase.xom.NodeDef;

/**
 *
 * @author  sean
  */
public class SchemaExplorer extends javax.swing.JPanel implements TreeSelectionListener, CellEditorListener
{
    private MondrianDef.Schema schema;
    private SchemaTreeModel model;
    private SchemaTreeCellRenderer renderer;
    private File schemaFile;
    private JTreeUpdater updater;
    private final ClassLoader myClassLoader;

    /** Creates new form SchemaExplorer */
    public SchemaExplorer()
    {
        myClassLoader = this.getClass().getClassLoader();
        initComponents();
    }

    public SchemaExplorer(File f)
    {
        this();
        try
        {
            Parser xmlParser = XOMUtil.createDefaultParser();
            this.schemaFile = f;

            schema = new MondrianDef.Schema(xmlParser.parse(schemaFile.toURL()));

            renderer = new SchemaTreeCellRenderer();
            model = new SchemaTreeModel(schema);
            tree.setModel(model);
            tree.setCellRenderer(renderer);
            tree.addTreeSelectionListener(this);
            SchemaPropertyCellEditor spce = new SchemaPropertyCellEditor();
            spce.addCellEditorListener(this);
            propertyTable.setDefaultEditor(Object.class, spce);
            SchemaPropertyCellRenderer spcr = new SchemaPropertyCellRenderer();
            propertyTable.setDefaultRenderer(Object.class, spcr);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     */
    private void initComponents()
    {
        jSplitPane1 = new JSplitPane();
        jPanel1 = new JPanel();
        jScrollPane2 = new JScrollPane();
        propertyTable = new JTable();
        targetLabel = new javax.swing.JLabel();
        jPanel2 = new JPanel();
        jScrollPane1 = new JScrollPane();
        tree = new JTree();
        jToolBar1 = new JToolBar();
        addCubeButton = new JButton();
        addDimensionButton = new JButton();
        addMeasureButton = new JButton();
        addLevelButton = new JButton();
        addPropertyButton = new JButton();
        cutButton = new JButton();
        copyButton = new JButton();
        pasteButton = new JButton();

        setLayout(new BorderLayout());

        jSplitPane1.setDividerLocation(200);
        jPanel1.setLayout(new BorderLayout());

        propertyTable.setModel(new DefaultTableModel(new Object[][] {
        }, new String[] { "Property", "Value" })
        {
            Class[] types = new Class[] { java.lang.String.class, java.lang.Object.class };
            boolean[] canEdit = new boolean[] { false, true };

            public Class getColumnClass(int columnIndex)
            {
                return types[columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex)
            {
                return canEdit[columnIndex];
            }
        });
        jScrollPane2.setViewportView(propertyTable);

        jPanel1.add(jScrollPane2, java.awt.BorderLayout.CENTER);

        targetLabel.setFont(new Font("Dialog", 1, 14));
        targetLabel.setForeground((Color) UIManager.getDefaults().get("CheckBoxMenuItem.acceleratorForeground"));
        targetLabel.setHorizontalAlignment(SwingConstants.CENTER);
        targetLabel.setText("Schema");
        targetLabel.setBorder(new EtchedBorder());
        jPanel1.add(targetLabel, java.awt.BorderLayout.NORTH);

        jSplitPane1.setRightComponent(jPanel1);

        jPanel2.setLayout(new java.awt.BorderLayout());

        jScrollPane1.setViewportView(tree);

        jPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jSplitPane1.setLeftComponent(jPanel2);

        //========================================================
        // actions
        //========================================================
        addCube = new AbstractAction("Add cube")
        {
            public void actionPerformed(ActionEvent e)
            {
                addCube(e);
            }
        };
        addDimension = new AbstractAction("Add Dimension")
        {
            public void actionPerformed(ActionEvent e)
            {
                addDimension(e);
            }
        };
        addMeasure = new AbstractAction("Add Measure")
        {
            public void actionPerformed(ActionEvent e)
            {
                addMeasure(e);
            }
        };
        addLevel = new AbstractAction("Add Level")
        {
            public void actionPerformed(ActionEvent e)
            {
                addLevel(e);
            }
        };
        addProperty = new AbstractAction("Add Property")
        {
            public void actionPerformed(ActionEvent e)
            {
                addProperty(e);
            }
        };

        ResourceBundle resources = ResourceBundle.getBundle("mondrian.gui.resources.gui");

        //========================================================
        // toolbar buttons
        //========================================================
        addCubeButton.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("addCube"))));
        addCubeButton.setToolTipText("Add Cube");
        addCubeButton.addActionListener(addCube);

        addDimensionButton.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("addDimension"))));
        addDimensionButton.setToolTipText("Add Dimension");
        addDimensionButton.addActionListener(addDimension);

        addMeasureButton.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("addMeasure"))));
        addMeasureButton.setToolTipText("Add Measure");
        addMeasureButton.addActionListener(addMeasure);

        addLevelButton.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("addLevel"))));
        addLevelButton.setToolTipText("Add Level");
        addLevelButton.addActionListener(addLevel);

        addPropertyButton.setIcon(new ImageIcon(myClassLoader.getResource(resources.getString("addProperty"))));
        addPropertyButton.setToolTipText("Add Property");
        addPropertyButton.addActionListener(addProperty);

        cutButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/toolbarButtonGraphics/general/Cut24.gif")));
        cutButton.setToolTipText("Cut");

        copyButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/toolbarButtonGraphics/general/Copy24.gif")));
        copyButton.setToolTipText("Copy");

        pasteButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/toolbarButtonGraphics/general/Paste24.gif")));
        pasteButton.setToolTipText("Paste");

        jToolBar1.add(addCubeButton);
        jToolBar1.add(addDimensionButton);
        jToolBar1.add(addMeasureButton);
        jToolBar1.add(addLevelButton);
        jToolBar1.add(addPropertyButton);
        jToolBar1.add(cutButton);
        jToolBar1.add(copyButton);
        jToolBar1.add(pasteButton);

        //========================================================
        // popup menu
        //========================================================
        jPopupMenu = new JPopupMenu();

        //========================================================
        // tree mouse listener
        //========================================================
        tree.addMouseListener(new PopupTrigger());

        //========================================================
        // jpanel
        //========================================================
        this.add(jSplitPane1, java.awt.BorderLayout.CENTER);
        this.add(jToolBar1, java.awt.BorderLayout.NORTH);

        updater = new JTreeUpdater(tree);

    }

    /**
     * @param evt
     */
    protected void addCube(ActionEvent evt)
    {
        MondrianDef.Schema schema = (Schema) tree.getModel().getRoot();
        MondrianDef.Cube cube = new MondrianDef.Cube();
        cube.name = "New Cube " + schema.cubes.length;

        cube.dimensions = new MondrianDef.Dimension[0];
        cube.measures = new MondrianDef.Measure[0];
        cube.fact = new MondrianDef.Table();

        //add cube to schema
        NodeDef[] temp = schema.cubes;
        schema.cubes = new MondrianDef.Cube[temp.length + 1];
        for (int _i = 0; _i < temp.length; _i++)
        {
            schema.cubes[_i] = (MondrianDef.Cube) temp[_i];
        }
        schema.cubes[schema.cubes.length - 1] = cube;
        refreshTree(tree.getSelectionPath());

    }

    /**
     * Updates the tree display after an Add / Delete operation.
     */
    private void refreshTree(TreePath path)
    {
        updater.update();
    }

    /**
     * @param evt
     */
    protected void addMeasure(ActionEvent evt)
    {
        Object path = tree.getSelectionPath().getLastPathComponent();
        if (!(path instanceof MondrianDef.Cube))
            return;
        MondrianDef.Cube cube = (MondrianDef.Cube) path;

        MondrianDef.Measure measure = new MondrianDef.Measure();
        measure.name = "New Measure " + cube.measures.length;
        //add cube to schema
        NodeDef[] temp = cube.measures;
        cube.measures = new MondrianDef.Measure[temp.length + 1];
        for (int i = 0; i < temp.length; i++)
            cube.measures[i] = (MondrianDef.Measure) temp[i];

        cube.measures[cube.measures.length - 1] = measure;

        refreshTree(tree.getSelectionPath());
    }

    /**
     * @param evt
     */
    protected void addDimension(ActionEvent evt)
    {
        Object path = tree.getSelectionPath().getLastPathComponent();
        if (!(path instanceof MondrianDef.Cube))
            return;

        MondrianDef.Cube cube = (MondrianDef.Cube) path;

        MondrianDef.Dimension dimension = new MondrianDef.Dimension();
        dimension.name = "New Dimension " + cube.dimensions.length;
        dimension.hierarchies = new MondrianDef.Hierarchy[1];
        dimension.hierarchies[0] = new MondrianDef.Hierarchy();
        dimension.hierarchies[0].hasAll = new Boolean(false);
        dimension.hierarchies[0].levels = new MondrianDef.Level[0];
        dimension.hierarchies[0].memberReaderParameters = new MondrianDef.Parameter[0];
        dimension.hierarchies[0].relation = new MondrianDef.Join();

        //add cube to schema
        NodeDef[] temp = cube.dimensions;
        cube.dimensions = new MondrianDef.CubeDimension[temp.length + 1];
        for (int i = 0; i < temp.length; i++)
            cube.dimensions[i] = (MondrianDef.CubeDimension) temp[i];

⌨️ 快捷键说明

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