From f74d784f898a66c3e2447c337a79d73eb604c644 Mon Sep 17 00:00:00 2001 From: Kevin Ruland Date: Fri, 21 Sep 2012 21:01:59 +0000 Subject: [PATCH] Support loading orc component files from the filesystem located in the "user application directory"/Components --- .../openrocket/gui/util/SwingPreferences.java | 16 +++++++++++++ ...ncurrentComponentPresetDatabaseLoader.java | 23 +++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/gui/util/SwingPreferences.java b/core/src/net/sf/openrocket/gui/util/SwingPreferences.java index 61e6be857..125b13616 100644 --- a/core/src/net/sf/openrocket/gui/util/SwingPreferences.java +++ b/core/src/net/sf/openrocket/gui/util/SwingPreferences.java @@ -224,6 +224,22 @@ public class SwingPreferences extends net.sf.openrocket.startup.Preferences { storeVersion(); } + public File getDefaultUserComponentDirectory() { + + File compdir = new File(SystemInfo.getUserApplicationDirectory(), "Components"); + + if (!compdir.isDirectory()) { + compdir.mkdirs(); + } + + if( !compdir.isDirectory() ) { + return null; + } + if( !compdir.canRead() ) { + return null; + } + return compdir; + } /** * Return a list of files/directories to be loaded as custom thrust curves. diff --git a/core/src/net/sf/openrocket/startup/ConcurrentComponentPresetDatabaseLoader.java b/core/src/net/sf/openrocket/startup/ConcurrentComponentPresetDatabaseLoader.java index 79838ece2..a4be94048 100644 --- a/core/src/net/sf/openrocket/startup/ConcurrentComponentPresetDatabaseLoader.java +++ b/core/src/net/sf/openrocket/startup/ConcurrentComponentPresetDatabaseLoader.java @@ -1,5 +1,6 @@ package net.sf.openrocket.startup; +import java.io.IOException; import java.io.InputStream; import java.util.Collection; import java.util.concurrent.CountDownLatch; @@ -12,6 +13,7 @@ import net.sf.openrocket.database.ComponentPresetDatabase; import net.sf.openrocket.file.iterator.DirectoryIterator; import net.sf.openrocket.file.iterator.FileIterator; import net.sf.openrocket.gui.util.SimpleFileFilter; +import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.xml.OpenRocketComponentLoader; @@ -88,8 +90,8 @@ public class ConcurrentComponentPresetDatabaseLoader { // Start loading log.info("Loading component presets from " + SYSTEM_PRESET_DIR); - iterator = DirectoryIterator.findDirectory(SYSTEM_PRESET_DIR, - new SimpleFileFilter("", false, "orc")); + SimpleFileFilter orcFilter = new SimpleFileFilter("", false, "orc"); + iterator = DirectoryIterator.findDirectory(SYSTEM_PRESET_DIR, orcFilter); if (iterator != null) { while( iterator.hasNext() ) { @@ -99,6 +101,23 @@ public class ConcurrentComponentPresetDatabaseLoader { fileCount ++; } } + + try { + iterator = new DirectoryIterator( + ((SwingPreferences) Application.getPreferences()).getDefaultUserComponentDirectory(), + orcFilter, + true); + if (iterator != null) { + while( iterator.hasNext() ) { + Pair f = iterator.next(); + FileLoader loader = new FileLoader( f.getV(), f.getU() ); + loaderPool.execute(loader); + fileCount ++; + } + } + } catch (IOException ioex ) { + log.debug("Error opening UserComponentDirectory", ioex); + } latch.countDown(); } }