PublicCalendarsComponent.java :  » Google-tech » gadjet » com » gcalsync » component » Java Open Source

Java Open Source » Google tech » gadjet 
gadjet » com » gcalsync » component » PublicCalendarsComponent.java
/*
   Copyright 2007 batcage@gmail.com

   Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/
package com.gcalsync.component;

import javax.microedition.lcdui.*;
import java.util.Vector;
import com.gcalsync.cal.gcal.*;
import com.gcalsync.store.Store;
import com.gcalsync.option.Options;

/**
 * @author $Author$
 * @version $Rev$
 * @date $Date$
 */
public class PublicCalendarsComponent extends MVCComponent
{
  public static final String CAL_URL_STARTER = "www.google.com/calendar/feeds/";
  public static final String FULL_CAL_URL_STARTER = "http://" + CAL_URL_STARTER;

    static final Command CMD_CANCEL = new Command("Cancel", Command.CANCEL, 4);
  static final Command CMD_OPTIONS = new Command("Options", Command.ITEM, 3);
  static final Command CMD_SAVE = new Command("Save", Command.ITEM, 2);
  static final Command CMD_SYNC = new Command("Sync", "Start sync", Command.ITEM, 1);
  static final Command CMD_FULL_SYNC = new Command("Full Sync", "Start full sync", Command.ITEM, 1);

  TextField[] calendarUrls = new TextField[5];
  Form form;

  /**
    * Gets the <code>Displayable</code> object to be displayed for
    * this component
    *
    * @returns <code>Displayable</code>
  */
  public Displayable getDisplayable()
  {
    return form;
  }

    /**
  * Initializes the model before creating the view
  */
  protected void initModel()
  {
  }

  /**
    * Creates the view
  */
  protected void createView()
  {
    form = new Form("Public Calendars");
    int screenWidth = getDisplayable().getWidth();

    //add note
    form.append(new Spacer(screenWidth, 5));
    form.append("Enter public calendar URLs");

    //add form items
    form.append(new Spacer(screenWidth, 5));
    addPubCalFields();

    //populate form items
    updateView();

    //add commands to form
    form.addCommand(CMD_OPTIONS);
    form.addCommand(CMD_CANCEL);
    form.addCommand(CMD_SAVE);
    form.addCommand(CMD_SYNC);
    form.addCommand(CMD_FULL_SYNC);

    form.setCommandListener(this);
  }

  /**
    * Updates the view with the saved calendar URLs
  */
  protected void updateView()
  {
    Options options = Store.getOptions();

    for (int i=0; i<calendarUrls.length; i++)
      calendarUrls[i].setString(options.calendarUrls[i]);
  }

  /**
    * Processes menu commands
    *
    * @param c command to execute
    * @param d the form from which the command originates
  */
  public void commandAction(Command command, Displayable d)
  {
    int index;
    Alert a;
    Options options = Store.getOptions();
    GCalFeed[] feeds;
    Vector vect;
    GCalFeed tempFeed;

    if (command == CMD_CANCEL)
    {
      Components.login.showScreen();
    }
    else if (command == CMD_OPTIONS)
    {
      Components.options.showScreen(this);
    }
    else if (command == CMD_SAVE)
    {
      save();
      a = new Alert("Saved", "Calendar URLs saved", null, AlertType.INFO);
      a.setTimeout(1000);
      display.setCurrent(a);
    }
    else if (command == CMD_SYNC || command == CMD_FULL_SYNC)
    {
      if (command == CMD_FULL_SYNC)
        Store.getTimestamps().lastSync = 0;

      // save calendar URLs and then sync
      save();

      vect = new Vector();
      for (int i=0; i<options.calendarUrls.length; i++)
      {
        if (!options.calendarUrls[i].equals(""))
        {
          //basic feeds not supported...switch to full feed
          if (options.calendarUrls[i].endsWith("/basic"))
          {
            index = options.calendarUrls[i].lastIndexOf('/');
            options.calendarUrls[i] = options.calendarUrls[i].substring(0, index) + "/full";
          }

          tempFeed = new GCalFeed();
          tempFeed.url = FULL_CAL_URL_STARTER + options.calendarUrls[i];
          tempFeed.title = "URL" + (i+1);
          tempFeed.sync = true;
          tempFeed.reminders = true;
          vect.addElement(tempFeed);
        }
      }

      if (vect.size() > 0)
      {
        feeds = new GCalFeed[vect.size()];
        vect.copyInto(feeds);

        //start sync on new thread
        new SyncComponent(feeds).handle();
      }
      else
      {
        a = new Alert("Error", "No calendar URLs entered", null, AlertType.ERROR);
        a.setTimeout(1000);
        display.setCurrent(a);
      }
    }
  }

  /**
    * Saves the calendar URLs
  */
  void save()
  {
    Options options = Store.getOptions();

    //save calendar URLs
    for (int i=0; i<calendarUrls.length; i++)
      options.calendarUrls[i] = calendarUrls[i].getString().trim();

    Store.saveOptions();
  }

  /**
    * Adds the calendar URLs to the form
  */
  void addPubCalFields()
  {
    StringItem calUrlStarter;
    final Font labelFont = Font.getFont(Font.FACE_PROPORTIONAL, 
                      Font.STYLE_BOLD,
                      Font.SIZE_SMALL);

    for (int i=0; i<calendarUrls.length; i++)
    {
      calendarUrls[i] = new TextField("",
                                            "",
                                            100,
                                            TextField.URL);

      calUrlStarter = new StringItem((i+1) + ") " + CAL_URL_STARTER, null);
      calUrlStarter.setFont(labelFont);
      form.append(calUrlStarter);
      form.append(calendarUrls[i]);
      form.append(new Spacer(getDisplayable().getWidth(), 5));
    }
  }
}

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.