Package clips.directory.editors.danger

Source Code of clips.directory.editors.danger.PanelDangerService$DirectoryDialogTreeModelImpl

/*
* PanelDangerService.java
*
* Created on 26 Сентябрь 2008 г., 17:32
*/

package clips.directory.editors.danger;

import cli_fmw.delegate.directory.DirectoryItemRO;
import clips.delegate.directory.complex.DangerServiceData;
import clips.delegate.directory.complex.DirectoryDanger;
import clips.delegate.directory.complex.DirectoryDangerItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import clips.delegate.directory.filtered.DirectoryServiceItem;
import cli_fmw.delegate.DelegateLine2;
import clips.directory.dialogs.DirectoryDialogService;
import cli_fmw.directory.dialogs.DirectoryDialogTreeModel;
import cli_fmw.main.ClipsException;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.Selector;
import cli_fmw.utils.SelectorEditableExceptional;
import cli_fmw.utils.table_config_states.StateSaver;
import cli_fmw.utils.table_config_states.TableState;
import com.toedter.components.JSpinField;
import beans.directory.danger.entity.DangerDetails;
import beans.directory.danger.entity.DangerServiceDetails;
import clips.delegate.directory.simple.speciality.DirectorySpeciality;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

/**
*
* @author  petr
*/
public class PanelDangerService extends PageGeneric{

    private DirectoryDanger directoryDanger;
    private DirectoryDangerItem current;
    private SelectorEditableExceptional<DangerServiceData> serviceList;
    private int spnValue;
    private DirectorySpeciality dirSpec;
    private JComboBox cbSpec;

