KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > main > MailMain


1 //The contents of this file are subject to the Mozilla Public License Version 1.1
2
//(the "License"); you may not use this file except in compliance with the
3
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
4
//
5
//Software distributed under the License is distributed on an "AS IS" basis,
6
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
7
//for the specific language governing rights and
8
//limitations under the License.
9
//
10
//The Original Code is "The Columba Project"
11
//
12
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
13
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
14
//
15
//All Rights Reserved.
16
package org.columba.mail.main;
17
18 import java.awt.BorderLayout JavaDoc;
19 import java.util.logging.Logger JavaDoc;
20
21 import javax.swing.JCheckBox JavaDoc;
22 import javax.swing.JOptionPane JavaDoc;
23 import javax.swing.JPanel JavaDoc;
24
25 import org.apache.commons.cli.CommandLine;
26 import org.apache.commons.cli.Option;
27 import org.apache.commons.cli.OptionBuilder;
28 import org.columa.core.config.IDefaultItem;
29 import org.columba.api.plugin.PluginLoadingFailedException;
30 import org.columba.core.backgroundtask.BackgroundTaskManager;
31 import org.columba.core.component.api.IComponentPlugin;
32 import org.columba.core.config.DefaultItem;
33 import org.columba.core.connectionstate.ConnectionStateImpl;
34 import org.columba.core.facade.ServiceFacadeRegistry;
35 import org.columba.core.gui.base.MultiLineLabel;
36 import org.columba.core.gui.frame.DefaultContainer;
37 import org.columba.core.gui.frame.FrameManager;
38 import org.columba.core.main.ColumbaCmdLineParser;
39 import org.columba.core.shutdown.ShutdownManager;
40 import org.columba.mail.config.IncomingItem;
41 import org.columba.mail.config.MailConfig;
42 import org.columba.mail.facade.DialogFacade;
43 import org.columba.mail.folder.IMailFolder;
44 import org.columba.mail.folder.virtual.ActivateVirtualFolderCommand;
45 import org.columba.mail.gui.composer.ComposerController;
46 import org.columba.mail.gui.composer.ComposerModel;
47 import org.columba.mail.gui.config.accountwizard.AccountWizardLauncher;
48 import org.columba.mail.gui.tree.FolderTreeModel;
49 import org.columba.mail.nativ.defaultmailclient.SystemDefaultMailClientHandler;
50 import org.columba.mail.parser.MailUrlParser;
51 import org.columba.mail.pgp.MultipartEncryptedRenderer;
52 import org.columba.mail.pgp.MultipartSignedRenderer;
53 import org.columba.mail.shutdown.ClearRecentFlagPlugin;
54 import org.columba.mail.shutdown.SaveAllFoldersPlugin;
55 import org.columba.mail.shutdown.SavePOP3CachePlugin;
56 import org.columba.mail.spam.SaveSpamDBPlugin;
57 import org.columba.mail.util.MailResourceLoader;
58 import org.columba.ristretto.composer.MimeTreeRenderer;
59 import org.columba.ristretto.parser.ParserException;
60
61 /**
62  * Main entrypoint for mail component.
63  *
64  * @author fdietz
65  */

