亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mailboxtreemodel.java

?? Gmail API for Java 一個gmail信箱的客戶端
?? JAVA
字號:
package siuying.gm.app.gmailer4j.model;

import java.util.*;
import java.util.logging.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import siuying.gm.*;

/**
 * A tree model represent a tree that can cotains 3 views
 * represent "Standard Box", "Labels" and "Searches"
 * @author siuying
 * @version 0.1
 */
public class MailboxTreeModel implements TreeModel{
  private Logger logger = Logger.getAnonymousLogger();
  public static final String [] boxRoots = {
      "Mailbox",
      "Label",
      "Search"
  };
  public static final String[] STD_BOX_KEY = {"stdbox.inbox",
      "stdbox.starred",
      "stdbox.sent",
      "stdbox.all",
      "stdbox.spam",
      "stdbox.trash"};

  private ArrayList treeModelListeners = new ArrayList();

  private ArrayList[] nodes;
  public static final int LIST_STANDARD = 0;
  public static final int LIST_LABEL = 1;
  public static final int LIST_SEARCH = 2;
  private int currentRoot;

  public MailboxTreeModel() {
    currentRoot = 0;
    nodes = new ArrayList[3];

    for (int i=0; i<nodes.length; i++){
      nodes[i] = new ArrayList();
    }

    for (int i=0; i<GMConstants.BOX_NAMES.length; i++){
      BoxNode node = new BoxNode(GMConstants.BOX_NAMES[i], 0);
      nodes[LIST_STANDARD].add(node);
    }

  }

  /**
   * getRoot
   *
   * @return Object
   */
  public Object getRoot() {
    return boxRoots[currentRoot];
  }

  /**
   * getChildCount
   *
   * @param parent Object
   * @return int
   */
  public int getChildCount(Object parent) {
    if (boxRoots[LIST_STANDARD].equals(parent) ||
        boxRoots[LIST_LABEL].equals(parent) ||
        boxRoots[LIST_SEARCH].equals(parent) ){
      for (int i = 0; i < boxRoots.length; i++) {
        if (parent.equals(boxRoots[i]))
          return nodes[i].size();
      }
    }

    return 0;
  }

  /**
   * isLeaf
   *
   * @param node Object
   * @return boolean
   */
  public boolean isLeaf(Object node) {
    return false;
  }

  /**
   * addTreeModelListener
   *
   * @param l TreeModelListener
   */
  public void addTreeModelListener(TreeModelListener l) {
    treeModelListeners.add(l);
  }

  /**
   * removeTreeModelListener
   *
   * @param l TreeModelListener
   */
  public void removeTreeModelListener(TreeModelListener l) {
    treeModelListeners.remove(l);
  }


  /**
   * getChild
   *
   * @param parent Object
   * @param index int
   * @return Object
   */
  public Object getChild(Object parent, int index) {
    int parentidx = 0;

    if (boxRoots[LIST_STANDARD].equals(parent) ){
      parentidx = LIST_STANDARD;
    }else if (boxRoots[LIST_LABEL].equals(parent)){
      parentidx = LIST_LABEL;
    }else if (boxRoots[LIST_SEARCH].equals(parent)){
      parentidx = LIST_SEARCH;
    }else{
      return null;
    }
    return nodes[parentidx].get(index);
  }

  /**
   * getIndexOfChild
   *
   * @param parent Object
   * @param child Object
   * @return int
   */
  public int getIndexOfChild(Object parent, Object child) {
    int parentidx = 0;

    if (boxRoots[LIST_STANDARD].equals(parent) ){
      parentidx = LIST_STANDARD;
    }else if (boxRoots[LIST_LABEL].equals(parent)){
      parentidx = LIST_LABEL;
    }else if (boxRoots[LIST_SEARCH].equals(parent)){
      parentidx = LIST_SEARCH;
    }else{
      return -1;
    }

    if (nodes[parentidx].contains(child)){
      for(int i=0; i<nodes[parentidx].size(); i++){
        if (nodes[parentidx].get(i).equals(child))
          return i;
      }
    }

    return -1;
  }

  /**
   * valueForPathChanged
   *
   * @param path TreePath
   * @param newValue Object
   */
  public void valueForPathChanged(TreePath path, Object newValue) {
  }

