Browse Source

整理下数据集分组的代码,父类里面多放点东西

master
zack 9 years ago
parent
commit
fd939227fc
  1. 422
      designer_base/src/com/fr/design/data/BasicTableDataTreePane.java
  2. 8
      designer_base/src/com/fr/design/data/datapane/TableDataSourceOP.java
  3. 494
      designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java

422
designer_base/src/com/fr/design/data/BasicTableDataTreePane.java

@ -1,41 +1,443 @@
package com.fr.design.data; package com.fr.design.data;
import com.fr.base.BaseUtils;
import com.fr.base.FRContext;
import com.fr.base.TableData;
import com.fr.data.impl.storeproc.StoreProcedure;
import com.fr.design.DesignModelAdapter;
import com.fr.design.actions.UpdateAction;
import com.fr.design.data.datapane.TableDataCreatorProducer;
import com.fr.design.data.datapane.TableDataNameObjectCreator;
import com.fr.design.data.datapane.TableDataSourceOP;
import com.fr.design.data.datapane.TableDataTree; import com.fr.design.data.datapane.TableDataTree;
import com.fr.design.data.tabledata.ResponseDataSourceChange;
import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane;
import com.fr.design.data.tabledata.wrapper.StoreProcedureDataWrapper;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper;
import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane;
import com.fr.design.gui.ibutton.UIHeadGroup;
import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode;
import com.fr.design.icon.IconPathConstants;
import com.fr.design.mainframe.DockingView; import com.fr.design.mainframe.DockingView;
import com.fr.design.menu.LineSeparator;
import com.fr.design.menu.MenuDef;
import com.fr.general.ComparatorUtils;
import com.fr.general.Inter;
import com.fr.general.NameObject;
import com.fr.stable.StringUtils;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.TreeCellEditor;
import java.awt.*;
import java.awt.event.*;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Map;
/** /**
* Coder: zack * Coder: zack
* Date: 2016/4/22 * Date: 2016/4/22
* Time: 16:23 * Time: 16:23
*/ */
public class BasicTableDataTreePane extends DockingView{ public abstract class BasicTableDataTreePane extends DockingView implements ResponseDataSourceChange {
@Override protected static final int PROCEDURE_NAME_INDEX = 4;
public void refreshDockingView() { protected static final int TEMPLATE_TABLE_DATA = 0;
protected static final int SERVER_TABLE_DATA = 1;
protected MenuDef addMenuDef;
protected DesignModelAdapter<?, ?> tc;
protected UIHeadGroup buttonGroup;
protected String[] allDSNames;
protected ConnectionTableAction connectionTableAction;
private String type = "";
/**
* 最佳位置
*
* @return 返回位置
*/
public Location preferredLocation() {
return Location.WEST_ABOVE;
} }
/**
* getViewTitle()
*
* @return
*/
@Override @Override
public String getViewTitle() { public String getViewTitle() {
return null; return Inter.getLocText("FR-Designer_TableData");
} }
/**
* getViewIcon
*
* @return
*/
@Override @Override
public Icon getViewIcon() { public Icon getViewIcon() {
return null; return BaseUtils.readIcon(IconPathConstants.DS_ICON_PATH);
} }
@Override /**
public Location preferredLocation() { * 响应数据集改变
return null; */
public void fireDSChanged() {
fireDSChanged(new HashMap<String, String>());
}
/**
* 响应数据集改变
*
* @param map 数据集变化Map
*/
public void fireDSChanged(Map<String, String> map) {
DesignTableDataManager.fireDSChanged(map);
} }
public void dgEdit(final AbstractTableDataPane<?> uPanel, String originalName) { public void dgEdit(final AbstractTableDataPane<?> uPanel, String originalName) {
dgEdit(uPanel, originalName, false);
}
public abstract void dgEdit(final AbstractTableDataPane<?> uPanel, String originalName, boolean isUpdate);
protected void doPropertyChange(BasicDialog dg, BasicPane.NamePane nPanel, final String oldName) {
type = dg.getTitle();
nPanel.setShowText(StringUtils.BLANK);
dg.setButtonEnabled(true);
String tempName = nPanel.getObjectName();
if (StringUtils.isBlank(tempName)) {
nPanel.setShowText(Inter.getLocText(new String[]{"DS-TableData", "ISEMPTY", "PLEASE", "GIVE-NAME"}, new String[]{"", ",", "", "!"}));
dg.setButtonEnabled(false);
} else if (!ComparatorUtils.equals(oldName, tempName) && isDsNameRepeaded(tempName, allDSNames)) {
String[] waring = new String[]{"DS-TableData", "Utils-has_been_existed", "PLEASE", "Rename"};
String[] sign = new String[]{tempName, ",", "", "!"};
nPanel.setShowText(Inter.getLocText(waring, sign));
dg.setButtonEnabled(false);
} else if (isProcedureName(oldName)) {
if (isIncludeUnderline(tempName)) {
String[] datasource_underline = new String[]{"Datasource-Stored_Procedure", "Name", "can_not_include_underline"};
String[] sign = new String[]{"", "", "!"};
nPanel.setShowText(Inter.getLocText(datasource_underline, sign));
dg.setButtonEnabled(false);
}
} else {
nPanel.setShowText(StringUtils.BLANK);
dg.setButtonEnabled(true);
}
}
private boolean isProcedureName(String oldName) {
return oldName.length() >= PROCEDURE_NAME_INDEX && ComparatorUtils.equals(type, Inter.getLocText("Datasource-Stored_Procedure"));
}
private boolean isIncludeUnderline(String name) {
return ComparatorUtils.equals(name.indexOf(StoreProcedure.SPLIT), -1) ? false : true;
}
public abstract TableDataTree getDataTree();
public abstract void refreshDockingView();
protected void checkButtonEnabled(UpdateAction editAction, UpdateAction previewTableDataAction, UpdateAction removeAction, TableDataSourceOP op, TableDataTree dataTree) {
// august:BUG 9344
addMenuDef.setEnabled(true);
connectionTableAction.setEnabled(FRContext.getCurrentEnv() != null && FRContext.getCurrentEnv().isRoot());
if (op == null || op.interceptButtonEnabled()) {
addMenuDef.setEnabled(false);
editAction.setEnabled(false);
removeAction.setEnabled(false);
previewTableDataAction.setEnabled(false);
return;
}
if (op.getDataMode() == SERVER_TABLE_DATA) {
addMenuDef.setEnabled(false);
removeAction.setEnabled(false);
}
int selectioncount = dataTree.getSelectionCount();
switch (selectioncount) {
case 0:
editAction.setEnabled(false);
removeAction.setEnabled(false);
previewTableDataAction.setEnabled(false);
break;
case 1:
boolean istmp = false;
if (dataTree.getSelectedNameObject().getObject() == null || dataTree.getSelectedNameObject().getObject() instanceof TemplateTableDataWrapper) {
istmp = true;
}
editAction.setEnabled(istmp);
removeAction.setEnabled(istmp);
previewTableDataAction.setEnabled(true);
break;
default:
editAction.setEnabled(false);
previewTableDataAction.setEnabled(false);
}
if (dataTree.getSelectionPath() != null) {
ExpandMutableTreeNode selectedTreeNode = (ExpandMutableTreeNode) dataTree.getSelectionPath().getLastPathComponent();
if (selectedTreeNode.getUserObject() instanceof String) {
previewTableDataAction.setEnabled(false);
editAction.setEnabled(false);
removeAction.setEnabled(false);
}
}
}
protected class TableDataTreeCellEditor extends DefaultCellEditor implements TreeCellEditor, CellEditorListener {
private NameObject editingNO;
private String oldName;
private String newName;
private UITextField jTextField;
private TableDataTree dataTree;
private BasicTableDataTreePane pane;
public TableDataTreeCellEditor(final UITextField textField, TableDataTree dataTree, BasicTableDataTreePane pane) {
super(textField);
this.jTextField = textField;
this.dataTree = dataTree;
this.pane = pane;
}
@Override
public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
editingNO = dataTree.getSelectedNameObject();
oldName = editingNO.getName();
delegate.setValue(oldName);
if (jTextField != null) {
jTextField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
// stopCellEditing 执行过程中会调用到 getCellEditorValue
stopCellEditing();
}
});
}
editorComponent.setPreferredSize(new java.awt.Dimension(pane.getPreferredSize().width, editorComponent.getPreferredSize().height));
return editorComponent;
}
@Override
public boolean isCellEditable(EventObject anEvent) {
NameObject no = dataTree.getSelectedNameObject();
return no != null && anEvent == null;
}
@Override
public Object getCellEditorValue() {
newName = super.getCellEditorValue().toString();
editingNO.setName(newName);
// 如果没有重命名成功,则还原成原来的oldName
if (tc != null && !tc.renameTableData(oldName, newName)) {
editingNO.setName(oldName);
}
if (dataTree.isNameRepeated(newName)) {
editingNO.setName(oldName);
}
return editingNO;
}
/*
* 下面两个方法是CellEditorListener的
*/
@Override
public void editingCanceled(ChangeEvent e) {
}
@Override
public void editingStopped(ChangeEvent e) {
}
}
protected void initbuttonGroup(final TableDataSourceOP op) {
Icon[] iconArray = {BaseUtils.readIcon("/com/fr/design/images/data/datasource.png"), BaseUtils.readIcon("/com/fr/design/images/data/dock/serverdatabase.png")};
final Integer[] modeArray = {TEMPLATE_TABLE_DATA, SERVER_TABLE_DATA};
String[] textArray = {Inter.getLocText(new String[]{"Template", "DS-TableData"}), Inter.getLocText("DS-Server_TableData")};
buttonGroup = new UIHeadGroup(iconArray, textArray) {
public void tabChanged(int index) {
if (op != null) {
op.setDataMode(modeArray[buttonGroup.getSelectedIndex()]);
addMenuDef.setEnabled(modeArray[buttonGroup.getSelectedIndex()] == TEMPLATE_TABLE_DATA ? true : false);
refreshDockingView();
}
}
};
buttonGroup.setNeedLeftRightOutLine(false);
}
protected void createAddMenuDef() {
TableDataNameObjectCreator[] creators = TableDataCreatorProducer.getInstance().createReportTableDataCreator();
for (final TableDataNameObjectCreator creator : creators) {
if (creator.shouldInsertSeparator()) {
addMenuDef.addShortCut(new LineSeparator());
}
addMenuDef.addShortCut(new TDAction() {
@Override
protected String getTDName() {
return creator.menuName();
}
@Override
protected Icon getTDIcon() {
return creator.menuIcon();
}
@Override
protected String getNamePrefix() {
return creator.getPrefix();
}
@Override
protected TemplateTableDataWrapper getTableDataInstance() {
return new TemplateTableDataWrapper((TableData) creator.createObject());
}
});
}
}
private abstract class TDAction extends UpdateAction {
protected abstract String getTDName();
protected abstract Icon getTDIcon();
protected abstract String getNamePrefix();
protected abstract TemplateTableDataWrapper getTableDataInstance();
public TDAction() {
this.setName(this.getTDName());
this.setSmallIcon(this.getTDIcon());
}
public void actionPerformed(ActionEvent e) {
dgEdit(getTableDataInstance().creatTableDataPane(), createDsName(getNamePrefix()), false);
}
}
private String createDsName(String prefix) {
int count = 1;
allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook());
while (isDsNameRepeaded(prefix + count, allDSNames)) {
count++;
}
return prefix + count;
} }
public TableDataTree getDataTree() { private boolean isDsNameRepeaded(String name, String[] names) {
return null; boolean repeat = false;
for (int i = 0; i < names.length; i++) {
if (ComparatorUtils.equals(name, names[i])) {
repeat = true;
}
}
return repeat;
}
protected KeyAdapter getTableTreeNodeListener(final UpdateAction editAction, final UpdateAction previewTableDataAction, final UpdateAction removeAction, final TableDataSourceOP op, final TableDataTree dataTree) {
return new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
//F2重命名先屏蔽了, 有bug没时间弄
if (e.getKeyCode() == KeyEvent.VK_F2) {
return;
}
super.keyPressed(e);
}
@Override
public void keyReleased(KeyEvent e) {
checkButtonEnabled(editAction, previewTableDataAction, removeAction, op, dataTree);
}
};
}
/**
* 创建不重复的名字即初始的默认名
*
* @param tree
* @param prefix 后缀
* @return 返回名字
*/
public static String createUnrepeatedName(TableDataTree tree, String prefix) {
int count = 1;
while (tree.isNameRepeated(prefix + count)) {
count++;
}
return prefix + count;
}
protected class PreviewTableDataAction extends UpdateAction {
private TableDataTree dataTree;
public PreviewTableDataAction(TableDataTree dataTree) {
this.setName(Inter.getLocText("FR-Designer_Preview"));
this.setMnemonic('p');
this.setSmallIcon(BaseUtils.readIcon(IconPathConstants.PREVIEW_ICON_PATH));
this.dataTree = dataTree;
}
@Override
public void actionPerformed(ActionEvent e) {
NameObject selectedNO = dataTree.getRealSelectedNameObject();
Object data = null;
if (selectedNO != null) {
data = selectedNO.getObject();
}
try {
if (((TableDataWrapper) data).getTableData() instanceof StoreProcedure) {
((StoreProcedure) (((TableDataWrapper) data).getTableData())).resetDataModelList();
if (data instanceof StoreProcedureDataWrapper) {
StoreProcedureDataWrapper oldSdw = ((StoreProcedureDataWrapper) data);
StoreProcedureDataWrapper newSdw = new StoreProcedureDataWrapper((StoreProcedure) oldSdw.getTableData(), oldSdw.getStoreprocedureName(), oldSdw.getTableDataName());
newSdw.previewData(StoreProcedureDataWrapper.PREVIEW_ONE);
} else {
StoreProcedure storeProcedure = (StoreProcedure) ((TableDataWrapper) data).getTableData();
StoreProcedureDataWrapper storeProcedureDataWrapper = new StoreProcedureDataWrapper(storeProcedure, StringUtils.EMPTY, StringUtils.EMPTY);
storeProcedureDataWrapper.previewData(StoreProcedureDataWrapper.PREVIEW_ALL);
}
} else {
((TableDataWrapper) data).previewData();
}
} catch (Exception ex) {
FRContext.getLogger().error(ex.getMessage(), ex);
}
}
}
protected class ConnectionTableAction extends com.fr.design.actions.server.ConnectionListAction {
public ConnectionTableAction() {
this.setName(Inter.getLocText("Server-Define_Data_Connection"));
this.setMnemonic('D');
this.setSmallIcon(BaseUtils.readIcon(IconPathConstants.TD_CONNECTION_ICON_PATH));
}
} }
} }

