Support loading orc component files from the filesystem located in the "user application directory"/Components

This commit is contained in:
Kevin Ruland 2012-09-21 21:01:59 +00:00
parent 9d2c51a0b1
commit f74d784f89
2 changed files with 37 additions and 2 deletions

View File

@ -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.

View File

@ -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<String,InputStream> 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();
}
}