66 public class MailMain implements IComponentPlugin {
67     /** JDK 1.4+ logging framework logger, used for logging. */
68     private static final Logger JavaDoc LOG = Logger.getLogger("org.columba.mail.main");
69
70     public MailMain() {
71     }
72
73     /**
74      *
75      */

76     public void init() {
77         // Init PGP
78
MimeTreeRenderer renderer = MimeTreeRenderer.getInstance();
79         renderer.addMimePartRenderer(new MultipartSignedRenderer());
80         renderer.addMimePartRenderer(new MultipartEncryptedRenderer());
81
82         // Init Plugins
83
/*PluginManager.getInstance().addHandlers(
84                 "org/columba/mail/plugin/pluginhandler.xml");
85
86         try {
87             InputStream is = this.getClass().getResourceAsStream(
88                     "/org/columba/mail/action/action.xml");
89             PluginManager.getInstance().getHandler(IExtensionHandlerKeys.ORG_COLUMBA_CORE_ACTION)
90                     .loadExtensionsFromStream(is);
91         } catch (PluginHandlerNotFoundException ex) {
92             ex.printStackTrace();
93         }*/

94
95
96         Runnable JavaDoc plugin = new SaveAllFoldersPlugin();
97         BackgroundTaskManager.getInstance().register(plugin);
98
99         plugin = new SavePOP3CachePlugin();
100         BackgroundTaskManager.getInstance().register(plugin);
101         ShutdownManager.getInstance().register(plugin);
102
103         plugin = new SaveSpamDBPlugin();
104         BackgroundTaskManager.getInstance().register(plugin);
105         ShutdownManager.getInstance().register(plugin);
106
107         plugin = new ClearRecentFlagPlugin();
108         ShutdownManager.getInstance().register(plugin);
109
110         ServiceFacadeRegistry.getInstance().register(
111                 org.columba.mail.facade.IDialogFacade.class,
112                 new DialogFacade());
113     }
114
115     public void registerCommandLineArguments() {
116         ColumbaCmdLineParser parser = ColumbaCmdLineParser.getInstance();
117
118         Option composeOption = new Option("compose", true, "compose message");
119         parser.addOption(composeOption);
120
121         Option mailOption = OptionBuilder.create("mail");
122         mailOption.setOptionalArg(true);
123
124         parser.addOption(mailOption);
125     }
126
127     /**
128      * @see org.columba.core.component.api.IComponentPlugin#handleCommandLineParameters(java.lang.String[])
129      */

130     public void handleCommandLineParameters(CommandLine commandLine) {
131
132         if (commandLine.hasOption("mail")) {
133             // check if the optional value exists
134
if (commandLine.getOptionValue("mail") != null) {
135                 try {
136                     ComposerModel model = new ComposerModel(MailUrlParser
137                             .parse(commandLine.getOptionValue("mail")));
138
139                     // new NewMessageAction().actionPerformed(null);
140
ComposerController controller = new ComposerController();
141                     new DefaultContainer(controller);
142
143                     controller.setComposerModel(model);
144
145                     ColumbaCmdLineParser.getInstance().setRestoreLastSession(false);
146                 } catch (ParserException e1) {
147                     LOG.warning(e1.getLocalizedMessage());
148                 }
149             } else {
150                 try {
151                     FrameManager.getInstance().openView("ThreePaneMail");
152
153                     ColumbaCmdLineParser.getInstance().setRestoreLastSession(false);
154                 } catch (PluginLoadingFailedException e) {
155                     LOG.severe(e.getLocalizedMessage());
156                 }
157             }
158         }
159
160         if (commandLine.hasOption("compose")) {
161             String JavaDoc option = commandLine.getOptionValue("compose");
162             ComposerModel model = new ComposerModel(MessageOptionParser
163                     .parse(option));
164
165             ComposerController controller = new ComposerController();
166             new DefaultContainer(controller);
167
168             controller.setComposerModel(model);
169
170             ColumbaCmdLineParser.getInstance().setRestoreLastSession(false);
171         }
172     }
173
174     /**
175      *
176      */

177     public void postStartup() {
178         // Check default mail client
179
checkDefaultClient();
180
181         // Show first time Account Wizard
182
if (MailConfig.getInstance().getAccountList().count() == 0) {
183             new AccountWizardLauncher().launchWizard(true);
184         }
185
186         // Check Internet Connection
187
if (MailConfig.getInstance().getAccountList().count() > 0) {
188             try {
189                 IncomingItem testConnection = MailConfig.getInstance()
190                         .getAccountList().getDefaultAccount().getIncomingItem();
191                 ConnectionStateImpl.getInstance().setTestConnection(
192                         testConnection.get("host"),
193                         testConnection.getInteger("port"));
194                 ConnectionStateImpl.getInstance().checkPhysicalState();
195             } catch (RuntimeException JavaDoc e) {
196                 e.printStackTrace();
197             }
198         }
199
200         // Activate all Virtual Folders
201
ActivateVirtualFolderCommand.activateAll((IMailFolder) FolderTreeModel
202                 .getInstance().getRoot());
203     }
204     
205     private void checkDefaultClient() {
206         // Check if Columba is the default mail client
207
SystemDefaultMailClientHandler defaultClientHandler = new SystemDefaultMailClientHandler();
208         IDefaultItem item = new DefaultItem(MailConfig.getInstance().get(
209                 "options"));
210
211         boolean checkDefault = item.getBooleanWithDefault(
212                 "options/defaultclient", "check", true);
213         
214         if (checkDefault
215                 && defaultClientHandler.platfromSupportsDefaultMailClient()) {
216             if (!defaultClientHandler.isDefaultMailClient()) {
217
218                 JPanel JavaDoc panel = new JPanel JavaDoc(new BorderLayout JavaDoc(0, 10));
219
220                 panel.add(new MultiLineLabel(MailResourceLoader.getString(
221                         "dialog", "defaultclient", "make_default")),
222                         BorderLayout.NORTH);
223
224                 JCheckBox JavaDoc askAgain = new JCheckBox JavaDoc(MailResourceLoader
225                         .getString("dialog", "defaultclient", "ask_no_more"));
226                 panel.add(askAgain, BorderLayout.CENTER);
227
228                 // Some error in the client/server communication
229
// --> fall back to default login process
230

231                 // @author hubms: wait until the first frame is displayable
232
// fix for bug [#CA-177]
233
while (!(FrameManager.getInstance().getActiveFrame().isDisplayable())) {
234                     try {
235                         Thread.sleep(100);
236                     } catch (InterruptedException JavaDoc e) {
237                         LOG.severe(e.getMessage());
238                     }
239                 }
240                 
241                 // fix for bug [#CA-199] java 1.6.0-b105 trick
242
if (!FrameManager.getInstance().getActiveFrame().isValid())
243                     FrameManager.getInstance().getActiveFrame().doLayout();
244
245                 int result = JOptionPane.showConfirmDialog(FrameManager
246                         .getInstance().getActiveFrame(), panel,
247                         MailResourceLoader.getString("dialog", "defaultclient",
248                                 "title"), JOptionPane.YES_NO_OPTION);
249                 if (result == JOptionPane.OK_OPTION) {
250                     defaultClientHandler.setDefaultMailClient();
251                 }
252
253                 item.setBoolean("options/defaultclient", "check", !askAgain
254                         .isSelected());
255             }
256         }
257     }
258
259 }
Popular Tags