/*
* PanelProfCheckups.java
*
* Created on 24 Апрель 2008 г., 18:51
*/
package clips.doctor.profcheckup.dialogs;
import clips.delegate.job.DangerExamChunk;
import clips.delegate.contract.ContractLocal;
import clips.delegate.contract.PolisData;
import clips.delegate.directory.complex.DirectoryDangerItem;
import clips.delegate.doctor.profchekup.ProfcheckupItemLocal;
import clips.delegate.doctor.profchekup.ProfcheckupSearchLocal;
import cli_fmw.main.ClipsException;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import java.util.ArrayList;
import cli_fmw.utils.table_config_states.StateSaver;
import cli_fmw.utils.table_config_states.TableState;
import clips.delegate.directory.ro.DirectoryCollaboratorItem;
import clips.delegate.doctor.profchekup.SearchResult;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
/**
* @author petr
*/
public class DialogClientChoose extends ModalDialog implements TableModelListener {
// private DirectoryPacketTemplateItem servicePacket;//пакет услуг (если быть точным - шаблон пакета)
/**список контмемберов из договора id - data*/
private ContractLocal contractLocal;//договор
private Frame frame;//фрейм парента
private ArrayList<ProfcheckupItemLocal> itemList;
private HashMap<DirectoryDangerItem, Boolean> dangerMap;
private DirectoryCollaboratorItem collaborator;
private SearchResult result;
public DialogClientChoose(Frame parent, DirectoryCollaboratorItem collaborator, ContractLocal contractLocal, ArrayList<ProfcheckupItemLocal> profcheckupItemList) throws ClipsException {
this(parent, collaborator, contractLocal, profcheckupItemList, null);
}
/**
*
* @param parent фрейм парента
* @param collabrator
* @param contractLocal
* @param itemList
* @throws cli_fmw.main.ClipsException
*/
public DialogClientChoose(Frame parent,
DirectoryCollaboratorItem collabrator,
ContractLocal contractLocal,
ArrayList<ProfcheckupItemLocal> itemList,
SearchResult result) throws ClipsException{
super(parent, "Выбор сотрудников, направляемых на профосмотр", null);
this.frame = parent;
initComponents();
//диалог посередине, занимает 0,64 от плошади экрана
Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
this.setBounds(new Rectangle((int) (0.6 * scrSize.width), (int) (0.6 *
scrSize.height)));
Rectangle dlgSize = this.getBounds();
this.setLocation((scrSize.width - dlgSize.width) / 2, (scrSize.height -
dlgSize.height) / 2);
this.contractLocal = contractLocal;
this.collaborator = collabrator;
this.itemList = itemList;//создаём кусок профчекапа
if (result != null){
this.result = result;
}else{
ProfcheckupSearchLocal searchLocal = new ProfcheckupSearchLocal(getAuditManager());
this.result = searchLocal.search(contractLocal.getEnterprise());
}
initDangerList();
resizeColumn();
StateSaver.attachTo(this);
}
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jPanel5 = new javax.swing.JPanel();
jSplitPane1 = new javax.swing.JSplitPane();
jPanel3 = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
jPanel6 = new javax.swing.JPanel();
btOK = new javax.swing.JButton();
btCancel = new javax.swing.JButton();
jPanel7 = new javax.swing.JPanel();
btInvertSelection = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
tblClientsChoose = new cli_fmw.utils.sorted_table.SortedTable();
jPanel4 = new javax.swing.JPanel();
pnlFindClients = new javax.swing.JPanel();
btFind = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
chbAll = new javax.swing.JCheckBox();
jScrollPane2 = new javax.swing.JScrollPane();
tblDangers = new cli_fmw.utils.sorted_table.SortedTable();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setModal(true);
jPanel5.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
jPanel5.setLayout(new java.awt.BorderLayout());
jPanel3.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 5, 0));
jPanel3.setLayout(new java.awt.BorderLayout());
jPanel1.setLayout(new java.awt.BorderLayout());
btOK.setText("Принять");
btOK.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btOKActionPerformed(evt);
}
});
jPanel6.add(btOK);
btCancel.setText("Отмена");
btCancel.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btCancelActionPerformed(evt);
}
});
jPanel6.add(btCancel);
jPanel1.add(jPanel6, java.awt.BorderLayout.EAST);
btInvertSelection.setText("Обратить выделение");
btInvertSelection.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btInvertSelectionActionPerformed(evt);
}
});
jPanel7.add(btInvertSelection);
jPanel1.add(jPanel7, java.awt.BorderLayout.WEST);
jPanel3.add(jPanel1, java.awt.BorderLayout.PAGE_END);
tblClientsChoose.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
}
));
jScrollPane1.setViewportView(tblClientsChoose);
jPanel3.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jSplitPane1.setRightComponent(jPanel3);
jPanel4.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 0, 5, 0));
jPanel4.setLayout(new java.awt.BorderLayout());
pnlFindClients.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 5, 0, 5));
btFind.setText("Применить");
btFind.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btFindActionPerformed(evt);
}
});
pnlFindClients.add(btFind);
jPanel4.add(pnlFindClients, java.awt.BorderLayout.PAGE_END);
jPanel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1));
jPanel2.setLayout(new java.awt.BorderLayout());
chbAll.setText("Все");
chbAll.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
chbAllActionPerformed(evt);
}
});
jPanel2.add(chbAll, java.awt.BorderLayout.CENTER);
jPanel4.add(jPanel2, java.awt.BorderLayout.NORTH);
tblDangers.setToolTipText("Вредные факторы");
tblDangers.getTableHeader().setResizingAllowed(false);
tblDangers.getTableHeader().setReorderingAllowed(false);
tblDangers.addComponentListener(new java.awt.event.ComponentAdapter() {
public void componentResized(java.awt.event.ComponentEvent evt) {
tblDangersComponentResized(evt);
}
});
jScrollPane2.setViewportView(tblDangers);
jPanel4.add(jScrollPane2, java.awt.BorderLayout.CENTER);
jSplitPane1.setLeftComponent(jPanel4);
jPanel5.add(jSplitPane1, java.awt.BorderLayout.CENTER);
getContentPane().add(jPanel5, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
/**
* initialisation of danger list
* @throws cli_fmw.main.ClipsException
*/
private void initDangerList() throws ClipsException{
HashSet<DirectoryDangerItem> usableDangers = result.getUsableDangers(contractLocal);
dangerMap = new HashMap<DirectoryDangerItem, Boolean>();
for (DirectoryDangerItem dec : usableDangers) {
dangerMap.put(dec, false);
}
TableModelDangers model = new TableModelDangers(dangerMap);
tblDangers.setModel(model);
tblDangers.getModel().addTableModelListener(this);
}
/**
* вернёт мап: сет опасных факторов по полисам
* @return
*/
private Map<PolisData, Set<DangerExamChunk>> initActivPolis() throws ClipsException{
Map<PolisData, Set<DangerExamChunk>> res = new HashMap<PolisData, Set<DangerExamChunk>>();
HashSet<DirectoryDangerItem> dangers = result.getUsableDangers(contractLocal);
for (DirectoryDangerItem dec : dangers) {
if (dangerMap.get(dec)) {
HashSet<PolisData> usablePolisList = result.getUsablePolisList(contractLocal, dec);
for (PolisData cmd : usablePolisList) {
res.put(cmd, result.getDangersByPolis(cmd));
}
}
}
return res;
}
/**
*
* @return
*/
private Map<Integer, Set<Integer>> initSelectedPolises() throws ClipsException{
Map<Integer, Set<Integer>> res
= new HashMap<Integer, Set<Integer>>();
for (int i = 0; i < itemList.size(); i++) {
ProfcheckupItemLocal pil = itemList.get(i);
if (res.get(pil.getPolisData().getId()) == null){
res.put(pil.getPolisData().getId(), new HashSet<Integer>());
}
res.get(pil.getPolisData().getId()).add(pil.getDanger().getID());
}
return res;
}
private void resetTable() throws ClipsException{
Map<PolisData, Set<DangerExamChunk>> activPolis = initActivPolis();
Map<Integer, Set<Integer>> selectedPolises = initSelectedPolises();
Iterator<PolisData> it = activPolis.keySet().iterator();
while (it.hasNext()) {
PolisData polisData = it.next();
Iterator<DangerExamChunk> it1 = activPolis.get(polisData).iterator();
while (it1.hasNext()) {
DangerExamChunk dec = it1.next();
boolean blocked = selectedPolises.get(polisData.getId()) == null ? false
: selectedPolises.get(polisData.getId()).contains(dec.getDanger().getID());
if (blocked){
it1.remove();
}
}
}
TableModelClientsChoose model = new TableModelClientsChoose(activPolis);
TableCellRenderClientCnoose render = new TableCellRenderClientCnoose();
tblClientsChoose.setModel(model);
tblClientsChoose.setDefaultRenderer(Object.class, render);
}
/**
* Клик на кнопке btFind в диалоговом окне - найти работников предприятия
* @param evt
*/
private void btFindActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btFindActionPerformed
try {
resetTable();
btFind.setEnabled(false);
} catch (ClipsException ex) {
MessageBox.showException(ex);
}
}//GEN-LAST:event_btFindActionPerformed
private void btOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btOKActionPerformed
this.setDlgResult(ModalDialog.DLG_OK);
this.dispose();
}//GEN-LAST:event_btOKActionPerformed
private void btCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btCancelActionPerformed
this.setDlgResult(ModalDialog.DLG_CANCEL);
this.dispose();
}//GEN-LAST:event_btCancelActionPerformed
private void chbAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chbAllActionPerformed
Iterator<DirectoryDangerItem> it = dangerMap.keySet().iterator();
while (it.hasNext()) {
dangerMap.put(it.next(), chbAll.isSelected());
}
tblDangers.updateUI();
btFind.setEnabled(true);
}//GEN-LAST:event_chbAllActionPerformed
private void btInvertSelectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btInvertSelectionActionPerformed
if (tblClientsChoose.getModel() instanceof TableModelClientsChoose){
((TableModelClientsChoose)tblClientsChoose.getModel()).Invert();
}
}//GEN-LAST:event_btInvertSelectionActionPerformed
private void tblDangersComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_tblDangersComponentResized
}//GEN-LAST:event_tblDangersComponentResized
/**
* установка размеров колонок
*/
private void resizeColumn() {
TableState state = new TableState();
state.setPreferredWidth(TableModelClientsChoose.CL_ADDED, 1);
state.setPreferredWidth(TableModelClientsChoose.CL_CLIENT, 7);
state.setPreferredWidth(TableModelClientsChoose.CL_DANGER, 10);
state.setPreferredWidth(TableModelClientsChoose.CL_LAST_EXAM, 4);
StateSaver.setDefaultState(this, tblClientsChoose, state);
state = new TableState();
state.setPreferredWidth(TableModelDangers.CL_SELECT, 1);
state.setPreferredWidth(TableModelDangers.CL_DANGER, 8);
StateSaver.setDefaultState(this, tblDangers, state);
}
/**
* Вернёт выбранных клиентов-
* @return список контмемберов
*/
public Map<PolisData, Set<DirectoryDangerItem>> getSelectedClients() throws ClipsException{
if (tblClientsChoose.getModel() instanceof TableModelClientsChoose){
return ((TableModelClientsChoose) tblClientsChoose.getModel()).getSelectedValues();
}else{
return new HashMap<PolisData, Set<DirectoryDangerItem>>();
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton btCancel;
private javax.swing.JButton btFind;
private javax.swing.JButton btInvertSelection;
private javax.swing.JButton btOK;
private javax.swing.JCheckBox chbAll;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanel7;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JPanel pnlFindClients;
private cli_fmw.utils.sorted_table.SortedTable tblClientsChoose;
private cli_fmw.utils.sorted_table.SortedTable tblDangers;
// End of variables declaration//GEN-END:variables
@Override
public void tableChanged(TableModelEvent e) {
if (e.getColumn() == TableModelDangers.CL_SELECT){
btFind.setEnabled(true);
if (chbAll.isSelected()){
chbAll.setSelected(false);
}
}
}
}