    /** Creates new form PanelDangerService */
    public PanelDangerService(PageContainer container) throws ClipsException {
        super(container);
        initComponents();
        directoryDanger = DirectoryLocator.getDirectory(DirectoryDanger.class);
        dirSpec =  DirectoryLocator.getDirectory(DirectorySpeciality.class);
        cbSpec = new JComboBox(dirSpec.toArray(true));
        resetTree(null);
        treeDangers.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        btAddService.setEnabled(false);
        btRemoveService.setEnabled(false);
        tfTitle.setEnabled(false);
        taDescription.setEnabled(false);
       
        taDescription.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void insertUpdate(DocumentEvent arg0) {
                setField(arg0.getDocument());
            }

            @Override
            public void removeUpdate(DocumentEvent arg0) {
                setField(arg0.getDocument());
            }

            @Override
            public void changedUpdate(DocumentEvent arg0) {
            }

            private void setField(Document doc) {
                try {
                    if (current != null) {
                        current.setDescription(doc.getText(0, doc.getLength()));
                    }
                } catch (ClipsException ex) {
                    MessageBox.showException(ex);
                } catch (BadLocationException ex) {
                    MessageBox.showException(ex);
                }
            }
        });
    resizeColumn();
    StateSaver.attachTo(this);
    }

    private JSpinField createSpinner() {
        return new com.toedter.components.JSpinField();
    }

    /**
     *
     * @param selection selected rows or null
     */
    private void resetTree(DirectoryDangerItem item) throws ClipsException{
        TreePath selectionPath = treeDangers.getSelectionPath();
        DirectoryDialogTreeModel ddtm
            = new DirectoryDialogTreeModelImpl(directoryDanger.toArray(false), "\\");
        treeDangers.setModel(ddtm);
        treeDangers.setSelectionPath(selectionPath);
        treeDangers.expandPath(selectionPath);
    }
   
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jSplitPane1 = new javax.swing.JSplitPane();
        jPanel1 = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        jPanel9 = new javax.swing.JPanel();
        btAddService = new javax.swing.JButton();
        btRemoveService = new javax.swing.JButton();
        jPanel12 = new javax.swing.JPanel();
        jScrollPane4 = new javax.swing.JScrollPane();
        taDescription = new javax.swing.JTextArea();
        jPanel5 = new javax.swing.JPanel();
        jPanel6 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        tfTitle = new javax.swing.JTextArea();
        jPanel11 = new javax.swing.JPanel();
        btRename = new javax.swing.JButton();
        jPanel8 = new javax.swing.JPanel();
        jLabel2 = new javax.swing.JLabel();
        spnFrequency = createSpinner();
        ;
        jLabel4 = new javax.swing.JLabel();
        jPanel10 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblService = new cli_fmw.utils.sorted_table.SortedTable();
        jPanel2 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        treeDangers = new javax.swing.JTree();
        jPanel3 = new javax.swing.JPanel();
        btAdd = new javax.swing.JButton();
        btRemove = new javax.swing.JButton();

        setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
        setLayout(new java.awt.BorderLayout());

        jSplitPane1.setDividerLocation(300);
        jSplitPane1.setResizeWeight(0.3);

        jPanel1.setLayout(new java.awt.BorderLayout());

        jPanel4.setLayout(new java.awt.BorderLayout());

        jPanel9.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT));

        btAddService.setText("Добавить");
        btAddService.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btAddServiceActionPerformed(evt);
            }
        });
        jPanel9.add(btAddService);

        btRemoveService.setText("Удалить");
        btRemoveService.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btRemoveServiceActionPerformed(evt);
            }
        });
        jPanel9.add(btRemoveService);

        jPanel4.add(jPanel9, java.awt.BorderLayout.PAGE_START);

        jPanel12.setBorder(javax.swing.BorderFactory.createTitledBorder("Примечание"));
        jPanel12.setLayout(new javax.swing.BoxLayout(jPanel12, javax.swing.BoxLayout.LINE_AXIS));

        taDescription.setColumns(20);
        taDescription.setLineWrap(true);
        taDescription.setRows(5);
        taDescription.setWrapStyleWord(true);
        jScrollPane4.setViewportView(taDescription);

        jPanel12.add(jScrollPane4);

        jPanel4.add(jPanel12, java.awt.BorderLayout.PAGE_END);

        jPanel1.add(jPanel4, java.awt.BorderLayout.PAGE_END);

        jPanel5.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
        jPanel5.setLayout(new java.awt.BorderLayout());

        jPanel6.setLayout(new java.awt.BorderLayout());

        jLabel1.setText("Название:  ");
        jPanel6.add(jLabel1, java.awt.BorderLayout.LINE_START);

        tfTitle.setLineWrap(true);
        tfTitle.setRows(3);
        tfTitle.setWrapStyleWord(true);
        jScrollPane3.setViewportView(tfTitle);

        jPanel6.add(jScrollPane3, java.awt.BorderLayout.CENTER);

        jPanel11.setLayout(new javax.swing.BoxLayout(jPanel11, javax.swing.BoxLayout.LINE_AXIS));

        btRename.setText("Изменить");
        btRename.setEnabled(false);
        btRename.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btRenameActionPerformed(evt);
            }
        });
        jPanel11.add(btRename);

        jPanel6.add(jPanel11, java.awt.BorderLayout.LINE_END);

        jPanel5.add(jPanel6, java.awt.BorderLayout.CENTER);

        jLabel2.setText("Периодичность осмотров: 1 раз в");

        spnFrequency.setEnabled(false);
        spnFrequency.setMinimum(0);
        spnFrequency.setMinimumSize(new java.awt.Dimension(60, 20));
        spnFrequency.addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                spnFrequencyPropertyChange(evt);
            }
        });

        jLabel4.setText("дней");

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(spnFrequency, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel4))
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jLabel2)
            .addComponent(spnFrequency, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(jLabel4)
        );

        jPanel8Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {jLabel2, jLabel4, spnFrequency});

        jPanel5.add(jPanel8, java.awt.BorderLayout.PAGE_END);

        jPanel1.add(jPanel5, java.awt.BorderLayout.PAGE_START);

        jPanel10.setBorder(javax.swing.BorderFactory.createTitledBorder("Список необходимых услуг"));
        jPanel10.setLayout(new java.awt.BorderLayout());

        jScrollPane2.addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                jScrollPane2ComponentResized(evt);
            }
        });

        tblService.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {},
                {},
                {},
                {}
            },
            new String [] {

            }
        ));
        jScrollPane2.setViewportView(tblService);

        jPanel10.add(jScrollPane2, java.awt.BorderLayout.CENTER);

        jPanel1.add(jPanel10, java.awt.BorderLayout.CENTER);

        jSplitPane1.setRightComponent(jPanel1);

        jPanel2.setLayout(new java.awt.BorderLayout());

        treeDangers.setEditable(true);
        treeDangers.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                treeDangersValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(treeDangers);

        jPanel2.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        btAdd.setText("Добавить");
        btAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btAddActionPerformed(evt);
            }
        });
        jPanel3.add(btAdd);

        btRemove.setText("Удалить");
        btRemove.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btRemoveActionPerformed(evt);
            }
        });
        jPanel3.add(btRemove);

        jPanel2.add(jPanel3, java.awt.BorderLayout.PAGE_END);

        jSplitPane1.setLeftComponent(jPanel2);

        add(jSplitPane1, java.awt.BorderLayout.CENTER);
    }// </editor-fold>//GEN-END:initComponents

   
    private void setScreenFields(){    
        if (current == null){
            tfTitle.setText("");
            spnValue = spnFrequency.getMinimum();
            spnFrequency.setValue(spnValue);
            taDescription.setText("");
        }else{
            tfTitle.setText(current.getTitle());
            spnValue = current.getFrequency();
            spnFrequency.setValue(spnValue);
            taDescription.setText(current.getDescription());
            jPanel5.revalidate();
        }
    }

    /**
     *
     * @param evt
     */
