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

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

?? pluginrepository.java

?? 爬蟲數據的改進,并修正了一些bug
?? JAVA
字號:
/*
 * Copyright (c) 2003 The Nutch Organization. All rights reserved. Use subject
 * to the conditions in http://www.nutch.org/LICENSE.txt.
 */
package net.nutch.plugin;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.logging.Logger;
import net.nutch.util.LogFormatter;
import org.dom4j.DocumentException;
/**
 * The plugin repositority is a registry of all plugins.
 * 
 * At system boot up a repositority is builded by parsing the mainifest files of
 * all plugins. Plugins that require not existing other plugins are not
 * registed. For each plugin a plugin descriptor instance will be created. The
 * descriptor represent all meta information about a plugin. So a plugin
 * instance will be created later when it is required, this allow lazy plugin
 * loading.
 * 
 * @author joa23
 */
public class PluginRepository {
  private static PluginRepository fInstance;
  private ArrayList fRegisteredPlugins;
  private HashMap fExtensionPoints;
  private HashMap fActivatedPlugins;
  public static final Logger LOG = LogFormatter
    .getLogger("net.nutch.plugin.PluginRepository");
  /**
   * @see java.lang.Object#Object()
   */
  private PluginRepository() throws MalformedURLException, IOException,
                                    DocumentException, PluginRuntimeException {
    fActivatedPlugins = new HashMap();
    fExtensionPoints = new HashMap();
    fRegisteredPlugins = getDependencyCheckedPlugins(PluginManifestParser
                                                     .parsePluginFolder());
    installExtensions(fRegisteredPlugins);
  }

