KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > mail > gui > tree > action > AbstractMoveFolderAction


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.gui.tree.action;
17
18 import java.util.Observable JavaDoc;
19 import java.util.Observer JavaDoc;
20
21 import org.columa.core.config.IDefaultItem;
22 import org.columba.api.gui.frame.IFrameMediator;
23 import org.columba.api.selection.ISelectionListener;
24 import org.columba.api.selection.SelectionChangedEvent;
25 import org.columba.core.config.DefaultItem;
26 import org.columba.core.gui.action.AbstractColumbaAction;
27 import org.columba.core.xml.XmlElement;
28 import org.columba.mail.config.IFolderItem;
29 import org.columba.mail.config.MailConfig;
30 import org.columba.mail.folder.IMailFolder;
31 import org.columba.mail.folder.IMailbox;
32 import org.columba.mail.gui.frame.MailFrameMediator;
33 import org.columba.mail.gui.tree.selection.TreeSelectionChangedEvent;
34
35 /**
36  * @author redsolo
37  */

38 public abstract class AbstractMoveFolderAction extends AbstractColumbaAction
39         implements ISelectionListener, Observer JavaDoc {
40
41     private IMailFolder lastSelectedFolder;
42
43     /**
44      * @param frameMediator
45      * the frame controller.
46      * @param name
47      * name of action.
48      */

49     public AbstractMoveFolderAction(IFrameMediator frameMediator, String JavaDoc name) {
50         super(frameMediator, name);
51
52         ((MailFrameMediator) frameMediator).registerTreeSelectionListener(this);
53         registerSortingObserver();
54     }
55
56     /**
57      * Returns true if the action enables a folder with the specified index.
58      * Implementing methods can rely on that the lastSelectedFolder is not null.
59      *
60      * @param folderIndex
61      * the index of the folder.
62      * @return true if it should enable the action; false otherwise.
63      */

64     protected abstract boolean isActionEnabledByIndex(int folderIndex);
65
66     /**
67      * Register for notifications when the Tree node changes.
68      */

69     private void registerSortingObserver() {
70         XmlElement sortElement = MailConfig.getInstance().get("options")
71                 .getElement("/options/gui/tree/sorting");
72         if (sortElement == null) {
73             XmlElement treeElement = MailConfig.getInstance().get("options")
74                     .getElement("/options/gui/tree");
75             if (treeElement == null) {
76                 treeElement = MailConfig.getInstance().get("options")
77                         .getElement("/options/gui").addSubElement("tree");
78             }
79             sortElement = treeElement.addSubElement("sorting");
80         }
81         sortElement.addObserver(this);
82     }
83
84     /** {@inheritDoc} */
85     public void update(Observable JavaDoc o, Object JavaDoc arg) {
86         enableAction();
87     }
88
89     /**
90      * Enables or disables the action.
91      */

92     private void enableAction() {
93         XmlElement sortElement = MailConfig.getInstance().get("options")
94                 .getElement("/options/gui/tree/sorting");
95
96         IDefaultItem item = new DefaultItem(sortElement);
97         boolean sorted = item.getBoolean("sorted");
98         if (sorted) {
99             setEnabled(false);
100         } else {
101             reenableActionFromSelectedFolder();
102         }
103     }
104
105     /**
106      * Enables or disables the action based on the last selected folder.
107      */

108     private void reenableActionFromSelectedFolder() {
109         if ( (lastSelectedFolder == null) || (lastSelectedFolder.getParent() == null) ) {
110             setEnabled(false);
111         } else {
112             IFolderItem item = lastSelectedFolder.getConfiguration();
113
114             if (item.getString("property", "accessrights").equals("user")) {
115                 int index = lastSelectedFolder.getParent().getIndex(
116                         lastSelectedFolder);
117
118                 setEnabled(isActionEnabledByIndex(index));
119             } else {
120                 setEnabled(false);
121             }
122         }
123     }
124
125     /**
126      * @see org.columba.core.gui.util.ISelectionListener#connectionChanged(org.columba.core.gui.util.SelectionChangedEvent)
127      */

128     public void selectionChanged(SelectionChangedEvent e) {
129         if (((TreeSelectionChangedEvent) e).getSelected().length > 0) {
130             IMailFolder folder = ((TreeSelectionChangedEvent) e)
131                     .getSelected()[0];
132             if ((folder != null) && folder instanceof IMailbox) {
133                 lastSelectedFolder = folder;
134             } else {
135                 lastSelectedFolder = null;
136             }
137             enableAction();
138         } else {
139             setEnabled(false);
140         }
141     }
142
143     /**
144      * @return Returns the last selected folder.
145      */

146     protected IMailFolder getLastSelectedFolder() {
147         return lastSelectedFolder;
148     }
149 }
150
Popular Tags