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(); 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. * Return a list of files/directories to be loaded as custom thrust curves.

View File

@ -1,5 +1,6 @@
package net.sf.openrocket.startup; package net.sf.openrocket.startup;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.Collection; import java.util.Collection;
import java.util.concurrent.CountDownLatch; 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.DirectoryIterator;
import net.sf.openrocket.file.iterator.FileIterator; import net.sf.openrocket.file.iterator.FileIterator;
import net.sf.openrocket.gui.util.SimpleFileFilter; import net.sf.openrocket.gui.util.SimpleFileFilter;
import net.sf.openrocket.gui.util.SwingPreferences;
import net.sf.openrocket.logging.LogHelper; import net.sf.openrocket.logging.LogHelper;
import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.ComponentPreset;
import net.sf.openrocket.preset.xml.OpenRocketComponentLoader; import net.sf.openrocket.preset.xml.OpenRocketComponentLoader;
@ -88,8 +90,8 @@ public class ConcurrentComponentPresetDatabaseLoader {
// Start loading // Start loading
log.info("Loading component presets from " + SYSTEM_PRESET_DIR); log.info("Loading component presets from " + SYSTEM_PRESET_DIR);
iterator = DirectoryIterator.findDirectory(SYSTEM_PRESET_DIR, SimpleFileFilter orcFilter = new SimpleFileFilter("", false, "orc");
new SimpleFileFilter("", false, "orc")); iterator = DirectoryIterator.findDirectory(SYSTEM_PRESET_DIR, orcFilter);
if (iterator != null) { if (iterator != null) {
while( iterator.hasNext() ) { while( iterator.hasNext() ) {
@ -99,6 +101,23 @@ public class ConcurrentComponentPresetDatabaseLoader {
fileCount ++; 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(); latch.countDown();
} }
} }