create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / startup / ConcurrentComponentPresetDatabaseLoader.java
index a97d688cd0f69b57f1e18d59c46188b5a47a7717..79838ece20c021febf11b407b5f12fbceae2184d 100644 (file)
@@ -14,6 +14,7 @@ import net.sf.openrocket.file.iterator.FileIterator;
 import net.sf.openrocket.gui.util.SimpleFileFilter;
 import net.sf.openrocket.logging.LogHelper;
 import net.sf.openrocket.preset.ComponentPreset;
+import net.sf.openrocket.preset.xml.OpenRocketComponentLoader;
 import net.sf.openrocket.util.Pair;
 
 public class ConcurrentComponentPresetDatabaseLoader {
@@ -48,11 +49,12 @@ public class ConcurrentComponentPresetDatabaseLoader {
                        }
                });
 
-               loaderPool = Executors.newFixedThreadPool(15, new ThreadFactory() {
+               loaderPool = Executors.newFixedThreadPool(3, new ThreadFactory() {
                        int threadCount = 0;
                        @Override
                        public Thread newThread(Runnable r) {
                                Thread t = new Thread(r,"PresetLoaderPool-" + threadCount++);
+                               t.setPriority(Thread.MIN_PRIORITY);
                                return t;
                        }
 
@@ -69,10 +71,12 @@ public class ConcurrentComponentPresetDatabaseLoader {
        public void await() throws InterruptedException {
                latch.await();
                loaderPool.shutdown();
-               loaderPool.awaitTermination(10, TimeUnit.SECONDS);
+               loaderPool.awaitTermination(90, TimeUnit.SECONDS);
                writerPool.shutdown();
-               writerPool.awaitTermination(10, TimeUnit.SECONDS);
-               iterator.close();
+               writerPool.awaitTermination(90, TimeUnit.SECONDS);
+               if ( iterator != null ) {
+                       iterator.close();
+               }
                long end = System.currentTimeMillis();
                log.debug("Time to load presets: " + (end-startTime) + "ms " + presetCount + " loaded from " + fileCount + " files");
        }
@@ -87,18 +91,14 @@ public class ConcurrentComponentPresetDatabaseLoader {
                        iterator = DirectoryIterator.findDirectory(SYSTEM_PRESET_DIR,
                                        new SimpleFileFilter("", false, "orc"));
 
-                       if (iterator == null) {
-                               throw new IllegalStateException("Component preset directory " + SYSTEM_PRESET_DIR +
-                                               " not found, distribution built wrong");
-                       }
-
-                       while( iterator.hasNext() ) {
-                               Pair<String,InputStream> f = iterator.next();
-                               FileLoader loader = new FileLoader( f.getV(), f.getU() );
-                               loaderPool.execute(loader);
-                               fileCount ++;
+                       if (iterator != null) {
+                               while( iterator.hasNext() ) {
+                                       Pair<String,InputStream> f = iterator.next();
+                                       FileLoader loader = new FileLoader( f.getV(), f.getU() );
+                                       loaderPool.execute(loader);
+                                       fileCount ++;
+                               }
                        }
-
                        latch.countDown();
                }
        }
@@ -115,7 +115,7 @@ public class ConcurrentComponentPresetDatabaseLoader {
 
                @Override
                public void run() {
-                       ComponentPresetDatabase.ComponentPresetLoader loader = new ComponentPresetDatabase.ComponentPresetLoader();
+                       OpenRocketComponentLoader loader = new OpenRocketComponentLoader();
                        Collection<ComponentPreset> presets = loader.load(is, fileName);
                        PresetWriter writer = new PresetWriter(presets);
                        writerPool.execute(writer);