  /**
   * @param fRegisteredPlugins
   */
  private void installExtensions(ArrayList pRegisteredPlugins)
    throws PluginRuntimeException {
    for (int i = 0; i < pRegisteredPlugins.size(); i++) {
      PluginDescriptor descriptor= (PluginDescriptor)pRegisteredPlugins.get(i);
      Extension[] extensions = descriptor.getExtensions();
      for (int j = 0; j < extensions.length; j++) {
        Extension extension = extensions[j];
        String xpId = extension.getTargetPoint();
        ExtensionPoint point = getExtensionPoint(xpId);
        if (point == null)
          throw new PluginRuntimeException
            ("extension point: "+xpId+" does not exist.");
        point.addExtension(extension);
      }
    }
  }
  /**
   * @param pLoadedPlugins
   * @return ArrayList
   */
  private ArrayList getDependencyCheckedPlugins(ArrayList pLoadedPlugins) {
    ArrayList availablePlugins = new ArrayList();
    for (int i = 0; i < pLoadedPlugins.size(); i++) {
      PluginDescriptor descriptor = (PluginDescriptor) pLoadedPlugins.get(i);
      String[] dependencyIDs = descriptor.getDependencies();
      boolean available = true;
      for (int j = 0; j < dependencyIDs.length; j++) {
        String id = dependencyIDs[j];
        if (!dependencyIsAvailabel(id, pLoadedPlugins)) {
          available = false;
          //LOG.fine("Skipping " + descriptor.getName());
          break;
        }
      }
      if (available) {
        //LOG.fine("Adding " + descriptor.getName());
        availablePlugins.add(descriptor);
        ExtensionPoint[] points = descriptor.getExtenstionPoints();
        for (int j = 0; j < points.length; j++) {
          ExtensionPoint point = points[j];
          String xpId = point.getId();
          //LOG.fine("Adding extension point " + xpId);
          fExtensionPoints.put(xpId, point);
        }
      }
    }
    return availablePlugins;
  }
  /**
   * @param id
   * @param pLoadedPlugins
   * @return boolean
   */
  private boolean dependencyIsAvailabel(String id, ArrayList pLoadedPlugins) {
    if (pLoadedPlugins != null && id != null) {
      for (int i = 0; i < pLoadedPlugins.size(); i++) {
        PluginDescriptor descriptor = (PluginDescriptor) pLoadedPlugins
          .get(i);
        if (descriptor.getPluginId().equals(id)) {
          return true;
        }
      }
    }
    return false;
  }
  /**
   * Returns the singelton instance of the <code>PluginRepository</code>
   */
  public static synchronized PluginRepository getInstance() {
    if (fInstance != null)
      return fInstance;
    try {
      fInstance = new PluginRepository();
    } catch (Exception e) {
      LOG.severe(e.toString());
      throw new RuntimeException(e);
    }
    return fInstance;
  }
  /**
   * Returns all registed plugin descriptors.
   * 
   * @return PluginDescriptor[]
   */
  public PluginDescriptor[] getPluginDescriptors() {
    return (PluginDescriptor[]) fRegisteredPlugins
      .toArray(new PluginDescriptor[fRegisteredPlugins.size()]);
  }
  /**
   * Returns the descriptor of one plugin identified by a plugin id.
   * 
   * @param pPluginId
   * @return PluginDescriptor
   */
  public PluginDescriptor getPluginDescriptor(String pPluginId) {
    for (int i = 0; i < fRegisteredPlugins.size(); i++) {
      PluginDescriptor descriptor = (PluginDescriptor) fRegisteredPlugins
        .get(i);
      if (descriptor.getPluginId().equals(pPluginId))
        return descriptor;
    }
    return null;
  }
  /**
   * Returns a extension point indentified by a extension point id.
   * 
   * @param xXpId
   */
  public ExtensionPoint getExtensionPoint(String pXpId) {
    return (ExtensionPoint) fExtensionPoints.get(pXpId);
  }
  /**
   * Returns a instance of a plugin. Plugin instances are cached. So a plugin
   * exist only as one instance. This allow a central management of plugin own
   * resources.
   * 
   * After creating the plugin instance the startUp() method is invoked. The
   * plugin use a own classloader that is used as well by all instance of
   * extensions of the same plugin. This class loader use all exported
   * libraries from the dependend plugins and all plugin libraries.
   * 
   * @param pDescriptor
   * @return Plugin
   * @throws PluginRuntimeException
   */
  public Plugin getPluginInstance(PluginDescriptor pDescriptor)
    throws PluginRuntimeException {
    if (fActivatedPlugins.containsKey(pDescriptor.getPluginId()))
      return (Plugin) fActivatedPlugins.get(pDescriptor.getPluginId());
    try {
      // Must synchronize here to make sure creation and initialization
      // of a plugin instance are done by one and only one thread.
      // The same is in Extension.getExtensionInstance().
      // Suggested by Stefan Groschupf <sg@media-style.com>
      synchronized (pDescriptor) {
        PluginClassLoader loader = pDescriptor.getClassLoader();
        Class pluginClass = loader.loadClass(pDescriptor.getPluginClass());
        Constructor constructor = pluginClass
          .getConstructor(new Class[]{PluginDescriptor.class});
        Plugin plugin = (Plugin) constructor
          .newInstance(new Object[]{pDescriptor});
        plugin.startUp();
        fActivatedPlugins.put(pDescriptor.getPluginId(), plugin);
        return plugin;
      }
    } catch (ClassNotFoundException e) {
      throw new PluginRuntimeException(e);
    } catch (InstantiationException e) {
      throw new PluginRuntimeException(e);
    } catch (IllegalAccessException e) {
      throw new PluginRuntimeException(e);
    } catch (NoSuchMethodException e) {
      throw new PluginRuntimeException(e);
    } catch (InvocationTargetException e) {
      throw new PluginRuntimeException(e);
    }
  }
  /*
   * (non-Javadoc)
   * 
   * @see java.lang.Object#finalize()
   */
  public void finalize() throws Throwable {
    shotDownActivatedPlugins();
  }
  /**
   * @throws PluginRuntimeException
   */
  private void shotDownActivatedPlugins() throws PluginRuntimeException {
    Iterator iterator = fActivatedPlugins.keySet().iterator();
    while (iterator.hasNext()) {
      String pluginId = (String) iterator.next();
      Plugin object = (Plugin) fActivatedPlugins.get(pluginId);
      object.shutDown();
    }
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品 欧美精品| 一区二区免费在线| 国产一区三区三区| 欧美变态凌虐bdsm| 麻豆视频一区二区| 欧美精品一区二区三区久久久| 另类小说视频一区二区| 欧美不卡一区二区三区| 国产一区999| 国产精品人成在线观看免费| 国产成人h网站| 自拍偷拍亚洲欧美日韩| 欧美视频日韩视频在线观看| 日韩av午夜在线观看| 26uuu国产在线精品一区二区| 国产福利91精品一区二区三区| 国产精品久久久久永久免费观看| 91久久精品一区二区三区| 午夜不卡av在线| 久久女同互慰一区二区三区| a美女胸又www黄视频久久| 一卡二卡欧美日韩| 精品免费日韩av| 成人在线一区二区三区| 亚洲777理论| 亚洲国产成人在线| 欧美人体做爰大胆视频| 国产99久久久国产精品免费看| 亚洲色欲色欲www在线观看| 欧美精品久久一区| 成人黄页在线观看| 石原莉奈一区二区三区在线观看| 久久蜜桃香蕉精品一区二区三区| 色国产精品一区在线观看| 国产一区二区三区不卡在线观看| 自拍偷拍亚洲综合| 欧美mv日韩mv| 在线看国产日韩| 国产精品一区二区男女羞羞无遮挡| 亚洲欧美另类小说视频| 精品美女一区二区三区| 91精品福利在线| 成人午夜看片网址| 人人狠狠综合久久亚洲| 成人欧美一区二区三区黑人麻豆| 日韩免费看网站| 在线精品观看国产| 丁香婷婷综合色啪| 久久精品国产免费| 亚洲高清视频在线| 亚洲欧美一区二区在线观看| 久久精品夜色噜噜亚洲aⅴ| 欧美区在线观看| 色婷婷av一区二区| 国产·精品毛片| 精品一二线国产| 丝袜美腿成人在线| 亚洲自拍偷拍图区| 亚洲男人天堂一区| 国产精品区一区二区三| 2023国产一二三区日本精品2022| 在线观看91精品国产麻豆| 一本色道久久综合狠狠躁的推荐| 粉嫩av一区二区三区在线播放| 麻豆免费看一区二区三区| 日韩高清中文字幕一区| 伊人性伊人情综合网| 久久久久久一级片| 久久久久久久免费视频了| 欧美大片在线观看| 欧美成人一区二区三区| 欧美老肥妇做.爰bbww| 欧美日韩高清影院| 欧美性猛交xxxx乱大交退制版 | 婷婷丁香激情综合| 亚洲激情中文1区| 亚洲免费观看高清完整版在线 | 久久99精品一区二区三区| 午夜视频在线观看一区| 捆绑调教美女网站视频一区| 亚洲高清视频中文字幕| 无吗不卡中文字幕| 日韩av电影天堂| 五月婷婷激情综合| 日本怡春院一区二区| 日本中文字幕一区二区视频| 免费在线观看视频一区| 精品在线一区二区| 国产精品自拍三区| av成人老司机| 一本一道波多野结衣一区二区| 在线视频一区二区三区| 欧美日韩一区二区三区免费看| 欧美色网一区二区| 欧美丰满少妇xxxbbb| 日韩一区二区在线看| 久久久久久久久一| 中文字幕一区二区在线播放| 亚洲美女免费在线| 亚洲va国产va欧美va观看| 久久精品噜噜噜成人88aⅴ| 国产精品一区在线观看乱码| 不卡电影一区二区三区| 色8久久精品久久久久久蜜| 91精品在线免费观看| 精品久久久久久久久久久久包黑料 | 一本一本久久a久久精品综合麻豆| 色综合久久66| 欧美精品久久天天躁| 久久这里只有精品视频网| 国产精品麻豆视频| 日韩精品成人一区二区三区| 国产在线播放一区三区四| 99热在这里有精品免费| 欧洲一区在线电影| 欧美精品一区二区三区在线 | 精品精品国产高清a毛片牛牛| 日本一区二区三区免费乱视频| 夜夜精品浪潮av一区二区三区| 日韩精品亚洲一区| 成人a区在线观看| 日韩一级二级三级| 亚洲色大成网站www久久九九| 午夜久久久影院| 成人综合婷婷国产精品久久蜜臀| 欧美午夜宅男影院| 久久久欧美精品sm网站| 亚洲与欧洲av电影| 国产成人免费9x9x人网站视频| 欧美日韩免费视频| 欧美韩国一区二区| 日韩av一级片| 日本韩国精品一区二区在线观看| 久久久久99精品国产片| 偷拍自拍另类欧美| a级高清视频欧美日韩| 精品91自产拍在线观看一区| 亚洲精品成人a在线观看| 国产一区二区日韩精品| 91精品国产一区二区| 一区二区三区色| 国产69精品久久777的优势| 日韩一区二区三区精品视频| 亚洲人成亚洲人成在线观看图片| 国产综合久久久久久久久久久久| 欧美日韩一区二区三区四区五区| 国产精品久久久久影视| 国产精一品亚洲二区在线视频| 欧美一二三区在线| 亚洲一级在线观看| 91啪在线观看| 亚洲图片激情小说| 丁香啪啪综合成人亚洲小说 | 国产欧美综合在线| 蜜桃一区二区三区四区| 欧美日韩亚洲综合一区二区三区| 日韩理论片网站| 99精品视频中文字幕| 国产色婷婷亚洲99精品小说| 国产一区二区三区在线观看精品| 日韩网站在线看片你懂的| 天堂久久久久va久久久久| 欧美影院一区二区| 亚洲综合免费观看高清在线观看| 成人不卡免费av| 一区二区中文字幕在线| av男人天堂一区| 亚洲免费在线播放| 91蝌蚪porny九色| 1024成人网| 色爱区综合激月婷婷| 亚洲一区二区综合| 欧美日韩另类一区| 日韩国产欧美三级| 日韩视频不卡中文| 国产在线播放一区| 国产精品毛片高清在线完整版| 成人免费黄色在线| 日韩理论电影院| 色乱码一区二区三区88| 亚洲一区二区三区视频在线播放| 一本到不卡精品视频在线观看| 一区二区国产盗摄色噜噜| 欧美在线小视频| 日韩高清不卡在线| 精品成a人在线观看| 岛国一区二区在线观看| 亚洲欧美经典视频| 欧美日韩一级二级| 美女高潮久久久| 国产欧美日韩三区| 91高清视频在线| 美女高潮久久久| 国产精品久久三| 欧美日韩国产首页在线观看| 免费看欧美女人艹b| 欧美激情一区二区三区| 91高清视频在线| 激情图片小说一区| 伊人一区二区三区|