private void searchForRuntimes(
      List<RuntimeDefinition> runtimeCollector, IPath path, IProgressMonitor monitor) {

    File[] files = null;
    if (path != null) {
      File root = path.toFile();
      if (root.isDirectory()) files = new File[] {root};
      else return;
    } else files = File.listRoots();

    if (files != null) {
      int size = files.length;
      monitor.beginTask("Searching " + path.toOSString(), size * 100);
      int work = 100 / size;
      for (int i = 0; i < size; i++) {
        if (monitor.isCanceled()) return;
        if (files[i] != null && files[i].isDirectory())
          searchDirectory(files[i], runtimeCollector, DEPTH, new SubProgressMonitor(monitor, 80));
        monitor.worked(20);
      }
      monitor.done();
    } else {
      monitor.beginTask("Searching " + path.toOSString(), 1);
      monitor.worked(1);
      monitor.done();
    }
  }
  /**
   * Allows a given set or subset of runtime detectors the ability to search through a folder
   *
   * @param directory
   * @param runtimeCollector
   * @param depth
   * @param runtimeDetectors
   * @param monitor
   */
  public void searchDirectory(
      File directory,
      List<RuntimeDefinition> runtimeCollector,
      int depth,
      Set<IRuntimeDetector> runtimeDetectors,
      IProgressMonitor monitor) {

    if (depth == 0 || monitor.isCanceled() || directory == null || !directory.isDirectory()) {
      return;
    }

    int workSize = (1000 + (10 * runtimeDetectors.size()));
    monitor.beginTask(
        Messages.JBossRuntimeLocator_Searching + directory.getAbsolutePath(), workSize);
    monitor.setTaskName(Messages.JBossRuntimeLocator_Searching + directory.getAbsolutePath());

    for (IRuntimeDetector detector : runtimeDetectors) {
      if (monitor.isCanceled()) {
        return;
      }
      if (!detector.isEnabled()) {
        monitor.worked(10);
        continue;
      }
      RuntimeDefinition runtimeDefinition =
          detector.getRuntimeDefinition(directory, new SubProgressMonitor(monitor, 10));
      if (runtimeDefinition != null) {
        runtimeCollector.add(runtimeDefinition);
        monitor.done();
        return;
      }
    }

    File[] files =
        directory.listFiles(
            new FileFilter() {
              public boolean accept(File file) {
                return file.isDirectory();
              }
            });

    SubProgressMonitor childrenMonitor = new SubProgressMonitor(monitor, 1000);
    childrenMonitor.beginTask("", 100 * files.length);
    if (files != null) {
      int size = files.length;
      for (int i = 0; i < size; i++) {
        if (monitor.isCanceled()) return;
        searchDirectory(
            files[i],
            runtimeCollector,
            depth - 1,
            runtimeDetectors,
            new SubProgressMonitor(childrenMonitor, 100));
      }
    }
    childrenMonitor.done();
  }
 /**
  * Allows all runtime detectors to search through a directory for their runtime types.
  *
  * @param directory
  * @param runtimeCollector
  * @param depth
  * @param monitor
  */
 public void searchDirectory(
     File directory,
     List<RuntimeDefinition> runtimeCollector,
     int depth,
     IProgressMonitor monitor) {
   Set<IRuntimeDetector> runtimeDetectors =
       RuntimeCoreActivator.getDefault().getRuntimeDetectors();
   searchDirectory(directory, runtimeCollector, depth, runtimeDetectors, monitor);
 }
Exemplo n.º 4
0
  @Override
  public void computeIncludedRuntimeDefinition(RuntimeDefinition runtimeDefinition) {
    runtimeDefinition.getIncludedRuntimeDefinitions().clear();
    List<RuntimeDefinition> runtimeDefinitions = runtimeDefinition.getIncludedRuntimeDefinitions();

    final File location = getLocation(runtimeDefinition);
    File[] directories =
        runtimeDefinition
            .getLocation()
            .listFiles(
                new FileFilter() {
                  public boolean accept(File file) {
                    if (!file.isDirectory() || file.equals(location)) {
                      return false;
                    }
                    return true;
                  }
                });
    List<RuntimeDefinition> definitions = new ArrayList<RuntimeDefinition>();
    JBossRuntimeLocator locator = new JBossRuntimeLocator();
    Set<IRuntimeDetector> seamDetectors = new HashSet<IRuntimeDetector>();
    Set<IRuntimeDetector> runtimeDetectors =
        RuntimeCoreActivator.getDefault().getRuntimeDetectors();
    for (IRuntimeDetector runtimeDetector : runtimeDetectors) {
      if (runtimeDetector instanceof RuntimeDetector) {
        IRuntimeDetectorDelegate delegate = ((RuntimeDetector) runtimeDetector).getDelegate();
        if (delegate instanceof SeamHandler) {
          seamDetectors.add(runtimeDetector);
          break;
        }
      }
    }
    for (File directory : directories) {
      locator.searchDirectory(directory, definitions, 1, seamDetectors, new NullProgressMonitor());
      for (RuntimeDefinition definition : definitions) {
        definition.setParent(runtimeDefinition);
      }
    }
    for (RuntimeDefinition definition : definitions) {
      if (!runtimeDefinitions.contains(definition)) {
        runtimeDefinitions.add(definition);
      }
    }
  }