private void treeDangersValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_treeDangersValueChanged
   
        Object o = treeDangers.getLastSelectedPathComponent();
        if (o instanceof DirectoryDangerItem) {
            current = (DirectoryDangerItem) o;
            if (current.getID() != 0) {
                try {
                    setEnabledControls(true);
                    resetTableService(current);
                    serviceList = current.getDangerServices();
                    setScreenFields();
                    return;
                } catch (ClipsException ex) {
                    MessageBox.showException(ex);
                    setEnabledControls(false);
                }
            }
        }
        setEnabledControls(false);
        serviceList = null;
        current = null;
        tblService.setModel(new DefaultTableModel());
        setScreenFields();
}//GEN-LAST:event_treeDangersValueChanged

    private void setEnabledControls(boolean enabled){
        btAddService.setEnabled(enabled);
        btRemoveService.setEnabled(enabled);
        btRename.setEnabled(enabled);
        spnFrequency.setEnabled(enabled);
        tfTitle.setEnabled(enabled);
        taDescription.setEnabled(enabled);
    }

private void btAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddActionPerformed
    try {
        DangerDetails dd = new DangerDetails();
        dd.title = "введите название";
        DirectoryDangerItem item = new DirectoryDangerItem(dd);
        if (treeDangers.getLastSelectedPathComponent() instanceof DirectoryDangerItem) {
            DirectoryDangerItem parent = (DirectoryDangerItem)
                    treeDangers.getLastSelectedPathComponent();
            dd.parentItem = parent.getID();
            parent.getItems().append(item);
            treeDangers.updateUI();
        }
        else {
            dd.parentItem = 0;
            DirectoryDanger directory = (DirectoryDanger)
                DirectoryLocator.getDirectory(DirectoryDanger.class, false);
            directory.getItems().append(item);
            treeDangers.updateUI();
        }
        //resetTree(item);
        treeDangers.expandPath(treeDangers.getSelectionPath());
    } catch (ClipsException ex) {
        MessageBox.showException(ex);
    }
}//GEN-LAST:event_btAddActionPerformed

private void btRemoveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btRemoveActionPerformed
    if (current != null){
        try {
            if (treeDangers.getLastSelectedPathComponent() == treeDangers.getModel().getRoot()
                    || treeDangers.getLastSelectedPathComponent() == null) {
            return;
            }
            DirectoryDangerItem item = (DirectoryDangerItem) treeDangers.getLastSelectedPathComponent();
            if (item.getItems().size() > 0) {
                int answer = MessageBox.showConfirmYesNo(MessageBox.C_DELETE_CHIELD_OBJECTS);
                if (answer == MessageBox.ANSWER_NO) {
                    return;
                }
            } else {
                int answer = MessageBox.showConfirmYesNo(MessageBox.C_DELETE_DANGER_ITEM);
                if (answer == MessageBox.ANSWER_NO) {
                    return;
                }
            }
            deleteDanger(item);
           
            current = null;
            treeDangers.updateUI();
            treeDangers.getSelectionModel().setSelectionPath(null);
            treeDangersValueChanged(null);
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
    }
}//GEN-LAST:event_btRemoveActionPerformed

private void deleteDanger(DirectoryDangerItem dangerItem) throws ClipsException {
    DirectoryDanger dangers = (DirectoryDanger) DirectoryLocator.getDirectory(DirectoryDanger.class, false);
    ClipsException hasException = null;
   
    SelectorEditableExceptional<DirectoryDangerItem> iie = dangerItem.getItems();       
    for (int i = iie.size() - 1; i > -1; i--) {
        DirectoryDangerItem item = iie.get(i);
        try {
            deleteDanger(item);
        } catch (ClipsException ex) {
            hasException = ex;
        }
    }
    DirectoryDangerItem parent = dangerItem.getParent();

    if (parent == null) {
        iie = dangers.getItems();
    }
    else {
        iie = parent.getItems();
    }
    if (hasException == null) {
        iie.remove(dangerItem);
    } else {
        throw hasException;
    }
}


