Package cli_fmw.directory.editors.writer.templates

Source Code of cli_fmw.directory.editors.writer.templates.PanelTextTemplatesEdit$SearchListener

/*
* PanelVidalGroupEdit.java
*
* Created on 26 �?юнь 2008 г., 17:18
*/

package cli_fmw.directory.editors.writer.templates;

import cli_fmw.delegate.directory.DirectoryItem;
import cli_fmw.delegate.directory.complex.DirectoryLocator;
import cli_fmw.delegate.directory.complex.DirectoryTextTemplate;
import cli_fmw.delegate.directory.complex.DirectoryTextTemplateItem;
import cli_fmw.delegate.directory.complex.DirectoryTextTemplateTree;
import cli_fmw.delegate.directory.complex.DirectoryTextTemplateTreeItem;
import cli_fmw.delegate.DelegateLine2;
import cli_fmw.main.ClipsException;
import cli_fmw.main.PageContainer;
import cli_fmw.main.PageGeneric;
import cli_fmw.utils.MessageBox;
import cli_fmw.utils.Selector;
import cli_fmw.utils.SelectorEditableExceptional;
import cli_fmw.utils.table_config_states.StateSaver;
import framework.beans.directory.writer.template.TextTemplateDetails;
import framework.beans.directory.writer.tree.TextTemplateTreeDetails;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;


public class PanelTextTemplatesEdit extends PageGeneric {
    private DirectoryTextTemplateTreeItem templateNode;
    private DirectoryTextTemplate dirTextTemplate;
    private DirectoryTextTemplateTree templateTree;
   
    /** Creates new form PanelVidalGroupEdit */
    public PanelTextTemplatesEdit(PageContainer container) throws ClipsException {
        super(container);
        initComponents();
        updateTree();
        searchField.getDocument().addDocumentListener(new SearchListener());
       
        dirTextTemplate = (DirectoryTextTemplate) DirectoryLocator.getDirectory(DirectoryTextTemplate.class, false);
    StateSaver.attachTo(this);
    }
   
    private void updateTree() throws ClipsException{
        DirectoryTextTemplateTree vdls = (DirectoryTextTemplateTree)
                DirectoryLocator.getDirectory(DirectoryTextTemplateTree.class, false);
        TreeModelTextTemplates model = new TreeModelTextTemplates(vdls);
        treeTextTemplates.setRootVisible(true);
        treeTextTemplates.setModel(model);
        treeTextTemplates.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        expandTree();
        templateTree = vdls;
    }

    private void updateTable(ArrayList<DirectoryTextTemplateItem> items) throws ClipsException {       
        TableModelTextTemplate model = new TableModelTextTemplate(items);
        tblTemplates.setModel(model);
    }
   
    private void updateTable(DirectoryTextTemplateTreeItem item) throws ClipsException{
        ArrayList<DirectoryTextTemplateItem> ttItemList
                = (ArrayList<DirectoryTextTemplateItem>) dirTextTemplate.getItems(item);
//        new ArrayList<DirectoryTextTemplateItem>();
//        SelectorEditableExceptional<DirectoryTextTemplateItem> s = dirTextTemplate.getItems(Item);
//        for (int i = 0; i<s.size();i++){
//            ttItemList.add(s.get(i));
//        }
        updateTable(ttItemList);
    }
   
    private void expandTree() {
        for (int i = 1; i <= treeTextTemplates.getRowCount(); i++) {
            treeTextTemplates.expandRow(i);
        }
        treeTextTemplates.setSelectionPath(null);
    }
   
