KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > calendar > ui > frame > CalendarFrameMediator


1 // The contents of this file are subject to the Mozilla Public License Version
2
// 1.1
3
//(the "License"); you may not use this file except in compliance with the
4
//License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
5
//
6
//Software distributed under the License is distributed on an "AS IS" basis,
7
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
8
//for the specific language governing rights and
9
//limitations under the License.
10
//
11
//The Original Code is "The Columba Project"
12
//
13
//The Initial Developers of the Original Code are Frederik Dietz and Timo
14
// Stich.
15
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
16
//
17
//All Rights Reserved.
18
package org.columba.calendar.ui.frame;
19
20 import java.awt.event.MouseAdapter JavaDoc;
21 import java.awt.event.MouseEvent JavaDoc;
22 import java.io.InputStream JavaDoc;
23 import java.util.Calendar JavaDoc;
24
25 import javax.swing.BorderFactory JavaDoc;
26 import javax.swing.JScrollPane JavaDoc;
27 import javax.swing.UIManager JavaDoc;
28
29 import org.columba.api.gui.frame.IContainer;
30 import org.columba.api.gui.frame.IDock;
31 import org.columba.api.gui.frame.IDockable;
32 import org.columba.calendar.base.api.IActivity;
33 import org.columba.calendar.model.api.IComponent;
34 import org.columba.calendar.model.api.IComponentInfo;
35 import org.columba.calendar.model.api.IDateRange;
36 import org.columba.calendar.model.api.IEventInfo;
37 import org.columba.calendar.resourceloader.ResourceLoader;
38 import org.columba.calendar.store.CalendarStoreFactory;
39 import org.columba.calendar.store.api.ICalendarStore;
40 import org.columba.calendar.ui.action.ActivityMovedAction;
41 import org.columba.calendar.ui.action.EditActivityAction;
42 import org.columba.calendar.ui.action.NewAppointmentAction;
43 import org.columba.calendar.ui.calendar.MainCalendarController;
44 import org.columba.calendar.ui.calendar.api.ActivitySelectionChangedEvent;
45 import org.columba.calendar.ui.calendar.api.IActivitySelectionChangedListener;
46 import org.columba.calendar.ui.calendar.api.ICalendarView;
47 import org.columba.calendar.ui.frame.api.ICalendarMediator;
48 import org.columba.calendar.ui.list.CalendarListController;
49 import org.columba.calendar.ui.list.api.ICalendarListView;
50 import org.columba.calendar.ui.navigation.NavigationController;
51 import org.columba.calendar.ui.navigation.api.DateRangeChangedEvent;
52 import org.columba.calendar.ui.navigation.api.ICalendarNavigationView;
53 import org.columba.calendar.ui.navigation.api.IDateRangeChangedListener;
54 import org.columba.calendar.ui.tagging.CalendarTagList;
55 import org.columba.core.config.ViewItem;
56 import org.columba.core.context.base.api.IStructureValue;
57 import org.columba.core.context.semantic.api.ISemanticContext;
58 import org.columba.core.gui.frame.DockFrameController;
59 import org.columba.core.gui.tagging.TagList;
60 import org.columba.core.gui.tagging.TagPopupMenu;
61
62 /**
63  * @author fdietz
64  *
65  */