  public int getCurrentRoot() {
    return currentRoot;
  }

  public void setCurrentRoot(int current) {
    int old = this.currentRoot;
    this.currentRoot = current;
    fireTreeStructureChanged(boxRoots[old]);
  }

  /**
   * Update standbox content from gminfo TreeMap
   * @param stdbox TreeMap
   * @todo assume no delete occurs, it will not remove disappeared nodes, this should be fixed
   */
  public void updateStdBox(TreeMap stdbox){
    boolean structurechanged = false;
    try{
      for (int i = 0; i < STD_BOX_KEY.length; i++) {
        String key = STD_BOX_KEY[i];

        // the numberic string store in gminfo
        String numberStr = (String) stdbox.get(key);

        BoxNode node = (BoxNode)nodes[LIST_STANDARD].get(i);

        if (node != null) {
          int number = 0;
          if (numberStr == null){
            number = 0;
          }else{
            number = Integer.parseInt(numberStr);
          }

          if (number != node.getNumber()) {
            node.setNumber(number);
            fireTreeNodesChanged(node);
          }

        } else if (numberStr != null) {
          logger.warning("Missing standard box data: " + key);
        } else {
          // add a missing node
          nodes[LIST_STANDARD].add(new BoxNode(GMConstants.BOX_NAMES[i], 0));
          structurechanged = true;
        }

      }

    }catch(ClassCastException e){
      logger.warning("Error while cast the incoming label, they are not mapping of String -> String" + e);
    }catch(NumberFormatException e){
      logger.warning("" + e);
    }

    if (structurechanged)
      fireTreeStructureChanged(boxRoots[LIST_STANDARD]);
  }

  /**
   * Update/add labels from the input labels data
   * @param labels TreeMap
   * @todo assume no delete occurs, it will not remove disappeared nodes, this should be fixed
   */
  public void updateLabel(TreeMap labels){
    boolean structurechanged = false;
    try{
      Set keySet = labels.keySet();

      for (Iterator iter = keySet.iterator(); iter.hasNext();) {
        int existedLabel = -1;
        String name = (String)iter.next();
        String numberStr = (String) labels.get(name);

        for (int i=0; i<nodes[LIST_LABEL].size(); i++){
          BoxNode node =(BoxNode)nodes[LIST_LABEL].get(i);
          if (node.getName().equals(name)){
            // the label is in the list
            existedLabel = i;
            break;
          }
        }

        if ( existedLabel > -1 ){
          BoxNode theNode = (BoxNode)nodes[LIST_LABEL].get(existedLabel);
          int number = Integer.parseInt(numberStr);
          if (theNode.getNumber() != number){
            theNode.setNumber(number);
            fireTreeNodesChanged(theNode);
          }
        }else{
          // label not existed
          nodes[LIST_LABEL].add(new BoxNode(name, Integer.parseInt(numberStr)));
          structurechanged = true;
        }
      }
    }catch(Exception e){
      logger.warning("Error while cast the incoming label, they are not mapping of String -> String");
    }

    if (structurechanged)
      fireTreeStructureChanged(boxRoots[LIST_LABEL]);
  }
  
  public void updateSearches(TreeMap searches){
    boolean structurechanged = false;
    try{
      Set keySet = searches.keySet();

      for (Iterator iter = keySet.iterator(); iter.hasNext();) {
        int existedSearch = -1;
        String name = (String)iter.next();
        Integer numberStr = (Integer) searches.get(name);

        for (int i=0; i<nodes[LIST_SEARCH].size(); i++){
          BoxNode node =(BoxNode)nodes[LIST_SEARCH].get(i);
          if (node.getName().equals(name)){
            // the search is in the list
            existedSearch = i;
            break;
          }
        }

        if ( existedSearch > -1 ){
          BoxNode theNode = (BoxNode)nodes[LIST_SEARCH].get(existedSearch);
          int number = numberStr.intValue();
          if (theNode.getNumber() != number){
            theNode.setNumber(number);
            fireTreeNodesChanged(theNode);
          }
        }else{
          // search not existed
          nodes[LIST_SEARCH].add( new BoxNode(name, numberStr.intValue()) );
          structurechanged = true;
        }
      }
    }catch(Exception e){
      logger.warning("Error while cast the incoming searches, they are not mapping of String -> String");
    }

    if (structurechanged)
      fireTreeStructureChanged(boxRoots[LIST_SEARCH]);
  }
  
