[jbosstools-commits] JBoss Tools SVN: r43216 - trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Fri Aug 24 08:36:03 EDT 2012
Author: fbricon
Date: 2012-08-24 08:36:02 -0400 (Fri, 24 Aug 2012)
New Revision: 43216
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model/ProjectExampleUtil.java
Log:
JBIDE-11985 : Fetch project example descriptors in parallel
Modified: trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model/ProjectExampleUtil.java
===================================================================
--- trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model/ProjectExampleUtil.java 2012-08-24 11:49:18 UTC (rev 43215)
+++ trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/model/ProjectExampleUtil.java 2012-08-24 12:36:02 UTC (rev 43216)
@@ -29,6 +29,11 @@
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CompletionService;
+import java.util.concurrent.ExecutorCompletionService;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -308,16 +313,22 @@
public static List<ProjectExampleCategory> getProjects(
Set<IProjectExampleSite> sites, IProgressMonitor monitor) {
monitor.setTaskName(Messages.ProjectUtil_Parsing_project_description_files);
-
List<ProjectExampleCategory> list = new ArrayList<ProjectExampleCategory>();
invalidSites.clear();
ProjectExampleCategory other = ProjectExampleCategory.OTHER;
+ int threads = Runtime.getRuntime().availableProcessors();
+ //threads = 1;
+ ExecutorService service = Executors.newFixedThreadPool(threads);
+ CompletionService<Tuple<IProjectExampleSite, Document>> pool = new ExecutorCompletionService<Tuple<IProjectExampleSite, Document>>(service);
try {
boolean showExperimentalSites = ProjectExamplesActivator
.getDefault()
.getPreferenceStore()
.getBoolean(
ProjectExamplesActivator.SHOW_EXPERIMENTAL_SITES);
+
+
+ int count = 0;
for (IProjectExampleSite site : sites) {
if (!showExperimentalSites && site.isExperimental()) {
continue;
@@ -326,31 +337,20 @@
invalidSites.add(site);
continue;
}
- File file = getProjectExamplesFile(site.getUrl(),
- "projectExamples", ".xml", monitor); //$NON-NLS-1$ //$NON-NLS-2$
- if (monitor.isCanceled()) {
+
+ pool.submit(new FetchProjectExampleDocumentTask(site));
+ count++;
+ }
+
+ for (int k=0; k <count; k++) {
+ //Handle the next finished task first
+ Tuple<IProjectExampleSite, Document> tuple = pool.take().get();
+ IProjectExampleSite site = tuple.key;
+ Document doc = tuple.value;
+ if (doc == null) {
invalidSites.add(site);
continue;
}
- if (file == null || !file.exists() || !file.isFile()) {
- ProjectExamplesActivator.log(NLS.bind(
- Messages.ProjectUtil_Invalid_URL, site.getUrl()
- .toString()));
- invalidSites.add(site);
- continue;
- }
-
- Document doc;
- try {
- DocumentBuilderFactory dbf = DocumentBuilderFactory
- .newInstance();
- DocumentBuilder db = dbf.newDocumentBuilder();
- doc = db.parse(file);
- } catch (Exception e) {
- ProjectExamplesActivator.log(e);
- invalidSites.add(site);
- continue;
- }
NodeList projects = doc.getElementsByTagName("project"); //$NON-NLS-1$
int len = projects.getLength();
for (int i = 0; i < len; i++) {
@@ -486,6 +486,8 @@
}
} catch (Exception e) {
ProjectExamplesActivator.log(e);
+ } finally {
+ service.shutdown();
}
list.add(other);
handleCategories(list, monitor);
@@ -900,4 +902,45 @@
return selection;
}
+ private static class Tuple<X, Y> {
+
+ X key;
+ Y value;
+
+ public Tuple(X key) {
+ this.key = key;
+ }
+
+ }
+
+ private static class FetchProjectExampleDocumentTask implements Callable<Tuple<IProjectExampleSite, Document>> {
+
+ Tuple<IProjectExampleSite, Document> tuple;
+
+ public FetchProjectExampleDocumentTask(IProjectExampleSite site) {
+ tuple = new Tuple<IProjectExampleSite, Document>(site);
+ }
+
+ @Override
+ public Tuple<IProjectExampleSite, Document> call() throws Exception {
+ URL url = tuple.key.getUrl();
+ File file = getProjectExamplesFile(url, "projectExamples", ".xml", new NullProgressMonitor());
+ if(file == null || !file.exists() || !file.isFile()) {
+ ProjectExamplesActivator.log(NLS.bind(Messages.ProjectUtil_Invalid_URL, url.toString()));
+ return tuple;
+ }
+
+ try {
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ Document doc = db.parse(file);
+ tuple.value = doc;
+
+ } catch (Exception e) {
+ ProjectExamplesActivator.log(e);
+ }
+ return tuple;
+ }
+
+ }
}
More information about the jbosstools-commits
mailing list