    /** 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() {

        pnlNewNode = new javax.swing.JPanel();
        jPanel10 = new javax.swing.JPanel();
        jPanel9 = new javax.swing.JPanel();
        tfName = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jSplitPane1 = new javax.swing.JSplitPane();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        treeTextTemplates = new javax.swing.JTree();
        jPanel3 = new javax.swing.JPanel();
        btAddAtcNode = new javax.swing.JButton();
        btDeleteAtcNode = new javax.swing.JButton();
        jPanel5 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        searchField = new javax.swing.JTextField();
        jPanel2 = new javax.swing.JPanel();
        jPanel6 = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        btDeleteTemplate = new javax.swing.JButton();
        btAddTemplate = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblTemplates = new cli_fmw.utils.sorted_table.SortedTable();

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

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

        jPanel9.setLayout(new java.awt.BorderLayout());
        jPanel9.add(tfName, java.awt.BorderLayout.CENTER);

        jLabel2.setText("Название:");
        jLabel2.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 10));
        jPanel9.add(jLabel2, java.awt.BorderLayout.WEST);

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

        pnlNewNode.add(jPanel10, java.awt.BorderLayout.NORTH);

        jSplitPane1.setDividerLocation(200);

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

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

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

        jPanel3.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 1, 5, 1));
        jPanel3.setPreferredSize(new java.awt.Dimension(100, 50));
        jPanel3.setLayout(new java.awt.GridLayout(1, 0, 5, 0));

        btAddAtcNode.setText("<html><center>Добавить <BR>  группу</center></html>");
        btAddAtcNode.setActionCommand("<html>Добавить <BR>   группу</html>");
        btAddAtcNode.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btAddAtcNodeActionPerformed(evt);
            }
        });
        jPanel3.add(btAddAtcNode);

        btDeleteAtcNode.setText("<html><center>Удалить<br>группу</center></html>");
        btDeleteAtcNode.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btDeleteAtcNodeActionPerformed(evt);
            }
        });
        jPanel3.add(btDeleteAtcNode);

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

        jPanel5.setBorder(javax.swing.BorderFactory.createEmptyBorder(5, 5, 5, 5));
        jPanel5.setPreferredSize(new java.awt.Dimension(30, 30));
        jPanel5.setVisible(false);
        jPanel5.setLayout(new java.awt.BorderLayout());

        jLabel1.setText("Поиск:");
        jLabel1.setAlignmentY(0.0F);
        jLabel1.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 5));
        jPanel5.add(jLabel1, java.awt.BorderLayout.LINE_START);

        searchField.setColumns(10);
        searchField.setEnabled(false);
        jPanel5.add(searchField, java.awt.BorderLayout.CENTER);

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

        jSplitPane1.setLeftComponent(jPanel1);

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

        jPanel6.setBorder(javax.swing.BorderFactory.createEmptyBorder(15, 1, 10, 1));
        jPanel6.setLayout(new java.awt.BorderLayout());

        jPanel4.setLayout(new java.awt.GridLayout(1, 2, 5, 0));

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

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

        jPanel6.add(jPanel4, java.awt.BorderLayout.EAST);

        jPanel2.add(jPanel6, java.awt.BorderLayout.SOUTH);

        jScrollPane2.setViewportView(tblTemplates);

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

        jSplitPane1.setRightComponent(jPanel2);

        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, 636, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents

private void treeTextTemplatesValueChanged(javax.swing.event.TreeSelectionEvent evt) {//GEN-FIRST:event_treeTextTemplatesValueChanged
    Object value = treeTextTemplates.getLastSelectedPathComponent();
    if (value instanceof DirectoryTextTemplateTreeItem){
        try {
            templateNode = (DirectoryTextTemplateTreeItem)value;
            updateTable(templateNode);
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
    } else {
        tblTemplates.setModel(new DefaultTableModel());
        templateNode = null;
    }
}//GEN-LAST:event_treeTextTemplatesValueChanged

private void btAddAtcNodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddAtcNodeActionPerformed
    Object value = treeTextTemplates.getLastSelectedPathComponent();
    if (value instanceof DirectoryTextTemplateTreeItem){
        try {
            DirectoryTextTemplateTreeItem selected = (DirectoryTextTemplateTreeItem) value;
            tfName.setText("");
            int res = JOptionPane.showConfirmDialog(
                    null, pnlNewNode, "Заполните поля", JOptionPane.OK_CANCEL_OPTION, -1);
            if (res == JOptionPane.OK_OPTION) {
                if (tfName.getText().isEmpty()) {
                    MessageBox.showWarning(MessageBox.W_INCORRECT_DATA);
                    return;
                } else {
                    TextTemplateTreeDetails details = new TextTemplateTreeDetails();
                    details.title = tfName.getText();
                    details.parentItem = selected.getID();
                    DirectoryTextTemplateTreeItem newItem = new DirectoryTextTemplateTreeItem(details);
                    selected.getItems().append(newItem);
                }
                updateTree();
            }
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
    }else{
        try {
            tfName.setText("");
            int res = JOptionPane.showConfirmDialog(
                    null, pnlNewNode, "Заполните поля", JOptionPane.OK_CANCEL_OPTION, -1);
            if (res == JOptionPane.OK_OPTION) {
                if (tfName.getText().isEmpty()) {
                    MessageBox.showWarning(MessageBox.W_INCORRECT_DATA);
                    return;
                } else {
                    TextTemplateTreeDetails details = new TextTemplateTreeDetails();
                    details.title = tfName.getText();
                    DirectoryTextTemplateTreeItem newItem = new DirectoryTextTemplateTreeItem(details);
                    templateTree.getItems().append(newItem);
                }
                updateTree();
            }
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
    }           
}//GEN-LAST:event_btAddAtcNodeActionPerformed

private void btDeleteAtcNodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDeleteAtcNodeActionPerformed
    if (treeTextTemplates.getSelectionCount()>0 && templateNode != null) {
        try {
            if (templateNode.getItems().size() > 0) {
                MessageBox.showWarning(MessageBox.W_CANT_DEL_HAVE_CHILDREN);
            } else {
                if (templateNode.getParent() != null) {
                    templateNode.getParent().getItems().remove(templateNode);
                } else {
                    templateTree.getItems().remove(templateNode);
                }
                updateTree();
            }
        } catch (ClipsException ex) {
            MessageBox.showException(ex);
        }
    }
}//GEN-LAST:event_btDeleteAtcNodeActionPerformed

private void btAddTemplateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btAddTemplateActionPerformed
    try {
        TextTemplateDetails details = new TextTemplateDetails();
        details.title = "Введите текст шаблона";
        details.groupId = templateNode.getID();
        DirectoryTextTemplateItem item = new DirectoryTextTemplateItem(details);
        dirTextTemplate.getItems().append(item);
        updateTable(templateNode);
    } catch (ClipsException ex) {
        MessageBox.showException(ex);
    }
}//GEN-LAST:event_btAddTemplateActionPerformed

private void btDeleteTemplateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btDeleteTemplateActionPerformed
    try {
        ArrayList<DirectoryTextTemplateItem> items =
                (ArrayList<DirectoryTextTemplateItem>) dirTextTemplate.getItems(templateNode);
        int[] sels = tblTemplates.getSelectedRowsSorted();
        for (int j = sels.length - 1; j > -1; j--) {
            DirectoryTextTemplateItem template = items.get(sels[j]);
            dirTextTemplate.getItems().remove(template);
        }
        updateTable(templateNode);
    } catch (ClipsException ex) {
        MessageBox.showException(ex);
    }
}//GEN-LAST:event_btDeleteTemplateActionPerformed

    class SearchListener implements DocumentListener {

        @Override
        public void insertUpdate(DocumentEvent arg0) {
            try {
                onSearchFieldChanged(arg0.getDocument().getText(0, arg0.getDocument().getLength()));
            } catch(Exception ex) {
                MessageBox.showException(ex);
            }
        }

        @Override
        public void removeUpdate(DocumentEvent arg0) {
            try {
                onSearchFieldChanged(arg0.getDocument().getText(0, arg0.getDocument().getLength()));
            } catch(Exception ex) {
                MessageBox.showException(ex);
            }
        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {
            try {
                onSearchFieldChanged(arg0.getDocument().getText(0, arg0.getDocument().getLength()));
            } catch(Exception ex) {
                MessageBox.showException(ex);
            }
        }
    }
       
    @SuppressWarnings("unchecked")
    private void onSearchFieldChanged(String value) throws ClipsException {
        if(value.isEmpty()) {
            return;
        }           
        DirectoryTextTemplate dva = DirectoryLocator.getDirectory(DirectoryTextTemplate.class, false);
        SelectorEditableExceptional<DirectoryTextTemplateItem> sel = dva.getItems();
        for(int i=0; i<sel.size(); i++) {
            DirectoryTextTemplateItem item = sel.get(i);
            List found = findMatch(item, value);
            if(found != null) {                   
                found.add(treeTextTemplates.getModel().getRoot());
                ArrayList reordered = new ArrayList();
                for(int j=found.size()-1; j>=0; j--) {
                    reordered.add(found.get(j));
                }

                TreePath fullPath = new TreePath(reordered.toArray());
                treeTextTemplates.setSelectionPath(fullPath);                   
                treeTextTemplates.scrollPathToVisible(fullPath);
                treeTextTemplates.updateUI();
                return;
            }
        }
    }
       
    @SuppressWarnings("unchecked")
    private List<Object> findMatch(DirectoryItem item, String pattern) throws ClipsException {
        int pos = item.getTitle().indexOf(pattern);
        if(pos == 0) {
            ArrayList path = new ArrayList();
            path.add(item);
            return path;
        }
        if(item instanceof DirectoryTextTemplateTreeItem) {
            DirectoryTextTemplateTreeItem parent = (DirectoryTextTemplateTreeItem)item;
            Selector ii = parent.getItems();
            for(int i=0; i<ii.size(); i++) {
                DirectoryItem child = (DirectoryItem) ii.get(i);
                List path = findMatch(child, pattern);
                if(path != null) {
                    path.add(parent);
                    return path;
                }
            }
        }       
        return null;
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btAddAtcNode;
    private javax.swing.JButton btAddTemplate;
    private javax.swing.JButton btDeleteAtcNode;
    private javax.swing.JButton btDeleteTemplate;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel10;
    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 jPanel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JSplitPane jSplitPane1;
    private javax.swing.JPanel pnlNewNode;
    private javax.swing.JTextField searchField;
    private cli_fmw.utils.sorted_table.SortedTable tblTemplates;
    private javax.swing.JTextField tfName;
    private javax.swing.JTree treeTextTemplates;
    // End of variables declaration//GEN-END:variables

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

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


}
TOP

Related Classes of cli_fmw.directory.editors.writer.templates.PanelTextTemplatesEdit$SearchListener

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.