Package cli_fmw.directory.editors

Source Code of cli_fmw.directory.editors.PanelDirectoryEditorAbstract

/*
* PanelSheduleWeek.java
*
* Created on 27 Декабрь 2007 г., 3:25
*/

package cli_fmw.directory.editors;


import cli_fmw.delegate.directory.simple.DirectorySimple;
import cli_fmw.delegate.directory.simple.DirectorySimpleItem;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.delegate.directory.Directory;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.delegate.directory.simple.arm.DirectoryArmAbstract;
import cli_fmw.delegate.directory.simple.documentGivenPlace.DirectoryDocumentPlaceAbstract;
import cli_fmw.delegate.directory.simple.documentType.DirectoryDocumentTypeAbstract;
import cli_fmw.delegate.directory.simple.name.DirectoryNameAbstract;
import cli_fmw.delegate.directory.simple.pathron.DirectoryPathronAbstract;
import cli_fmw.delegate.directory.simple.surname.DirectorySurnameAbstract;
import cli_fmw.main.ClipsException;
import cli_fmw.directory.DialogDirectorySimpleM;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.main.PrintCreators;
import cli_fmw.main.Printable;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.ModalDialog;
import cli_fmw.utils.SelectorEditableExceptional;
import cli_fmw.utils.table_config_states.StateSaver;
import cli_fmw.utils.table_config_states.TableState;
import java.awt.Frame;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ListSelectionModel;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableColumn;
import javax.swing.text.BadLocationException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;

