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

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

?? categoryexplorermodel.java

?? apache的log4j源碼
?? JAVA
字號:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.log4j.lf5.viewer.categoryexplorer;import org.apache.log4j.lf5.LogRecord;import javax.swing.*;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreeNode;import javax.swing.tree.TreePath;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Enumeration;/** * CategoryExplorerModel * * @author Michael J. Sikorsky * @author Robert Shaw * @author Brent Sprecher * @author Richard Hurst */// Contributed by ThoughtWorks Inc.public class CategoryExplorerModel extends DefaultTreeModel {  private static final long serialVersionUID = -3413887384316015901L;  //--------------------------------------------------------------------------  //   Constants:  //--------------------------------------------------------------------------  //--------------------------------------------------------------------------  //   Protected Variables:  //--------------------------------------------------------------------------  protected boolean _renderFatal = true;  protected ActionListener _listener = null;  protected ActionEvent _event = new ActionEvent(this,      ActionEvent.ACTION_PERFORMED,      "Nodes Selection changed");  //--------------------------------------------------------------------------  //   Private Variables:  //--------------------------------------------------------------------------  //--------------------------------------------------------------------------  //   Constructors:  //--------------------------------------------------------------------------  public CategoryExplorerModel(CategoryNode node) {    super(node);  }  //--------------------------------------------------------------------------  //   Public Methods:  //--------------------------------------------------------------------------  public void addLogRecord(LogRecord lr) {    CategoryPath path = new CategoryPath(lr.getCategory());    addCategory(path); // create category path if it is new    CategoryNode node = getCategoryNode(path);    node.addRecord(); // update category node    if (_renderFatal && lr.isFatal()) {      TreeNode[] nodes = getPathToRoot(node);      int len = nodes.length;      CategoryNode parent;      // i = 0 gives root node      // skip node and root, loop through "parents" in between      for (int i = 1; i < len - 1; i++) {        parent = (CategoryNode) nodes[i];        parent.setHasFatalChildren(true);        nodeChanged(parent);      }      node.setHasFatalRecords(true);      nodeChanged(node);    }  }  public CategoryNode getRootCategoryNode() {    return (CategoryNode) getRoot();  }  public CategoryNode getCategoryNode(String category) {    CategoryPath path = new CategoryPath(category);    return (getCategoryNode(path));  }  /**   * returns null if no CategoryNode exists.   */  public CategoryNode getCategoryNode(CategoryPath path) {    CategoryNode root = (CategoryNode) getRoot();    CategoryNode parent = root; // Start condition.    for (int i = 0; i < path.size(); i++) {      CategoryElement element = path.categoryElementAt(i);      // If the two nodes have matching titles they are considered equal.      Enumeration children = parent.children();      boolean categoryAlreadyExists = false;      while (children.hasMoreElements()) {        CategoryNode node = (CategoryNode) children.nextElement();        String title = node.getTitle().toLowerCase();        String pathLC = element.getTitle().toLowerCase();        if (title.equals(pathLC)) {          categoryAlreadyExists = true;          // This is now the new parent node.          parent = node;          break; // out of the while, and back to the for().        }      }      if (categoryAlreadyExists == false) {        return null; // Didn't find the Node.      }    }    return (parent);  }  /**   * @return true if all the nodes in the specified CategoryPath are   * selected.   */  public boolean isCategoryPathActive(CategoryPath path) {    CategoryNode root = (CategoryNode) getRoot();    CategoryNode parent = root; // Start condition.    boolean active = false;    for (int i = 0; i < path.size(); i++) {      CategoryElement element = path.categoryElementAt(i);      // If the two nodes have matching titles they are considered equal.      Enumeration children = parent.children();      boolean categoryAlreadyExists = false;      active = false;      while (children.hasMoreElements()) {        CategoryNode node = (CategoryNode) children.nextElement();        String title = node.getTitle().toLowerCase();        String pathLC = element.getTitle().toLowerCase();        if (title.equals(pathLC)) {          categoryAlreadyExists = true;          // This is now the new parent node.          parent = node;          if (parent.isSelected()) {            active = true;          }          break; // out of the while, and back to the for().        }      }      if (active == false || categoryAlreadyExists == false) {        return false;      }    }    return (active);  }  /**   * <p>Method altered by Richard Hurst such that it returns the CategoryNode   * corresponding to the CategoryPath</p>   *   * @param path category path.   * @return CategoryNode   */  public CategoryNode addCategory(CategoryPath path) {    CategoryNode root = (CategoryNode) getRoot();    CategoryNode parent = root; // Start condition.    for (int i = 0; i < path.size(); i++) {      CategoryElement element = path.categoryElementAt(i);      // If the two nodes have matching titles they are considered equal.      Enumeration children = parent.children();      boolean categoryAlreadyExists = false;      while (children.hasMoreElements()) {        CategoryNode node = (CategoryNode) children.nextElement();        String title = node.getTitle().toLowerCase();        String pathLC = element.getTitle().toLowerCase();        if (title.equals(pathLC)) {          categoryAlreadyExists = true;          // This is now the new parent node.          parent = node;          break;        }      }      if (categoryAlreadyExists == false) {        // We need to add the node.        CategoryNode newNode = new CategoryNode(element.getTitle());        //This method of adding a new node cause parent roots to be        // collapsed.        //parent.add( newNode );        //reload(parent);        // This doesn't force the nodes to collapse.        insertNodeInto(newNode, parent, parent.getChildCount());        refresh(newNode);        // The newly added node is now the parent.        parent = newNode;      }    }    return parent;  }  public void update(CategoryNode node, boolean selected) {    if (node.isSelected() == selected) {      return; // nothing was changed, nothing to do    }    // select parents or deselect children    if (selected) {      setParentSelection(node, true);    } else {      setDescendantSelection(node, false);    }  }  public void setDescendantSelection(CategoryNode node, boolean selected) {    Enumeration descendants = node.depthFirstEnumeration();    CategoryNode current;    while (descendants.hasMoreElements()) {      current = (CategoryNode) descendants.nextElement();      // does the current node need to be changed?      if (current.isSelected() != selected) {        current.setSelected(selected);        nodeChanged(current);      }    }    notifyActionListeners();  }  public void setParentSelection(CategoryNode node, boolean selected) {    TreeNode[] nodes = getPathToRoot(node);    int len = nodes.length;    CategoryNode parent;    // i = 0 gives root node, i=len-1 gives this node    // skip the root node    for (int i = 1; i < len; i++) {      parent = (CategoryNode) nodes[i];      if (parent.isSelected() != selected) {        parent.setSelected(selected);        nodeChanged(parent);      }    }    notifyActionListeners();  }  public synchronized void addActionListener(ActionListener l) {    _listener = AWTEventMulticaster.add(_listener, l);  }  public synchronized void removeActionListener(ActionListener l) {    _listener = AWTEventMulticaster.remove(_listener, l);  }  public void resetAllNodeCounts() {    Enumeration nodes = getRootCategoryNode().depthFirstEnumeration();    CategoryNode current;    while (nodes.hasMoreElements()) {      current = (CategoryNode) nodes.nextElement();      current.resetNumberOfContainedRecords();      nodeChanged(current);    }  }  /**   * <p>Returns the CategoryPath to the specified CategoryNode</p>   *   * @param node The target CategoryNode   * @return CategoryPath   */  public TreePath getTreePathToRoot(CategoryNode node) {    if (node == null) {      return null;    }    return (new TreePath(getPathToRoot(node)));  }  //--------------------------------------------------------------------------  //   Protected Methods:  //--------------------------------------------------------------------------  protected void notifyActionListeners() {    if (_listener != null) {      _listener.actionPerformed(_event);    }  }  /**   * Fires a nodechanged event on the SwingThread.   */  protected void refresh(final CategoryNode node) {    SwingUtilities.invokeLater(new Runnable() {      public void run() {        nodeChanged(node); // remind the tree to render the new node      }    });  }  //--------------------------------------------------------------------------  //   Private Methods:  //--------------------------------------------------------------------------  //--------------------------------------------------------------------------  //   Nested Top-Level Classes or Interfaces:  //--------------------------------------------------------------------------}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲日本一区| 亚洲欧洲一区二区三区| 成人免费av资源| 风间由美性色一区二区三区| 99久久99久久久精品齐齐| 成人av手机在线观看| 在线观看免费成人| 欧美性感一类影片在线播放| 欧美日韩一区 二区 三区 久久精品| 一本一道综合狠狠老| 正在播放一区二区| 日韩午夜激情免费电影| 欧美zozozo| 亚洲色图在线播放| 亚洲大片在线观看| 经典三级在线一区| 99re视频这里只有精品| 欧美日韩精品电影| 亚洲国产成人高清精品| 久久爱www久久做| 色狠狠色狠狠综合| 欧美电影免费观看高清完整版在线观看| 26uuu欧美| 亚洲综合免费观看高清完整版| 国产精品久久久久久久久免费桃花| 韩国精品在线观看| 色狠狠色狠狠综合| 国产精品美女久久久久aⅴ国产馆| 亚洲人成网站精品片在线观看| 美脚の诱脚舐め脚责91 | 欧美精品一区二区三区在线| 亚洲视频免费观看| 成人午夜视频网站| 7777精品伊人久久久大香线蕉超级流畅| 欧美大片在线观看一区二区| 亚洲成人自拍网| 97国产一区二区| 中日韩免费视频中文字幕| 开心九九激情九九欧美日韩精美视频电影 | 国产美女一区二区三区| 欧美男男青年gay1069videost | 青娱乐精品视频在线| 91国产成人在线| 亚洲欧美欧美一区二区三区| 国产成人精品免费一区二区| 久久久久国产免费免费| 激情久久五月天| 久久久精品日韩欧美| 国产一区二区毛片| 国产免费观看久久| 色国产综合视频| 亚洲女与黑人做爰| 欧美日韩一区在线| 美女视频网站久久| 久久精品一区二区| 91美女在线看| 奇米精品一区二区三区在线观看一| 欧美岛国在线观看| jvid福利写真一区二区三区| 国产欧美一区二区精品忘忧草| 国产99久久久国产精品潘金网站| 国产欧美久久久精品影院| 色婷婷一区二区三区四区| 亚洲国产一区在线观看| 欧美刺激午夜性久久久久久久 | 国产成人福利片| 亚洲福利视频一区| 国产三级欧美三级日产三级99| 不卡视频一二三| 免费高清不卡av| 亚洲美女一区二区三区| 精品成人在线观看| 欧美日韩精品电影| 色综合天天综合色综合av | 国产成人av福利| 一区二区三区国产| 亚洲黄色av一区| 亚洲成人手机在线| 日本在线播放一区二区三区| 性欧美疯狂xxxxbbbb| 蜜桃91丨九色丨蝌蚪91桃色| 激情五月激情综合网| www.亚洲色图.com| 欧美日本一区二区三区| 欧美tk—视频vk| 中文一区二区在线观看| 亚洲综合在线免费观看| 亚洲成av人影院| 蜜桃视频一区二区| 国产麻豆欧美日韩一区| 91丨九色丨国产丨porny| 在线观看网站黄不卡| 在线不卡一区二区| 国产欧美日韩视频一区二区| 中文字幕一区二区视频| 亚洲一二三区视频在线观看| 精品一区二区三区在线观看国产 | 国产一区二区三区视频在线播放| 日韩精品乱码免费| 国产精品一级黄| 91天堂素人约啪| 欧美三级日本三级少妇99| 91精品国产色综合久久不卡蜜臀| 欧美一区二区视频在线观看2020| 精品欧美久久久| 亚洲欧美另类小说| 另类的小说在线视频另类成人小视频在线| 日韩精品一卡二卡三卡四卡无卡| 久久av中文字幕片| 成人h动漫精品一区二区 | 6080国产精品一区二区| 日韩欧美色综合网站| 亚洲私人影院在线观看| 美女性感视频久久| aaa亚洲精品一二三区| 欧美老肥妇做.爰bbww视频| 日韩精品一区二区三区三区免费| 久久久久久久久一| 亚洲精品高清在线观看| 极品少妇一区二区| 在线播放91灌醉迷j高跟美女| 久久综合狠狠综合| 日韩电影免费一区| 欧美视频一区二区| 国产精品丝袜久久久久久app| 久久精品二区亚洲w码| 在线观看日韩电影| 亚洲精品视频自拍| 91麻豆swag| 亚洲精选视频免费看| 99久久精品国产毛片| 久久精品人人做人人综合| 国产一区在线视频| 日韩三级电影网址| 蜜臀av一区二区| 久久久久久久一区| 国产精品亚洲а∨天堂免在线| www国产成人| 国产不卡视频在线观看| 欧美激情一区二区| 91视频在线观看免费| 亚洲一卡二卡三卡四卡| 在线观看免费亚洲| 亚洲成av人在线观看| 精品人在线二区三区| 粉嫩久久99精品久久久久久夜| 国产精品免费免费| 色又黄又爽网站www久久| 日韩中文字幕一区二区三区| 3d成人h动漫网站入口| 久久成人久久爱| 日韩美女精品在线| 欧美一区二区三区免费视频 | 国产福利一区在线观看| 亚洲欧美一区二区视频| 日韩一区二区在线看| 国产iv一区二区三区| 亚洲国产aⅴ天堂久久| 精品国产露脸精彩对白| 91免费在线看| 国产福利一区二区| 日韩综合一区二区| 中文字幕一区二区三区在线不卡| 欧美日韩国产美女| 国产盗摄精品一区二区三区在线| 一区二区三区在线视频观看 | 亚洲欧美一区二区久久| 日韩一区二区三| 欧美日韩国产综合视频在线观看| 国产精品888| 日本不卡一区二区| 亚洲va欧美va国产va天堂影院| 国产精品成人网| 久久久亚洲综合| 日韩欧美成人午夜| 日韩一区二区精品在线观看| 91麻豆福利精品推荐| av影院午夜一区| 99视频在线精品| 91麻豆精东视频| 不卡一卡二卡三乱码免费网站| 精品一区免费av| 国产精品1区2区3区在线观看| 韩国中文字幕2020精品| 精品在线一区二区| 国产高清亚洲一区| 国产成人自拍网| 粉嫩av一区二区三区在线播放| 国产高清在线观看免费不卡| 国产乱对白刺激视频不卡| 韩国精品免费视频| 99re热视频精品| 欧美性三三影院| 精品成人在线观看| 亚洲视频1区2区| 日韩精品成人一区二区三区| 九九精品一区二区| 成人网在线播放| 欧美剧情电影在线观看完整版免费励志电影 | 久草精品在线观看|