CalendarFrameMediator.java :  » Mail-Clients » columba-1.4 » org » columba » calendar » ui » frame » Java Open Source

Java Open Source » Mail Clients » columba 1.4 
columba 1.4 » org » columba » calendar » ui » frame » CalendarFrameMediator.java
// 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.calendar.ui.frame;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.InputStream;
import java.util.Calendar;

import javax.swing.BorderFactory;
import javax.swing.JScrollPane;
import javax.swing.UIManager;

import org.columba.api.gui.frame.IContainer;
import org.columba.api.gui.frame.IDock;
import org.columba.api.gui.frame.IDockable;
import org.columba.calendar.base.api.IActivity;
import org.columba.calendar.model.api.IComponent;
import org.columba.calendar.model.api.IComponentInfo;
import org.columba.calendar.model.api.IDateRange;
import org.columba.calendar.model.api.IEventInfo;
import org.columba.calendar.resourceloader.ResourceLoader;
import org.columba.calendar.store.CalendarStoreFactory;
import org.columba.calendar.store.api.ICalendarStore;
import org.columba.calendar.ui.action.ActivityMovedAction;
import org.columba.calendar.ui.action.EditActivityAction;
import org.columba.calendar.ui.action.NewAppointmentAction;
import org.columba.calendar.ui.calendar.MainCalendarController;
import org.columba.calendar.ui.calendar.api.ActivitySelectionChangedEvent;
import org.columba.calendar.ui.calendar.api.IActivitySelectionChangedListener;
import org.columba.calendar.ui.calendar.api.ICalendarView;
import org.columba.calendar.ui.frame.api.ICalendarMediator;
import org.columba.calendar.ui.list.CalendarListController;
import org.columba.calendar.ui.list.api.ICalendarListView;
import org.columba.calendar.ui.navigation.NavigationController;
import org.columba.calendar.ui.navigation.api.DateRangeChangedEvent;
import org.columba.calendar.ui.navigation.api.ICalendarNavigationView;
import org.columba.calendar.ui.navigation.api.IDateRangeChangedListener;
import org.columba.calendar.ui.tagging.CalendarTagList;
import org.columba.core.config.ViewItem;
import org.columba.core.context.base.api.IStructureValue;
import org.columba.core.context.semantic.api.ISemanticContext;
import org.columba.core.gui.frame.DockFrameController;
import org.columba.core.gui.tagging.TagList;
import org.columba.core.gui.tagging.TagPopupMenu;

/**
 * @author fdietz
 * 
 */
