package com.vci.client.portal.UI;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
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.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import com.vci.client.LogonApplication;
import com.vci.client.portal.utility.UITools;
import com.vci.client.ui.swing.VCIOptionPane;
import com.vci.client.ui.swing.components.VCIJDialog;
import com.vci.client.ui.swing.components.VCIJIntegerTextField;
import com.vci.client.ui.swing.components.VCIJOptionPane;
import com.vci.client.ui.swing.components.VCIJTextArea;
import com.vci.client.ui.swing.components.VCIJTextField;
import com.vci.common.utility.ObjectUtility;
import com.vci.corba.common.VCIError;
import com.vci.corba.portal.data.PLUILayout;
import com.vci.corba.portal.data.PLTabPage;
/**
* 页签定义窗口
*
*/
public class TabDialog extends VCIJDialog {
/**
*
*/
private static final long serialVersionUID = -3571272652368874388L;
private final JPanel contentPanel = new JPanel();
private JButton okButton;
private JButton cancelButton;
private JLabel label;
private VCIJTextField plcode;
private JLabel label_1;
private VCIJTextField plname;
private JLabel label_2;
private VCIJIntegerTextField plseq;
private JCheckBox plisopen;
private JLabel label_3;
private JScrollPane scrollPane;
private VCIJTextArea pldesc;
private JLabel lblParser;
private JTextArea txtUIParser;
private JLabel lblUIParserNote;
private final String lblUIParserNoteContent = "" +
"" +
"
示例:java_cs:xxx;java_bs:xxx;net_cs:xxx;net_bs:xxx;mobile_cs:xx;mobile_bs:xxx;
" +
"1、用英文半角分号;分隔各组值;(这里结尾的是中文字符的分号)
" +
"2、每组用英文半角冒号:分隔单一扩展属性名称及属性值;
" +
"3、其中的xxx是各种解析类的完整类型名称(完全限定名);
" +
"4、输入时,不要敲回车换行;
" +
"
" +
"";
private JLabel lblExtAttrs;
private VCIJTextArea txtExtAtt;
private JLabel lblExtAttrNote;
private final String lblExtAttrNoteContent = "" +
"" +
"示例:ext1:xx;ext2;ext3:xx;ext4:xxx;extn:xxx;
" +
"1、用英文半角分号;分隔各组值;
" +
"2、每组用英文半角冒号:分隔单一扩展属性名称及属性值;
" +
"3、可以定义任意组,但总字符长度不得超过4000;
" +
"4、输入时,不要敲回车换行;
" +
"
" +
"";
private final PLUILayout plpagelayoutdefination;
private final boolean editflag;
private final PLTabPage editPLTabPage;
private JLabel lblNewLabel;
private JScrollPane scrollPane_1;
private VCIJTextArea plOpenExpression;
private JLabel label_4;
private JScrollPane scrollPane_2;
private VCIJTextArea plLabel;
private final short areaType ;
public TabDialog(PLUILayout plpagelayoutdefination,boolean editflag,PLTabPage ptp, short areaType) {
super(LogonApplication.frame,true);
setTitle("页签窗口");
this.plpagelayoutdefination = plpagelayoutdefination;
this.editflag = editflag;
this.editPLTabPage = ptp;
this.areaType = areaType;
setBounds(100, 100, 750, 600);
init();
actionListener();
initData();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
private void init() {
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
GridBagLayout gbl_contentPanel = new GridBagLayout();
gbl_contentPanel.columnWidths = new int[]{0, 92, 0, 0, 0, 0};
gbl_contentPanel.rowHeights = new int[]{0, 0, 0, 0, 0, 0};
gbl_contentPanel.columnWeights = new double[]{0.0, 0.0, 1.0, 0.0, 1.0, Double.MIN_VALUE};
gbl_contentPanel.rowWeights = new double[]{0.0, 0.0, 1.0, 1.0, 1.0, Double.MIN_VALUE};
contentPanel.setLayout(gbl_contentPanel);
{
label = new JLabel("页面编码");
GridBagConstraints gbc_label = new GridBagConstraints();
gbc_label.insets = new Insets(0, 0, 5, 5);
gbc_label.gridx = 1;
gbc_label.gridy = 0;
contentPanel.add(label, gbc_label);
}
{
plcode = new VCIJTextField(true);
GridBagConstraints gbc_textField = new GridBagConstraints();
gbc_textField.insets = new Insets(0, 0, 5, 5);
gbc_textField.fill = GridBagConstraints.HORIZONTAL;
gbc_textField.gridx = 2;
gbc_textField.gridy = 0;
contentPanel.add(plcode, gbc_textField);
plcode.setColumns(10);
}
{
label_1 = new JLabel("名称");
GridBagConstraints gbc_label_1 = new GridBagConstraints();
gbc_label_1.anchor = GridBagConstraints.EAST;
gbc_label_1.insets = new Insets(0, 0, 5, 5);
gbc_label_1.gridx = 3;
gbc_label_1.gridy = 0;
contentPanel.add(label_1, gbc_label_1);
}
{
plname = new VCIJTextField(true);
GridBagConstraints gbc_textField_1 = new GridBagConstraints();
gbc_textField_1.insets = new Insets(0, 0, 5, 0);
gbc_textField_1.fill = GridBagConstraints.HORIZONTAL;
gbc_textField_1.gridx = 4;
gbc_textField_1.gridy = 0;
contentPanel.add(plname, gbc_textField_1);
plname.setColumns(10);
}
{
label_2 = new JLabel("序号");
GridBagConstraints gbc_label_2 = new GridBagConstraints();
gbc_label_2.insets = new Insets(0, 0, 5, 5);
gbc_label_2.gridx = 1;
gbc_label_2.gridy = 1;
contentPanel.add(label_2, gbc_label_2);
}
{
plseq = new VCIJIntegerTextField("");
plseq.setRequired(true);
GridBagConstraints gbc_textField_2 = new GridBagConstraints();
gbc_textField_2.insets = new Insets(0, 0, 5, 5);
gbc_textField_2.fill = GridBagConstraints.HORIZONTAL;
gbc_textField_2.gridx = 2;
gbc_textField_2.gridy = 1;
contentPanel.add(plseq, gbc_textField_2);
plseq.setColumns(10);
}
{
plisopen = new JCheckBox("启用");
GridBagConstraints gbc_checkBox = new GridBagConstraints();
gbc_checkBox.insets = new Insets(0, 0, 5, 0);
gbc_checkBox.gridx = 4;
gbc_checkBox.gridy = 1;
contentPanel.add(plisopen, gbc_checkBox);
}
{
lblNewLabel = new JLabel("显示表达式");
GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
gbc_lblNewLabel.gridx = 1;
gbc_lblNewLabel.gridy = 2;
contentPanel.add(lblNewLabel, gbc_lblNewLabel);
}
{
scrollPane_1 = new JScrollPane();
GridBagConstraints gbc_scrollPane_1 = new GridBagConstraints();
gbc_scrollPane_1.gridwidth = 3;
gbc_scrollPane_1.insets = new Insets(0, 0, 5, 0);
gbc_scrollPane_1.fill = GridBagConstraints.BOTH;
gbc_scrollPane_1.gridx = 2;
gbc_scrollPane_1.gridy = 2;
contentPanel.add(scrollPane_1, gbc_scrollPane_1);
{
plOpenExpression = new VCIJTextArea();
plOpenExpression.setRows(3);
plOpenExpression.setWrapStyleWord(true);
plOpenExpression.setLineWrap(true);
scrollPane_1.setViewportView(plOpenExpression);
}
}
{
label_4 = new JLabel("国际化标准");
GridBagConstraints gbc_label_4 = new GridBagConstraints();
gbc_label_4.insets = new Insets(0, 0, 5, 5);
gbc_label_4.gridx = 1;
gbc_label_4.gridy = 3;
contentPanel.add(label_4, gbc_label_4);
}
{
scrollPane_2 = new JScrollPane();
GridBagConstraints gbc_scrollPane_2 = new GridBagConstraints();
gbc_scrollPane_2.gridwidth = 3;
gbc_scrollPane_2.insets = new Insets(0, 0, 5, 0);
gbc_scrollPane_2.fill = GridBagConstraints.BOTH;
gbc_scrollPane_2.gridx = 2;
gbc_scrollPane_2.gridy = 3;
contentPanel.add(scrollPane_2, gbc_scrollPane_2);
{
plLabel = new VCIJTextArea();
plLabel.setRows(3);
plLabel.setWrapStyleWord(true);
plLabel.setLineWrap(true);
scrollPane_2.setViewportView(plLabel);
}
}
{
label_3 = new JLabel("描述");
GridBagConstraints gbc_label_3 = new GridBagConstraints();
gbc_label_3.insets = new Insets(0, 0, 0, 5);
gbc_label_3.gridx = 1;
gbc_label_3.gridy = 4;
contentPanel.add(label_3, gbc_label_3);
}
{
scrollPane = new JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.gridwidth = 3;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 2;
gbc_scrollPane.gridy = 4;
contentPanel.add(scrollPane, gbc_scrollPane);
{
pldesc = new VCIJTextArea();
pldesc.setRows(3);
pldesc.setWrapStyleWord(true);
pldesc.setLineWrap(true);
scrollPane.setViewportView(pldesc);
}
}
{
lblParser = new JLabel("UI解析类");
GridBagConstraints gbc_label_3 = new GridBagConstraints();
gbc_label_3.insets = new Insets(0, 0, 0, 5);
gbc_label_3.gridx = 1;
gbc_label_3.gridy = 5;
contentPanel.add(lblParser, gbc_label_3);
}
{
scrollPane = new JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.gridwidth = 3;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 2;
gbc_scrollPane.gridy = 5;
contentPanel.add(scrollPane, gbc_scrollPane);
{
txtUIParser = new JTextArea();
txtUIParser.setRows(3);
txtUIParser.setWrapStyleWord(true);
txtUIParser.setLineWrap(true);
scrollPane.setViewportView(txtUIParser);
}
}
{
lblUIParserNote = new JLabel(lblUIParserNoteContent);
GridBagConstraints gbc_label_3 = new GridBagConstraints();
gbc_label_3.insets = new Insets(0, 0, 0, 5);
gbc_label_3.fill = GridBagConstraints.HORIZONTAL;
gbc_label_3.gridwidth = 3;
gbc_label_3.gridx = 2;
gbc_label_3.gridy = 6;
contentPanel.add(lblUIParserNote, gbc_label_3);
}
{
lblExtAttrs = new JLabel("扩展属性");
GridBagConstraints gbc_label_3 = new GridBagConstraints();
gbc_label_3.insets = new Insets(0, 0, 0, 5);
gbc_label_3.gridx = 1;
gbc_label_3.gridy = 7;
contentPanel.add(lblExtAttrs, gbc_label_3);
}
{
scrollPane = new JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.gridwidth = 3;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 2;
gbc_scrollPane.gridy = 7;
contentPanel.add(scrollPane, gbc_scrollPane);
{
txtExtAtt = new VCIJTextArea();
txtExtAtt.setRows(3);
txtExtAtt.setWrapStyleWord(true);
txtExtAtt.setLineWrap(true);
scrollPane.setViewportView(txtExtAtt);
}
}
{
lblExtAttrNote = new JLabel(lblExtAttrNoteContent);
GridBagConstraints gbc_label_3 = new GridBagConstraints();
gbc_label_3.insets = new Insets(0, 0, 0, 5);
gbc_label_3.fill = GridBagConstraints.HORIZONTAL;
gbc_label_3.gridwidth = 3;
gbc_label_3.gridx = 2;
gbc_label_3.gridy = 8;
contentPanel.add(lblExtAttrNote, gbc_label_3);
}
{
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
okButton = new JButton("保存");
buttonPane.add(okButton);
}
{
cancelButton = new JButton("关闭");
buttonPane.add(cancelButton);
}
}
}
private void actionListener(){
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
PLTabPage plTabPage = new PLTabPage();
setPlTabPageObj(plTabPage);
plTabPage.plCreateUser = LogonApplication.getUserEntityObject().getUserName();
plTabPage.plModifyUser = LogonApplication.getUserEntityObject().getUserName();
plTabPage.plAreaType = areaType;
if(checkEdit(plTabPage)){
return;
}
save(plTabPage, editflag);
}
private void save(PLTabPage plTabPage, boolean editFlag) {
DialogResult res = DialogResult.CANCEL;
try {
boolean saveFlag = false;
if(editFlag){
saveFlag = UITools.getService().updatePLTabPage(plTabPage);
} else {
saveFlag = UITools.getService().savePLTabPage(plTabPage);
}
if(saveFlag){
res = DialogResult.OK;
VCIOptionPane.showMessage(TabDialog.this, "保存成功!");
} else {
res = DialogResult.CANCEL;
VCIOptionPane.showMessage(TabDialog.this, "保存失败!");
}
close(res);
} catch (VCIError e) {
e.printStackTrace();
VCIOptionPane.showMessage(TabDialog.this, "保存的过程发生错误!\n" + e.getMessage() + "");
}
}
private void close(DialogResult res){
setDialogResult(res);
setVisible(false);
dispose();
}
private void setPlTabPageObj(PLTabPage plTabPage) {
if(editflag){
plTabPage.plOId = editPLTabPage.plOId;
} else {
plTabPage.plOId = ObjectUtility.getNewObjectID36();
}
plTabPage.plCode = plcode.getText().trim();
plTabPage.plName = plname.getText().trim();
if(plisopen.isSelected()){
plTabPage.plIsOpen = 1;
}else{
plTabPage.plIsOpen = 0;
}
plTabPage.plName = plname.getText().trim();
plTabPage.plDesc = pldesc.getText();
plTabPage.plSeq = Short.valueOf(plseq.getText());
plTabPage.plContextOId = plpagelayoutdefination.plOId;
plTabPage.plLabel = plLabel.getText();
plTabPage.plOpenExpression = plOpenExpression.getText();
plTabPage.plUIParser = txtUIParser.getText().trim().replace(" ", "");// 移除空格
plTabPage.plExtAttr = txtExtAtt.getText().trim().replace(" ", "");// 移除空格
}
});
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
private void initData(){
if(editPLTabPage==null){
return;
}
plcode.setText(editPLTabPage.plCode);
plname.setText(editPLTabPage.plName);
plseq.setText(String.valueOf(editPLTabPage.plSeq));
if(editPLTabPage.plIsOpen==1){
plisopen.setSelected(true);
}
plLabel.setText(editPLTabPage.plLabel);
plOpenExpression.setText(editPLTabPage.plOpenExpression);
pldesc.setText(editPLTabPage.plDesc);
txtUIParser.setText(editPLTabPage.plUIParser);
txtExtAtt.setText(editPLTabPage.plExtAttr);
}
private boolean isNumber(String str) {
Pattern pa = Pattern.compile("[0-9]*");
Matcher mt = pa.matcher(str);
if(mt.matches()==false){
return false;
}else{
return true;
}
}
private boolean checkEdit(PLTabPage plTabPage) {
boolean flag = false;
if(plseq.getText().trim()==null||"".equals(plseq.getText().trim())){
VCIOptionPane.showMessage(LogonApplication.frame, "序号不能为空!");
flag =true;
}
else if(!isNumber(plseq.getText().trim())){
VCIOptionPane.showMessage(LogonApplication.frame, "序号只能是数字,请重新填写!");
flag =true;
}
else if(!checkTabPageUIParserIsOk(plTabPage)){
VCIOptionPane.showMessage(LogonApplication.frame, "UI解析类格式不正确,请重新填写!");
flag = true;
}
else if(!checkTabPageExtAttrIsOk(plTabPage)){
//给出提示,对于mpm配置可以允许其保存,具体解析mpm自己控制 by liucq
int confirm = VCIOptionPane.showConfirmDialog(LogonApplication.frame, "扩展属性数据格式不正确\n是否继续保存?", "系统提示", JOptionPane.YES_NO_OPTION);
if(confirm == JOptionPane.NO_OPTION){
flag = true;
}
// VCIOptionPane.showMessage(LogonApplication.frame, "扩展属性数据格式不正确,请重新填写!");
// flag = true;
}
try {
PLTabPage[] tps = UITools.getService().getTabPagesByContextIdAndType(plpagelayoutdefination.plOId, this.areaType);
boolean seqExist = false;
boolean nameExist = false;
boolean codeExist = false;
for (PLTabPage tp : tps) {
if(tp.plSeq == plTabPage.plSeq && !tp.plOId.equals(plTabPage.plOId)){
seqExist = true;
break;
}
if(tp.plName.equalsIgnoreCase(plTabPage.plName) && !tp.plOId.equals(plTabPage.plOId)){
nameExist = true;
break;
}
if(tp.plCode.equalsIgnoreCase(plTabPage.plCode) && !tp.plOId.equals(plTabPage.plOId)){
codeExist = true;
break;
}
}
if(seqExist){
VCIJOptionPane.showMessage(this, "序号重复!");
flag = true;
} else if(nameExist){
VCIJOptionPane.showMessage(this, "名称重复!");
flag = true;
} else if(codeExist){
VCIJOptionPane.showMessage(this, "页面编码重复!");
flag = true;
} else {
flag = false;
}
} catch (VCIError e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return flag;
}
private boolean checkTabPageUIParserIsOk(PLTabPage tabPage){
// 数据格式: java_cs:xxx;java_bs:xxx;net_cs:xxx;net_bs:xxx;mobile_cs:xx;mobile_bs:xxx;
String uiParser = tabPage.plUIParser;
return checkExtValIsOk(uiParser);
}
private boolean checkTabPageExtAttrIsOk(PLTabPage tabPage){
// 数据格式:ext1:xx;ext2;ext3:xx;ext4:xxx;extn:xxx;
String extAttr = tabPage.plExtAttr;
return checkExtValIsOk(extAttr);
}
private boolean checkExtValIsOk(String value){
boolean res = true;
if(value == null || "".equals(value)){
return res;
}
Pattern ptn = Pattern.compile("([\\w\\.\\_\\-\\+]+:[\\w\\.\\_\\-\\+]+(;)?)+");
res = ptn.matcher(value).matches();
return res;
}
}