package com.vci.client.portal.UI.v3;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import com.vci.client.LogonApplication;
import com.vci.client.common.VCIBasePanel;
import com.vci.client.portal.UI.CloneDialog;
import com.vci.client.portal.UI.ExpDialog;
import com.vci.client.portal.UI.ImportExcel;
import com.vci.client.portal.UI.UIContextDialog;
import com.vci.client.portal.UI.dialog.VCIGrandUIDialog;
import com.vci.client.portal.utility.UIServiceLocaleDisplay;
import com.vci.client.portal.utility.UITools;
import com.vci.client.ui.process.QANProcessBar;
import com.vci.client.ui.process.QANProcessBarFrame;
import com.vci.client.ui.swing.VCISwingUtil;
import com.vci.client.ui.swing.components.VCIJButton;
import com.vci.client.ui.swing.components.VCIJLabel;
import com.vci.client.ui.swing.components.VCIJOptionPane;
import com.vci.client.ui.swing.components.VCIJPanel;
import com.vci.client.ui.swing.components.VCIJScrollPane;
import com.vci.client.ui.swing.components.VCIJSplitPane;
import com.vci.client.ui.swing.components.VCIJTabbedPane;
import com.vci.client.ui.swing.components.VCIJTextField;
import com.vci.client.ui.swing.components.VCIJDialog.DialogResult;
import com.vci.client.ui.swing.components.table.AbstractVCIJTableDataProvider;
import com.vci.client.ui.swing.components.table.VCIJTableDataProvider;
import com.vci.client.ui.swing.components.table.VCIJTableNode;
import com.vci.client.ui.swing.components.table.VCIJTablePanel;
import com.vci.corba.common.VCIError;
import com.vci.corba.omd.btm.BtmItem;
import com.vci.corba.portal.PortalService.GetPLUILayoutsByRelatedTypeAndQueryInfoResult;
import com.vci.corba.portal.data.PLUILayout;
import com.vci.mw.ClientContextVariable;
/**
* 指定分类下的上下文
*
*
Title:
* Description:
* Copyright: Copyright (c) 2016
* Company: VCI
* @author xiongchao
* @time 2017-2-15
* @version 1.0
*/
public class UIContextDataPanel extends VCIJPanel {
/**
*
*/
private static final long serialVersionUID = 3650977100724911396L;
private BtmItem btmItem = null;
private VCIBasePanel ownedModulePanel = null;
public UIContextDataPanel(){
}
public void refreshUI(){
clearAndRefresh(true);
}
protected void clearAndRefresh(boolean clearSearchText){
if(clearSearchText){
clearSearchText();
}
clearTableTable();
clearRegionTable();
tablePanel.setPageIndex(1);
tablePanel.refreshTableData();
}
protected void clearSearchText(){
txtName.setText("");
txtCode.setText("");
}
protected void clearTableTable(){
tablePanel.getTable().getSelectionModel().clearSelection();
tablePanel.getTableModel().clear();
tablePanel.getTableModel().fireTableDataChanged();
}
protected void clearRegionTable(){
navRegionPanel.clearUI();
ctlRegionPanel.clearUI();
optRegionPanel.clearUI();
navRegionPanel.setPageLayoutDefination(null);
ctlRegionPanel.setPageLayoutDefination(null);
optRegionPanel.setPageLayoutDefination(null);
}
public void buildUI(){
init();
}
private VCIJSplitPane jspLeftToRight = null;
private VCIJTabbedPane tab = new VCIJTabbedPane();
private RegionDataPanel navRegionPanel = new RegionDataPanel();
private RegionDataPanel ctlRegionPanel = new RegionDataPanel();
private RegionDataPanel optRegionPanel = new RegionDataPanel();
private void init(){
setLayout(new BorderLayout());
jspLeftToRight = new VCIJSplitPane(VCIJSplitPane.HORIZONTAL_SPLIT);
jspLeftToRight.setDividerSize(6);
jspLeftToRight.setContinuousLayout(true);
jspLeftToRight.setOneTouchExpandable(true);
jspLeftToRight.setDividerLocation(600);
jspLeftToRight.setLeftComponent(getWestPanel());
jspLeftToRight.setRightComponent(getEastTabPanel());
add(jspLeftToRight, BorderLayout.CENTER);
}
private VCIJPanel getWestPanel(){
VCIJPanel pal = new VCIJPanel(new BorderLayout());
pal.add(getNorthPanel(), BorderLayout.NORTH);
pal.add(getContextTablePanel(), BorderLayout.CENTER);
return pal;
}
private VCIJTabbedPane getEastTabPanel(){
navRegionPanel.setPageLayoutDefination(null);
navRegionPanel.setAreaType((short)1);
navRegionPanel.buildUI();
ctlRegionPanel.setPageLayoutDefination(null);
ctlRegionPanel.setAreaType((short)2);
ctlRegionPanel.buildUI();
optRegionPanel.setPageLayoutDefination(null);
optRegionPanel.setAreaType((short)3);
optRegionPanel.buildUI();
tab.add("导航区", navRegionPanel);
tab.add("控制区", ctlRegionPanel);
tab.add("操作区", optRegionPanel);
return tab;
}
private VCIJButton btnAdd = VCISwingUtil.createVCIJButton("add", "添加", "添加", "add.png", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
add_actionPerformed(e);
}
});
private VCIJButton btnEdit = VCISwingUtil.createVCIJButton("edit", "修改", "修改", "edit.png", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
edit_actionPerformed(e);
}
});
private VCIJButton btnDelete = VCISwingUtil.createVCIJButton("del", "删除", "删除", "delete.png", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
delete_actionPerformed(e);
}
});
private List getMultiSelectedPLDs(){
List list = new ArrayList();
list = tablePanel.getSelectedRowObjectsList();
return list;
}
private boolean isSelected(){
return tablePanel.getTable().getSelectedRow() >= 0;
}
private void add_actionPerformed(ActionEvent e){
try{
UIContextDialog dialog = new UIContextDialog(getBtmItem(), false, null);
if(dialog.getDialogResult() == DialogResult.OK){
refreshUI();
dialog.dispose();
}
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private void edit_actionPerformed(ActionEvent e){
try{
PLUILayout[] pageDefs = tablePanel.getSelectedRowObjectsList().toArray(new PLUILayout[0]);
if(!isSelected() || pageDefs.length == 0){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.pleaseChooseData"));
return;
}
if(pageDefs.length >= 2){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.onlyChooseOneDataToSomeOpt"));
return;
}
UIContextDialog dialog = new UIContextDialog(getBtmItem(), true, pageDefs[0]);
if(dialog.getDialogResult() == DialogResult.OK){
refreshUI();
dialog.dispose();
}
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private void delete_actionPerformed(ActionEvent e){
try{
PLUILayout[] pageLayouts = getMultiSelectedPLDs().toArray(new PLUILayout[0]);
if(!isSelected() || pageLayouts.length == 0){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.pleaseChooseData"));
return;
}
int optRes = VCIJOptionPane.showConfirm(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.confirmDelete"));
if(!(optRes == VCIJOptionPane.YES_OPTION)){
return;
}
//TODO
String[] oids = new String[pageLayouts.length];
for (int i = 0; i < oids.length; i++) {
oids[i] = pageLayouts[i].plOId;
}
UITools.getService().deletePLUILayoutByOidsForCascade(oids);
refreshUI();
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private void clone_actionPerformed(ActionEvent e){
try{
PLUILayout[] contextsx = getMultiSelectedPLDs().toArray(new PLUILayout[0]);
if(!isSelected() || contextsx.length == 0){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.pleaseChooseData"));
return;
}
if(contextsx.length >= 2){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.onlyChooseOneDataToSomeOpt"));
return;
}
CloneDialog dialog = new CloneDialog(null, contextsx[0]);
dialog.setVisible(true);
refreshUI();
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private void export_actionPerformed(ActionEvent e){
try{
PLUILayout[] contextsx = getMultiSelectedPLDs().toArray(new PLUILayout[0]);
if(!isSelected() || contextsx.length == 0){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.pleaseChooseData"));
return;
}
ExpDialog dialog = new ExpDialog(getBtmItem(), contextsx);
dialog.setVisible(true);
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private void import_actionPerformed(ActionEvent e){
try{
ImportExcel imp = new ImportExcel(getBtmItem());
if(imp.impExcel()){
refreshUI();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(), "导入成功!");
}
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private void grant_actionPerformed(ActionEvent e){
final PLUILayout[] contextsx = getMultiSelectedPLDs().toArray(new PLUILayout[0]);
if(!isSelected() || contextsx.length == 0){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.pleaseChooseData"));
return;
}
final QANProcessBarFrame frame = new QANProcessBarFrame();
final QANProcessBar bar = new QANProcessBar(new Thread(new Runnable() {
@Override
public void run() {
try{
frame.setContent("正在构建UI授权界面,请稍等...");
VCIGrandUIDialog dialog = new VCIGrandUIDialog(getBtmItem(),
getOwnedModulePanel().getFuncObj(), contextsx, contextsx);
frame.setContent("");
frame.setProcessBarCancel(true);
dialog.setLocationAndSize();
} finally{
frame.setProcessBarCancel(true);
}
}
}){}, (JFrame) LogonApplication.frame, frame, "", false);
String title = "UI授权";
frame.setTitle(title);
bar.setTitle(title);
bar.setVisible(true);
}
private String getSourceButtonText(ActionEvent e){
String res = "此操作";
if(e.getSource() instanceof VCIJButton){
res = ((VCIJButton)e.getSource()).getText();
}
return res;
}
private VCIJButton btnRefresh = VCISwingUtil.createVCIJButton("refresh", "刷新", "刷新", "sync.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clearAndRefresh(false);
}
});
private VCIJButton btnClone = VCISwingUtil.createVCIJButton("clone", "克隆", "克隆", "copy.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
clone_actionPerformed(e);
}
});
private VCIJButton btnExport = VCISwingUtil.createVCIJButton("export", "导出", "导出", "export.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
export_actionPerformed(e);
}
});
private VCIJButton btnImport = VCISwingUtil.createVCIJButton("import", "导入", "导入", "import.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
import_actionPerformed(e);
}
});
private VCIJButton btnGrant = VCISwingUtil.createVCIJButton("grant", "授权", "授权", "group_key.png", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
grant_actionPerformed(e);
}
});
// private VCIJButton viewI18nButton = VCISwingUtil.createVCIJButton("viewI18nButton", "查看国际化字典", "查看国际化字典", "image.png", new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// i18nTable();
// }
// });
private VCIJPanel getNorthPanel(){
VCIJPanel pal = new VCIJPanel(new BorderLayout());
pal.add(new VCIJScrollPane(getWestNorthBtnPanel()), BorderLayout.SOUTH);
pal.add(getWestNorthSearchPanel(), BorderLayout.NORTH);
return pal;
}
private VCIJLabel lblName = new VCIJLabel("名称");
private VCIJTextField txtName = new VCIJTextField("");
private VCIJLabel lblCode = new VCIJLabel("UI上下文");
private VCIJTextField txtCode = new VCIJTextField("");
private VCIJButton btnSearch = VCISwingUtil.createVCIJButton("search", "查询", "查询", "search.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tablePanel.refreshTableData();
}
});
private VCIJButton btnClear = VCISwingUtil.createVCIJButton("clear", "清空", "清空查询条件", "clear.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
refreshUI();
}
});
private VCIJPanel getWestNorthSearchPanel(){
VCIJPanel pal = new VCIJPanel(new GridBagLayout());
pal.add(lblName, getGBC(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, 1));
pal.add(txtName, getGBC(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, 1));
pal.add(lblCode, getGBC(2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, 1));
pal.add(txtCode, getGBC(3, 0, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, 1));
pal.add(btnSearch, getGBC(4, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, 1));
pal.add(btnClear, getGBC(5, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, 1));
return pal;
}
private VCIJPanel getWestNorthBtnPanel(){
// VCIJPanel pal1 = new VCIJPanel();
// pal1.add(btnAdd);
// pal1.add(btnEdit);
// pal1.add(btnDelete);
// pal1.add(btnRefresh);
//
// VCIJPanel pal2 = new VCIJPanel();
// pal2.add(btnClone);
// pal2.add(btnExport);
// pal2.add(btnImport);
// pal2.add(btnGrant);
//pal2.add(viewI18nButton);
// VCIJPanel pal3 = new VCIJPanel(new BorderLayout(0,0));
// pal3.add(pal1, BorderLayout.NORTH);
// pal3.add(pal2, BorderLayout.SOUTH);
VCIJPanel pal1 = new VCIJPanel();
pal1.add(btnAdd);
pal1.add(btnEdit);
pal1.add(btnDelete);
pal1.add(btnRefresh);
VCIJPanel pal2 = new VCIJPanel();
pal2.add(btnClone);
pal2.add(btnExport);
pal2.add(btnImport);
pal2.add(btnGrant);
//pal2.add(viewI18nButton);
VCIJPanel panel = new VCIJPanel();
// panel.setMinimumSize(new Dimension(100, 60));
// panel.setMaximumSize(new Dimension(1500, 60));
panel.setLayout(new GridBagLayout());
GridBagConstraints g = new GridBagConstraints();
g.anchor = GridBagConstraints.CENTER;
g.gridx = 0;
g.gridy = 0;
g.weightx = 1.0;
g.weighty = 1.0;
g.fill = GridBagConstraints.NONE;
panel.add(pal1, g);
g.gridy = 1;
panel.add(pal2, g);
panel.setPreferredSize(new Dimension(0, 55));
return panel;
}
private GridBagConstraints getGBC(int gridx, int gridy, int gridwidth, int gridheight, double weightx, double weighty, int anchor, int fill, int padxy) {
return new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, new Insets(padxy, padxy, padxy, padxy), padxy, padxy);
}
private Comparator pageLayoutComparator = new Comparator() {
@Override
public int compare(PLUILayout o1, PLUILayout o2) {
return o1.plCode.compareTo(o2.plCode);
}
};
private VCIJTablePanel tablePanel = null;
private VCIJTableDataProvider dataProvider = null;
private VCIJTablePanel getContextTablePanel(){
dataProvider = new AbstractVCIJTableDataProvider() {
@Override
public String[] getSpecialColumns() {
return new String[]{"名称", "UI上下文","导航区","控制区","操作区"};
}
@Override
public int getTotal() {
return super.total;
}
@Override
public VCIJTableNode getNewRowNode(PLUILayout dataObj) {
VCIJTableNode nodeOjb = new VCIJTableNode(dataObj);
int i = 0;
String[] columns = getSpecialColumns();
nodeOjb.setPropertyValue(columns[i++], dataObj.plName);
nodeOjb.setPropertyValue(columns[i++], dataObj.plCode);
nodeOjb.setPropertyValue(columns[i++], dataObj.plIsShowNavigator == 1 ? "显示":"不显示");
nodeOjb.setPropertyValue(columns[i++], dataObj.plIsShowForm == 1 ? "显示":"不显示");
nodeOjb.setPropertyValue(columns[i++], dataObj.plIsShowTab == 1 ? "显示":"不显示");
// String navCtlOptShow =
// (dataObj.plIsShowNavigator == 1 ? " 显示":"不显示") + " | " +
// (dataObj.plIsShowForm == 1 ? " 显示":"不显示") + " | " +
// (dataObj.plIsShowTab== 1 ? " 显示":"不显示") + " " +
// "";
// nodeOjb.setPropertyValue(columns[i++], navCtlOptShow);
return nodeOjb;
}
@Override
public PLUILayout[] getDatas(int pageIndex, int pageSize) {
PLUILayout[] res = new PLUILayout[0];
if(getBtmItem() == null) return res;
int total = 0;
try {
GetPLUILayoutsByRelatedTypeAndQueryInfoResult result = UITools.getService().getPLUILayoutsByRelatedTypeAndQueryInfo(
getBtmItem().name, txtName.getText().trim(), txtCode.getText().trim(), pageIndex, pageSize);
total = (int)result.total;
res = result.returnValue;
res = getSearchFilterData(res);
} catch (VCIError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.total = total;
Arrays.sort(res, pageLayoutComparator);
return res;
}
};
tablePanel = new VCIJTablePanel(dataProvider);
tablePanel.setBorder(new EmptyBorder(0,0,0,0));
tablePanel.setShowExport(false);
tablePanel.setColumnDefaultWidth(new Integer(200));
String[] cols = dataProvider.getColumns();
HashMap map = new HashMap();
for (int i = 0; i < cols.length; i++){
String col = cols[i];
if (col.contains("区"))
map.put(i, 60);
}
tablePanel.setColumnWidthMaps(map);
tablePanel.buildTablePanel();
tablePanel.refreshTableData();
tablePanel.getTable().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
if(!e.getValueIsAdjusting()) return;
context_valueChange();
int location = jspLeftToRight.getDividerLocation();
jspLeftToRight.setDividerLocation(location);
}
});
return tablePanel;
}
private boolean hasSearchText(){
return (txtName.getText().trim().length() != 0 || txtCode.getText().trim().length() != 0);
}
private PLUILayout[] getSearchFilterData(PLUILayout[] plds){
if(!hasSearchText()) return plds;
List res = new ArrayList();
for (PLUILayout pld : plds) {
String name = txtName.getText().trim();
String code = txtCode.getText().trim();
if((!"".equals(name) && pld.plName.contains(name))
||(!"".equals(code) && pld.plCode.contains(code))){
res.add(pld);
}
}
return res.toArray(new PLUILayout[]{});
}
/**
*
* 国际化字典Dialog:
* @author yangyang
* @time 2017-10-31
*/
// private void i18nTable(){
// VciI18nTableDialog vi18n = new VciI18nTableDialog();
// vi18n.setModal(true);
// vi18n.init();
// vi18n.setSize(900,600);
// vi18n.setLocationRelativeTo(ClientContextVariable.getFrame());
// vi18n.setVisible(true);
// }
private void context_valueChange(){
int row = tablePanel.getTable().getSelectedRow();
if(row < 0) return;
PLUILayout pld = tablePanel.getSpecialObjectByRowIndex(row);
tab.removeAll();
if(pld.plIsShowNavigator == 1){
refreshRegion(pld, navRegionPanel, "导航区");
}
if(pld.plIsShowForm == 1){
refreshRegion(pld, ctlRegionPanel, "控制区");
}
if(pld.plIsShowTab == 1){
refreshRegion(pld, optRegionPanel, "操作区");
}
tab.updateUI();
}
private void refreshRegion(PLUILayout pld,
RegionDataPanel regionPanel,
String title){
regionPanel.setBtmItem(getBtmItem());
regionPanel.setPageLayoutDefination(pld);
regionPanel.refreshUI();
regionPanel.updateUI();
tab.addTab(title, regionPanel);
}
public BtmItem getBtmItem() {
return btmItem;
}
public void setBtmItem(BtmItem btmItem) {
this.btmItem = btmItem;
}
public VCIBasePanel getOwnedModulePanel() {
return ownedModulePanel;
}
public void setOwnedModulePanel(VCIBasePanel ownedModulePanel) {
this.ownedModulePanel = ownedModulePanel;
}
}