public class CalendarFrameMediator extends DockFrameController implements
    ICalendarMediator {

  public static final String PROP_FILTERED = "filterRow";

  private CalendarListController listController;

  public MainCalendarController calendarController;

  private ICalendarNavigationView navigationController;

  private IDockable listPanel;

  private IDockable calendarPanel;

  private IDockable navigationPanel;

  private IDockable tagListDockable;

  /**
   * @param viewItem
   */
  public CalendarFrameMediator(ViewItem viewItem) {
    super(viewItem);

    // TestDataGenerator.generateTestData();

    calendarController = new MainCalendarController(this);

    calendarController
        .addSelectionChangedListener(new MyActivitySelectionChangedListener());

    navigationController = new NavigationController();

    navigationController
        .addSelectionChangedListener(new IDateRangeChangedListener() {
          public void selectionChanged(DateRangeChangedEvent object) {
            calendarController.setVisibleDateRange(object
                .getDateRange());

          }
        });

    listController = new CalendarListController(this);
    listController.getView().addMouseListener(new ListMouseListener());

    registerDockables();

    initContextMenu();

  }

  private void initContextMenu() {
    listController.createPopupMenu(this);
    calendarController.createPopupMenu(this);
  }

  private void registerDockables() {

    // calendar list
    JScrollPane treeScrollPane = new JScrollPane(listController.getView());
    // set background of scrollpane, in case the list is smaller than the
    // dockable
    treeScrollPane.getViewport().setBackground(
        UIManager.getColor("List.background"));
    treeScrollPane.setBackground(UIManager.getColor("List.background"));
    treeScrollPane.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
    listPanel = registerDockable("calendar_tree", ResourceLoader.getString(
        "global", "dockable_calendarlist"), treeScrollPane, null);

    // JScrollPane tableScrollPane = new JScrollPane(navigationController
    // .getView());
    // tableScrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0,
    // 0));

    navigationPanel = registerDockable("navigation", ResourceLoader
        .getString("global", "dockable_navigation"),
        navigationController.getView(), null);

    calendarPanel = registerDockable("main_calendar", ResourceLoader
        .getString("global", "dockable_maincalendar"),
        calendarController.getView(), null);

//    TagList tagList = new CalendarTagList(this);
//    JScrollPane tagListScrollPane = new JScrollPane(tagList);
//    tagListScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//    tagListScrollPane
//        .setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

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

  }

  /**
   * @see org.columba.core.gui.frame.DockFrameController#loadDefaultPosition()
   */
  public void loadDefaultPosition() {

    super.dock(calendarPanel, IDock.REGION.CENTER);
    super.dock(listPanel, calendarPanel, IDock.REGION.WEST, 0.2f);
    super.dock(navigationPanel, listPanel, IDock.REGION.SOUTH, 0.2f);

    super.setSplitProportion(listPanel, 0.2f);
    super.setSplitProportion(calendarPanel, 0.2f);
  }

  /** *********************** container callbacks ************* */

  /**
   * @see org.columba.api.gui.frame.IFrameMediator#extendMenu(org.columba.api.gui.frame.IContainer)
   */
  public void extendMenu(IContainer container) {
    InputStream is = this.getClass().getResourceAsStream(
        "/org/columba/calendar/action/menu.xml");
    getContainer().extendMenu(this, is);
  }

  /**
   * @see org.columba.api.gui.frame.IFrameMediator#extendToolBar(org.columba.api.gui.frame.IContainer)
   */
  public void extendToolBar(IContainer container) {

    InputStream is2 = this.getClass().getResourceAsStream(
        "/org/columba/calendar/action/toolbar.xml");
    getContainer().extendToolbar(this, is2);
  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#showDayView()
   */
  public void showDayView() {

    calendarController.setViewMode(ICalendarView.VIEW_MODE_DAY);

    navigationController
        .setSelectionMode(NavigationController.SELECTION_MODE_DAY);

  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#showWeekView()
   */
  public void showWeekView() {
    calendarController.setViewMode(ICalendarView.VIEW_MODE_WEEK);

    navigationController
        .setSelectionMode(NavigationController.SELECTION_MODE_WEEK);

  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#showWorkWeekView()
   */
  public void showWorkWeekView() {
    calendarController.setViewMode(ICalendarView.VIEW_MODE_WORK_WEEK);

    navigationController
        .setSelectionMode(NavigationController.SELECTION_MODE_WORK_WEEK);

  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#showMonthView()
   */
  public void showMonthView() {
    calendarController.setViewMode(ICalendarView.VIEW_MODE_MONTH);

    navigationController
        .setSelectionMode(NavigationController.SELECTION_MODE_MONTH);

  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#getCalendarView()
   */
  public ICalendarView getCalendarView() {
    return calendarController;
  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#getListView()
   */
  public ICalendarListView getListView() {
    return listController;
  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#getNavigationView()
   */
  public ICalendarNavigationView getNavigationView() {
    return navigationController;
  }

  /**
   * Double-click mouse listener for calendar list component.
   */
  class ListMouseListener extends MouseAdapter {

    /**
     * @see java.awt.event.MouseAdapter#mousePressed(java.awt.event.MouseEvent)
     */
    public void mousePressed(MouseEvent event) {
      if (event.isPopupTrigger()) {
        processPopup(event);
      }
    }

    /**
     * @see java.awt.event.MouseAdapter#mouseReleased(java.awt.event.MouseEvent)
     */
    public void mouseReleased(MouseEvent event) {
      if (event.isPopupTrigger()) {
        processPopup(event);
      }
    }

    /**
     * @see java.awt.event.MouseAdapter#mouseClicked(java.awt.event.MouseEvent)
     */
    public void mouseClicked(MouseEvent event) {
      // if mouse button was pressed twice times
      if (event.getClickCount() == 2) {

      }
    }

    protected void processPopup(final MouseEvent event) {

      listController.getPopupMenu().show(event.getComponent(),
          event.getX(), event.getY());

    }
  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#fireFilterUpdated()
   */
  public void fireFilterUpdated() {
    calendarController.recreateFilterRows();

  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#fireActivityMoved(org.columba.calendar.base.api.IActivity)
   */
  public void fireActivityMoved(IActivity activity) {
    new ActivityMovedAction(this).actionPerformed(null);
  }

  /**
   * @see org.columba.calendar.ui.frame.api.ICalendarMediator#fireStartActivityEditing(org.columba.calendar.base.api.IActivity)
   */
  public void fireStartActivityEditing(IActivity activity) {
    new EditActivityAction(this).actionPerformed(null);
  }

  public void fireCreateActivity(IDateRange range) {
    new NewAppointmentAction(this, range).actionPerformed(null);
  }

  /**
   * @see org.columba.core.gui.frame.DefaultFrameController#getString(java.lang.String,
   *      java.lang.String, java.lang.String)
   */
  @Override
  public String getString(String sPath, String sName, String sID) {
    return ResourceLoader.getString(sPath, sID);
  }

  class MyActivitySelectionChangedListener implements
      IActivitySelectionChangedListener {

    MyActivitySelectionChangedListener() {
    }

    public void selectionChanged(ActivitySelectionChangedEvent object) {
      IActivity[] selection = object.getSelection();
      if (selection == null)
        return;

      if (selection.length == 1) {

        ICalendarStore store = CalendarStoreFactory.getInstance()
            .getLocaleStore();
        IComponentInfo c = store.get(selection[0].getId());

        if (c.getType().equals(IComponent.TYPE.EVENT)) {
          IEventInfo event = (IEventInfo) c;

          String summary = event.getEvent().getSummary();
          String description = event.getEvent().getDescription();
          String location = event.getEvent().getLocation();
          Calendar dtStart = event.getEvent().getDtStart();
          Calendar dtEnd = event.getEvent().getDtEnd();

          // create empty value
          IStructureValue value = getSemanticContext().createValue();

          // create identity value
          IStructureValue eventValue = value.addChild(
              ISemanticContext.CONTEXT_NODE_EVENT,
              ISemanticContext.CONTEXT_NAMESPACE_CORE);

          // summary
          eventValue.setString(ISemanticContext.CONTEXT_ATTR_SUMMARY,
              ISemanticContext.CONTEXT_NAMESPACE_CORE, summary);
          // description
          eventValue.setString(
              ISemanticContext.CONTEXT_ATTR_DESCRIPTION,
              ISemanticContext.CONTEXT_NAMESPACE_CORE,
              description);
          // location
          eventValue.setString(
              ISemanticContext.CONTEXT_ATTR_LOCATION,
              ISemanticContext.CONTEXT_NAMESPACE_CORE, location);

          // date range
          IStructureValue dateRangeValue = eventValue.addChild(
              ISemanticContext.CONTEXT_NODE_DATERANGE,
              ISemanticContext.CONTEXT_NAMESPACE_CORE);
          dateRangeValue.setDate(
              ISemanticContext.CONTEXT_ATTR_STARTDATE,
              ISemanticContext.CONTEXT_NAMESPACE_CORE, dtStart.getTime());
          dateRangeValue.setDate(
              ISemanticContext.CONTEXT_ATTR_ENDDATE,
              ISemanticContext.CONTEXT_NAMESPACE_CORE, dtEnd.getTime());
        }
      }
    }

  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.