Java tutorial
//The contents of this file are subject to the Mozilla Public License Version 1.1 //(the "License"); you may not use this file except in compliance with the //License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ // //Software distributed under the License is distributed on an "AS IS" basis, //WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License //for the specific language governing rights and //limitations under the License. // //The Original Code is "The Columba Project" // //The Initial Developers of the Original Code are Frederik Dietz and Timo Stich. //Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003. // //All Rights Reserved. package org.columba.mail.gui.config.search; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.KeyStroke; import javax.swing.SwingConstants; import org.columba.api.gui.frame.IFrameMediator; import org.columba.core.filter.FilterRule; import org.columba.core.filter.IFilterRule; import org.columba.core.folder.api.IFolder; import org.columba.core.gui.base.ButtonWithMnemonic; import org.columba.core.gui.base.CheckBoxWithMnemonic; import org.columba.core.gui.base.LabelWithMnemonic; import org.columba.core.gui.base.SingleSideEtchedBorder; import org.columba.core.gui.util.DialogHeaderPanel; import org.columba.core.resourceloader.IconKeys; import org.columba.core.resourceloader.ImageLoader; import org.columba.mail.command.MailFolderCommandReference; import org.columba.mail.folder.IMailFolder; import org.columba.mail.folder.IMailbox; import org.columba.mail.folder.virtual.VirtualFolder; import org.columba.mail.gui.config.filter.CriteriaList; import org.columba.mail.gui.frame.MailFrameMediator; import org.columba.mail.gui.tree.FolderTreeModel; import org.columba.mail.gui.tree.util.SelectSearchFolderDialog; import org.columba.mail.gui.tree.util.TreeNodeList; import org.columba.mail.util.MailResourceLoader; import com.jgoodies.forms.builder.PanelBuilder; import com.jgoodies.forms.layout.CellConstraints; import com.jgoodies.forms.layout.FormLayout; /** * Search message Dialog. Lets you specify a source-folder and the search * criteria. * * @author fdietz */ public class SearchFrame extends JDialog implements ActionListener { private JLabel folderLabel; private JLabel nameLabel; private JButton selectButton; private JButton searchButton; private JCheckBox includeSubfolderButton; private CriteriaList criteriaList; private VirtualFolder destFolder; private JComboBox condList; private IFrameMediator frameController; public SearchFrame(IFrameMediator frameController, IMailbox searchFolder) { super(frameController.getView().getFrame(), true); this.frameController = frameController; this.destFolder = (VirtualFolder) searchFolder; setTitle(MailResourceLoader.getString("dialog", "filter", "searchdialog_title")); initComponents(); updateComponents(true); pack(); setLocationRelativeTo(null); setVisible(true); } public SearchFrame(IFrameMediator frameController, IMailbox searchFolder, IMailbox sourceFolder) { super(frameController.getView().getFrame(), true); this.frameController = frameController; this.destFolder = (VirtualFolder) searchFolder; setTitle(MailResourceLoader.getString("dialog", "filter", "searchdialog_title")); initComponents(); updateComponents(true); setSourceFolder(sourceFolder); pack(); setLocationRelativeTo(null); setVisible(true); } public JPanel createPanel() { FormLayout formlayout1 = new FormLayout("6DLU,FILL:DEFAULT:GROW(1.0)", "CENTER:DEFAULT:NONE,6DLU,CENTER:DEFAULT:NONE,6DLU,FILL:DEFAULT:GROW(1.0)"); formlayout1.setRowGroups(new int[][] { { 5 } }); CellConstraints cc = new CellConstraints(); PanelBuilder builder = new PanelBuilder(formlayout1); builder.setDefaultDialogBorder(); builder.add(createPanel1(), cc.xywh(1, 1, 2, 1)); builder.addSeparator(MailResourceLoader.getString("dialog", "filter", "if"), cc.xywh(1, 3, 2, 1)); builder.add(createPanel2(), cc.xy(2, 5)); return builder.getPanel(); } public JPanel createPanel1() { JPanel jpanel1 = new JPanel(); FormLayout formlayout1 = new FormLayout( "LEFT:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0),3DLU,FILL:DEFAULT:NONE", "FILL:DEFAULT:NONE"); CellConstraints cc = new CellConstraints(); jpanel1.setLayout(formlayout1); jpanel1.add(folderLabel, cc.xy(1, 1)); jpanel1.add(selectButton, cc.xy(3, 1)); jpanel1.add(includeSubfolderButton, cc.xy(5, 1)); return jpanel1; } public JPanel createPanel2() { JPanel jpanel1 = new JPanel(); FormLayout formlayout1 = new FormLayout( "FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:NONE", "FILL:DEFAULT:NONE,3DLU,FILL:DEFAULT:GROW(1.0)"); CellConstraints cc = new CellConstraints(); jpanel1.setLayout(formlayout1); jpanel1.add(nameLabel, cc.xy(3, 1)); jpanel1.add(condList, cc.xy(5, 1)); jpanel1.add(criteriaList, cc.xywh(1, 3, 5, 1)); return jpanel1; } /** * init components */ protected void initComponents() { folderLabel = new LabelWithMnemonic(MailResourceLoader.getString("dialog", "filter", "choose_folder")); selectButton = new JButton(); folderLabel.setLabelFor(selectButton); selectButton.setActionCommand("SELECT"); selectButton.addActionListener(this); includeSubfolderButton = new CheckBoxWithMnemonic( MailResourceLoader.getString("dialog", "filter", "include_subfolders")); nameLabel = new LabelWithMnemonic(MailResourceLoader.getString("dialog", "filter", "execute_actions")); String[] cond = { MailResourceLoader.getString("dialog", "filter", "all_criteria"), MailResourceLoader.getString("dialog", "filter", "any_criteria") }; condList = new JComboBox(cond); criteriaList = new CriteriaList(destFolder.getFilter()); criteriaList.setPreferredSize(new Dimension(500, 100)); getContentPane().setLayout(new BorderLayout()); getContentPane().add(createPanel(), BorderLayout.CENTER); getContentPane().add(createBottomPanel(), BorderLayout.SOUTH); getContentPane().add(new DialogHeaderPanel(MailResourceLoader.getString("dialog", "filter", "header_title"), MailResourceLoader.getString("dialog", "filter", "header_description"), ImageLoader.getIcon(IconKeys.SEARCH)), BorderLayout.NORTH); } /** * @param contentPane */ private JPanel createBottomPanel() { JPanel bottom = new JPanel(new BorderLayout()); bottom.setBorder(new SingleSideEtchedBorder(SwingConstants.TOP)); JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 6, 0)); buttonPanel.setBorder(BorderFactory.createEmptyBorder(12, 12, 12, 12)); searchButton = new JButton(MailResourceLoader.getString("dialog", "filter", "search")); searchButton.setIcon(ImageLoader.getIcon(IconKeys.SEARCH)); searchButton.addActionListener(this); searchButton.setActionCommand("SEARCH"); buttonPanel.add(searchButton); ButtonWithMnemonic closeButton = new ButtonWithMnemonic(MailResourceLoader.getString("global", "close")); closeButton.addActionListener(this); closeButton.setActionCommand("CLOSE"); buttonPanel.add(closeButton); ButtonWithMnemonic helpButton = new ButtonWithMnemonic(MailResourceLoader.getString("global", "help")); helpButton.addActionListener(this); helpButton.setActionCommand("HELP"); helpButton.setEnabled(false); buttonPanel.add(helpButton); bottom.add(buttonPanel, BorderLayout.EAST); getRootPane().setDefaultButton(searchButton); getRootPane().registerKeyboardAction(this, "CLOSE", KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); return bottom; } public void updateComponents(boolean b) { if (b) { IFilterRule filterRule = destFolder.getFilter().getFilterRule(); String value = filterRule.getCondition(); if (value.equals("matchall")) { condList.setSelectedIndex(0); } else { condList.setSelectedIndex(1); } boolean isInclude = Boolean .valueOf(destFolder.getConfiguration().getString("property", "include_subfolders")) .booleanValue(); includeSubfolderButton.setSelected(isInclude); String uid = destFolder.getConfiguration().getString("property", "source_uid"); IMailFolder f = (IMailFolder) FolderTreeModel.getInstance().getFolder(uid); // If f==null because of deleted AbstractMessageFolder fallback to // Inbox if (f == null) { uid = "101"; destFolder.getConfiguration().setString("property", "source_uid", uid); f = (IMailbox) FolderTreeModel.getInstance().getFolder(uid); } selectButton.setText(f.getTreePath()); criteriaList.updateComponents(b); } else { // get values from components IFilterRule filterRule = destFolder.getFilter().getFilterRule(); int index = condList.getSelectedIndex(); if (index == 0) { filterRule.setCondition("matchall"); } else { filterRule.setCondition("matchany"); } if (includeSubfolderButton.isSelected()) { destFolder.getConfiguration().setString("property", "include_subfolders", "true"); } else { destFolder.getConfiguration().setString("property", "include_subfolders", "false"); } String path = selectButton.getText(); TreeNodeList list = new TreeNodeList(path); IMailFolder folder = (IMailFolder) FolderTreeModel.getInstance().getFolder(list); String uid = folder.getId(); destFolder.getConfiguration().setString("property", "source_uid", uid); criteriaList.updateComponents(b); } } public void setSourceFolder(IMailbox f) { selectButton.setText(f.getTreePath()); } public void actionPerformed(ActionEvent e) { String action = e.getActionCommand(); if (action.equals("CLOSE")) { updateComponents(false); setVisible(false); } else if (action.equals("ADD_CRITERION")) { criteriaList.add(); } else if (action.equals("SELECT")) { SelectSearchFolderDialog dialog = new SelectSearchFolderDialog(frameController); if (dialog.success()) { IFolder folder = dialog.getSelectedFolder(); String path = folder.getTreePath(); selectButton.setText(path); } } else if (action.equals("SEARCH")) { updateComponents(false); setVisible(false); try { // Deactivate this vFolder because changes are about to happen // and the search needs to be redone. ((VirtualFolder) destFolder).deactivate(); ((VirtualFolder) destFolder).addSearchToHistory(); } catch (Exception ex) { ex.printStackTrace(); } MailFolderCommandReference r = new MailFolderCommandReference(destFolder); ((MailFrameMediator) frameController).setTreeSelection(r); } } }