8
designer_base/src/com/fr/design/data/datapane/TableDataSourceOP.java

@ -84,7 +84,7 @@ public class TableDataSourceOP implements UserObjectOP<TableDataWrapper> {
} }
} }
private ExpandMutableTreeNode[] getNodeArrayFromMap(Map<String, TableDataWrapper> map) { protected ExpandMutableTreeNode[] getNodeArrayFromMap(Map<String, TableDataWrapper> map) {
List<ExpandMutableTreeNode> dataList = new ArrayList<ExpandMutableTreeNode>(); List<ExpandMutableTreeNode> dataList = new ArrayList<ExpandMutableTreeNode>();
Iterator<Entry<String, TableDataWrapper>> entryIt = map.entrySet().iterator(); Iterator<Entry<String, TableDataWrapper>> entryIt = map.entrySet().iterator();
while (entryIt.hasNext()) { while (entryIt.hasNext()) {
@ -181,7 +181,7 @@ public class TableDataSourceOP implements UserObjectOP<TableDataWrapper> {
} }
} }
private void setStoreProcedureTree(TableData tableData, ExpandMutableTreeNode tmpNode) { protected void setStoreProcedureTree(TableData tableData, ExpandMutableTreeNode tmpNode) {
ArrayList<String> nodeName = new ArrayList<String>(); ArrayList<String> nodeName = new ArrayList<String>();
StoreProcedure storeProcedure = (StoreProcedure) tableData; StoreProcedure storeProcedure = (StoreProcedure) tableData;
String name = ((NameObject) tmpNode.getUserObject()).getName(); String name = ((NameObject) tmpNode.getUserObject()).getName();
@ -229,11 +229,11 @@ public class TableDataSourceOP implements UserObjectOP<TableDataWrapper> {
} }
protected void setDataMode(int i) { public void setDataMode(int i) {
this.dataMode = i; this.dataMode = i;
} }
protected int getDataMode() { public int getDataMode() {
return dataMode; return dataMode;
} }

494
designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java

@ -1,35 +1,26 @@
package com.fr.design.data.datapane; package com.fr.design.data.datapane;
import com.fr.base.BaseUtils; import com.fr.base.BaseUtils;
import com.fr.base.FRContext;
import com.fr.base.TableData; import com.fr.base.TableData;
import com.fr.data.TableDataSource; import com.fr.data.TableDataSource;
import com.fr.data.impl.storeproc.StoreProcedure;
import com.fr.design.DesignModelAdapter; import com.fr.design.DesignModelAdapter;
import com.fr.design.ExtraDesignClassManager; import com.fr.design.ExtraDesignClassManager;
import com.fr.design.actions.UpdateAction; import com.fr.design.actions.UpdateAction;
import com.fr.design.data.BasicTableDataTreePane; import com.fr.design.data.BasicTableDataTreePane;
import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.DesignTableDataManager;
import com.fr.design.data.tabledata.ResponseDataSourceChange;
import com.fr.design.data.tabledata.StoreProcedureWorkerListener; import com.fr.design.data.tabledata.StoreProcedureWorkerListener;
import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane; import com.fr.design.data.tabledata.tabledatapane.AbstractTableDataPane;
import com.fr.design.data.tabledata.wrapper.AbstractTableDataWrapper; import com.fr.design.data.tabledata.wrapper.AbstractTableDataWrapper;
import com.fr.design.data.tabledata.wrapper.StoreProcedureDataWrapper;
import com.fr.design.data.tabledata.wrapper.TableDataWrapper;
import com.fr.design.data.tabledata.wrapper.TemplateTableDataWrapper;
import com.fr.design.dialog.BasicDialog; import com.fr.design.dialog.BasicDialog;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.dialog.DialogActionAdapter; import com.fr.design.dialog.DialogActionAdapter;
import com.fr.design.fun.TableDataTreePaneProcessor; import com.fr.design.fun.TableDataTreePaneProcessor;
import com.fr.design.gui.ibutton.UIHeadGroup;
import com.fr.design.gui.icontainer.UIScrollPane; import com.fr.design.gui.icontainer.UIScrollPane;
import com.fr.design.gui.itextfield.UITextField; import com.fr.design.gui.itextfield.UITextField;
import com.fr.design.gui.itoolbar.UIToolbar; import com.fr.design.gui.itoolbar.UIToolbar;
import com.fr.design.gui.itree.refreshabletree.ExpandMutableTreeNode;
import com.fr.design.icon.IconPathConstants; import com.fr.design.icon.IconPathConstants;
import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.design.menu.LineSeparator;
import com.fr.design.menu.MenuDef; import com.fr.design.menu.MenuDef;
import com.fr.design.menu.SeparatorDef; import com.fr.design.menu.SeparatorDef;
import com.fr.design.menu.ToolBarDef; import com.fr.design.menu.ToolBarDef;
@ -37,36 +28,22 @@ import com.fr.general.ComparatorUtils;
import com.fr.general.GeneralContext; import com.fr.general.GeneralContext;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.NameObject; import com.fr.general.NameObject;
import com.fr.stable.StringUtils;
import com.fr.stable.core.PropertyChangeAdapter; import com.fr.stable.core.PropertyChangeAdapter;
import com.fr.stable.plugin.PluginReadListener; import com.fr.stable.plugin.PluginReadListener;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.TreeCellEditor;
import java.awt.*; import java.awt.*;
import java.awt.dnd.DnDConstants; import java.awt.dnd.DnDConstants;
import java.awt.event.*; import java.awt.event.ActionEvent;
import java.util.EventObject; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
public class TableDataTreePane extends BasicTableDataTreePane implements ResponseDataSourceChange { public class TableDataTreePane extends BasicTableDataTreePane {
protected static final int PROCEDURE_NAME_INDEX = 4;
protected static final int TEMPLATE_TABLE_DATA = 0;
protected static final int SERVER_TABLE_DATA = 1;
private static final long serialVersionUID = -12168467370000617L;
private static TableDataTreePane singleton = new TableDataTreePane(); private static TableDataTreePane singleton = new TableDataTreePane();
private String type = "";
/**
* 得到实例
*
* @param tc
* @return
*/
public synchronized static BasicTableDataTreePane getInstance(DesignModelAdapter<?, ?> tc) { public synchronized static BasicTableDataTreePane getInstance(DesignModelAdapter<?, ?> tc) {
TableDataTreePaneProcessor treePaneProcessor = ExtraDesignClassManager.getInstance().getTableDataTreePaneProcessor(); TableDataTreePaneProcessor treePaneProcessor = ExtraDesignClassManager.getInstance().getTableDataTreePaneProcessor();
@ -84,17 +61,11 @@ public class TableDataTreePane extends BasicTableDataTreePane implements Respons
return singleton; return singleton;
} }
private TableDataTree dataTree;
private TableDataSourceOP op; private TableDataSourceOP op;
private TableDataTree dataTree;
private MenuDef addMenuDef;
private EditAction editAction; private EditAction editAction;
private RemoveAction removeAction; private RemoveAction removeAction;
private DesignModelAdapter<?, ?> tc;
private PreviewTableDataAction previewTableDataAction; private PreviewTableDataAction previewTableDataAction;
private ConnectionTableAction connectionTableAction;
private UIHeadGroup buttonGroup;
private String[] allDSNames;
private TableDataTreePane() { private TableDataTreePane() {
this.setLayout(new BorderLayout(4, 0)); this.setLayout(new BorderLayout(4, 0));
@ -118,7 +89,7 @@ public class TableDataTreePane extends BasicTableDataTreePane implements Respons
editAction = new EditAction(); editAction = new EditAction();
removeAction = new RemoveAction(); removeAction = new RemoveAction();
previewTableDataAction = new PreviewTableDataAction(); previewTableDataAction = new PreviewTableDataAction(dataTree);
connectionTableAction = new ConnectionTableAction(); connectionTableAction = new ConnectionTableAction();
ToolBarDef toolbarDef = new ToolBarDef(); ToolBarDef toolbarDef = new ToolBarDef();
toolbarDef.addShortCut(addMenuDef, SeparatorDef.DEFAULT, editAction, removeAction, SeparatorDef.DEFAULT, previewTableDataAction, connectionTableAction); toolbarDef.addShortCut(addMenuDef, SeparatorDef.DEFAULT, editAction, removeAction, SeparatorDef.DEFAULT, previewTableDataAction, connectionTableAction);
@ -131,7 +102,7 @@ public class TableDataTreePane extends BasicTableDataTreePane implements Respons
UIScrollPane scrollPane = new UIScrollPane(dataTree); UIScrollPane scrollPane = new UIScrollPane(dataTree);
scrollPane.setBorder(null); scrollPane.setBorder(null);
initbuttonGroup(); initbuttonGroup(op);
JPanel jPanel = new JPanel(new BorderLayout(4, 4)); JPanel jPanel = new JPanel(new BorderLayout(4, 4));
JPanel buttonPane = new JPanel(new GridLayout()); JPanel buttonPane = new JPanel(new GridLayout());
buttonPane.add(buttonGroup, BorderLayout.CENTER); buttonPane.add(buttonGroup, BorderLayout.CENTER);
@ -144,210 +115,20 @@ public class TableDataTreePane extends BasicTableDataTreePane implements Respons
checkButtonEnabled(); checkButtonEnabled();
} }
}); });
dataTree.addKeyListener(getTableTreeNodeListener()); dataTree.addKeyListener(getTableTreeNodeListener(editAction, previewTableDataAction, removeAction, op, dataTree));
// TreeCellEditor // TreeCellEditor
dataTree.setEditable(true); dataTree.setEditable(true);
TableDataTreeCellEditor treeCellEditor = new TableDataTreeCellEditor(new UITextField()); TableDataTreeCellEditor treeCellEditor = new TableDataTreeCellEditor(new UITextField(), dataTree, this);
treeCellEditor.addCellEditorListener(treeCellEditor); treeCellEditor.addCellEditorListener(treeCellEditor);
dataTree.setCellEditor(treeCellEditor); dataTree.setCellEditor(treeCellEditor);
new TableDataTreeDragSource(dataTree, DnDConstants.ACTION_COPY); new TableDataTreeDragSource(dataTree, DnDConstants.ACTION_COPY);
checkButtonEnabled(); checkButtonEnabled();
} }
public void setDataTree(TableDataTree dataTree) {
this.dataTree = dataTree;
}
public TableDataSourceOP getOp() {
return op;
}
public void setOp(TableDataSourceOP op) {
this.op = op;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public MenuDef getAddMenuDef() {
return addMenuDef;
}
public void setAddMenuDef(MenuDef addMenuDef) {
this.addMenuDef = addMenuDef;
}
public EditAction getEditAction() {
return editAction;
}
public void setEditAction(EditAction editAction) {
this.editAction = editAction;
}
public RemoveAction getRemoveAction() {
return removeAction;
}
public void setRemoveAction(RemoveAction removeAction) {
this.removeAction = removeAction;
}
public DesignModelAdapter<?, ?> getTc() {
return tc;
}
public void setTc(DesignModelAdapter<?, ?> tc) {
this.tc = tc;
}
public PreviewTableDataAction getPreviewTableDataAction() {
return previewTableDataAction;
}
public void setPreviewTableDataAction(PreviewTableDataAction previewTableDataAction) {
this.previewTableDataAction = previewTableDataAction;
}
public ConnectionTableAction getConnectionTableAction() {
return connectionTableAction;
}
public void setConnectionTableAction(ConnectionTableAction connectionTableAction) {
this.connectionTableAction = connectionTableAction;
}
private KeyAdapter getTableTreeNodeListener() {
return new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
//F2重命名先屏蔽了, 有bug没时间弄
if (e.getKeyCode() == KeyEvent.VK_F2){
return;
}
super.keyPressed(e);
}
@Override
public void keyReleased(KeyEvent e) {
checkButtonEnabled();
}
};
}
private void createAddMenuDef() {
TableDataNameObjectCreator[] creators = TableDataCreatorProducer.getInstance().createReportTableDataCreator();
for (final TableDataNameObjectCreator creator : creators) {
if (creator.shouldInsertSeparator()) {
addMenuDef.addShortCut(new LineSeparator());
}
addMenuDef.addShortCut(new TDAction() {
@Override
protected String getTDName() {
return creator.menuName();
}
@Override
protected Icon getTDIcon() {
return creator.menuIcon();
}
@Override
protected String getNamePrefix() {
return creator.getPrefix();
}
@Override
protected TemplateTableDataWrapper getTableDataInstance() {
return new TemplateTableDataWrapper((TableData) creator.createObject());
}
});
}
}
private void initbuttonGroup() {
Icon[] iconArray = {BaseUtils.readIcon("/com/fr/design/images/data/datasource.png"), BaseUtils.readIcon("/com/fr/design/images/data/dock/serverdatabase.png")};
final Integer[] modeArray = {TEMPLATE_TABLE_DATA, SERVER_TABLE_DATA};
String[] textArray = {Inter.getLocText(new String[]{"Template", "DS-TableData"}), Inter.getLocText("DS-Server_TableData")};
buttonGroup = new UIHeadGroup(iconArray, textArray) {
public void tabChanged(int index) {
if (op != null) {
op.setDataMode(modeArray[buttonGroup.getSelectedIndex()]);
addMenuDef.setEnabled(modeArray[buttonGroup.getSelectedIndex()] == TEMPLATE_TABLE_DATA ? true : false);
refreshDockingView();
}
}
};
buttonGroup.setNeedLeftRightOutLine(false);
}
/**
* getViewIcon
*
* @return
*/
public Icon getViewIcon() {
return BaseUtils.readIcon(IconPathConstants.DS_ICON_PATH);
}
/**
* 刷新
*/
public void refresh() {
dataTree.refresh();
}
protected void checkButtonEnabled() { protected void checkButtonEnabled() {
// august:BUG 9344 super.checkButtonEnabled(editAction, previewTableDataAction, removeAction, op, dataTree);
addMenuDef.setEnabled(true);
connectionTableAction.setEnabled(FRContext.getCurrentEnv() != null && FRContext.getCurrentEnv().isRoot());
if (this.op == null || this.op.interceptButtonEnabled()) {
addMenuDef.setEnabled(false);
editAction.setEnabled(false);
removeAction.setEnabled(false);
previewTableDataAction.setEnabled(false);
return;
} }
if (this.op.getDataMode() == SERVER_TABLE_DATA) {
addMenuDef.setEnabled(false);
removeAction.setEnabled(false);
}
int selectioncount = dataTree.getSelectionCount();
switch (selectioncount) {
case 0:
editAction.setEnabled(false);
removeAction.setEnabled(false);
previewTableDataAction.setEnabled(false);
break;
case 1:
boolean istmp = dataTree.getSelectedNameObject().getObject() instanceof TemplateTableDataWrapper;
editAction.setEnabled(istmp);
removeAction.setEnabled(istmp);
previewTableDataAction.setEnabled(true);
break;
default:
editAction.setEnabled(false);
previewTableDataAction.setEnabled(false);
}
if (dataTree.getSelectionPath() != null) {
if (((ExpandMutableTreeNode) dataTree.getSelectionPath().getLastPathComponent()).getUserObject() instanceof String) {
previewTableDataAction.setEnabled(false);
editAction.setEnabled(false);
removeAction.setEnabled(false);
}
}
}
/** /**
* 刷新 * 刷新
@ -357,122 +138,13 @@ public class TableDataTreePane extends BasicTableDataTreePane implements Respons
this.checkButtonEnabled(); this.checkButtonEnabled();
} }
/**
* getViewTitle()
*
* @return
*/
public String getViewTitle() {
return Inter.getLocText("FR-Designer_TableData");
}
/**
* 最佳位置
*
* @return 返回位置
*/
public Location preferredLocation() {
return Location.WEST_ABOVE;
}
/**
* 响应数据集改变
*/
public void fireDSChanged() {
fireDSChanged(new HashMap<String, String>());
}
/**
* 响应数据集改变
*
* @param map 数据集变化Map
*/
public void fireDSChanged(Map<String, String> map) {
DesignTableDataManager.fireDSChanged(map);
}
private class TableDataTreeCellEditor extends DefaultCellEditor implements TreeCellEditor, CellEditorListener {
private NameObject editingNO;
private String oldName;
private String newName;
private UITextField jTextField;
public TableDataTreeCellEditor(final UITextField textField) {
super(textField);
this.jTextField = textField;
}
@Override
public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {
editingNO = dataTree.getSelectedNameObject();
oldName = editingNO.getName();
delegate.setValue(oldName);
if (jTextField != null) {
jTextField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
// stopCellEditing 执行过程中会调用到 getCellEditorValue
stopCellEditing();
}
});
}
editorComponent.setPreferredSize(new java.awt.Dimension(TableDataTreePane.this.getPreferredSize().width, editorComponent.getPreferredSize().height));
return editorComponent;
}
@Override
public boolean isCellEditable(EventObject anEvent) {
NameObject no = dataTree.getSelectedNameObject();
return no != null && anEvent == null;
}
@Override
public Object getCellEditorValue() {
newName = super.getCellEditorValue().toString();
editingNO.setName(newName);
// 如果没有重命名成功,则还原成原来的oldName
if (tc != null && !tc.renameTableData(oldName, newName)) {
editingNO.setName(oldName);
}
if (dataTree.isNameRepeated(newName)) {
editingNO.setName(oldName);
}
return editingNO;
}
/*
* 下面两个方法是CellEditorListener的
*/
@Override
public void editingCanceled(ChangeEvent e) {
}
@Override
public void editingStopped(ChangeEvent e) {
}
}
/** /**
* 编辑面板 * 编辑面板
* *
* @param uPanel 面板 * @param uPanel 面板
* @param originalName 原始名字 * @param originalName 原始名字
*/ */
public void dgEdit(final AbstractTableDataPane<?> uPanel, String originalName) { public void dgEdit(final AbstractTableDataPane<?> uPanel, String originalName, boolean isUpdate) {
uPanel.addStoreProcedureWorkerListener(new StoreProcedureWorkerListener() { uPanel.addStoreProcedureWorkerListener(new StoreProcedureWorkerListener() {
public void fireDoneAction() { public void fireDoneAction() {
if (dataTree.getSelectionPath() == null) { if (dataTree.getSelectionPath() == null) {
@ -519,137 +191,6 @@ public class TableDataTreePane extends BasicTableDataTreePane implements Respons
dg.setVisible(true); dg.setVisible(true);
} }
private void doPropertyChange(BasicDialog dg, BasicPane.NamePane nPanel, final String oldName) {
type = dg.getTitle();
nPanel.setShowText(StringUtils.BLANK);
dg.setButtonEnabled(true);
String tempName = nPanel.getObjectName();
if (StringUtils.isBlank(tempName)) {
nPanel.setShowText(Inter.getLocText(new String[]{"DS-TableData", "ISEMPTY", "PLEASE", "GIVE-NAME"}, new String[]{"", ",", "", "!"}));
dg.setButtonEnabled(false);
} else if (!ComparatorUtils.equals(oldName, tempName) && isDsNameRepeaded(tempName, allDSNames)) {
String[] waring = new String[]{"DS-TableData", "Utils-has_been_existed", "PLEASE", "Rename"};
String[] sign = new String[]{tempName, ",", "", "!"};
nPanel.setShowText(Inter.getLocText(waring, sign));
dg.setButtonEnabled(false);
} else if (isProcedureName(oldName)) {
if (isIncludeUnderline(tempName)) {
String[] datasource_underline = new String[]{"Datasource-Stored_Procedure", "Name", "can_not_include_underline"};
String[] sign = new String[]{"", "", "!"};
nPanel.setShowText(Inter.getLocText(datasource_underline, sign));
dg.setButtonEnabled(false);
}
} else {
nPanel.setShowText(StringUtils.BLANK);
dg.setButtonEnabled(true);
}
}
private boolean isProcedureName(String oldName) {
return oldName.length() >= PROCEDURE_NAME_INDEX && ComparatorUtils.equals(type, Inter.getLocText("Datasource-Stored_Procedure"));
}
private boolean isDsNameRepeaded(String name, String[] names) {
boolean repeat = false;
for (int i = 0; i < names.length; i++) {
if (ComparatorUtils.equals(name, names[i])) {
repeat = true;
}
}
return repeat;
}
private boolean isIncludeUnderline(String name) {
return ComparatorUtils.equals(name.indexOf(StoreProcedure.SPLIT), -1) ? false : true;
}
private abstract class TDAction extends UpdateAction {
protected abstract String getTDName();
protected abstract Icon getTDIcon();
protected abstract String getNamePrefix();
protected abstract TemplateTableDataWrapper getTableDataInstance();
public TDAction() {
this.setName(this.getTDName());
this.setSmallIcon(this.getTDIcon());
}
public void actionPerformed(ActionEvent e) {
dgEdit(getTableDataInstance().creatTableDataPane(), createDsName(getNamePrefix()));
}
}
private String createDsName(String prefix) {
int count = 1;
allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook());
while (isDsNameRepeaded(prefix + count, allDSNames)) {
count++;
}
return prefix + count;
}
/**
* 创建不重复的名字即初始的默认名
*
* @param tree
* @param prefix 后缀
* @return 返回名字
*/
public static String createUnrepeatedName(TableDataTree tree, String prefix) {
int count = 1;
while (tree.isNameRepeated(prefix + count)) {
count++;
}
return prefix + count;
}
private class PreviewTableDataAction extends UpdateAction {
public PreviewTableDataAction() {
this.setName(Inter.getLocText("FR-Designer_Preview"));
this.setMnemonic('p');
this.setSmallIcon(BaseUtils.readIcon(IconPathConstants.PREVIEW_ICON_PATH));
}
@Override
public void actionPerformed(ActionEvent e) {
NameObject selectedNO = dataTree.getRealSelectedNameObject();
Object data = null;
if (selectedNO != null) {
data = selectedNO.getObject();
}
try {
if (((TableDataWrapper) data).getTableData() instanceof StoreProcedure) {
((StoreProcedure) (((TableDataWrapper) data).getTableData())).resetDataModelList();
if (data instanceof StoreProcedureDataWrapper) {
StoreProcedureDataWrapper oldSdw = ((StoreProcedureDataWrapper) data);
StoreProcedureDataWrapper newSdw = new StoreProcedureDataWrapper((StoreProcedure) oldSdw.getTableData(), oldSdw.getStoreprocedureName(), oldSdw.getTableDataName());
newSdw.previewData(StoreProcedureDataWrapper.PREVIEW_ONE);
} else {
StoreProcedure storeProcedure = (StoreProcedure) ((TableDataWrapper) data).getTableData();
StoreProcedureDataWrapper storeProcedureDataWrapper = new StoreProcedureDataWrapper(storeProcedure, StringUtils.EMPTY, StringUtils.EMPTY);
storeProcedureDataWrapper.previewData(StoreProcedureDataWrapper.PREVIEW_ALL);
}
} else {
((TableDataWrapper) data).previewData();
}
} catch (Exception ex) {
FRContext.getLogger().error(ex.getMessage(), ex);
}
}
}
private class EditAction extends UpdateAction { private class EditAction extends UpdateAction {
public EditAction() { public EditAction() {
this.setName(Inter.getLocText("FR-Designer_Edit")); this.setName(Inter.getLocText("FR-Designer_Edit"));
@ -662,8 +203,7 @@ public class TableDataTreePane extends BasicTableDataTreePane implements Respons
if (selectedNO == null) { if (selectedNO == null) {
return; return;
} }
dgEdit(((AbstractTableDataWrapper) selectedNO.getObject()).creatTableDataPane(), selectedNO.getName(), false);
dgEdit(((AbstractTableDataWrapper) selectedNO.getObject()).creatTableDataPane(), selectedNO.getName());
} }
} }
@ -704,14 +244,6 @@ public class TableDataTreePane extends BasicTableDataTreePane implements Respons
checkButtonEnabled(); checkButtonEnabled();
} }
private class ConnectionTableAction extends com.fr.design.actions.server.ConnectionListAction {
public ConnectionTableAction() {
this.setName(Inter.getLocText("Server-Define_Data_Connection"));
this.setMnemonic('D');
this.setSmallIcon(BaseUtils.readIcon(IconPathConstants.TD_CONNECTION_ICON_PATH));
}
}
/** /**
* @return * @return

Loading…
Cancel
Save