pjs/grendel/search/MailSearch.java

239 строки
5.8 KiB
Java

/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.0 (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 Grendel mail/news client.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are Copyright (C) 1997
* Netscape Communications Corporation. All Rights Reserved.
*
* Created: Will Scullin <scullin@netscape.com>, 9 Oct 1997.
*
* Contributors: Jeff Galyan <talisman@anamorphic.com>
*/
package grendel.search;
import java.awt.Component;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import javax.mail.Folder;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.AddressException;
import javax.mail.search.DateTerm;
import javax.mail.search.FromTerm;
import javax.mail.search.SentDateTerm;
import javax.mail.search.SubjectTerm;
import javax.mail.search.SearchTerm;
import javax.swing.JTextField;
import grendel.ui.FolderCombo;
import grendel.ui.FolderFrame;
import grendel.ui.FolderPanel;
import grendel.ui.MessageDisplayManager;
import grendel.storage.SearchResultsFolderFactory;
import grendel.view.ViewedFolder;
public class MailSearch implements ISearchable {
static ISearchAttribute fAttributes[] = {
new SubjectAttribute(),
new AuthorAttribute(),
new SentDateAttribute()};
FolderCombo fTarget = null;
public int getSearchAttributeCount() {
return fAttributes.length;
}
public ISearchAttribute getSearchAttribute(int idx) {
return fAttributes[idx];
}
public void search(SearchTerm aTerm) {
ViewedFolder folder = fTarget.getSelectedFolder();
// Set target folder focus and search term in SearchResults singleton.
SearchResultsFolderFactory.SetTarget(folder.getFolder(), aTerm);
// Now need to force re-opening of the SearchResults folder in
// Master Panel.... Will?
Folder results = SearchResultsFolderFactory.Get();
// MessageDisplayManager.GetDefaultManager().displayFolder(results);
FolderFrame frame = FolderFrame.FindFolderFrame(results);
if (frame == null) {
frame = new FolderFrame(results);
frame.setVisible(true);
}
frame.toFront();
frame.requestFocus();
}
public ISearchResults getSearchResults() {
return null;
}
public Component getTargetComponent() {
if (fTarget == null) {
fTarget = new FolderCombo();
}
fTarget.populate(Folder.HOLDS_MESSAGES, 0);
return fTarget;
}
public Component getResultComponent(ISearchResults aResults) {
Folder results = SearchResultsFolderFactory.Get();
//FolderPanel resultPanel = new FolderPanel();
//resultPanel.setFolder(results);
FolderPanel resultPanel = null;
return resultPanel;
}
}
class SubjectAttribute implements ISearchAttribute {
static final String kID = "Subject";
static final String kContains = "Contains";
public String getName() {
return "Subject";
}
public Object getID() {
return kID;
}
public int getOperatorCount() {
return 1;
}
public Object getOperator(int aIndex) {
return kContains;
}
public Component getValueComponent() {
return new JTextField(30);
}
public Object getValue(Component aComponent) {
return ((JTextField) aComponent).getText();
}
public SearchTerm getAttributeTerm(Object aOperatorID, Object aValue) {
return new SubjectTerm((String) aValue);
}
public String toString() {
return getName();
}
}
class AuthorAttribute implements ISearchAttribute {
static final String kID = "Author";
static final String kIs = "Is";
public String getName() {
return "Author";
}
public Object getID() {
return kID;
}
public int getOperatorCount() {
return 1;
}
public Object getOperator(int aIndex) {
return kIs;
}
public Component getValueComponent() {
return new JTextField(30);
}
public Object getValue(Component aComponent) {
return ((JTextField) aComponent).getText();
}
public SearchTerm getAttributeTerm(Object aOperatorID, Object aValue) {
try {
return new FromTerm(new InternetAddress((String) aValue));
} catch (AddressException e) {
return null;
}
}
public String toString() {
return getName();
}
}
class SentDateAttribute implements ISearchAttribute {
static final String kID = "SendDate";
static final String kLessThan = "is before";
static final String kIs = "is";
static final String kGreaterThan = "is after";
static String sOperators[] = {kIs, kLessThan, kGreaterThan};
public String getName() {
return "Sent Date";
}
public Object getID() {
return kID;
}
public int getOperatorCount() {
return sOperators.length;
}
public Object getOperator(int aIndex) {
return sOperators[aIndex];
}
public Component getValueComponent() {
return new JTextField(15);
// return new DateChooser(DateChooser.DATE_MODE, DateChooser.SMALL);
}
public Object getValue(Component aComponent) {
Date res = null;
try {
res =
DateFormat.getDateInstance().parse(((JTextField)aComponent).getText());
} catch (ParseException e) {
}
return res;
}
public SearchTerm getAttributeTerm(Object aOperatorID, Object aValue) {
int op = aOperatorID.equals(kLessThan) ? DateTerm.LT :
(aOperatorID.equals(kGreaterThan) ? DateTerm.GT : DateTerm.EQ);
return new SentDateTerm(op, (Date) aValue);
}
public String toString() {
return getName();
}
}