/*
// This software is subject to the terms of the Eclipse Public License v1.0
// Agreement, available at the following URL:
// http://www.eclipse.org/legal/epl-v10.html.
// You must accept the terms of that agreement to use this software.
//
// Copyright (C) 2006-2009 Pentaho and others
// Copyright (C) 2006-2007 CINCOM SYSTEMS, INC.
// All Rights Reserved.
*/
package mondrian.gui;
import java.awt.*;
import java.util.*;
import java.util.List;
import javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.*;
/**
*
* @author sarora
*/
public class SchemaTreeCellEditor
extends javax.swing.tree.DefaultTreeCellEditor
{
private final ClassLoader myClassLoader;
JComboBox listEditor;
final List<CellEditorListener> listeners =
new ArrayList<CellEditorListener>();
/** Creates a new instance of SchemaTreeCellEditor */
public SchemaTreeCellEditor(
Workbench workbench,
JTree tree,
DefaultTreeCellRenderer renderer,
TreeCellEditor editor)
{
super(tree, renderer, editor);
myClassLoader = this.getClass().getClassLoader();
}
public Component getTreeCellEditorComponent(
JTree tree,
Object value,
boolean isSelected,
boolean expanded,
boolean leaf,
int row)
{
if (value instanceof MondrianGuiDef.RelationOrJoin) {
String valueClass = value.getClass().getName();
String simpleName[] = valueClass.split("[$.]", 0);
return super.getTreeCellEditorComponent(
tree,
simpleName[simpleName.length - 1],
isSelected,
expanded,
leaf,
row);
} else {
return null;
}
}
public boolean isCellEditable(EventObject event) {
return false;
}
protected void fireEditingStopped() {
ChangeEvent ce = new ChangeEvent(this);
for (int i = listeners.size() - 1; i >= 0; i--) {
listeners.get(i).editingStopped(ce);
}
}
public void addCellEditorListener(CellEditorListener l) {
listeners.add(l);
}
public void removeCellEditorListener(CellEditorListener l) {
listeners.remove(l);
}
public void setValueAt(JTree tree) {
String retValue;
MondrianGuiDef.RelationOrJoin relationObj = null;
retValue = (String) getCellEditorValue();
if (retValue.equals("Join")) {
relationObj =
new MondrianGuiDef.Join(
"", "",
new MondrianGuiDef.Table(
"", "Table 1", "", null),
"", "",
new MondrianGuiDef.Table(
"", "Table 2", "", null));
} else if (retValue.equals("Table")) {
relationObj = new MondrianGuiDef.Table("", "Table", "", null);
}
TreePath tpath = tree.getSelectionPath();
if (tpath != null) {
Object value = tpath.getLastPathComponent();
TreePath parentpath = tpath.getParentPath();
if (parentpath != null) {
Object parent = parentpath.getLastPathComponent();
if (parent instanceof MondrianGuiDef.Hierarchy) {
((MondrianGuiDef.Hierarchy) parent).relation = relationObj;
} else if (parent instanceof MondrianGuiDef.Closure) {
((MondrianGuiDef.Closure) parent).table =
(MondrianGuiDef.Table)relationObj;
} else if (parent instanceof MondrianGuiDef.Join) {
int indexOfChild =
tree.getModel().getIndexOfChild(parent, value);
switch (indexOfChild) {
case 0:
((MondrianGuiDef.Join) parent).left = relationObj;
break;
case 1:
((MondrianGuiDef.Join) parent).right = relationObj;
break;
}
}
tree.setSelectionPath(
parentpath.pathByAddingChild(relationObj));
}
}
}
public boolean stopCellEditing() {
boolean retValue;
setValueAt(super.tree);
retValue = super.stopCellEditing();
return retValue;
}
}
// End SchemaTreeCellEditor.java