66 public class CalendarFrameMediator extends DockFrameController implements
67         ICalendarMediator {
68
69     public static final String JavaDoc PROP_FILTERED = "filterRow";
70
71     private CalendarListController listController;
72
73     public MainCalendarController calendarController;
74
75     private ICalendarNavigationView navigationController;
76
77     private IDockable listPanel;
78
79     private IDockable calendarPanel;
80
81     private IDockable navigationPanel;
82
83     private IDockable tagListDockable;
84
85     /**
86      * @param viewItem
87      */

88     public CalendarFrameMediator(ViewItem viewItem) {
89         super(viewItem);
90
91         // TestDataGenerator.generateTestData();
92

93         calendarController = new MainCalendarController(this);
94
95         calendarController
96                 .addSelectionChangedListener(new MyActivitySelectionChangedListener());
97
98         navigationController = new NavigationController();
99
100         navigationController
101                 .addSelectionChangedListener(new IDateRangeChangedListener() {
102                     public void selectionChanged(DateRangeChangedEvent object) {
103                         calendarController.setVisibleDateRange(object
104                                 .getDateRange());
105
106                     }
107                 });
108
109         listController = new CalendarListController(this);
110         listController.getView().addMouseListener(new ListMouseListener());
111
112         registerDockables();
113
114         initContextMenu();
115
116     }
117
118     private void initContextMenu() {
119         listController.createPopupMenu(this);
120         calendarController.createPopupMenu(this);
121     }
122
123     private void registerDockables() {
124
125         // calendar list
126
JScrollPane JavaDoc treeScrollPane = new JScrollPane JavaDoc(listController.getView());
127         // set background of scrollpane, in case the list is smaller than the
128
// dockable
129
treeScrollPane.getViewport().setBackground(
130                 UIManager.getColor("List.background"));
131         treeScrollPane.setBackground(UIManager.getColor("List.background"));
132         treeScrollPane.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
133         listPanel = registerDockable("calendar_tree", ResourceLoader.getString(
134                 "global", "dockable_calendarlist"), treeScrollPane, null);
135
136         // JScrollPane tableScrollPane = new JScrollPane(navigationController
137
// .getView());
138
// tableScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0,
139
// 0));
140

141         navigationPanel = registerDockable("navigation", ResourceLoader
142                 .getString("global", "dockable_navigation"),
143                 navigationController.getView(), null);
144
145         calendarPanel = registerDockable("main_calendar", ResourceLoader
146                 .getString("global", "dockable_maincalendar"),
147                 calendarController.getView(), null);
148
149 // TagList tagList = new CalendarTagList(this);
150
// JScrollPane tagListScrollPane = new JScrollPane(tagList);
151
// tagListScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
152
// tagListScrollPane
153
// .setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
154

155 // tagListDockable = registerDockable("calendar_taglist", ResourceLoader
156
// .getString("global", "dockable_taglist"), tagListScrollPane,
157
// new TagPopupMenu(this, tagList));
158
// tagList.setPopupMenu(new TagPopupMenu(this, tagList));
159

160     }
161
162     /**
163      * @see org.columba.core.gui.frame.DockFrameController#loadDefaultPosition()
164      */

165     public void loadDefaultPosition() {
166
167         super.dock(calendarPanel, IDock.REGION.CENTER);
168         super.dock(listPanel, calendarPanel, IDock.REGION.WEST, 0.2f);
169         super.dock(navigationPanel, listPanel, IDock.REGION.SOUTH, 0.2f);
170
171         super.setSplitProportion(listPanel, 0.2f);
172         super.setSplitProportion(calendarPanel, 0.2f);
173     }
174
175     /** *********************** container callbacks ************* */
176
177     /**
178      * @see org.columba.api.gui.frame.IFrameMediator#extendMenu(org.columba.api.gui.frame.IContainer)
179      */

180     public void extendMenu(IContainer container) {
181         InputStream JavaDoc is = this.getClass().getResourceAsStream(
182                 "/org/columba/calendar/action/menu.xml");
183         getContainer().extendMenu(this, is);
184     }
185
186     /**
187      * @see org.columba.api.gui.frame.IFrameMediator#extendToolBar(org.columba.api.gui.frame.IContainer)
188      */

189     public void extendToolBar(IContainer container) {
190
191         InputStream JavaDoc is2 = this.getClass().getResourceAsStream(
192                 "/org/columba/calendar/action/toolbar.xml");
193         getContainer().extendToolbar(this, is2);
194     }
195
196     /**
197      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#showDayView()
198      */

199     public void showDayView() {
200
201         calendarController.setViewMode(ICalendarView.VIEW_MODE_DAY);
202
203         navigationController
204                 .setSelectionMode(NavigationController.SELECTION_MODE_DAY);
205
206     }
207
208     /**
209      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#showWeekView()
210      */

211     public void showWeekView() {
212         calendarController.setViewMode(ICalendarView.VIEW_MODE_WEEK);
213
214         navigationController
215                 .setSelectionMode(NavigationController.SELECTION_MODE_WEEK);
216
217     }
218
219     /**
220      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#showWorkWeekView()
221      */

222     public void showWorkWeekView() {
223         calendarController.setViewMode(ICalendarView.VIEW_MODE_WORK_WEEK);
224
225         navigationController
226                 .setSelectionMode(NavigationController.SELECTION_MODE_WORK_WEEK);
227
228     }
229
230     /**
231      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#showMonthView()
232      */

233     public void showMonthView() {
234         calendarController.setViewMode(ICalendarView.VIEW_MODE_MONTH);
235
236         navigationController
237                 .setSelectionMode(NavigationController.SELECTION_MODE_MONTH);
238
239     }
240
241     /**
242      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#getCalendarView()
243      */

244     public ICalendarView getCalendarView() {
245         return calendarController;
246     }
247
248     /**
249      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#getListView()
250      */

251     public ICalendarListView getListView() {
252         return listController;
253     }
254
255     /**
256      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#getNavigationView()
257      */

258     public ICalendarNavigationView getNavigationView() {
259         return navigationController;
260     }
261
262     /**
263      * Double-click mouse listener for calendar list component.
264      */

265     class ListMouseListener extends MouseAdapter JavaDoc {
266
267         /**
268          * @see java.awt.event.MouseAdapter#mousePressed(java.awt.event.MouseEvent)
269          */

270         public void mousePressed(MouseEvent JavaDoc event) {
271             if (event.isPopupTrigger()) {
272                 processPopup(event);
273             }
274         }
275
276         /**
277          * @see java.awt.event.MouseAdapter#mouseReleased(java.awt.event.MouseEvent)
278          */

279         public void mouseReleased(MouseEvent JavaDoc event) {
280             if (event.isPopupTrigger()) {
281                 processPopup(event);
282             }
283         }
284
285         /**
286          * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
287          */

288         public void mouseClicked(MouseEvent JavaDoc event) {
289             // if mouse button was pressed twice times
290
if (event.getClickCount() == 2) {
291
292             }
293         }
294
295         protected void processPopup(final MouseEvent JavaDoc event) {
296
297             listController.getPopupMenu().show(event.getComponent(),
298                     event.getX(), event.getY());
299
300         }
301     }
302
303     /**
304      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#fireFilterUpdated()
305      */

306     public void fireFilterUpdated() {
307         calendarController.recreateFilterRows();
308
309     }
310
311     /**
312      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#fireActivityMoved(org.columba.calendar.base.api.IActivity)
313      */

314     public void fireActivityMoved(IActivity activity) {
315         new ActivityMovedAction(this).actionPerformed(null);
316     }
317
318     /**
319      * @see org.columba.calendar.ui.frame.api.ICalendarMediator#fireStartActivityEditing(org.columba.calendar.base.api.IActivity)
320      */

321     public void fireStartActivityEditing(IActivity activity) {
322         new EditActivityAction(this).actionPerformed(null);
323     }
324
325     public void fireCreateActivity(IDateRange range) {
326         new NewAppointmentAction(this, range).actionPerformed(null);
327     }
328
329     /**
330      * @see org.columba.core.gui.frame.DefaultFrameController#getString(java.lang.String,
331      * java.lang.String, java.lang.String)
332      */

333     @Override JavaDoc
334     public String JavaDoc getString(String JavaDoc sPath, String JavaDoc sName, String JavaDoc sID) {
335         return ResourceLoader.getString(sPath, sID);
336     }
337
338     class MyActivitySelectionChangedListener implements
339             IActivitySelectionChangedListener {
340
341         MyActivitySelectionChangedListener() {
342         }
343
344         public void selectionChanged(ActivitySelectionChangedEvent object) {
345             IActivity[] selection = object.getSelection();
346             if (selection == null)
347                 return;
348
349             if (selection.length == 1) {
350
351                 ICalendarStore store = CalendarStoreFactory.getInstance()
352                         .getLocaleStore();
353                 IComponentInfo c = store.get(selection[0].getId());
354
355                 if (c.getType().equals(IComponent.TYPE.EVENT)) {
356                     IEventInfo event = (IEventInfo) c;
357
358                     String JavaDoc summary = event.getEvent().getSummary();
359                     String JavaDoc description = event.getEvent().getDescription();
360                     String JavaDoc location = event.getEvent().getLocation();
361                     Calendar JavaDoc dtStart = event.getEvent().getDtStart();
362                     Calendar JavaDoc dtEnd = event.getEvent().getDtEnd();
363
364                     // create empty value
365
IStructureValue value = getSemanticContext().createValue();
366
367                     // create identity value
368
IStructureValue eventValue = value.addChild(
369                             ISemanticContext.CONTEXT_NODE_EVENT,
370                             ISemanticContext.CONTEXT_NAMESPACE_CORE);
371
372                     // summary
373
eventValue.setString(ISemanticContext.CONTEXT_ATTR_SUMMARY,
374                             ISemanticContext.CONTEXT_NAMESPACE_CORE, summary);
375                     // description
376
eventValue.setString(
377                             ISemanticContext.CONTEXT_ATTR_DESCRIPTION,
378                             ISemanticContext.CONTEXT_NAMESPACE_CORE,
379                             description);
380                     // location
381
eventValue.setString(
382                             ISemanticContext.CONTEXT_ATTR_LOCATION,
383                             ISemanticContext.CONTEXT_NAMESPACE_CORE, location);
384
385                     // date range
386
IStructureValue dateRangeValue = eventValue.addChild(
387                             ISemanticContext.CONTEXT_NODE_DATERANGE,
388                             ISemanticContext.CONTEXT_NAMESPACE_CORE);
389                     dateRangeValue.setDate(
390                             ISemanticContext.CONTEXT_ATTR_STARTDATE,
391                             ISemanticContext.CONTEXT_NAMESPACE_CORE, dtStart.getTime());
392                     dateRangeValue.setDate(
393                             ISemanticContext.CONTEXT_ATTR_ENDDATE,
394                             ISemanticContext.CONTEXT_NAMESPACE_CORE, dtEnd.getTime());
395                 }
396             }
397         }
398
399     }
400
401 }
Popular Tags