package com.vci.client.portal.UI.v3;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import javax.swing.event.EventListenerList;
import com.vci.client.portal.UI.TabDialog;
import com.vci.client.portal.utility.UIServiceLocaleDisplay;
import com.vci.client.portal.utility.UITools;
import com.vci.client.ui.swing.VCISwingUtil;
import com.vci.client.ui.swing.components.VCIJButton;
import com.vci.client.ui.swing.components.VCIJOptionPane;
import com.vci.client.ui.swing.components.VCIJPanel;
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.data.PLUILayout;
import com.vci.corba.portal.data.PLTabPage;
import com.vci.mw.ClientContextVariable;
/**
* 上下文的页签Panel
*
*
Title:
* Description:
* Copyright: Copyright (c) 2016
* Company: VCI
* @author xiongchao
* @time 2017-2-16
* @version 1.0
*/
public class TabPagePanel extends VCIJPanel {
/**
*
*/
private static final long serialVersionUID = -5793508549754292664L;
private BtmItem btmItem = null;
private PLUILayout pageLayoutDefination = null;
private short areaType = -1;
public TabPagePanel(){
}
public void refreshUI(){
refreshUI(null);
}
private void refreshUI(ActionEvent e){
if(tablePanel != null){
tablePanel.getTableModel().clear();
tablePanel.getTableModel().fireTableDataChanged();
tablePanel.refreshTableData();
}
notifyTablePanelDataChange(e);
}
public void buildUI(){
init();
}
private void init(){
setLayout(new BorderLayout());
add(getCenterTablePanel(), BorderLayout.CENTER);
}
private Comparator tabPageComparator = new Comparator() {
@Override
public int compare(PLTabPage o1, PLTabPage o2) {
return new Integer(o1.plSeq).compareTo(new Integer(o2.plSeq));
}
};
private VCIJTableDataProvider dataProvider = null;
private VCIJTablePanel tablePanel = null;
private VCIJTablePanel getCenterTablePanel(){
dataProvider = new AbstractVCIJTableDataProvider() {
@Override
public String[] getSpecialColumns() {
return new String[]{"序号","编码","名称","是否启用","显示表达式","UI解析类","扩展属性","描述"};
}
@Override
public int getTotal() {
return super.total;
}
@Override
public VCIJTableNode getNewRowNode(PLTabPage dataObj) {
VCIJTableNode dataNode = new VCIJTableNode(dataObj);
int i = 0;
String[] columns = getSpecialColumns();
dataNode.setPropertyValue(columns[i++], dataObj.plSeq);
dataNode.setPropertyValue(columns[i++], dataObj.plCode);
dataNode.setPropertyValue(columns[i++], dataObj.plName);
dataNode.setPropertyValue(columns[i++], 1 == dataObj.plIsOpen ? "启用" : "未启用");
dataNode.setPropertyValue(columns[i++], dataObj.plOpenExpression);
dataNode.setPropertyValue(columns[i++], dataObj.plUIParser);
dataNode.setPropertyValue(columns[i++], dataObj.plExtAttr);
dataNode.setPropertyValue(columns[i++], dataObj.plDesc);
return dataNode;
}
@Override
public PLTabPage[] getDatas(int pageIndex, int pageSize) {
PLTabPage[] res = new PLTabPage[0];
PLUILayout pld = getPageLayoutDefination();
if(pld == null) return res;
try {
res = UITools.getService().getTabPagesByContextIdAndType( pld.plOId, getAreaType());
} catch (VCIError e) {
e.printStackTrace();
}
super.total = res.length;
Arrays.sort(res, tabPageComparator);
return res;
}
};
tablePanel = new VCIJTablePanel(dataProvider);
tablePanel.setShowRowNumber(false);
HashMap columnWidthMaps = new HashMap();
columnWidthMaps.put(2, 40);
columnWidthMaps.put(4, 200);
columnWidthMaps.put(5, 60);
tablePanel.setColumnWidthMaps(columnWidthMaps);
tablePanel.setShowExport(false);
tablePanel.setShowPaging(false);
tablePanel.setColumnDefaultWidth(new Integer(150));
tablePanel.setCustomButtonFlowAlign(FlowLayout.CENTER);
tablePanel.setCustomButtons(Arrays.asList(btnAdd, btnEdit, btnDelete, btnRefresh, btnCopy, btnPaste));
//tablePanel.setCustomButtons(Arrays.asList(btnAdd, btnEdit, btnDelete, btnRefresh, btnCopy, btnPaste,viewI18nButton));
tablePanel.buildTablePanel();
tablePanel.refreshTableData();
return tablePanel;
}
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 VCIJButton btnRefresh = VCISwingUtil.createVCIJButton("refresh", "刷新", "刷新", "sync.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
refresh_actionPerformed(e);
}
});
private VCIJButton btnCopy = VCISwingUtil.createVCIJButton("copy", "复制", "复制", "copy.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
copy_actionPerformed(e);
}
});
private VCIJButton btnPaste = VCISwingUtil.createVCIJButton("paste", "粘贴", "粘贴", "paste.gif", new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
paste_actionPerformed(e);
}
});
// private VCIJButton viewI18nButton = VCISwingUtil.createVCIJButton("viewI18nButton", "查看国际化字典", "查看国际化字典", "image.png", new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent e) {
// i18nTable();
// }
// });
private boolean isSelected(){
return tablePanel.getTable().getSelectedRow() >= 0;
}
private void add_actionPerformed(ActionEvent e){
try{
if(getPageLayoutDefination() == null){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("请先选择UI上下文!"));
return;
}
TabDialog dialog = new TabDialog(getPageLayoutDefination(), false, null, getAreaType());
if(dialog.getDialogResult() == DialogResult.OK){
refreshUI(e);
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{
PLTabPage[] tabPages = tablePanel.getSelectedRowObjectsList().toArray(new PLTabPage[0]);
if(!isSelected() || tabPages.length == 0){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.pleaseChooseData"));
return;
}
if(tabPages.length >= 2){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.pleaseChooseData"));
return;
}
TabDialog dialog = new TabDialog(getPageLayoutDefination(), true, tabPages[0], getAreaType());
if(dialog.getDialogResult() == DialogResult.OK){
refreshUI(e);
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 {
PLTabPage[] tabPages = tablePanel.getSelectedRowObjectsList().toArray(new PLTabPage[0]);
if(!isSelected() || tabPages.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[tabPages.length];
for (int i = 0; i < oids.length; i++) {
oids[i] = tabPages[i].plOId;
}
UITools.getService().deletePLTabPageByOidsForCascade(oids);
refreshUI(e);
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private void refresh_actionPerformed(ActionEvent e){
refreshUI(e);
}
private void notifyTablePanelDataChange(ActionEvent e){
TabPageRefreshActionListener[] als = customEventListenerList.getListeners(TabPageRefreshActionListener.class);
if(als != null){
for(TabPageRefreshActionListener al : als){
al.actionPerformed(e);
}
}
}
private void copy_actionPerformed(ActionEvent e){
try{
PLTabPage[] tabPages = tablePanel.getSelectedRowObjectsList().toArray(new PLTabPage[0]);
if(!isSelected() || tabPages.length == 0){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.pleaseChooseData"));
return;
}
String[] tabPageOids = new String[tabPages.length];
for (int i = 0; i < tabPageOids.length; i++) {
tabPageOids[i] = tabPages[i].plOId;
}
UICopyClipboardUtil.addStringContent(tabPageOids);
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private void paste_actionPerformed(ActionEvent e){
try {
String[] tabPageOids = UICopyClipboardUtil.getStringContents();
for(String tabPageOid : tabPageOids){
PLTabPage tp = UITools.getService().getPLTabPageById(tabPageOid);
if(tp == null || "".equals(tp.plOId)){
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("剪贴板中数据无效,无法执行粘贴!"));
return;
}
}
// all is ok
UITools.getService().copyTabPageToPageLayout(tabPageOids, getPageLayoutDefination(), getAreaType());
refreshUI(e);
}catch(Throwable ex){
ex.printStackTrace();
VCIJOptionPane.showMessage(ClientContextVariable.getFrame(),
UIServiceLocaleDisplay.getIl18n("common.msg.executingHasError",
getSourceButtonText(e), ex.toString()));
return;
}
}
private String getSourceButtonText(ActionEvent e){
String res = "此操作";
if(e.getSource() instanceof VCIJButton){
res = ((VCIJButton)e.getSource()).getText();
}
return res;
}
/**
*
* 国际化字典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);
// }
public BtmItem getBtmItem() {
return btmItem;
}
public void setBtmItem(BtmItem btmItem) {
this.btmItem = btmItem;
}
public PLUILayout getPageLayoutDefination() {
return pageLayoutDefination;
}
public void setPageLayoutDefination(PLUILayout pageLayoutDefination) {
this.pageLayoutDefination = pageLayoutDefination;
}
public short getAreaType() {
return areaType;
}
public void setAreaType(short areaType) {
this.areaType = areaType;
}
public VCIJTablePanel getTablePanel() {
return tablePanel;
}
public void setTablePanel(VCIJTablePanel tablePanel) {
this.tablePanel = tablePanel;
}
private EventListenerList customEventListenerList = new EventListenerList();
public void addRefreshUIActionListener(TabPageRefreshActionListener l){
customEventListenerList.add(TabPageRefreshActionListener.class, l);
}
}