private void btAddServiceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddServiceActionPerformed
    try {
        DirectoryDialogService ddd = new DirectoryDialogService(true, null);
        ddd.setVisible(true);
        if (current != null) {
            if (ddd.getDlgResult() == ModalDialog.DLG_OK) {
                Selector s = ddd.getSelectedItems();
                for (int i = 0; i < s.size(); i++) {
                    DangerServiceDetails details = new DangerServiceDetails();
                    DirectoryServiceItem dsi = (DirectoryServiceItem) s.get(i);
                    details.dangerId = current.getID();
                    details.serviceId = dsi.getID();
                    details.description = "";
                    details.specialityID = 0;
                    DangerServiceData dangerService = new DangerServiceData(details);                   
                    serviceList.append(dangerService);
                }
            }
            resetTableService(current);
        }
    } catch (ClipsException ex) {
        MessageBox.showException(ex);
    }
}//GEN-LAST:event_btAddServiceActionPerformed

private void btRemoveServiceActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btRemoveServiceActionPerformed
    try {
        int[] selectedRows = tblService.getSelectedRowsSorted();
        for (int i = selectedRows.length-1; i>=0; i--) {
            serviceList.remove(selectedRows[i]);
        }   
        if (current != null){
            resetTableService(current);
        }
    } catch (ClipsException ex) {
        MessageBox.showException(ex);
    }
   
}//GEN-LAST:event_btRemoveServiceActionPerformed

private void spnFrequencyPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_spnFrequencyPropertyChange
    if (current != null && evt.getNewValue() instanceof Integer ){
        spnValue = (Integer) evt.getNewValue();
        jPanel5.revalidate();
    }
}//GEN-LAST:event_spnFrequencyPropertyChange

private void btRenameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btRenameActionPerformed
    if (current != null) {
        try {
            current.setTitle(tfTitle.getText());
            current.setFrequency(spnValue);
            treeDangers.updateUI();
            //resetTree(treeDangers.getSelectionRows());
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
    }

}//GEN-LAST:event_btRenameActionPerformed

private void jScrollPane2ComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_jScrollPane2ComponentResized

}//GEN-LAST:event_jScrollPane2ComponentResized

    private void resetTableService(DirectoryDangerItem ddi) throws ClipsException{
        serviceList = ddi.getDangerServices();
        tblService.setModel(new TableModelDangerService(serviceList));
        tblService.getColumnModel().getColumn(TableModelDangerService.COL_DS_SPECIALITY).setCellEditor(new DefaultCellEditor(cbSpec));

     }
   
    private void resizeColumn() {
      TableState          state = new TableState();
    state.setPreferredWidth(TableModelDangerService.COL_DS_TITLE,      10);
    state.setPreferredWidth(TableModelDangerService.COL_DS_SPECIALITY,    5);
    state.setPreferredWidth(TableModelDangerService.COL_DS_DURATION,    2);
    state.setPreferredWidth(TableModelDangerService.COL_DS_DESCRIPTION,    2);
      StateSaver.setDefaultState(this, tblService, state);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btAdd;
    private javax.swing.JButton btAddService;
    private javax.swing.JButton btRemove;
    private javax.swing.JButton btRemoveService;
    private javax.swing.JButton btRename;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel10;
    private javax.swing.JPanel jPanel11;
    private javax.swing.JPanel jPanel12;
    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 jPanel8;
    private javax.swing.JPanel jPanel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JSplitPane jSplitPane1;
    private com.toedter.components.JSpinField spnFrequency;
    private javax.swing.JTextArea taDescription;
    private cli_fmw.utils.sorted_table.SortedTable tblService;
    private javax.swing.JTextArea tfTitle;
    private javax.swing.JTree treeDangers;
    // End of variables declaration//GEN-END:variables

    @Override
    public String getPageTitle() {
        return "Редактор опасных факторов";
    }

    @Override
    public DelegateLine2 getDelegate() {
       return null;
    }

    private class DirectoryDialogTreeModelImpl extends DirectoryDialogTreeModel {

        public DirectoryDialogTreeModelImpl(DirectoryItemRO items[], String rootTitle) {
            super(items, rootTitle);
        }

        @Override
        public void valueForPathChanged(TreePath path, Object newValue) {
            try {
                DirectoryDangerItem item = (DirectoryDangerItem) path.getLastPathComponent();
                item.setTitle(newValue.toString());
                //resetTree(item);
                setScreenFields();
                treeDangers.updateUI();
            } catch (ClipsException ex) {
                MessageBox.showException(ex);
            }
        }

    }


   
}
TOP

Related Classes of clips.directory.editors.danger.PanelDangerService$DirectoryDialogTreeModelImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.