package com.vci.client.portal.UI.v3.comptdesign.compt;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.LinkedHashMap;
|
import java.util.LinkedList;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.swing.DefaultComboBoxModel;
|
import javax.swing.text.JTextComponent;
|
|
import com.vci.client.omd.linktype.LinkTypeStart;
|
import com.vci.client.oq.QTClient;
|
import com.vci.client.portal.UI.v3.comptdesign.UIComptDesignDialog;
|
import com.vci.client.portal.UI.v3.comptdesign.compt.al.BaseActionListener;
|
import com.vci.client.portal.utility.PLDefination;
|
import com.vci.client.portal.utility.UITools;
|
import com.vci.client.ui.swing.components.VCIJComboBox;
|
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.VCIJTextArea;
|
import com.vci.client.ui.swing.components.VCIJTextField;
|
import com.vci.common.portal.enums.PortalVIType;
|
import com.vci.corba.common.VCIError;
|
import com.vci.corba.omd.ltm.LinkType;
|
import com.vci.corba.portal.data.PLPageDefination;
|
|
/**
|
* UI 组件基础面板
|
*
|
* <p>Title: </p>
|
* <p>Description: </p>
|
* <p>Copyright: Copyright (c) 2016</p>
|
* <p>Company: VCI</p>
|
* @author xiongchao
|
* @time 2017-2-22
|
* @version 1.0
|
*/
|
public abstract class BaseComptPanel extends VCIJPanel implements ComptPanelInterface{
|
|
/**
|
*
|
*/
|
private static final long serialVersionUID = 968715722185037438L;
|
|
|
private PLPageDefination pageDefination = null;
|
private PLDefination defination = null;
|
protected boolean isCompleted = false;
|
private UIComptDesignDialog ownedUIComptDesignDialog = null;
|
|
protected Map<Integer, BaseActionListener<?>> txtRefBtnALMap = new LinkedHashMap<Integer, BaseActionListener<?>>();
|
|
public BaseComptPanel(UIComptDesignDialog ownedUIComptDesignDialog){
|
this.ownedUIComptDesignDialog = ownedUIComptDesignDialog;
|
}
|
|
public abstract boolean checkInputIsOk();
|
public abstract void buildPanel();
|
|
|
private List<BaseActionListener<?>> actions = new LinkedList<BaseActionListener<?>>();
|
public void initActionListener(){
|
initBtmTypeActionListener();
|
initLinkTypeActionListener();
|
initActionListenerObservers();
|
}
|
/**
|
* 由子类实现的初始化BtmType模式下各按钮的ActionListener
|
*/
|
protected abstract void initBtmTypeActionListener();
|
/**
|
* 由子类实现的初始化LinkType模式下各按钮的ActionListener
|
*/
|
protected abstract void initLinkTypeActionListener();
|
/**
|
* 为各按钮的ActionListeners之间配置观察\被观察关系
|
*/
|
protected void initActionListenerObservers(){
|
for (BaseActionListener<?> ba : actions) {
|
for (BaseActionListener<?> baa : actions) {
|
if(!ba.equals(baa)){
|
ba.addObserver(baa);
|
}
|
}
|
}
|
}
|
public List<BaseActionListener<?>> getActions() {
|
return actions;
|
}
|
public void setActions(List<BaseActionListener<?>> actions) {
|
this.actions = actions;
|
}
|
|
@Override
|
public void setDataToUI(PLPageDefination pageDefination){
|
if(isCompleted) return;
|
setPageDefination(pageDefination);
|
if(pageDefination != null){
|
try {
|
defination = UITools.getPLDefination(pageDefination.plDefination);
|
if(defination != null){
|
setDefination(defination);
|
setDataToUISpec(defination);
|
}
|
} catch (Throwable e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
};
|
}
|
isCompleted = true;
|
}
|
@Override
|
public boolean isCompleted(){
|
return isCompleted;
|
}
|
|
public abstract void setDataToUISpec(PLDefination defination);
|
|
public void setPageDefination(PLPageDefination pageDefination){
|
this.pageDefination = pageDefination;
|
}
|
public PLPageDefination getPageDefination() {
|
return pageDefination;
|
}
|
public PLDefination getDefination() {
|
return defination;
|
}
|
public void setDefination(PLDefination defination) {
|
this.defination = defination;
|
}
|
/**
|
*
|
* @param srcCombox
|
* @param destQTNamesCombox
|
*/
|
protected void refrechQueryTemplateNamesCombox(VCIJComboBox srcCombox, VCIJComboBox destQTNamesCombox){
|
destQTNamesCombox.removeAllItems();
|
String selectedItem = (String) srcCombox.getSelectedItem();
|
if (selectedItem == null) {
|
return;
|
}
|
try{
|
String[] qtNames = getQTNamesFromMap(selectedItem);
|
destQTNamesCombox.setModel(new DefaultComboBoxModel(qtNames));
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
destQTNamesCombox.updateUI();
|
}
|
/**
|
*
|
* @param srcCombox
|
* @param destRefCombox
|
* @param viType
|
*/
|
protected void refreshChangableTablePortalVIs(VCIJComboBox srcCombox, VCIJComboBox destRefCombox,
|
PortalVIType viType) {
|
destRefCombox.removeAllItems();
|
String selectedItem = (String) srcCombox.getSelectedItem();
|
if (selectedItem == null) {
|
return;
|
}
|
try {
|
String[] viNames = getTypePortalVINamesFromMap(viType, selectedItem);
|
destRefCombox.setModel(new DefaultComboBoxModel(viNames));
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
destRefCombox.updateUI();
|
}
|
/**
|
* 刷新业务类型选择后 可以选择的链接类型(linktype)下拉列表数据
|
* @param btmCombox
|
* @param destLinkTypeCombox
|
*/
|
protected void refrechChangableLinkType(VCIJComboBox btmCombox, VCIJComboBox destLinkTypeCombox){
|
destLinkTypeCombox.removeAllItems();
|
String selectedItem = (String) btmCombox.getSelectedItem();
|
if (selectedItem == null) {
|
return;
|
}
|
try{
|
List<String> list = new ArrayList<String>();
|
list.add("");
|
LinkType[] lts = LinkTypeStart.getService().getLinkTypes();
|
for (LinkType lt : lts) {
|
boolean exist = existInArray(selectedItem, lt.btmItemsFrom);
|
if(!exist){
|
exist = existInArray(selectedItem, lt.btmItemsTo);
|
}
|
if(exist){
|
if(!list.contains(lt.name)){
|
list.add(lt.name);
|
}
|
}
|
}
|
destLinkTypeCombox.setModel(new DefaultComboBoxModel(list.toArray(new String[0])));
|
} catch (VCIError e) {
|
e.printStackTrace();
|
}
|
destLinkTypeCombox.updateUI();
|
}
|
private boolean existInArray(String value, String[] values){
|
boolean res = false;
|
for (String string : values) {
|
if(string.equals(value)){
|
res = true;
|
break;
|
}
|
}
|
return res;
|
}
|
|
protected Map<String, String[]> qtNamesMap = new HashMap<String, String[]>();
|
protected String[] getQTNamesFromMap(String type) throws VCIError{
|
String[] qtNames = new String[0];
|
if(qtNamesMap.containsKey(type)){
|
qtNames = qtNamesMap.get(type);
|
} else {
|
qtNames = getTypeQTNames(type);
|
qtNamesMap.put(type, qtNames);
|
}
|
return qtNames;
|
}
|
/**
|
* 业务类型下全部的表单名缓存Map
|
* key:业务类型名
|
* value:Map
|
* key: 表单类型(1:表单、0:表格)
|
* value: 表单名称的一维数组
|
*/
|
protected Map<String, Map<Short, String[]>> typePortalVINames = new HashMap<String, Map<Short,String[]>>();
|
/**
|
* 从Dialog组件页面缓存中取出业务类型下指定表单类型的表单名
|
* @param viType 表单类型
|
* @param type 业务类型
|
* @return
|
* @throws VCIError
|
*/
|
private String[] getTypePortalVINamesFromMap(PortalVIType viType, String type) throws VCIError{
|
if(typePortalVINames.containsKey(type)){
|
if(typePortalVINames.get(type).containsKey(viType.getIntVal())){
|
return typePortalVINames.get(type).get(viType.getIntVal());
|
} else {
|
String[] viNames = getTypePortalVINames(viType, type);
|
Map<Short, String[]> map = typePortalVINames.get(type);
|
map.put(viType.getIntVal(), viNames);
|
typePortalVINames.put(type, map);
|
return viNames;
|
}
|
} else {
|
String[] viNames = getTypePortalVINames(viType, type);
|
Map<Short, String[]> map = new HashMap<Short, String[]>();
|
map.put(viType.getIntVal(), viNames);
|
typePortalVINames.put(type, map);
|
return viNames;
|
}
|
}
|
/**
|
* 查出指定业务类型下全部的表单名称
|
* @param viType 表单类型
|
* @param type 业务类型名
|
* @return
|
* @throws VCIError
|
*/
|
protected String[] getTypePortalVINames(PortalVIType viType, String type) throws VCIError{
|
String sql = String.format("" +
|
"select vi.viname from plportalvi vi " +
|
"where vi.vitype='%s' and vi.typename='%s' " +
|
"order by vi.viname ",
|
String.valueOf(viType.getIntVal()),
|
type);
|
List<String> viNameList = new LinkedList<String>();
|
viNameList.add("");
|
String[][] kvss = QTClient.getService().queryBySqlWithoutKey(sql);
|
for(String[] kvs : kvss){
|
viNameList.add(kvs[0]);
|
}
|
String[] viNames = viNameList.toArray(new String[]{});
|
Map<Short, String[]> map = new HashMap<Short, String[]>();
|
map.put(viType.getIntVal(), viNames);
|
return viNameList.toArray(new String[]{});
|
}
|
/**
|
* 返回指定类型下的查询模板名称
|
* @param type
|
* @return
|
* @throws VCIError
|
*/
|
private String[] getTypeQTNames(String type) throws VCIError{
|
String sql = String.format(
|
"select qt.qtname from PL_QTEMPLATE qt where qt.btmname='%s'",
|
type);
|
List<String> qtNameList = new LinkedList<String>();
|
qtNameList.add("");
|
String[][] kvss = QTClient.getService().queryBySqlWithoutKey(sql);
|
for(String[] kvs : kvss){
|
qtNameList.add(kvs[0]);
|
}
|
return qtNameList.toArray(new String[]{});
|
}
|
|
private String[] btmNames = null;
|
protected void loadBtmTypeDataToCombox(VCIJComboBox cbox) throws VCIError{
|
loadBtmTypeDataToCombox(cbox, -1);
|
}
|
protected void loadBtmTypeDataToCombox(VCIJComboBox cbox, int selectedIndex) throws VCIError{
|
if(btmNames == null){
|
String sql = "select bt.name from plbtmtype bt";
|
List<String> list = new LinkedList<String>();
|
list.add("");
|
String[][] kvss = QTClient.getService().queryBySqlWithoutKey(sql);
|
for(String[] kvs : kvss){
|
list.add(kvs[0]);
|
}
|
btmNames = list.toArray(new String[]{});
|
}
|
cbox.setModel(new DefaultComboBoxModel(btmNames));
|
if(btmNames.length > 0 && selectedIndex >= 0 && selectedIndex <= btmNames.length - 1){
|
cbox.setSelectedIndex(selectedIndex);
|
}
|
}
|
|
public UIComptDesignDialog getOwnedUIComptDesignDialog() {
|
return ownedUIComptDesignDialog;
|
}
|
|
public void setOwnedUIComptDesignDialog(
|
UIComptDesignDialog ownedUIComptDesignDialog) {
|
this.ownedUIComptDesignDialog = ownedUIComptDesignDialog;
|
}
|
|
public Map<Integer, BaseActionListener<?>> getTxtRefBtnALMap() {
|
return txtRefBtnALMap;
|
}
|
|
public void setTxtRefBtnALMap(Map<Integer, BaseActionListener<?>> txtRefBtnALMap) {
|
this.txtRefBtnALMap = txtRefBtnALMap;
|
}
|
|
/**
|
* 隐藏\关闭本组件中可能弹出的PopupDialog
|
*/
|
public void hidePopupDialog(){
|
if(getTxtRefBtnALMap() != null){
|
Iterator<Integer> its = getTxtRefBtnALMap().keySet().iterator();
|
while(its.hasNext()){
|
Integer key = its.next();
|
BaseActionListener<?> bal = getTxtRefBtnALMap().get(key);
|
bal.hidePopupDialog();
|
}
|
}
|
}
|
|
/**
|
* 检查BtmType输入是否有效
|
* @param lbl
|
* @param txtBtmName
|
* @return
|
*/
|
protected boolean checkBtmTypeTxtIsOk(VCIJLabel lbl, JTextComponent txtBtmName){
|
boolean res = false;
|
if(lbl == null) return true;
|
if(txtBtmName == null) return true;
|
if(!checkRequiredIsOk(lbl, txtBtmName)){
|
res = false;
|
} else if(!checkBtmNameIsExist(lbl, txtBtmName)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查LinkType输入是否有效
|
* @param lbl
|
* @param txtLinkTypeName
|
* @return
|
*/
|
protected boolean checkLinkTypeTxtIsOk(VCIJLabel lbl, JTextComponent txtLinkTypeName){
|
boolean res = false;
|
if(lbl == null) return true;
|
if(txtLinkTypeName == null) return true;
|
if(!checkRequiredIsOk(lbl, txtLinkTypeName)){
|
res = false;
|
} else if(!checkLinkTypeIsExist(lbl, txtLinkTypeName)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
/**
|
* 检查表单输入是否有效
|
* @param lbl
|
* @param txtVIName
|
* @param btmLinkType
|
* @return
|
*/
|
protected boolean checkPortalVITxtIsOk(VCIJLabel lbl, JTextComponent txtVIName, JTextComponent btmLinkType){
|
boolean res = false;
|
if(lbl == null) return true;
|
if(txtVIName == null) return true;
|
if(!checkRequiredIsOk(lbl, txtVIName)){
|
res = false;
|
} else if(!checkPortalVIIsExist(lbl, txtVIName, btmLinkType)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
|
/**
|
* 检查表单输入是否有效
|
* @param lbl
|
* @param txtVIName
|
* @param btmLinkType
|
* @return
|
*/
|
protected boolean checkUILayoutTxtIsOk(VCIJLabel lbl, JTextComponent txtUIName, JTextComponent btmLinkType){
|
boolean res = false;
|
if(lbl == null) return true;
|
if(txtUIName == null) return true;
|
if(!checkRequiredIsOk(lbl, txtUIName)){
|
res = false;
|
} else if(!checkUILayoutIsExist(lbl, txtUIName, btmLinkType)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查查询模板输入是否有效
|
* @param lbl
|
* @param txtQTName
|
* @param btmLinkType
|
* @return
|
*/
|
protected boolean checkQTNameTxtIsOk(VCIJLabel lbl, JTextComponent txtQTName, JTextComponent btmLinkType){
|
boolean res = false;
|
if(lbl == null) return true;
|
if(txtQTName == null) return true;
|
if(!checkRequiredIsOk(lbl, txtQTName)){
|
res = false;
|
} else if(!"".equals(txtQTName.getText()) && !checkQTIsExist(lbl, txtQTName, btmLinkType)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
protected boolean checkRequiredIsOk(VCIJLabel lbl, JTextComponent txt){
|
boolean res = false;
|
String text = txt.getText().trim();
|
boolean isRequired = false;
|
if(txt instanceof VCIJTextField){
|
isRequired = ((VCIJTextField)txt).isRequired();
|
} else if(txt instanceof VCIJTextArea){
|
isRequired = ((VCIJTextArea)txt).isRequired();
|
}
|
if("".equals(text) && isRequired){
|
txt.requestFocus();
|
VCIJOptionPane.showMessage(getOwnedUIComptDesignDialog(), lbl.getText() + " 不能为空!");
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
private boolean checkBtmNameIsExist(VCIJLabel lbl, JTextComponent txt){
|
boolean res = false;
|
String sql = "select count(1) count_ from plbtmtype bt where bt.name='" + txt.getText().trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
txt.requestFocus();
|
VCIJOptionPane.showMessage(getOwnedUIComptDesignDialog(),
|
String.format("%s %s 无效!", lbl.getText(), txt.getText()));
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
private boolean checkLinkTypeIsExist(VCIJLabel lbl, JTextComponent txt){
|
boolean res = false;
|
String sql = "select count(1) count_ from pllinktype lt " +
|
"where lt.name ='" + txt.getText().trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
txt.requestFocus();
|
VCIJOptionPane.showMessage(getOwnedUIComptDesignDialog(),
|
String.format("%s %s 无效!", lbl.getText(), txt.getText()));
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
|
private boolean checkPortalVIIsExist(VCIJLabel lbl, JTextComponent txtVIName, JTextComponent txtType){
|
boolean res = false;
|
String sql = "select count(1) count_ from plportalvi vi " +
|
"where vi.typename='" + txtType.getText().trim() + "' " +
|
"and vi.viname='" + txtVIName.getText().trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
txtVIName.requestFocus();
|
VCIJOptionPane.showMessage(getOwnedUIComptDesignDialog(),
|
String.format("%s %s 无效!", lbl.getText(), txtVIName.getText()));
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
private boolean checkUILayoutIsExist(VCIJLabel lbl, JTextComponent txtUIName, JTextComponent txtType){
|
boolean res = false;
|
String sql = "select count(1) count_ from PLUILAYOUT ui " +
|
"where ui.PLRELATEDTYPE='" + txtType.getText().trim() + "' " +
|
"and ui.plcode='" + txtUIName.getText().trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
txtUIName.requestFocus();
|
VCIJOptionPane.showMessage(getOwnedUIComptDesignDialog(),
|
String.format("%s %s 无效!", lbl.getText(), txtUIName.getText()));
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
|
private boolean checkQTIsExist(VCIJLabel lbl, JTextComponent txtQTName, JTextComponent txtType){
|
boolean res = false;
|
String sql = "select count(1) count_ from PL_QTEMPLATE qt " +
|
"where qt.btmname ='" + txtType.getText().trim() + "' " +
|
"and qt.qtname='" + txtQTName.getText().trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
txtQTName.requestFocus();
|
VCIJOptionPane.showMessage(getOwnedUIComptDesignDialog(),
|
String.format("%s %s 无效!", lbl.getText(), txtQTName.getText()));
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
private boolean checkCountNotEqualZero(String sql){
|
boolean res = false;
|
try{
|
String[][] kvss = QTClient.getService().queryBySqlWithoutKey(sql);
|
res = Integer.valueOf(kvss[0][0]) > 0;
|
}catch(Exception ex){
|
ex.printStackTrace();
|
}
|
return res;
|
}
|
}
|