Friday, April 26, 2013

Java Swing JTextPane Highlighting with word, pharse and proximty search

public class DocumentViewerJPanel extends javax.swing.JPanel {

    /**
     * Creates new form DocumentViewerJPanel
     */
    private DocumentViewerJPanel() {
        initComponents();
    }

    public static DocumentViewerJPanel getInstance() {
        if (instance == null) {
            instance = new DocumentViewerJPanel();
            instance.init();
        }
        return instance;
    }

    private void init() {
        findTextField.getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent e) {
                currentPosition = 0;
                highLight = false;
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                currentPosition = 0;
                highLight = false;
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
                currentPosition = 0;
                highLight = false;
            }
        });

        documentViewDialog = new JDialog(Bugger.getSingleInstance());
        documentViewDialog.setTitle("Document View");
        documentViewDialog.setModal(true);
        documentViewDialog.setUndecorated(true);
        documentViewDialog.setLocationRelativeTo(Bugger.getSingleInstance());
        //documentViewDialog.setModalityType(Dialog.ModalityType.MODELESS);
        documentViewDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        documentViewDialog.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                closeDocumentViewer();
            }
        });
        Dimension scSize = Toolkit.getDefaultToolkit().getScreenSize();
        int w = scSize.width - 150;
        int h = scSize.height - 100;
        documentViewDialog.setBounds((scSize.width - w) / 2, (scSize.height - h) / 2, w, h);

        previewDialog = new JDialog(documentViewDialog);
        previewDialog.setTitle("Print Preview");
        previewDialog.setModal(true);
        previewDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        int w1 = scSize.width - 220;
        int h1 = scSize.height - 140;
        previewDialog.setBounds((scSize.width - w1) / 2, (scSize.height - h1) / 2, w1, h1);

        findDialog = new javax.swing.JDialog(documentViewDialog);
        findDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        findDialog.setTitle("Find");
        findDialog.setResizable(false);
        findDialog.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                closeFindDialog();
            }
        });
        findDialog.getContentPane().add(findBasePanel);

        fontFaceDialog = new javax.swing.JDialog(documentViewDialog);
        fontFaceDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        fontFaceDialog.setTitle("Font Face");
        fontFaceDialog.setResizable(false);
        fontFaceDialog.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                closeFontFaceDialog();
            }
        });
        fontFaceDialog.getContentPane().add(fontFaceBasePanel);

        saveDialog = new javax.swing.JDialog(documentViewDialog);
        saveDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        saveDialog.setTitle("Save Document");
        saveDialog.setResizable(false);
        saveDialog.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                closeSaveDialog();
            }
        });
        saveDialog.getContentPane().add(saveBasePanel);

        notesDialog = new javax.swing.JDialog(documentViewDialog);
        notesDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        notesDialog.setTitle("Notes");
        notesDialog.setResizable(false);
        notesDialog.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                closeNoteDialog();
            }
        });
        notesDialog.getContentPane().add(notesBasePanel);

        smsDialog = new javax.swing.JDialog(documentViewDialog);
        smsDialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        smsDialog.setTitle("SMS");
        smsDialog.setResizable(false);
        smsDialog.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                closeNoteDialog();
            }
        });
        smsDialog.getContentPane().add(smsBasePanel);

        notesDialog.pack();
        fontFaceDialog.pack();
        findDialog.pack();
        saveDialog.pack();
        smsDialog.pack();;

        notesTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    notesTextArea.setText(null);
                }
            }
        });

        loadFontFamilies();
    }

    private void showDocument(String searchWord, String id) {
        ArrayList words = new ArrayList();
        searchWord = searchWord.trim();
        while (searchWord.length() > 0) {
            if (searchWord.contains(" ")) {
                String word = searchWord.substring(0, searchWord.indexOf(" "));
                System.out.println("word : " + word);
                searchWord = searchWord.substring(searchWord.indexOf(" "), searchWord.length());
                System.out.println("searchWord 1 : " + searchWord);
                if (!word.trim().isEmpty() && !word.equals("AND") && !word.equals("OR") && !word.equals("NOT")) {
                    word = word.trim();
                    if (word.startsWith("\"")) {
                        if (searchWord.indexOf("~") > 0) {
                            String word1 = searchWord.substring(0, searchWord.indexOf("~"));
                            searchWord = searchWord.substring(0, searchWord.indexOf("~"));
                            String word2 = searchWord.substring(searchWord.indexOf(" "));
                            searchWord = searchWord.substring(0, searchWord.indexOf(" "));
                            words.add(word + word1 + "~" + word2);
                        } else if (searchWord.indexOf("\"") > 0) {
                            String word1 = searchWord.substring(0, searchWord.indexOf("\"") + 1);
                            System.out.println("word1\" : " + word1);
                            words.add(word + word1);
                            searchWord = searchWord.substring(searchWord.indexOf(word1) + word1.length(), searchWord.length());
                            System.out.println("searchWord 3 : " + searchWord);
                        }
                    } else {
                        words.add(word);
                    }
                }
                searchWord = searchWord.trim();
                System.out.println("searchWord 2 : " + searchWord);
            } else {
                words.add(searchWord);
                break;
            }
        }

        final String[] pattern = new String[words.size()];
        words.toArray(pattern);
        System.out.println("words : " + words);
        
        prepareHTML();

        //System.out.println("html : " + html);
        documentTextPane.setText(html);
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                if (highLight(documentTextPane, pattern) == -1) {
                    documentScrollPane.scrollRectToVisible(new Rectangle(0, 0));
                }
                findButton.requestFocusInWindow();
            }
        });
    }

    private void prepareHTML() {
        html = "";}

    private void showHTML() {
        Point point = documentScrollPane.getViewport().getViewPosition();
        final int pos = documentTextPane.viewToModel(point);
        documentTextPane.setText(html);
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    documentTextPane.scrollRectToVisible(documentTextPane.modelToView(pos));
                } catch (Exception e) {
                }
            }
        });
    }

    private void showDocumentPreView(JRViewer jRViewer) {
        previewDialog.getContentPane().removeAll();
        previewDialog.getContentPane().add(jRViewer);
        previewDialog.setVisible(true);
    }

    public void showDocumentViewer(String searchWord, String id) {
        currentSearchWord = searchWord;
        showDocument(searchWord, idd);
        //Bugger.getSingleInstance().showOverlay();
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                documentViewDialog.getContentPane().removeAll();
                documentViewDialog.getContentPane().add(DocumentViewerJPanel.getInstance());
                documentViewDialog.setVisible(true);
            }
        });
    }

    public void closeDocumentViewer() {
        html = "";
        currentPosition = 0;
        previousPosition = 0;
        lastPosition = 0;
        fontSize = 14;
        exporting = false;
        noteSaving = false;
        removeFindHighlights(documentTextPane);
        removeSearchHighlights(documentTextPane);
        closeFindDialog();
        Bugger.getSingleInstance().hideOverlay();
        DocumentViewerJFrame.getInstance().closeDocumentViewer();
        documentViewDialog.dispose();
        idd = null;
    }

    // Creates highlights around all occurrences of pattern in textComp
    public int highLight(JTextComponent textComp, String[] pattern) {
        // First remove all old highlights
        removeSearchHighlights(textComp);
        int firstPos = -1;
        try {
            Highlighter hilite = textComp.getHighlighter();
            Document doc = textComp.getDocument();
            String text = doc.getText(0, doc.getLength());
            if (!matchCaseCheckBox.isSelected()) {
                text = text.toLowerCase();
            }
            //System.out.println("text = " + text);
            for (int i = 0; i < pattern.length; i++) {
                int pos = 0;
                String word = pattern[i];
                if (!matchCaseCheckBox.isSelected()) {
                    word = word.toLowerCase();
                }
                String tempWord = word;
                try {
                    if (word.contains("~") || tempWord.startsWith("\"")) {
                        word = word.split(" ")[0].replace("\"", "");
                    }
                } catch (Exception e) {
                }
                System.out.println("tempWord 1 -- > " + tempWord + " : word --> " + word);
                // Search for pattern
                doc:
                while ((pos = text.indexOf(word, pos)) >= 0) {
                    if (firstPos == -1) {
                        firstPos = pos;
                    }
                    System.out.println("tempWord 2 -- > " + tempWord);
                    if (tempWord.contains("~")) {
                        tempWord = tempWord.replace("\"", "");
                        try {
                            String[] fsplit = tempWord.split("~");
                            String[] ssplit = fsplit[0].split(" ");
                            ssplit[ssplit.length - 1] = ssplit[ssplit.length - 1].replace("\"", "");
                            System.out.println("ssplit[0] : " + ssplit[0]);
                            System.out.println("ssplit[1] : " + ssplit[1]);
                            int length = Integer.parseInt(fsplit[1]);
                            int secPos = 0;
                            if ((secPos = text.indexOf(ssplit[ssplit.length - 1], pos)) >= 0) {
                                String tempText = text.substring(pos, secPos + ssplit[ssplit.length - 1].length());
                                System.out.println("tempText : " + tempText);
                                String bta[] = tempText.split(" ");
                                if (bta.length > 0 && bta.length <= length) {
                                    hilite.addHighlight(pos, pos + ssplit[0].length(), searchHighlighter);
                                    hilite.addHighlight(secPos, secPos + ssplit[ssplit.length - 1].length(), searchHighlighter);
                                    System.out.println("Highlighted");
                                }
                            }
                        } catch (Exception e) {
                        }
                    } else if (tempWord.endsWith("\"")) {
                        tempWord = tempWord.replace("\"", "");
                        System.out.println("tempWord 3 -- > " + tempWord);
                        try {
                            String[] fsplit = tempWord.split(" ");
                            System.out.println("sec Text --> " + fsplit[fsplit.length - 1]);
                            int secPos = 0;
                            pharse:
                            while ((secPos = text.indexOf(fsplit[fsplit.length - 1], pos + fsplit[0].length())) >= 0) {
                                String middleText = text.substring(pos, secPos + fsplit[fsplit.length - 1].length());
                                System.out.println("middleText -- > " + middleText);
                                String mt[] = middleText.split(" ");
                                System.out.println("mt.length : " + mt.length + " -- fsplit.length : " + fsplit.length);
                                if (mt.length == fsplit.length) {
                                    hilite.addHighlight(pos - 1, secPos + fsplit[fsplit.length - 1].length(), searchHighlighter);
                                    break pharse;
                                } else {
                                    pos = pos + fsplit[0].length();
                                }
                            }
                        } catch (Exception e) {
                        }
                    } else {
                        if (word.equalsIgnoreCase(tempWord)) {
                            hilite.addHighlight(pos, pos + word.length(), searchHighlighter);
                        }
                    }
                    pos += tempWord.length();
                }
            }
        } catch (BadLocationException e) {
        }
        //System.out.println(firstPos);
        if (firstPos > -1) {
            currentPosition = firstPos;
            highLight = true;
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        documentTextPane.scrollRectToVisible(documentTextPane.modelToView(currentPosition));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        return firstPos;
    }

    // Removes only our private highlights
    public void removeSearchHighlights(JTextComponent textComp) {

        Highlighter hilite = textComp.getHighlighter();

        Highlighter.Highlight[] hilites = hilite.getHighlights();

        for (int i = 0; i < hilites.length; i++) {

            if (hilites[i].getPainter() instanceof SearchHighlightPainter) {

                hilite.removeHighlight(hilites[i]);
            }
        }
    }

    // Removes only our private highlights
    public void removeFindHighlights(JTextComponent textComp) {

        Highlighter hilite = textComp.getHighlighter();

        Highlighter.Highlight[] hilites = hilite.getHighlights();

        for (int i = 0; i < hilites.length; i++) {

            if (hilites[i].getPainter() instanceof FindHighlightPainter) {

                hilite.removeHighlight(hilites[i]);
            }
        }
    }

    private void findWord(String word) {
        documentTextPane.select(0, 0);
        boolean find = false;
        try {
            Highlighter hilite = documentTextPane.getHighlighter();
            Document doc = documentTextPane.getDocument();
            String text = doc.getText(0, doc.getLength());
            int pos = 0;
            if (!matchCaseCheckBox.isSelected()) {
                text = text.toLowerCase();
                word = word.toLowerCase();
            }
            // Search for pattern
            while ((pos = text.indexOf(word, pos)) >= 0) {
                if (currentPosition == 0 && pos > previousPosition) {
                    currentPosition = pos;
                }
                if (currentPosition > previousPosition) {
                    hilite.addHighlight(currentPosition, currentPosition + word.length(), findHighlighter);
                    find = true;
                }
                if (highlightCheckBox.isSelected()) {
                    hilite.addHighlight(pos, pos + word.length(), searchHighlighter);
                }
                pos += word.length();
                lastPosition = pos;
            }
            previousPosition = currentPosition + word.length();
            if (find) {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            documentTextPane.scrollRectToVisible(documentTextPane.modelToView(currentPosition));
                        } catch (Exception e) {
                        }
                    }
                });
            } else {
                JOptionPane.showMessageDialog(findDialog, "Word not found.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void showFindDialog() {
        findDialog.setLocationRelativeTo(documentViewDialog);
        findDialog.setModalityType(Dialog.ModalityType.MODELESS);
        Dimension parentSize = getSize();
        findDialog.setLocation((parentSize.width - findDialog.getWidth()) / 2, (parentSize.height - findDialog.getHeight()) / 2);
        findDialog.setVisible(true);
    }

    private void closeFindDialog() {
        findDialog.setVisible(false);
        findTextField.setText(null);
    }

    private void loadFontFamilies() {
        GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[] fontFamilyNames = env.getAvailableFontFamilyNames();
        for (int i = 0; i < fontFamilyNames.length; i++) {
            String fontFamily = fontFamilyNames[i];
            ((DefaultListModel) fontFaceList.getModel()).addElement(fontFamily);
        }
    }

    private void showFontFaceDialog() {
        int index = 0;
        for (int i = 0; i < ffListModel.getSize(); i++) {
            if (defaultFonName.equalsIgnoreCase((String) ffListModel.get(i))) {
                index = i;
                break;
            }
        }
        fontFaceList.setSelectedIndex(index);
        fontFaceDialog.setLocationRelativeTo(documentViewDialog);
        fontFaceDialog.setModalityType(Dialog.ModalityType.MODELESS);
        Dimension parentSize = getSize();
        fontFaceDialog.setLocation((parentSize.width - fontFaceDialog.getWidth()) / 2, (parentSize.height - fontFaceDialog.getHeight()) / 2);
        fontFaceDialog.setVisible(true);
    }

    private void closeFontFaceDialog() {
        fontFaceDialog.setVisible(false);
        fontFaceList.clearSelection();
    }

    private int getPositionOfWord(String word) {
        int pos = 0;
        try {
            Document doc = documentTextPane.getDocument();
            String text = doc.getText(0, doc.getLength());
            pos = text.indexOf(word, pos);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return pos;
    }

    private void showSaveDialog() {
        docNameTextField.setText(docObj.getNo().replaceAll(" ", ""));
        saveDialog.setLocationRelativeTo(documentViewDialog);
        saveDialog.setModalityType(Dialog.ModalityType.MODELESS);
        Dimension parentSize = getSize();
        saveDialog.setLocation((parentSize.width - saveDialog.getWidth()) / 2, (parentSize.height - saveDialog.getHeight()) / 2);
        saveDialog.setGlassPane(glassPanel);
        saveDialog.setVisible(true);
    }

    private void closeSaveDialog() {
        if (!exporting) {
            saveDialog.setVisible(false);
            docNameTextField.setText(null);
            docFileTextField.setText(null);
            saveButtonGroup.clearSelection();
            saveNotesCheckBox.setSelected(false);
        }
    }

    private void showNoteDialog() {
        notesDialog.setLocationRelativeTo(documentViewDialog);
        notesDialog.setModalityType(Dialog.ModalityType.MODELESS);
        Dimension parentSize = getSize();
        notesDialog.setLocation((parentSize.width - notesDialog.getWidth()) / 2, (parentSize.height - notesDialog.getHeight()) / 2);
        notesDialog.setGlassPane(glassPanel);
        notesDialog.setVisible(true);

        loadNotes();
    }

    private void loadNotes() {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    notesList.clear();
                    NotesDB.getInstance().loadNotes(id, notesList);
                } catch (Exception e) {
                    e.printStackTrace();
                    JOptionPane.showMessageDialog(notesDialog, "ERROR", "Exception : " + e.getMessage(), JOptionPane.ERROR_MESSAGE);
                }
            }
        });
    }

    private void closeNoteDialog() {
        if (!noteSaving) {
            notesDialog.setVisible(false);
            notesTextArea.setText(null);
            notesList.clear();
        }
    }

    private void showSMSDialog() {
        mobileTextField.setText(null);
        titleComboBox.setSelectedIndex(0);
        smsDialog.setLocationRelativeTo(documentViewDialog);
        smsDialog.setModalityType(Dialog.ModalityType.MODELESS);
        Dimension parentSize = getSize();
        smsDialog.setLocation((parentSize.width - saveDialog.getWidth()) / 2, (parentSize.height - saveDialog.getHeight()) / 2);
        smsDialog.setGlassPane(glassPanel);
        smsDialog.setVisible(true);
    }

    private void closeSMSDialog() {
        smsDialog.setVisible(false);
        mobileTextField.setText(null);
        titleComboBox.setSelectedIndex(0);
    }

    public JasperPrint mergerJasperPrints(JasperPrint jp1, JasperPrint jp2) {
        List jps = jp2.getPages();
        for (JRPrintPage jRPrintPage : jps) {
            jp1.addPage(jRPrintPage);
        }
        return jp1;
    }

    /**
     * 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")
    // //GEN-BEGIN:initComponents
    private void initComponents() {
        info.clearthought.layout.TableLayout _tableLayoutInstance;
        info.clearthought.layout.TableLayout _tableLayoutInstance1;
        info.clearthought.layout.TableLayout _tableLayoutInstance10;
        info.clearthought.layout.TableLayout _tableLayoutInstance11;
        info.clearthought.layout.TableLayout _tableLayoutInstance12;
        info.clearthought.layout.TableLayout _tableLayoutInstance13;
        info.clearthought.layout.TableLayout _tableLayoutInstance2;
        info.clearthought.layout.TableLayout _tableLayoutInstance3;
        info.clearthought.layout.TableLayout _tableLayoutInstance4;
        info.clearthought.layout.TableLayout _tableLayoutInstance5;
        info.clearthought.layout.TableLayout _tableLayoutInstance6;
        info.clearthought.layout.TableLayout _tableLayoutInstance7;
        info.clearthought.layout.TableLayout _tableLayoutInstance8;
        info.clearthought.layout.TableLayout _tableLayoutInstance9;
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        notesList = org.jdesktop.observablecollections.ObservableCollections.observableList(new ArrayList());
        glassPanel = new javax.swing.JPanel();
        loadingLabel = new javax.swing.JLabel();
        findBasePanel = new javax.swing.JPanel();
        findTextField = new javax.swing.JTextField();
        findSubButton = new javax.swing.JButton();
        findCancelButton = new javax.swing.JButton();
        matchCaseCheckBox = new javax.swing.JCheckBox();
        highlightCheckBox = new javax.swing.JCheckBox();
        previewButton = new javax.swing.JButton();
        fontFaceBasePanel = new javax.swing.JPanel();
        fontFaceScrollPane = new javax.swing.JScrollPane();
        fontFaceList = new javax.swing.JList();
        fontFaceControlPanel = new javax.swing.JPanel();
        ffOkButton = new javax.swing.JButton();
        ffCancelButton = new javax.swing.JButton();
        saveBasePanel = new javax.swing.JPanel();
        saveDocAsLabel = new javax.swing.JLabel();
        docSaveAsPanel = new javax.swing.JPanel();
        pdfRadioButton = new javax.swing.JRadioButton();
        msWordRadioButton = new javax.swing.JRadioButton();
        odtWordRadioButton = new javax.swing.JRadioButton();
        docNameLabel = new javax.swing.JLabel();
        docNameTextField = new javax.swing.JTextField();
        saveNotesCheckBox = new javax.swing.JCheckBox();
        locationLabel = new javax.swing.JLabel();
        browsePanel = new javax.swing.JPanel();
        docFileTextField = new javax.swing.JTextField();
        browseButton = new javax.swing.JButton();
        docSaveButton = new javax.swing.JButton();
        docSaveCancelButton = new javax.swing.JButton();
        saveButtonGroup = new javax.swing.ButtonGroup();
        notesBasePanel = new javax.swing.JPanel();
        notesTextScrollPane = new javax.swing.JScrollPane();
        notesTextArea = new javax.swing.JTextArea();
        notesControlPanel = new javax.swing.JPanel();
        notesSaveButton = new javax.swing.JButton();
        notesCancelButton = new javax.swing.JButton();
        notesTableScrollPane = new javax.swing.JScrollPane();
        notesTable = new javax.swing.JTable(){
            public void changeSelection(int row, int column, boolean toggle, boolean extend){
                super.changeSelection(row, column, toggle, extend);
                if (editCellAt(row, 2)){
                    Component editor = getEditorComponent();
                    editor.requestFocusInWindow();
                }
            }
        };
        smsBasePanel = new javax.swing.JPanel();
        selectLabel = new javax.swing.JLabel();
        titleComboBox = new javax.swing.JComboBox();
        mobileLabel = new javax.swing.JLabel();
        mobileTextField = new javax.swing.JTextField();
        smsControlPanel = new javax.swing.JPanel();
        sendButton = new javax.swing.JButton();
        smsCancelButton = new javax.swing.JButton();
        basePanel = new javax.swing.JPanel();
        titlePanel = new javax.swing.JPanel();
        titleLabel = new javax.swing.JLabel();
        closeButton = new javax.swing.JButton();
        controlPanel = new javax.swing.JPanel();
        printButton = new javax.swing.JButton();
        findButton = new javax.swing.JButton();
        fontIncreaseButton = new javax.swing.JButton();
        fontDecreaseButton = new javax.swing.JButton();
        addToFolderButton = new javax.swing.JButton();
        saveButton = new javax.swing.JButton();
        defineButton = new javax.swing.JButton();
        sendSMSButton = new javax.swing.JButton();
        fontFaceButton = new javax.swing.JButton();
        noteButton = new javax.swing.JButton();
        documentScrollPane = new javax.swing.JScrollPane();
        documentTextPane = new javax.swing.JTextPane(){
            public void copy(){
                JOptionPane.showMessageDialog(documentViewDialog, "Copy not allowed.");
                select(getSelectionStart(), getSelectionStart());
            }
        }
        ;

        glassPanel.setBackground(new java.awt.Color(0, 0, 0, 28));
        _tableLayoutInstance11 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance11.setHGap(0);
        _tableLayoutInstance11.setVGap(0);
        _tableLayoutInstance11.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.FILL});
        _tableLayoutInstance11.setRow(new double[]{info.clearthought.layout.TableLayout.FILL,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.FILL});
        glassPanel.setLayout(_tableLayoutInstance11);

        loadingLabel.setBackground(new java.awt.Color(255, 255, 255));
        loadingLabel.setFont(new java.awt.Font("Times New Roman", 1, 17)); // NOI18N
        loadingLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        loadingLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/ajax-loader4.gif"))); // NOI18N
        loadingLabel.setText("Processing... ");
        loadingLabel.setOpaque(true);
        glassPanel.add(loadingLabel, new info.clearthought.layout.TableLayoutConstraints(1, 1, 1, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance2 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance2.setHGap(5);
        _tableLayoutInstance2.setVGap(5);
        _tableLayoutInstance2.setColumn(new double[]{0,100,10,100,100,0});
        _tableLayoutInstance2.setRow(new double[]{0,25,info.clearthought.layout.TableLayout.PREFERRED,0});
        findBasePanel.setLayout(_tableLayoutInstance2);

        findTextField.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
        findBasePanel.add(findTextField, new info.clearthought.layout.TableLayoutConstraints(1, 1, 3, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        findSubButton.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
        findSubButton.setText("Find");
        findSubButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                findSubButtonActionPerformed(evt);
            }
        });
        findBasePanel.add(findSubButton, new info.clearthought.layout.TableLayoutConstraints(1, 2, 1, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.CENTER));

        findCancelButton.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
        findCancelButton.setText("Cancel");
        findCancelButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                findCancelButtonActionPerformed(evt);
            }
        });
        findBasePanel.add(findCancelButton, new info.clearthought.layout.TableLayoutConstraints(3, 2, 3, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.CENTER));

        matchCaseCheckBox.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
        matchCaseCheckBox.setText("Match Case");
        matchCaseCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                matchCaseCheckBoxItemStateChanged(evt);
            }
        });
        findBasePanel.add(matchCaseCheckBox, new info.clearthought.layout.TableLayoutConstraints(4, 1, 4, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        highlightCheckBox.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
        highlightCheckBox.setText("Keep 
Highlighting");
        highlightCheckBox.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                highlightCheckBoxItemStateChanged(evt);
            }
        });
        findBasePanel.add(highlightCheckBox, new info.clearthought.layout.TableLayoutConstraints(4, 2, 4, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        previewButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        previewButton.setText("Preview");
        previewButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                previewButtonActionPerformed(evt);
            }
        });

        _tableLayoutInstance3 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance3.setHGap(5);
        _tableLayoutInstance3.setVGap(5);
        _tableLayoutInstance3.setColumn(new double[]{0,350,0});
        _tableLayoutInstance3.setRow(new double[]{0,250,28,0});
        fontFaceBasePanel.setLayout(_tableLayoutInstance3);

        ffListModel = new DefaultListModel();
        fontFaceList.setModel(ffListModel);
        fontFaceList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        fontFaceList.setCellRenderer(new FontListCellRenderer());
        fontFaceScrollPane.setViewportView(fontFaceList);

        fontFaceBasePanel.add(fontFaceScrollPane, new info.clearthought.layout.TableLayoutConstraints(1, 1, 1, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance4 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance4.setHGap(10);
        _tableLayoutInstance4.setVGap(10);
        _tableLayoutInstance4.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL,80,80,info.clearthought.layout.TableLayout.FILL});
        _tableLayoutInstance4.setRow(new double[]{info.clearthought.layout.TableLayout.FILL});
        fontFaceControlPanel.setLayout(_tableLayoutInstance4);

        ffOkButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        ffOkButton.setText("Ok");
        ffOkButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ffOkButtonActionPerformed(evt);
            }
        });
        fontFaceControlPanel.add(ffOkButton, new info.clearthought.layout.TableLayoutConstraints(1, 0, 1, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        ffCancelButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        ffCancelButton.setText("Cancel");
        ffCancelButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ffCancelButtonActionPerformed(evt);
            }
        });
        fontFaceControlPanel.add(ffCancelButton, new info.clearthought.layout.TableLayoutConstraints(2, 0, 2, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        fontFaceBasePanel.add(fontFaceControlPanel, new info.clearthought.layout.TableLayoutConstraints(1, 2, 1, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance6 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance6.setHGap(5);
        _tableLayoutInstance6.setVGap(5);
        _tableLayoutInstance6.setColumn(new double[]{0,170,170,0});
        _tableLayoutInstance6.setRow(new double[]{0,30,30,30,30,30,30,30,3,30,0});
        saveBasePanel.setLayout(_tableLayoutInstance6);

        saveDocAsLabel.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        saveDocAsLabel.setText("Save document as");
        saveBasePanel.add(saveDocAsLabel, new info.clearthought.layout.TableLayoutConstraints(1, 1, 2, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance8 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance8.setHGap(0);
        _tableLayoutInstance8.setVGap(0);
        _tableLayoutInstance8.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.FILL});
        _tableLayoutInstance8.setRow(new double[]{info.clearthought.layout.TableLayout.FILL});
        docSaveAsPanel.setLayout(_tableLayoutInstance8);

        saveButtonGroup.add(pdfRadioButton);
        pdfRadioButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        pdfRadioButton.setText("PDF");
        pdfRadioButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/radio.png"))); // NOI18N
        pdfRadioButton.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/radio_sel.png"))); // NOI18N
        pdfRadioButton.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                pdfRadioButtonItemStateChanged(evt);
            }
        });
        docSaveAsPanel.add(pdfRadioButton, new info.clearthought.layout.TableLayoutConstraints(1, 0, 1, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        saveButtonGroup.add(msWordRadioButton);
        msWordRadioButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        msWordRadioButton.setText("Microsoft Word");
        msWordRadioButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/radio.png"))); // NOI18N
        msWordRadioButton.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/radio_sel.png"))); // NOI18N
        msWordRadioButton.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                msWordRadioButtonItemStateChanged(evt);
            }
        });
        docSaveAsPanel.add(msWordRadioButton, new info.clearthought.layout.TableLayoutConstraints(2, 0, 2, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        saveButtonGroup.add(odtWordRadioButton);
        odtWordRadioButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        odtWordRadioButton.setText("Open Office Word");
        odtWordRadioButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/radio.png"))); // NOI18N
        odtWordRadioButton.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/radio_sel.png"))); // NOI18N
        odtWordRadioButton.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                odtWordRadioButtonItemStateChanged(evt);
            }
        });
        docSaveAsPanel.add(odtWordRadioButton, new info.clearthought.layout.TableLayoutConstraints(3, 0, 3, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        saveBasePanel.add(docSaveAsPanel, new info.clearthought.layout.TableLayoutConstraints(1, 2, 2, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        docNameLabel.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        docNameLabel.setText("Document Name");
        saveBasePanel.add(docNameLabel, new info.clearthought.layout.TableLayoutConstraints(1, 3, 2, 3, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));
        saveBasePanel.add(docNameTextField, new info.clearthought.layout.TableLayoutConstraints(1, 4, 2, 4, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        saveNotesCheckBox.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        saveNotesCheckBox.setText("Save with notes");
        saveNotesCheckBox.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/checkbox.png"))); // NOI18N
        saveNotesCheckBox.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/checkbox_sel.png"))); // NOI18N
        saveBasePanel.add(saveNotesCheckBox, new info.clearthought.layout.TableLayoutConstraints(1, 5, 2, 5, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        locationLabel.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        locationLabel.setText("Location");
        saveBasePanel.add(locationLabel, new info.clearthought.layout.TableLayoutConstraints(1, 6, 1, 6, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance7 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance7.setHGap(0);
        _tableLayoutInstance7.setVGap(0);
        _tableLayoutInstance7.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL,info.clearthought.layout.TableLayout.PREFERRED});
        _tableLayoutInstance7.setRow(new double[]{info.clearthought.layout.TableLayout.FILL});
        browsePanel.setLayout(_tableLayoutInstance7);

        docFileTextField.setEditable(false);
        browsePanel.add(docFileTextField, new info.clearthought.layout.TableLayoutConstraints(0, 0, 0, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        browseButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        browseButton.setText("Browse");
        browseButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                browseButtonActionPerformed(evt);
            }
        });
        browsePanel.add(browseButton, new info.clearthought.layout.TableLayoutConstraints(1, 0, 1, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        saveBasePanel.add(browsePanel, new info.clearthought.layout.TableLayoutConstraints(1, 7, 2, 7, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        docSaveButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        docSaveButton.setText("Save");
        docSaveButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                docSaveButtonActionPerformed(evt);
            }
        });
        saveBasePanel.add(docSaveButton, new info.clearthought.layout.TableLayoutConstraints(1, 9, 1, 9, info.clearthought.layout.TableLayout.TRAILING, info.clearthought.layout.TableLayout.CENTER));

        docSaveCancelButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        docSaveCancelButton.setText("Cancel");
        docSaveCancelButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                docSaveCancelButtonActionPerformed(evt);
            }
        });
        saveBasePanel.add(docSaveCancelButton, new info.clearthought.layout.TableLayoutConstraints(2, 9, 2, 9, info.clearthought.layout.TableLayout.LEFT, info.clearthought.layout.TableLayout.CENTER));

        _tableLayoutInstance9 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance9.setHGap(5);
        _tableLayoutInstance9.setVGap(5);
        _tableLayoutInstance9.setColumn(new double[]{0,600,0});
        _tableLayoutInstance9.setRow(new double[]{0,100,30,300,0});
        notesBasePanel.setLayout(_tableLayoutInstance9);

        notesTextArea.setColumns(20);
        notesTextArea.setLineWrap(true);
        notesTextArea.setRows(5);
        notesTextScrollPane.setViewportView(notesTextArea);

        notesBasePanel.add(notesTextScrollPane, new info.clearthought.layout.TableLayoutConstraints(1, 1, 1, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance10 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance10.setHGap(20);
        _tableLayoutInstance10.setVGap(10);
        _tableLayoutInstance10.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.FILL});
        _tableLayoutInstance10.setRow(new double[]{info.clearthought.layout.TableLayout.FILL});
        notesControlPanel.setLayout(_tableLayoutInstance10);

        notesSaveButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        notesSaveButton.setText("Save");
        notesSaveButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                notesSaveButtonActionPerformed(evt);
            }
        });
        notesControlPanel.add(notesSaveButton, new info.clearthought.layout.TableLayoutConstraints(1, 0, 1, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        notesCancelButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        notesCancelButton.setText("Cancel");
        notesCancelButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                notesCancelButtonActionPerformed(evt);
            }
        });
        notesControlPanel.add(notesCancelButton, new info.clearthought.layout.TableLayoutConstraints(2, 0, 2, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        notesBasePanel.add(notesControlPanel, new info.clearthought.layout.TableLayoutConstraints(1, 2, 1, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        notesTable.setRowHeight(50);

        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, notesList, notesTable);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${note}"));
        columnBinding.setColumnName("Note");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${createdOn}"));
        columnBinding.setColumnName("Created On");
        columnBinding.setColumnClass(String.class);
        columnBinding.setEditable(false);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${noteId}"));
        columnBinding.setColumnName("Action");
        columnBinding.setColumnClass(Integer.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
        notesTableScrollPane.setViewportView(notesTable);
        notesTable.getColumnModel().getColumn(0).setResizable(false);
        notesTable.getColumnModel().getColumn(0).setCellRenderer(new NoteTextCellRenderer());
        notesTable.getColumnModel().getColumn(1).setMinWidth(120);
        notesTable.getColumnModel().getColumn(1).setPreferredWidth(120);
        notesTable.getColumnModel().getColumn(1).setMaxWidth(120);
        notesTable.getColumnModel().getColumn(1).setCellRenderer(new NoteDateCellRenderer());
        notesTable.getColumnModel().getColumn(2).setMinWidth(100);
        notesTable.getColumnModel().getColumn(2).setPreferredWidth(100);
        notesTable.getColumnModel().getColumn(2).setMaxWidth(100);
        notesTable.getColumnModel().getColumn(2).setCellEditor(new NoteActionCellRendererAndEditor());
        notesTable.getColumnModel().getColumn(2).setCellRenderer(new NoteActionCellRendererAndEditor());

        notesBasePanel.add(notesTableScrollPane, new info.clearthought.layout.TableLayoutConstraints(1, 3, 1, 3, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance12 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance12.setHGap(5);
        _tableLayoutInstance12.setVGap(15);
        _tableLayoutInstance12.setColumn(new double[]{50,70,250,50});
        _tableLayoutInstance12.setRow(new double[]{50,30,30,10,30,50});
        smsBasePanel.setLayout(_tableLayoutInstance12);

        selectLabel.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        selectLabel.setText("Select");
        smsBasePanel.add(selectLabel, new info.clearthought.layout.TableLayoutConstraints(1, 1, 1, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        caseTitleComboBox.setFont(new java.awt.Font("Times New Roman", 0, 14)); // NOI18N
        caseTitleComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Select Case Title" }));
        smsBasePanel.add(caseTitleComboBox, new info.clearthought.layout.TableLayoutConstraints(2, 1, 2, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        mobileLabel.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        mobileLabel.setText("Mobile");
        smsBasePanel.add(mobileLabel, new info.clearthought.layout.TableLayoutConstraints(1, 2, 1, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));
        smsBasePanel.add(mobileTextField, new info.clearthought.layout.TableLayoutConstraints(2, 2, 2, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance13 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance13.setHGap(10);
        _tableLayoutInstance13.setVGap(10);
        _tableLayoutInstance13.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL,100,100,info.clearthought.layout.TableLayout.FILL});
        _tableLayoutInstance13.setRow(new double[]{info.clearthought.layout.TableLayout.FILL});
        smsControlPanel.setLayout(_tableLayoutInstance13);

        sendButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        sendButton.setText("Send");
        sendButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sendButtonActionPerformed(evt);
            }
        });
        smsControlPanel.add(sendButton, new info.clearthought.layout.TableLayoutConstraints(1, 0, 1, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        smsCancelButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        smsCancelButton.setText("Cancel");
        smsCancelButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                smsCancelButtonActionPerformed(evt);
            }
        });
        smsControlPanel.add(smsCancelButton, new info.clearthought.layout.TableLayoutConstraints(2, 0, 2, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        smsBasePanel.add(smsControlPanel, new info.clearthought.layout.TableLayoutConstraints(1, 4, 2, 4, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153, 153, 153), 2));
        setLayout(new java.awt.BorderLayout());

        _tableLayoutInstance = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance.setHGap(5);
        _tableLayoutInstance.setVGap(5);
        _tableLayoutInstance.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL});
        _tableLayoutInstance.setRow(new double[]{30,40,info.clearthought.layout.TableLayout.FILL});
        basePanel.setLayout(_tableLayoutInstance);

        titlePanel.setBackground(new java.awt.Color(102, 102, 102));
        _tableLayoutInstance5 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance5.setHGap(0);
        _tableLayoutInstance5.setVGap(0);
        _tableLayoutInstance5.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL,24,5});
        _tableLayoutInstance5.setRow(new double[]{info.clearthought.layout.TableLayout.FILL,24,info.clearthought.layout.TableLayout.FILL});
        titlePanel.setLayout(_tableLayoutInstance5);

        titleLabel.setFont(new java.awt.Font("Times New Roman", 1, 17)); // NOI18N
        titleLabel.setForeground(new java.awt.Color(255, 255, 255));
        titleLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        titleLabel.setText("Document Viewer");
        titlePanel.add(titleLabel, new info.clearthought.layout.TableLayoutConstraints(0, 1, 0, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        closeButton.setFont(new java.awt.Font("Times New Roman", 1, 17)); // NOI18N
        closeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/icons/close_24.png"))); // NOI18N
        closeButton.setToolTipText("Close");
        closeButton.setContentAreaFilled(false);
        closeButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                closeButtonActionPerformed(evt);
            }
        });
        titlePanel.add(closeButton, new info.clearthought.layout.TableLayoutConstraints(1, 1, 1, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        basePanel.add(titlePanel, new info.clearthought.layout.TableLayoutConstraints(0, 0, 0, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        _tableLayoutInstance1 = new info.clearthought.layout.TableLayout();
        _tableLayoutInstance1.setHGap(5);
        _tableLayoutInstance1.setVGap(0);
        _tableLayoutInstance1.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.PREFERRED,info.clearthought.layout.TableLayout.FILL});
        _tableLayoutInstance1.setRow(new double[]{info.clearthought.layout.TableLayout.FILL,28,info.clearthought.layout.TableLayout.FILL});
        controlPanel.setLayout(_tableLayoutInstance1);

        printButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        printButton.setText("Print");
        printButton.setToolTipText("Print");
        printButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                printButtonActionPerformed(evt);
            }
        });
        controlPanel.add(printButton, new info.clearthought.layout.TableLayoutConstraints(8, 1, 8, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        findButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        findButton.setText("Find");
        findButton.setToolTipText("Find");
        findButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                findButtonActionPerformed(evt);
            }
        });
        controlPanel.add(findButton, new info.clearthought.layout.TableLayoutConstraints(4, 1, 4, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        fontIncreaseButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        fontIncreaseButton.setText("AAA");
        fontIncreaseButton.setToolTipText("Increase Font Size");
        fontIncreaseButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fontIncreaseButtonActionPerformed(evt);
            }
        });
        controlPanel.add(fontIncreaseButton, new info.clearthought.layout.TableLayoutConstraints(2, 1, 2, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        fontDecreaseButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        fontDecreaseButton.setText("AAA");
        fontDecreaseButton.setToolTipText("Decrease Font Size");
        fontDecreaseButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fontDecreaseButtonActionPerformed(evt);
            }
        });
        controlPanel.add(fontDecreaseButton, new info.clearthought.layout.TableLayoutConstraints(3, 1, 3, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        addToFolderButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        addToFolderButton.setText("Add to Folder");
        addToFolderButton.setToolTipText("Add to Folder");
        controlPanel.add(addToFolderButton, new info.clearthought.layout.TableLayoutConstraints(6, 1, 6, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        saveButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        saveButton.setText("Save");
        saveButton.setToolTipText("Save");
        saveButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveButtonActionPerformed(evt);
            }
        });
        controlPanel.add(saveButton, new info.clearthought.layout.TableLayoutConstraints(7, 1, 7, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        defineButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        defineButton.setText("Define");
        defineButton.setToolTipText("Define");
        controlPanel.add(defineButton, new info.clearthought.layout.TableLayoutConstraints(9, 1, 9, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        sendSMSButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        sendSMSButton.setText("Send SMS");
        sendSMSButton.setToolTipText("Send SMS");
        sendSMSButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                sendSMSButtonActionPerformed(evt);
            }
        });
        controlPanel.add(sendSMSButton, new info.clearthought.layout.TableLayoutConstraints(10, 1, 10, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        fontFaceButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        fontFaceButton.setText("Font");
        fontFaceButton.setToolTipText("Change Font Face");
        fontFaceButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fontFaceButtonActionPerformed(evt);
            }
        });
        controlPanel.add(fontFaceButton, new info.clearthought.layout.TableLayoutConstraints(1, 1, 1, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        noteButton.setFont(new java.awt.Font("Times New Roman", 0, 16)); // NOI18N
        noteButton.setText("Note");
        noteButton.setToolTipText("Note");
        noteButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                noteButtonActionPerformed(evt);
            }
        });
        controlPanel.add(noteButton, new info.clearthought.layout.TableLayoutConstraints(5, 1, 5, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        basePanel.add(controlPanel, new info.clearthought.layout.TableLayoutConstraints(0, 1, 0, 1, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        documentTextPane.setEditable(false);
        documentTextPane.setContentType("text/html"); // NOI18N
        documentTextPane.addHyperlinkListener(new javax.swing.event.HyperlinkListener() {
            public void hyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {
                documentTextPaneHyperlinkUpdate(evt);
            }
        });
        documentScrollPane.setViewportView(documentTextPane);

        basePanel.add(documentScrollPane, new info.clearthought.layout.TableLayoutConstraints(0, 2, 0, 2, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.FULL));

        add(basePanel, java.awt.BorderLayout.CENTER);

        bindingGroup.bind();
    }// //GEN-END:initComponents

    private void printButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_printButtonActionPerformed
        // TODO add your handling code here:
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    InputStream jin = getClass().getResource("/com/xxx/htmlDocReport.jasper").openStream();
                    Map paramMap = new HashMap();
                    paramMap.put("docBean", docObj);

                    JasperPrint jasperPrint = JasperFillManager.fillReport(jin, paramMap);

                    PrinterJob job = PrinterJob.getPrinterJob();
                    PrintService service = PrintServiceLookup.lookupDefaultPrintService();
                    job.setPrintService(service);

                    PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
                    //printRequestAttributeSet.add(new sun.print.DialogOwner(Bugger.getSingleInstance()));
                    MediaSizeName mediaSizeName = MediaSize.findMedia(4, 4, MediaPrintableArea.INCH);
                    printRequestAttributeSet.add(mediaSizeName);
                    printRequestAttributeSet.add(new Copies(1));

                    JRPrintServiceExporter exporter;
                    exporter = new JRPrintServiceExporter();
                    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                    /* We set the selected service and pass it as a paramenter */
                    exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE, service);
                    exporter.setParameter(JRPrintServiceExporterParameter.PRINT_SERVICE_ATTRIBUTE_SET, service.getAttributes());
                    exporter.setParameter(JRPrintServiceExporterParameter.PRINT_REQUEST_ATTRIBUTE_SET, printRequestAttributeSet);
                    exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PAGE_DIALOG, Boolean.FALSE);
                    exporter.setParameter(JRPrintServiceExporterParameter.DISPLAY_PRINT_DIALOG, Boolean.TRUE);
                    exporter.exportReport();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }//GEN-LAST:event_printButtonActionPerformed

    private void previewButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_previewButtonActionPerformed
        // TODO add your handling code here:
        SwingWorker sw = new SwingWorker() {
            @Override
            protected Object doInBackground() throws Exception {
                InputStream jin = getClass().getResource("/com/xxx/htmlDocReport.jasper").openStream();
                Map paramMap = new HashMap();
                paramMap.put("docBean", docObj);

                JasperPrint jasperPrint = JasperFillManager.fillReport(jin, paramMap);
                return jasperPrint;
            }

            @Override
            protected void done() {
                super.done();
                try {
                    JRSaveContributor jasperPrintContrinutor = null;
                    Object obj = get();
                    if (obj instanceof JasperPrint) {
                        JasperPrint jasperPrint = (JasperPrint) obj;
                        JRViewer jRViewer = new JRViewer(jasperPrint);
                        JRSaveContributor jRSaveContributors[] = jRViewer.getSaveContributors();
                        for (int i = 0; i < jRSaveContributors.length; i++) {
                            JRSaveContributor jRSaveContributor = jRSaveContributors[i];
                            //System.out.println("Desc : " + jRSaveContributor.getDescription());
                            if (jRSaveContributor.getDescription().contains("jrprint")) {
                                jasperPrintContrinutor = jRSaveContributor;
                            }
                        }
                        if (jasperPrintContrinutor != null) {
                            jRViewer.removeSaveContributor(jasperPrintContrinutor);
                        }
                        showDocumentPreView(jRViewer);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
        Executors.newCachedThreadPool().submit(sw);
    }//GEN-LAST:event_previewButtonActionPerformed

    private void documentTextPaneHyperlinkUpdate(javax.swing.event.HyperlinkEvent evt) {//GEN-FIRST:event_documentTextPaneHyperlinkUpdate
        // TODO add your handling code here:
        if (evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
            //JOptionPane.showMessageDialog(null, evt.getDescription());
            final String description = evt.getDescription();
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        
                    } catch (IOException io) {
                        io.printStackTrace();
                        JOptionPane.showMessageDialog(documentViewDialog, "ERROR", "Document not found.", JOptionPane.ERROR_MESSAGE);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    }//GEN-LAST:event_documentTextPaneHyperlinkUpdate

    private void findButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_findButtonActionPerformed
        // TODO add your handling code here:
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                showFindDialog();
            }
        });
    }//GEN-LAST:event_findButtonActionPerformed

    private void findSubButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_findSubButtonActionPerformed
        // TODO add your handling code here:
        final String findText = findTextField.getText().trim();
        removeSearchHighlights(documentTextPane);
        removeFindHighlights(documentTextPane);
        if (!findText.isEmpty()) {
            currentPosition = 0;
            if (previousPosition == lastPosition) {
                previousPosition = 0;
            }
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    findWord(findText);
                }
            });
        }
    }//GEN-LAST:event_findSubButtonActionPerformed

    private void findCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_findCancelButtonActionPerformed
        // TODO add your handling code here:
        closeFindDialog();
    }//GEN-LAST:event_findCancelButtonActionPerformed

    private void highlightCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_highlightCheckBoxItemStateChanged
        // TODO add your handling code here:
        removeSearchHighlights(documentTextPane);
        findWord(findTextField.getText().trim());
    }//GEN-LAST:event_highlightCheckBoxItemStateChanged

    private void matchCaseCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_matchCaseCheckBoxItemStateChanged
        // TODO add your handling code here:
        currentPosition = 0;
        previousPosition = 0;
        lastPosition = 0;
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                removeFindHighlights(documentTextPane);
                removeSearchHighlights(documentTextPane);
                findWord(findTextField.getText().trim());
            }
        });
    }//GEN-LAST:event_matchCaseCheckBoxItemStateChanged

    private void fontIncreaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fontIncreaseButtonActionPerformed
        // TODO add your handling code here:
        if (fontSize < maxFontSize) {
            fontSize = fontSize + fontIncrementSize;
            prepareHTML();
            showHTML();
        }
    }//GEN-LAST:event_fontIncreaseButtonActionPerformed

    private void fontDecreaseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fontDecreaseButtonActionPerformed
        // TODO add your handling code here:
        System.out.println(fontSize);
        if (fontSize > minFontSize) {
            fontSize = fontSize - fontDecrementSize;
            prepareHTML();
            showHTML();
        }
    }//GEN-LAST:event_fontDecreaseButtonActionPerformed

    private void fontFaceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fontFaceButtonActionPerformed
        // TODO add your handling code here:
        showFontFaceDialog();
    }//GEN-LAST:event_fontFaceButtonActionPerformed

    private void ffOkButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ffOkButtonActionPerformed
        // TODO add your handling code here:
        defaultFonName = (String) fontFaceList.getSelectedValue();
        prepareHTML();
        showHTML();
        closeFontFaceDialog();
    }//GEN-LAST:event_ffOkButtonActionPerformed

    private void ffCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ffCancelButtonActionPerformed
        // TODO add your handling code here:
        closeFontFaceDialog();
    }//GEN-LAST:event_ffCancelButtonActionPerformed

    private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed
        // TODO add your handling code here:
        closeDocumentViewer();
    }//GEN-LAST:event_closeButtonActionPerformed

    private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed
        // TODO add your handling code here:
        JFileChooser fileChooser = new JFileChooser(currentSaveDir);
        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        if (fileChooser.showOpenDialog(saveDialog) == JFileChooser.APPROVE_OPTION) {
            File selectedDir = fileChooser.getSelectedFile();
            docFileTextField.setText(selectedDir.getAbsolutePath());
        }
    }//GEN-LAST:event_browseButtonActionPerformed

    private void docSaveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_docSaveButtonActionPerformed
        // TODO add your handling code here:
        if (!exporting) {
            if (saveButtonGroup.getSelection() != null) {
                String docName = docNameTextField.getText().trim();
                if (!docName.isEmpty()) {
                    String docPath = docFileTextField.getText().trim();
                    if (!docPath.isEmpty()) {
                        SwingWorker sw = new SwingWorker() {
                            @Override
                            protected Object doInBackground() throws Exception {
                                saveDialog.getGlassPane().setVisible(true);
                                //Thread.sleep(10000);
                                //saveDialog.getContentPane().validate();
                                //ProcessingJDialog.getInstance(saveDialog).showDialog();

                                exporting = true;
                                InputStream jinDoc = getClass().getResource("/com/xx/xx.jasper").openStream();
                                InputStream jinNote = getClass().getResource("/com/xx/xx.jasper").openStream();

                                Map paramMap = new HashMap();
                                paramMap.put("docBean", docObj);

                                JasperPrint jasperPrint1 = JasperFillManager.fillReport(jinDoc, paramMap);

                                if (saveNotesCheckBox.isSelected()) {
                                    List notes = new ArrayList();
                                    dB.getInstance().loadNotes(id, notes);
                                    String noteText = "
    "; for (int i = 0; i < caseNotes.size(); i++) { CaseNote cn = caseNotes.get(i); caseNoteText += "
  1. " + cn.getNote() + "
  2. "; } caseNoteText += "
"; Map paramMap1 = new HashMap(); paramMap1.put("notes", noteText); JasperPrint jasperPrint2 = JasperFillManager.fillReport(jinNote, paramMap1); jasperPrint1 = mergerJasperPrints(jasperPrint1, jasperPrint2); System.out.println("notes --> " + paramMap1.get("notes")); } String saveType = "pdf"; if (msWordRadioButton.isSelected()) { saveType = "docx"; } else if (odtWordRadioButton.isSelected()) { saveType = "odt"; } JRExporter exporter = null; if (saveType.equalsIgnoreCase("pdf")) { exporter = new JRPdfExporter(); } else if (saveType.equalsIgnoreCase("docx")) { exporter = new JRDocxExporter(); } else if (saveType.equalsIgnoreCase("odt")) { exporter = new JROdtExporter(); } if (exporter != null) { String docName = docNameTextField.getText(); if (docName.lastIndexOf(".") > 0) { docName = docName.substring(0, docName.lastIndexOf(".")); } String fileName = docFileTextField.getText() + File.separator + docName + "." + saveType; FileOutputStream fout = new FileOutputStream(fileName); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint1); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fout); exporter.exportReport(); fout.flush(); fout.close(); } return true; } @Override protected void done() { super.done(); saveDialog.getGlassPane().setVisible(false); //ProcessingJDialog.getInstance(saveDialog).showDialog(); try { get(); JOptionPane.showMessageDialog(saveDialog, "Save completed."); } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(saveDialog, "Exception : " + e.getMessage()); } finally { exporting = false; } closeSaveDialog(); } }; Executors.newCachedThreadPool().execute(sw); } else { JOptionPane.showMessageDialog(saveDialog, "Select document save location."); } } else { JOptionPane.showMessageDialog(saveDialog, "Enter document name to save."); } } else { JOptionPane.showMessageDialog(saveDialog, "Select document save as type."); } } }//GEN-LAST:event_docSaveButtonActionPerformed private void docSaveCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_docSaveCancelButtonActionPerformed // TODO add your handling code here: closeSaveDialog(); }//GEN-LAST:event_docSaveCancelButtonActionPerformed private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed // TODO add your handling code here: showSaveDialog(); }//GEN-LAST:event_saveButtonActionPerformed private void noteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_noteButtonActionPerformed // TODO add your handling code here: showNoteDialog(); }//GEN-LAST:event_noteButtonActionPerformed private void notesSaveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_notesSaveButtonActionPerformed // TODO add your handling code here: final String notes = notesTextArea.getText().trim(); if (!notes.isEmpty()) { SwingWorker sw = new SwingWorker() { @Override protected Object doInBackground() throws Exception { notesDialog.getGlassPane().setVisible(true); //ProcessingJDialog.getInstance(notesDialog).showDialog(); int row = notesTable.getSelectedRow(); Note note = null; if (row > -1) { note = notesList.get(notesTable.convertRowIndexToModel(row)); } else { note = new Note(); } if (note != null) { notesTextArea.setText(note.getNote()); note.setId(Integer.parseInt(iId)); note.setNote(notes); dB.getInstance().saveNote(note); } return note; } @Override protected void done() { super.done(); notesDialog.getGlassPane().setVisible(false); //ProcessingJDialog.getInstance(notesDialog).hideDialog(); try { Object obj = get(); if (obj instanceof note) { //final Note noteBean = (Note) obj; JOptionPane.showMessageDialog(notesDialog, "Note successfully saved."); notesTextArea.setText(null); loadNotes(); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(notesDialog, "ERROR", "Exception : " + e.getMessage(), JOptionPane.ERROR_MESSAGE); } notesTable.removeEditor(); } }; Executors.newCachedThreadPool().submit(sw); } else { JOptionPane.showMessageDialog(saveDialog, "Enter note text."); } }//GEN-LAST:event_notesSaveButtonActionPerformed private void notesCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_notesCancelButtonActionPerformed // TODO add your handling code here: closeNoteDialog(); }//GEN-LAST:event_notesCancelButtonActionPerformed private void pdfRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_pdfRadioButtonItemStateChanged // TODO add your handling code here: if (evt.getStateChange() == ItemEvent.SELECTED) { String docName = docNameTextField.getText(); if (docName.lastIndexOf(".") > 0) { docName = docName.substring(0, docName.lastIndexOf(".")); } docNameTextField.setText(docName + ".pdf"); } }//GEN-LAST:event_pdfRadioButtonItemStateChanged private void msWordRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_msWordRadioButtonItemStateChanged // TODO add your handling code here: if (evt.getStateChange() == ItemEvent.SELECTED) { String docName = docNameTextField.getText(); if (docName.lastIndexOf(".") > 0) { docName = docName.substring(0, docName.lastIndexOf(".")); } docNameTextField.setText(docName + ".docx"); } }//GEN-LAST:event_msWordRadioButtonItemStateChanged private void odtWordRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_odtWordRadioButtonItemStateChanged // TODO add your handling code here: if (evt.getStateChange() == ItemEvent.SELECTED) { String docName = docNameTextField.getText(); if (docName.lastIndexOf(".") > 0) { docName = docName.substring(0, docName.lastIndexOf(".")); } docNameTextField.setText(docName + ".odt"); } }//GEN-LAST:event_odtWordRadioButtonItemStateChanged private void sendSMSButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendSMSButtonActionPerformed // TODO add your handling code here: showSMSDialog(); }//GEN-LAST:event_sendSMSButtonActionPerformed private void sendButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_sendButtonActionPerformed // TODO add your handling code here: }//GEN-LAST:event_sendButtonActionPerformed private void smsCancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_smsCancelButtonActionPerformed // TODO add your handling code here: closeSMSDialog(); }//GEN-LAST:event_smsCancelButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addToFolderButton; private javax.swing.JPanel basePanel; private javax.swing.JButton browseButton; private javax.swing.JPanel browsePanel; private javax.swing.JComboBox titleComboBox; private javax.swing.JButton closeButton; private javax.swing.JPanel controlPanel; private javax.swing.JButton defineButton; private javax.swing.JTextField docFileTextField; private javax.swing.JLabel docNameLabel; private javax.swing.JTextField docNameTextField; private javax.swing.JPanel docSaveAsPanel; private javax.swing.JButton docSaveButton; private javax.swing.JButton docSaveCancelButton; private javax.swing.JScrollPane documentScrollPane; private javax.swing.JTextPane documentTextPane; private javax.swing.JButton ffCancelButton; private javax.swing.JButton ffOkButton; private javax.swing.JPanel findBasePanel; private javax.swing.JButton findButton; private javax.swing.JButton findCancelButton; private javax.swing.JButton findSubButton; private javax.swing.JTextField findTextField; private javax.swing.JButton fontDecreaseButton; private javax.swing.JPanel fontFaceBasePanel; private javax.swing.JButton fontFaceButton; private javax.swing.JPanel fontFaceControlPanel; private javax.swing.JList fontFaceList; private javax.swing.JScrollPane fontFaceScrollPane; private javax.swing.JButton fontIncreaseButton; private javax.swing.JPanel glassPanel; private javax.swing.JCheckBox highlightCheckBox; private javax.swing.JLabel loadingLabel; private javax.swing.JLabel locationLabel; private javax.swing.JCheckBox matchCaseCheckBox; private javax.swing.JLabel mobileLabel; private javax.swing.JTextField mobileTextField; private javax.swing.JRadioButton msWordRadioButton; private javax.swing.JButton noteButton; private javax.swing.JPanel notesBasePanel; private javax.swing.JButton notesCancelButton; private javax.swing.JPanel notesControlPanel; private java.util.List notesList; private javax.swing.JButton notesSaveButton; private javax.swing.JTable notesTable; private javax.swing.JScrollPane notesTableScrollPane; private javax.swing.JTextArea notesTextArea; private javax.swing.JScrollPane notesTextScrollPane; private javax.swing.JRadioButton odtWordRadioButton; private javax.swing.JRadioButton pdfRadioButton; private javax.swing.JButton previewButton; private javax.swing.JButton printButton; private javax.swing.JPanel saveBasePanel; private javax.swing.JButton saveButton; private javax.swing.ButtonGroup saveButtonGroup; private javax.swing.JLabel saveDocAsLabel; private javax.swing.JCheckBox saveNotesCheckBox; private javax.swing.JLabel selectLabel; private javax.swing.JButton sendButton; private javax.swing.JButton sendSMSButton; private javax.swing.JPanel smsBasePanel; private javax.swing.JButton smsCancelButton; private javax.swing.JPanel smsControlPanel; private javax.swing.JLabel titleLabel; private javax.swing.JPanel titlePanel; private org.jdesktop.beansbinding.BindingGroup bindingGroup; // End of variables declaration//GEN-END:variables private JDialog documentViewDialog; private JDialog previewDialog; private JDialog findDialog, fontFaceDialog, saveDialog, notesDialog, smsDialog; private static DocumentViewerJPanel instance; private String html, id, currentSearchWord; private DocumentViewerBean docObj; private boolean highLight = false; private int currentPosition = 0, previousPosition = 0, lastPosition = 0; private int fontSize = 14; private int maxFontSize = 18; private int minFontSize = 10; private int fontIncrementSize = 1; private int fontDecrementSize = 1; private String defaultFonName = "Arial"; private DefaultListModel ffListModel; private String currentSaveDir = ""; private boolean exporting = false, noteSaving = false; public static String DOC_FOLDER = "Files" + File.separator; public static String IMAGE_FOLDER = "Images" + File.separator; // An instance of the private subclass of the default highlight painter // 236, 235, 163 - light yellow // 176, 197, 227 - lignt blue // 148, 255, 148 - light green Highlighter.HighlightPainter searchHighlighter = new SearchHighlightPainter(new Color(236, 235, 163)); // A class of the default highlight painter private class SearchHighlightPainter extends DefaultHighlighter.DefaultHighlightPainter { public SearchHighlightPainter(Color color) { super(color); } } Highlighter.HighlightPainter findHighlighter = new FindHighlightPainter(new Color(148, 255, 148)); // A class of the default highlight painter private class FindHighlightPainter extends DefaultHighlighter.DefaultHighlightPainter { public FindHighlightPainter(Color color) { super(color); } } class FontListCellRenderer extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { DefaultListCellRenderer comp = (DefaultListCellRenderer) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); Font f = new Font((String) value, Font.PLAIN, 18); comp.setFont(f); comp.setText("
" + (String) value); return comp; } } class NoteTextCellRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { DefaultTableCellRenderer comp = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); comp.setVerticalAlignment(JLabel.TOP); comp.setText("" + comp.getText()); comp.setToolTipText("
" + comp.getText()); return comp; } } class NoteDateCellRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { DefaultTableCellRenderer comp = (DefaultTableCellRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); comp.setHorizontalAlignment(JLabel.CENTER); return comp; } } class NoteActionCellRendererAndEditor extends AbstractCellEditor implements TableCellRenderer, TableCellEditor { private JPanel panel; private Object value; private int row = -1; public NoteActionCellRendererAndEditor() { panel = new JPanel(); info.clearthought.layout.TableLayout _tableLayoutInstance12 = new info.clearthought.layout.TableLayout(); _tableLayoutInstance12.setHGap(0); _tableLayoutInstance12.setVGap(0); _tableLayoutInstance12.setColumn(new double[]{info.clearthought.layout.TableLayout.FILL, info.clearthought.layout.TableLayout.PREFERRED, info.clearthought.layout.TableLayout.FILL, info.clearthought.layout.TableLayout.PREFERRED, info.clearthought.layout.TableLayout.FILL}); _tableLayoutInstance12.setRow(new double[]{info.clearthought.layout.TableLayout.FILL}); panel.setLayout(_tableLayoutInstance12); JLabel editLabel = new JLabel("Edit"); editLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); editLabel.setHorizontalAlignment(JLabel.CENTER); editLabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { CaseNote caseNote = notesList.get(notesTable.convertRowIndexToModel(row)); notesTextArea.setText(caseNote.getNote()); } }); panel.add(editLabel, new info.clearthought.layout.TableLayoutConstraints(1, 0, 1, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.CENTER)); JLabel deleteLabel = new JLabel("Delete"); deleteLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)); deleteLabel.setHorizontalAlignment(JLabel.CENTER); deleteLabel.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int confirm = JOptionPane.showConfirmDialog(notesDialog, "Do you want to delete this note?", "DELETE", JOptionPane.YES_NO_OPTION); if (confirm == JOptionPane.YES_OPTION) { SwingWorker sw = new SwingWorker() { @Override protected Object doInBackground() throws Exception { notesDialog.getGlassPane().setVisible(true); CaseNote caseNote = notesList.get(notesTable.convertRowIndexToModel(row)); NotesDB.getInstance().deleteNote(caseNote); return caseNote; } @Override protected void done() { super.done(); notesDialog.getGlassPane().setVisible(false); try { Object obj = get(); if (obj instanceof CaseNote) { final CaseNote noteBean = (CaseNote) obj; notesList.remove(noteBean); JOptionPane.showMessageDialog(notesDialog, "Note successfully deleted."); } } catch (Exception e) { e.printStackTrace(); JOptionPane.showMessageDialog(notesDialog, "ERROR", "Exception : " + e.getMessage(), JOptionPane.ERROR_MESSAGE); } } }; Executors.newCachedThreadPool().submit(sw); } } }); panel.add(deleteLabel, new info.clearthought.layout.TableLayoutConstraints(3, 0, 3, 0, info.clearthought.layout.TableLayout.FULL, info.clearthought.layout.TableLayout.CENTER)); } @Override public Object getCellEditorValue() { return value; } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { this.value = value; this.row = row; if (isSelected) { panel.setBackground(table.getSelectionBackground()); } else { panel.setBackground(table.getBackground()); } return panel; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { this.value = value; this.row = row; if (isSelected) { panel.setBackground(table.getSelectionBackground()); } else { panel.setBackground(table.getBackground()); } return panel; } } }