  protected void fireTreeStructureChanged(Object root) {
      int len = treeModelListeners.size();
      TreeModelEvent e = new TreeModelEvent(this,
                                            new Object[] {root});
      for (int i = 0; i < len; i++) {
          ((TreeModelListener)treeModelListeners.get(i)).
                  treeStructureChanged(e);
      }
  }

  protected void fireTreeNodesInserted(Object root) {
      int len = treeModelListeners.size();
      TreeModelEvent e = new TreeModelEvent(this,
                                            new Object[] {root});
      for (int i = 0; i < len; i++) {
          ((TreeModelListener)treeModelListeners.get(i)).treeNodesInserted(e);
      }
  }

  protected void fireTreeNodesRemoved(Object root) {
      int len = treeModelListeners.size();
      TreeModelEvent e = new TreeModelEvent(this,
                                            new Object[] {root});
      for (int i = 0; i < len; i++) {
          ((TreeModelListener)treeModelListeners.get(i)).treeNodesRemoved(e);
      }
  }

  protected void fireTreeNodesChanged(Object root) {
      int len = treeModelListeners.size();
      TreeModelEvent e = new TreeModelEvent(this,
                                            new Object[] {root});
      for (int i = 0; i < len; i++) {
          ((TreeModelListener)treeModelListeners.get(i)).treeNodesChanged(e);
      }
  }

