package com.vci.client.workflow.task; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.text.MessageFormat; import java.util.LinkedHashMap; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumnModel; import com.vci.client.LogonApplication; import com.vci.client.framework.rightConfig.object.FunctionObject; import com.vci.client.logon.client.VciFrameTimerTask; import com.vci.client.ui.exception.VCIException; import com.vci.client.ui.image.BundleImage; import com.vci.client.ui.locale.LocaleDisplay; import com.vci.client.ui.swing.VCIOptionPane; import com.vci.client.ui.swing.VCISwingUtil; import com.vci.client.ui.swing.components.VCIJButton; import com.vci.client.ui.swing.components.VCIJCalendarPanel; import com.vci.client.workflow.commom.ClientHelper; import com.vci.client.workflow.delegate.ProcessCustomClientDelegate; import com.vci.client.workflow.editor.user.FowardUserDialog; import com.vci.corba.common.VCIError; import com.vci.corba.workflow.data.FlowTaskInfo; import com.vci.corba.workflow.data.ProcessTaskInfo; public class TodoTaskPanel extends JPanel { /** * 待办任务 */ //查询日期:由 private String DATE_START = LocaleDisplay.getI18nString("rmip.framework.log.startDate", "RMIPFramework", getLocale()); //到 private String TO = LocaleDisplay.getI18nString("rmip.framework.log.to", "RMIPFramework", getLocale()); //查询 private String QUERY = LocaleDisplay.getI18nString("rmip.framework.log.query", "RMIPFramework", getLocale()); private JLabel dateLabelStart = new JLabel(DATE_START); private JLabel dateLabelTo = new JLabel(TO); private JComboBox startDateBox = new JComboBox(); private JComboBox endDateBox = new JComboBox(); private JButton queryBtn = new JButton("查询"); private JButton clearBtn = new JButton("清空"); private JLabel missionJLabel = new JLabel("任务名称:"); private JTextField missionField = new JTextField(); private JLabel applicaJLabel = new JLabel("创建人:"); private JTextField applicaField = new JTextField(); private JLabel applicaDepartJLabel = new JLabel("创建部门:"); private JTextField applicaDeparField = new JTextField(); private static final long serialVersionUID = 1L; private VCIJButton btnRefresh = VCISwingUtil.createVCIJButton("", "刷新", "刷新", "arrow_refresh.png"); private JButton btnNewButton = VCISwingUtil.createVCIJButton("", getI18nString("btnView"), getI18nString("btnView"), "edit.png"); private JPanel todoTasksPanel; private JTable toDoTasksTable; private TodoTaskTableModel todoTaskTableModel; private VCIJCalendarPanel txtStartTime = new VCIJCalendarPanel(); private VCIJCalendarPanel txtEndTime = new VCIJCalendarPanel(); //added by ligang 分页功能的实现 private JButton firstPageButton = null; private JButton prePageButton = null; private JButton nextPageButton = null; private JButton lastPageButton = null; private JTextField textField = null; private JButton zhidingPageButton = null; int pagesize = getPageSize();//每页记录数 int pageCount = 0;//总页数 int rowCount = 0;//总记录数 int curPage = 1; int TABLE_PAGE = 1;//当前页数 private String[] showDataIds = {};//重点显示的数据表示 private JLabel laber_pageinfo = new JLabel(getI18nString("pageInfo"));//当前页/总页数 private static TodoTaskPanel todoTaskPanel; LinkedHashMap dataMap = new LinkedHashMap();//key-value:taskId-rowIndex //转发 private JButton btnForward; /** * 任务箱参数 */ private String taskType =""; private String querySQL = ""; FunctionObject funcObject = new FunctionObject(); public static TodoTaskPanel getInstance(FunctionObject funcObject,String taskType) { if (todoTaskPanel == null) { todoTaskPanel = new TodoTaskPanel(taskType); } return todoTaskPanel; } private TodoTaskPanel(String taskType) { this.taskType = taskType; initUI(); initializeData(); //2012.04.26 ligang 去除任务箱权限校验,所有人都有操作权限 // checkPermission() ; } /** 权限检查的模块标识 **/ private String checkPermissionModuleId = "com.vci.rmip.workflow.client.task.TodoTaskPanel"; @SuppressWarnings("unchecked") private void checkPermission() { } private void initUI() { setLayout(new BorderLayout()); JPanel topPanel = new JPanel(new BorderLayout()); JPanel palNorthBtn = new JPanel(new FlowLayout(FlowLayout.CENTER, 5, 5)); btnNewButton = new JButton(getI18nString("btnView")); btnNewButton.setIcon(VCISwingUtil.createImageIcon("edit.png")); btnForward = new JButton("转发"); palNorthBtn.add(btnNewButton); palNorthBtn.add(btnRefresh); btnRefresh.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { initializeData(); } }); } }); JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,5,5)); searchPanel.add(missionJLabel); missionField.setPreferredSize(new Dimension(100,25)); searchPanel.add(missionField); searchPanel.add(applicaJLabel); applicaField.setPreferredSize(new Dimension(100,25)); searchPanel.add(applicaField); searchPanel.add(applicaDepartJLabel); applicaDeparField.setPreferredSize(new Dimension(100,25)); searchPanel.add(applicaDeparField); JPanel dataPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,5,5)); dataPanel.add(dateLabelStart); dataPanel.add(txtStartTime); dataPanel.add(dateLabelTo); dataPanel.add(txtEndTime); queryBtn.setIcon(VCISwingUtil.createImageIcon("search.png")); clearBtn.setIcon(VCISwingUtil.createImageIcon("clear.gif")); dataPanel.add(queryBtn); queryBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { queryBtn_ActionPerformed(); } }); } }); dataPanel.add(clearBtn); clearBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { clearBtn_ActionPerformed(); } }); } }); topPanel.add(searchPanel,BorderLayout.NORTH); topPanel.add(dataPanel,BorderLayout.CENTER); add(topPanel, BorderLayout.NORTH); todoTaskTableModel = new TodoTaskTableModel(); toDoTasksTable = new JTable(); toDoTasksTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN); toDoTasksTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); toDoTasksTable.setModel(todoTaskTableModel); toDoTasksTable.setRowHeight(25); toDoTasksTable.setShowGrid(true); toDoTasksTable.getTableHeader().setFont(VCISwingUtil.FONT_DEFAULT); toDoTasksTable.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e) { if(e.getClickCount()==2){ viewFlowInfo(); } } }); TableColumnModel todoModel = toDoTasksTable.getColumnModel(); DefaultTableCellRenderer firstColumnRender = new DefaultTableCellRenderer(); firstColumnRender.setHorizontalAlignment(JLabel.CENTER); todoModel.getColumn(0).setCellRenderer(firstColumnRender); todoModel.getColumn(0).setPreferredWidth(48); todoModel.getColumn(0).setMaxWidth(48); todoModel.getColumn(2).setPreferredWidth(150); todoModel.getColumn(4).setWidth(150); JScrollPane jspTable = new JScrollPane(); jspTable.getViewport().add(toDoTasksTable); add(jspTable, BorderLayout.CENTER); JPanel palPageBtns = new JPanel(); JPanel southPanel = new JPanel(new BorderLayout()); southPanel.add(palNorthBtn,BorderLayout.NORTH); southPanel.add(palPageBtns,BorderLayout.CENTER); add(southPanel, BorderLayout.SOUTH); initPageerButtons(palPageBtns); addListener(); } private void addListener() { btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { viewFlowInfo(); } }); btnForward.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { foward(); } }); } public void initData() { FlowTaskInfo[] dataObjs; try { dataObjs = new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()).getTodoTaskByUserId(LogonApplication.getUserObject().getUserName(),curPage,pagesize,taskType,querySQL); todoTaskTableModel.setData(dataObjs); int index = 0; for(FlowTaskInfo info : dataObjs){ String id = info.executionId; if(info.executionId.lastIndexOf(".") > 0){ id = info.executionId.substring(info.executionId.lastIndexOf(".") + 1); } dataMap.put(id,index++); } setDataMap(dataMap); } catch (VCIError e) { e.printStackTrace(); } updateUI(); } /** * *

设置table特殊数据行的显示样式:

* * @time 2013-4-10 */ public void setTableToSelect(){ if(dataMap.size()>0){ final Integer[] rowIndexArray = getAllRow(dataMap); int cols = toDoTasksTable.getColumnModel().getColumnCount(); for(int i = 0; i < cols; i++){ toDoTasksTable.getColumnModel().getColumn(i).setCellRenderer(new DefaultTableCellRenderer(){ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){ Component compt = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); for(Integer i : rowIndexArray){ if(i == row){ if(!isSelected){ compt.setForeground(Color.RED); } else{ compt.setForeground(Color.WHITE); } compt.setFont(new Font("宋体", Font.BOLD, 12)); } else { if(!isSelected){ compt.setForeground(Color.BLACK); } else{ compt.setForeground(Color.WHITE); } } } return compt; } }); } updateUI(); } } /** * *

得到需要被特殊显示的数据行rowIndex, 并把这些rowIndex按照从小到大的顺序存放在数组中返回:

* * @time 2013-4-10 * @param map * @return */ private Integer[] getAllRow(LinkedHashMap map){ String[] dataId = getShowDataIds(); Integer[] rowIndex = new Integer[dataId.length]; int index = 0; for(String id: dataId){ rowIndex[index++] = map.get(id); } int temp,j,flag=1; for(int i = 0 ;i 1){ curPage--; } initData(); updateBtnStatus(); } }); nextPageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(curPage < getPageCount()){ curPage++; } initData(); updateBtnStatus(); } }); lastPageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { curPage = getPageCount(); initData(); updateBtnStatus(); } }); zhidingPageButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int i = getTextField(); if(i != 0 ){ curPage = i; initData(); updateBtnStatus(); } } }); pal.add(Box.createHorizontalStrut(30)); pal.add(laber_pageinfo); } private int getPageSize() { if(this.pagesize == 0){ String pageSize = "150"; // try { // pageSize = new UserRightClientDelegate().getConfigValue("log.query.pagesize"); // } catch (VCIError e) { // e.printStackTrace(); // } int pageSizeGet = Integer.parseInt(pageSize); this.pagesize = pageSizeGet; } return pagesize; } private int getRowCount(){ try { return new ProcessCustomClientDelegate(LogonApplication.getUserEntityObject()).queryTodoTaskCount(LogonApplication.getUserObject().getUserName(),taskType); } catch (VCIException e) { e.printStackTrace(); return 1; } } private int getPageCount(){ int dataRowCount = getRowCount(); int pageSize = getPageSize(); int pageCount = dataRowCount / pageSize; if (dataRowCount % pageSize > 0) { pageCount++; } return pageCount; } private void updateBtnStatus() { int rowCount = this.getRowCount(); int pageSize = getPageSize(); int pageCount = rowCount / pageSize; if (rowCount % pageSize > 0) { pageCount++; } if (pageCount <= 1) { firstPageButton.setEnabled(false); prePageButton.setEnabled(false); lastPageButton.setEnabled(false); nextPageButton.setEnabled(false); } else { if (curPage == 1) { firstPageButton.setEnabled(false); prePageButton.setEnabled(false); lastPageButton.setEnabled(true); nextPageButton.setEnabled(true); } else if (curPage >= pageCount) { firstPageButton.setEnabled(true); prePageButton.setEnabled(true); lastPageButton.setEnabled(false); nextPageButton.setEnabled(false); } else { firstPageButton.setEnabled(true); prePageButton.setEnabled(true); lastPageButton.setEnabled(true); nextPageButton.setEnabled(true); } } laber_pageinfo.setText(MessageFormat.format(getI18nString("pageInfo"), rowCount, pageCount, curPage)); } private void queryBtn_ActionPerformed(){ getDateTimeFilterString(); initData(); updateBtnStatus(); } private void clearBtn_ActionPerformed(){ txtStartTime.setDateString(); txtEndTime.setDateString(); missionField.setText(""); applicaField.setText(""); applicaDeparField.setText(""); querySQL = ""; } /** * 返回日期范围的过滤条件字符串 *

Description:

* * @author xchao * @time 2012-11-9 * @return */ public String getDateTimeFilterString(){ String filterString = ""; String startTime = txtStartTime.getDateString();//开始时间 String endTime = txtEndTime.getDateString();//结束时间 String mission = missionField.getText();//任务名称 String application = applicaField.getText();//创建人 String applicaDepar = applicaDeparField.getText();//创建人部门 if(startTime == null || "".equals(startTime.trim())){ startTime = "1900-01-01 00:00:00"; } else { startTime = startTime.substring(0, 10) + " 00:00:00"; } if(endTime == null || "".equals(endTime.trim())){ endTime = "9900-12-30 23:59:59"; } else { endTime = endTime.substring(0, 10) + " 23:59:59"; } filterString = " AND " + "(" + "createTime >= TO_DATE('" + startTime + "','yyyy-MM-dd HH24:mi:ss')" + " AND " + "createTime <= TO_DATE('" + endTime + "','yyyy-MM-dd HH24:mi:ss')"; filterString += ")" + ""; if(!"".equals(mission)){ filterString += " AND PLDESC = '" + mission +"'"; } if (!"".equals(application)){ filterString += " AND plcreator like '%" + application +"%'"; } if (!"".equals(applicaDepar)){ filterString += "#"+applicaDepar; } querySQL = filterString; return querySQL; } public String[] getShowDataIds() { return showDataIds; } public void setShowDataIds(String[] showDataIds) { this.showDataIds = showDataIds; } public LinkedHashMap getDataMap() { return dataMap; } public void setDataMap(LinkedHashMap dataMap) { this.dataMap = dataMap; } private String getI18nString(String spCode) { return ClientHelper.getI18nStringForWorkflow(this.getClass().getName() + "." + spCode, this.getLocale()); } private int getTextField(){ int i = 0;//输入的页数 int count = getPageCount();//总页数 if(textField.getText() == ""){ VCIOptionPane.showMessage(this, "请输入要跳转的页数"); return i; }else { String field = textField.getText(); if(!field.matches("^[0-9_]+$")) { VCIOptionPane.showMessage(this, "请输入数字"); return i; }else if(Integer.parseInt(field)>count){ VCIOptionPane.showMessage(this, "输入的页数大于总页数"); return i; }else { i = Integer.parseInt(field); return i; } } } public String getTaskType() { return taskType; } public void setTaskType(String taskType) { this.taskType = taskType; } public String getQuerySQL() { return querySQL; } public void setQuerySQL(String querySQL) { this.querySQL = querySQL; } }