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); }
@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); } } }