/**
*
* @author  Axe Ilshat
*/
public abstract class PanelDirectoryEditorAbstract
        extends PageGeneric implements Printable {

    DirectorySimple currentDirectory;
    String filter = "";
   
    /**
     * Creates new form PanelSheduleWeek
     */
    public PanelDirectoryEditorAbstract(PageContainer container) throws ClipsException {
        super(container);
        initComponents();
        jTree1.setModel(new DefaultTreeModel(makeTree()));
        jTable1.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jTable1.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent arg0) {
                setEnabledComponents();
            }
        });

        jTextField1.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent arg0) {
                setFilter(arg0);
            }

            @Override
            public void removeUpdate(DocumentEvent arg0) {
                setFilter(arg0);
            }

            @Override
            public void changedUpdate(DocumentEvent arg0) {              
            }

            private void setFilter(DocumentEvent arg0) {
                try {
                    filter = arg0.getDocument().getText(0, arg0.getDocument().getLength());
                    refreshTable();
                } catch (ClipsException ex) {
                    MessageBox.showException(ex);
                } catch (BadLocationException ex) {
                    MessageBox.showException(ex);
                }
            }
        });
        refreshTable();
    resizeColumn();
        StateSaver.attachTo(this);
    }

    /**
     * Создание начальной заготовки дерева
     * @return
     */
    private TreeNode makeTree() throws ClipsException {
        ArrayList<Directory> directoryList = new ArrayList<Directory>();
        Directory d = DirectoryLocator.getDirectory(DirectorySurnameAbstract.class, false);
        directoryList.add(d);

        d = DirectoryLocator.getDirectory(DirectoryNameAbstract.class, false);
        directoryList.add(d);
        d = DirectoryLocator.getDirectory(DirectoryPathronAbstract.class, false);
        directoryList.add(d);
        d = DirectoryLocator.getDirectory(DirectoryArmAbstract.class, false);
        directoryList.add(d);
        d = DirectoryLocator.getDirectory(DirectoryDocumentTypeAbstract.class, false);
        directoryList.add(d);
        d = DirectoryLocator.getDirectory(DirectoryDocumentPlaceAbstract.class, false);
        directoryList.add(d);
        initExtra(directoryList);

        //сортируем список справочников
        Collections.sort(directoryList, new Comparator<Directory>() {

            @Override
            public int compare(Directory o1, Directory o2) {
                return o1.getDirectoryTitle().compareTo(o2.getDirectoryTitle());
            }
        });

        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Справочники");      //создали корень
        for (Directory directory : directoryList) {
            root.add(new DefaultMutableTreeNode(directory));
        }
        return root;
    }

    protected abstract void initExtra(ArrayList<Directory> directoryList) throws ClipsException;


    /**
     * returns title for the page
     * @return String, HUD title for page
     */
    @Override
    public String getPageTitle()
    {
        return "Редактор справочников";
    }
   
    /**
     * Обновляет таблицу и разрешает.запрещает кнопки редактирования
     */
    private void refreshTable() throws ClipsException {
        jTable1.setModel(new TableModelDirectoryEdit(currentDirectory, filter));
        TableColumn colExt = jTable1.getColumnModel().getColumn(TableModelDirectoryEdit.COL_EXT_CODE);
        TableColumn colDirty = jTable1.getColumnModel().getColumn(TableModelDirectoryEdit.COL_DIRTY);
        TableColumn colTrash = jTable1.getColumnModel().getColumn(TableModelDirectoryEdit.COL_TRASH);
        if (currentDirectory == null || !currentDirectory.isExternal()) {
            jTable1.removeColumn(colExt);
        }
        if (currentDirectory == null || !currentDirectory.isDirty()) {
            jTable1.removeColumn(colDirty);
        }
        if (currentDirectory == null || !currentDirectory.isTrash()) {
            jTable1.removeColumn(colTrash);
        }
        setEnabledComponents();
    }
   
    private void setEnabledComponents() {
        jTextField1.setEditable(currentDirectory != null);
        btAdd.setEnabled(currentDirectory != null && !filter.equals("") && currentDirectory.isInDirectory(filter) == null);
        if (jTable1.getSelectedRowCount() > 0 && ((TableModelDirectoryEdit) jTable1.getModel()).getItemAt(jTable1.getSelectedRowSorted()).getID() != 0) {
            btDelete.setEnabled(true);
            btChange.setEnabled(true);
        } else {
            btDelete.setEnabled(false);
            btChange.setEnabled(false);
        }
    }
   
    private void resizeColumn() {
    TableState          state = new TableState();
    state.setPreferredWidth(TableModelDirectoryEdit.COL_ID,             1);
    state.setPreferredWidth(TableModelDirectoryEdit.COL_TITLE,          7);
    state.setPreferredWidth(TableModelDirectoryEdit.COL_DIRTY,          2);
        state.setPreferredWidth(TableModelDirectoryEdit.COL_EXT_CODE,  4);
      StateSaver.setDefaultState(this, jTable1, state);
    }

    /** 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.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jSplitPane1 = new javax.swing.JSplitPane();
        jPanel3 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTree1 = new javax.swing.JTree();
        jPanel1 = new javax.swing.JPanel();
        jPanel2 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        btAdd = new javax.swing.JButton();
        btDelete = new javax.swing.JButton();
        btChange = new javax.swing.JButton();
        jPanel4 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTable1 = new cli_fmw.utils.sorted_table.SortedTable();

        jSplitPane1.setDividerLocation(180);

        jTree1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
            public void valueChanged(javax.swing.event.TreeSelectionEvent evt) {
                jTree1ValueChanged(evt);
            }
        });
        jScrollPane1.setViewportView(jTree1);

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 156, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 245, Short.MAX_VALUE)
                .addContainerGap())
        );

        jSplitPane1.setLeftComponent(jPanel3);

        jLabel1.setText("Фильтр:");

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

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

        btChange.setText("Заменить");
        btChange.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btChangeActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 59, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btAdd)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btDelete)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btChange)
                .addContainerGap())
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(btChange)
                    .addComponent(btDelete)
                    .addComponent(btAdd)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

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

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

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

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, 186, Short.MAX_VALUE)
                .addContainerGap())
        );

        jSplitPane1.setRightComponent(jPanel1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 600, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 269, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents

    private void jTree1ValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_jTree1ValueChanged
        try {
            Object element = ((DefaultMutableTreeNode) jTree1.getLastSelectedPathComponent()).getUserObject();
            if (element instanceof DirectorySimple) {
                currentDirectory = (DirectorySimple) element;
            } else {
                currentDirectory = null;
            }
            fireContainerEventStateChanged();
            jTextField1.setText("");
            refreshTable();
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
    }//GEN-LAST:event_jTree1ValueChanged


    protected abstract DirectorySimpleItem getNewItem(String title);

    private void btDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDeleteActionPerformed
        try {
            if (jTable1.getSelectedRowCount() > 0) {
                DirectorySimpleItem item = ((TableModelDirectoryEdit) jTable1.getModel()).getItemAt(jTable1.getSelectedRowSorted());
                try {
                    SelectorEditableExceptional iie = currentDirectory.getItems();
                    for (int i = 0; i < iie.size(); i++) {
                        if (iie.get(i) == item) {
                            iie.remove(i);
                            break;
                        }
                    }
                } catch (Exception ex) {
                    MessageBox.showException(ex);
                }
                refreshTable();
            }
        } catch (ClipsException ex) {
            Logger.getLogger(PanelDirectoryEditorAbstract.class.getName()).log(Level.SEVERE, null, ex);
        }

}//GEN-LAST:event_btDeleteActionPerformed

    private void btChangeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btChangeActionPerformed
        try {
            DirectorySimpleItem item = ((TableModelDirectoryEdit) jTable1.getModel()).getItemAt(jTable1.getSelectedRowSorted());
            DialogDirectorySimpleM dialog = new DialogDirectorySimpleM((Frame) getContainer(), currentDirectory, item.getTitle());
            dialog.setVisible(true);
            if (dialog.getDlgResult() == ModalDialog.DLG_OK) {
                DirectorySimpleItem selectedItem = dialog.getSelectedItem();
                if (item == selectedItem) {
                    MessageBox.showWarning(MessageBox.W_SAME_DIRECTORY_ITEM);
                    return;
                }
                currentDirectory.replace(item, selectedItem);
            }
            refreshTable();
        } catch (ClipsException ex) {
            //Не вызвался диалог
            MessageBox.showException(ex);
        }
    }//GEN-LAST:event_btChangeActionPerformed

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

private void btAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddActionPerformed
    try {
        currentDirectory.getItems().append(currentDirectory.initNewItem(filter));
    } catch (ClipsException ex) {
        MessageBox.showException(ex);
    }
    jTextField1.setText("");
}//GEN-LAST:event_btAddActionPerformed
   
   
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btAdd;
    private javax.swing.JButton btChange;
    private javax.swing.JButton btDelete;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JSplitPane jSplitPane1;
    private cli_fmw.utils.sorted_table.SortedTable jTable1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTree jTree1;
    // End of variables declaration//GEN-END:variables

    @Override
    public boolean readyForPrint() {
        return currentDirectory != null;
    }

    @Override
    public void print() {
        if (readyForPrint()) {
            String title = "Данные простого справочника: " + currentDirectory.getDirectoryTitle();                       
            PrintCreators.createGeneratedReport(title, null, null, null, jTable1.getModel(), getClass());
        }
    }

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

Related Classes of cli_fmw.directory.editors.PanelDirectoryEditorAbstract

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.