/**
   * Maps old reconnect panel, to new one. can be removed after 2.*
   *
   * @return
   */
  private String convertFromOldSystem() {
    final int id = JDUtilities.getConfiguration().getIntegerProperty("RECONNECT_TYPE", 0);
    String[] ret;
    switch (id) {
      case 0:
        return LiveHeaderReconnect.ID;
      case 1:
        return ExternReconnectPlugin.ID;
      case 2:
        return ExternBatchReconnectPlugin.ID;
      case 3:
        // we need to convert clr script

        final String clr =
            JDUtilities.getConfiguration()
                .getStringProperty(Configuration.PARAM_HTTPSEND_REQUESTS_CLR);
        ret = CLRConverter.createLiveHeader(clr);

        if (ret != null) {
          JDUtilities.getConfiguration().setProperty(Configuration.PARAM_HTTPSEND_REQUESTS, ret[1]);
        }
        return LiveHeaderReconnect.ID;
    }
    return DummyRouterPlugin.getInstance().getID();
  }
 /**
  * returns the currently active routerplugin. Only one plugin may be active
  *
  * @return
  */
 public RouterPlugin getActivePlugin() {
   // convert only once
   String id = storage.getActivePluginID();
   if (id == null) {
     id = this.convertFromOldSystem();
     this.storage.setActivePluginID(id);
   }
   RouterPlugin active = ReconnectPluginController.getInstance().getPluginByID(id);
   if (active == null) {
     active = DummyRouterPlugin.getInstance();
     this.storage.setActivePluginID(active.getID());
   }
   return active;
 }
  /** Scans for reconnection plugins */
  private void scan() {
    try {
      final File[] files =
          JDUtilities.getResourceFile("reconnect")
              .listFiles(new JDFileFilter(null, ".reconnect", false));
      this.plugins = new ArrayList<RouterPlugin>();
      this.plugins.add(DummyRouterPlugin.getInstance());
      plugins.add(new ExternBatchReconnectPlugin());
      plugins.add(new ExternReconnectPlugin());
      plugins.add(new UPNPRouterPlugin());
      plugins.add(new LiveHeaderReconnect());
      plugins.add(new SpeedPortHybrid());
      plugins.add(new EasyBox804());
      final java.util.List<URL> urls = new ArrayList<URL>();
      if (files != null) {
        final int length = files.length;

        for (int i = 0; i < length; i++) {
          try {
            urls.add(files[i].toURI().toURL());
            Application.addUrlToClassPath(files[i].toURI().toURL(), getClass().getClassLoader());
          } catch (final Throwable e) {
            LogController.CL().log(e);
          }
        }
      }

      Enumeration<URL> found =
          getClass()
              .getClassLoader()
              .getResources(ReconnectPluginController.JD_CONTROLLING_RECONNECT_PLUGINS);
      Pattern pattern =
          Pattern.compile(Pattern.quote(JD_CONTROLLING_RECONNECT_PLUGINS) + "(\\w+)/");
      while (found.hasMoreElements()) {
        URL url = found.nextElement();

        if (url.getProtocol().equalsIgnoreCase("jar")) {
          // // jarred addon (JAR)
          String path = url.getPath();
          File jarFile = new File(new URL(path.substring(0, path.lastIndexOf('!'))).toURI());
          JarInputStream jis = null;
          try {
            jis = new JarInputStream(new FileInputStream(jarFile));
            JarEntry e;

            while ((e = jis.getNextJarEntry()) != null) {

              // try {
              Matcher matcher = pattern.matcher(e.getName());
              while (matcher.find()) {
                try {
                  String pkg = matcher.group(1);
                  load(pkg);

                  System.out.println(pkg);
                } catch (Exception e1) {
                  e1.printStackTrace();
                }
              }
            }
          } finally {
            try {
              jis.close();
            } catch (final Throwable e) {
            }
          }
        } else {

          for (File dir :
              new File(url.toURI())
                  .listFiles(
                      new FileFilter() {

                        public boolean accept(File pathname) {
                          return pathname.isDirectory();
                        }
                      })) {
            File file = new File(dir, "info.json");
            if (file.exists()) {
              load(dir.getName());
            }
          }
          //
        }
      }
    } catch (Throwable e) {
      LogController.CL().log(e);
    }
  }