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