  public String toString(){
    return "Boxes: " + nodes[LIST_STANDARD].toString() +
        "; Labels" + nodes[LIST_LABEL].toString() +
        "; Searches " + nodes[LIST_SEARCH].toString();

  }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品区一区二区三| 欧美在线观看视频一区二区| 亚洲1区2区3区4区| 亚洲免费av观看| 国产欧美精品一区| 欧美激情一区二区三区全黄| 久久精品视频一区二区三区| 欧美韩日一区二区三区| 日本一二三四高清不卡| 自拍偷拍亚洲欧美日韩| 一区二区三区在线免费观看 | 欧美电影一区二区| 欧美日韩视频在线第一区| 欧美揉bbbbb揉bbbbb| 欧美老肥妇做.爰bbww| 91精品国产欧美日韩| 精品粉嫩超白一线天av| 久久久久久久久岛国免费| 国产精品美女视频| 亚洲一二三四区| 青青草原综合久久大伊人精品 | 国产酒店精品激情| 国产成a人亚洲精| 99国产精品国产精品久久| 欧美在线影院一区二区| 欧美一卡二卡在线| 国产精品色哟哟网站| 亚洲大片免费看| 国产专区欧美精品| 一本久久a久久免费精品不卡| 在线成人免费视频| 久久久久久久精| 亚洲一二三区在线观看| 国产精品一区二区在线播放| 在线这里只有精品| 久久亚洲综合av| 亚洲一二三专区| 国产成人精品一区二| 欧美三片在线视频观看| 国产蜜臀97一区二区三区| 亚洲午夜在线视频| 成人一区二区三区在线观看| 欧美亚一区二区| 国产精品无码永久免费888| 午夜精品福利一区二区蜜股av| 国产成人日日夜夜| 欧美精品久久久久久久多人混战| 国产精品你懂的在线欣赏| 免费成人av资源网| 欧洲色大大久久| 国产精品剧情在线亚洲| 麻豆传媒一区二区三区| 欧美视频第二页| 国产精品精品国产色婷婷| 精品一区二区免费在线观看| 欧美日韩国产影片| 亚洲女人小视频在线观看| 国产大陆a不卡| 亚洲精品一区二区在线观看| 丝袜美腿成人在线| 欧美日韩一区二区三区视频| 亚洲欧洲日韩在线| 不卡的av电影| 国产精品人人做人人爽人人添 | 国产欧美一区二区三区沐欲| 美女国产一区二区三区| 欧美精品免费视频| 亚洲国产成人高清精品| 色综合一区二区三区| 日韩理论片在线| hitomi一区二区三区精品| 国产欧美一区二区精品忘忧草| 国内一区二区视频| 精品粉嫩超白一线天av| 国产精品亚洲а∨天堂免在线| 精品国精品国产| 黄网站免费久久| 久久久美女艺术照精彩视频福利播放| 日本不卡123| 91精品国产综合久久精品麻豆| 亚洲国产精品影院| 5566中文字幕一区二区电影| 天天综合网天天综合色| 欧美一级欧美三级| 久久av中文字幕片| 日本一区二区视频在线| 9i看片成人免费高清| 一区二区三区日韩欧美精品 | 欧美精品一区视频| 国产成人在线色| 国产精品第五页| 在线观看成人免费视频| 视频一区欧美精品| 日韩欧美视频在线| 成人免费视频网站在线观看| 亚洲乱码国产乱码精品精可以看 | av在线免费不卡| 一区二区在线观看免费视频播放 | 久久久精品综合| 国产大陆亚洲精品国产| 亚洲精品免费在线播放| 欧美一区二区三区小说| 激情综合色丁香一区二区| 国产精品久久久久影院色老大 | 国产成人精品亚洲日本在线桃色| 国产精品污www在线观看| 精品婷婷伊人一区三区三| 精品一区二区三区在线播放视频| 中文一区在线播放| 欧美精品乱人伦久久久久久| 粉嫩av亚洲一区二区图片| 亚洲一区二区三区四区在线免费观看| 日韩一区二区电影在线| 成人精品国产福利| 蜜臀av一区二区在线观看 | 天天色综合天天| 国产视频一区不卡| 欧美日韩国产一级片| 国产成人精品三级麻豆| 奇米影视在线99精品| 亚洲视频你懂的| 久久综合一区二区| 欧美性大战久久久久久久蜜臀| 日韩电影免费在线| 亚洲女与黑人做爰| 日本一区二区视频在线| 日韩欧美国产成人一区二区| 91精品办公室少妇高潮对白| 懂色av中文一区二区三区| 美女视频网站久久| 石原莉奈在线亚洲三区| 亚洲免费av在线| 亚洲视频在线一区| 国产精品嫩草影院com| www国产精品av| 日韩精品一区二区三区swag| 欧美在线视频你懂得| 91蜜桃网址入口| 不卡的电影网站| 国产91精品露脸国语对白| 久久国产精品99精品国产| 天涯成人国产亚洲精品一区av| 亚洲影院免费观看| 亚洲欧美偷拍卡通变态| 国产精品白丝在线| 国产精品久久久久久久久晋中 | 亚洲电影中文字幕在线观看| 最新中文字幕一区二区三区| 中文欧美字幕免费| 国产欧美日韩不卡免费| 国产色产综合产在线视频| 久久久久久久精| 国产视频一区在线播放| 日本一区二区久久| 久久精品一二三| 国产欧美精品日韩区二区麻豆天美| 久久综合久久综合九色| 2021久久国产精品不只是精品| 精品国产污污免费网站入口 | 中文字幕一区二区三| 国产精品美女久久久久久久久久久| 久久久久九九视频| 欧美极品aⅴ影院| 亚洲日本va在线观看| 亚洲女性喷水在线观看一区| 亚洲综合清纯丝袜自拍| 日韩精品国产精品| 久久激情五月婷婷| 国产成人精品www牛牛影视| 成人免费视频一区| 欧洲精品视频在线观看| 欧美理论在线播放| 精品国产亚洲在线| 亚洲天堂成人网| 亚洲成人动漫在线免费观看| 蜜桃久久久久久| 成人综合在线观看| 在线观看三级视频欧美| 337p亚洲精品色噜噜狠狠| 久久久久久久精| 一区二区三区高清| 久久国产精品99精品国产| 成人精品一区二区三区四区 | 日韩中文字幕91| 韩国成人在线视频| 色悠久久久久综合欧美99| 69堂成人精品免费视频| 国产三级精品在线| 亚洲成av人片在线观看| 国产一区不卡视频| 欧美制服丝袜第一页| 精品成a人在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 午夜欧美在线一二页| 国产美女在线精品| 欧美绝品在线观看成人午夜影视| 日本一区二区三区在线不卡| 亚洲一区视频在线| 成人性视频免费网站| 宅男噜噜噜66一区二区66|