[#1966] Pass File in FileIterator instead of filename
This commit is contained in:
parent
3951e3dcf3
commit
9c7afc669a
@ -56,7 +56,7 @@ public class DirectoryIterator extends FileIterator {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Pair<String, InputStream> findNext() {
|
protected Pair<File, InputStream> findNext() {
|
||||||
|
|
||||||
// Check if we're recursing
|
// Check if we're recursing
|
||||||
if (subIterator != null) {
|
if (subIterator != null) {
|
||||||
@ -86,7 +86,7 @@ public class DirectoryIterator extends FileIterator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
InputStream is = new BufferedInputStream(new FileInputStream(file));
|
InputStream is = new BufferedInputStream(new FileInputStream(file));
|
||||||
return new Pair<String, InputStream>(file.getName(), is);
|
return new Pair<>(file, is);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.warn("Error opening file/directory " + file, e);
|
logger.warn("Error opening file/directory " + file, e);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.sf.openrocket.file.iterator;
|
package net.sf.openrocket.file.iterator;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@ -20,10 +21,10 @@ import net.sf.openrocket.util.Pair;
|
|||||||
*
|
*
|
||||||
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
* @author Sampo Niskanen <sampo.niskanen@iki.fi>
|
||||||
*/
|
*/
|
||||||
public abstract class FileIterator implements Iterator<Pair<String, InputStream>> {
|
public abstract class FileIterator implements Iterator<Pair<File, InputStream>> {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(FileIterator.class);
|
private static final Logger logger = LoggerFactory.getLogger(FileIterator.class);
|
||||||
|
|
||||||
private Pair<String, InputStream> next = null;
|
private Pair<File, InputStream> next = null;
|
||||||
private int fileCount = 0;
|
private int fileCount = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -37,7 +38,7 @@ public abstract class FileIterator implements Iterator<Pair<String, InputStream>
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Pair<String, InputStream> next() {
|
public Pair<File, InputStream> next() {
|
||||||
if (next == null) {
|
if (next == null) {
|
||||||
next = findNext();
|
next = findNext();
|
||||||
}
|
}
|
||||||
@ -45,7 +46,7 @@ public abstract class FileIterator implements Iterator<Pair<String, InputStream>
|
|||||||
throw new NoSuchElementException("No more files");
|
throw new NoSuchElementException("No more files");
|
||||||
}
|
}
|
||||||
|
|
||||||
Pair<String, InputStream> n = next;
|
Pair<File, InputStream> n = next;
|
||||||
next = null;
|
next = null;
|
||||||
fileCount++;
|
fileCount++;
|
||||||
return n;
|
return n;
|
||||||
@ -86,10 +87,10 @@ public abstract class FileIterator implements Iterator<Pair<String, InputStream>
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the next pair of file name and InputStream.
|
* Return the next pair of file and InputStream.
|
||||||
*
|
*
|
||||||
* @return a pair with the file name and input stream reading the file.
|
* @return a pair with the file and input stream reading the file.
|
||||||
*/
|
*/
|
||||||
protected abstract Pair<String, InputStream> findNext();
|
protected abstract Pair<File, InputStream> findNext();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ public class ZipDirectoryIterator extends FileIterator {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Pair<String, InputStream> findNext() {
|
protected Pair<File, InputStream> findNext() {
|
||||||
if (entries == null) {
|
if (entries == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -90,7 +90,7 @@ public class ZipDirectoryIterator extends FileIterator {
|
|||||||
if (name.startsWith(directory) && filter.accept(file)) {
|
if (name.startsWith(directory) && filter.accept(file)) {
|
||||||
try {
|
try {
|
||||||
InputStream is = zipFile.getInputStream(entry);
|
InputStream is = zipFile.getInputStream(entry);
|
||||||
return new Pair<String, InputStream>(name, is);
|
return new Pair<>(file, is);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.error("IOException when reading ZIP file " + zipFileName, e);
|
logger.error("IOException when reading ZIP file " + zipFileName, e);
|
||||||
}
|
}
|
||||||
|
@ -185,8 +185,8 @@ public class SerializeThrustcurveMotors {
|
|||||||
System.exit(1);
|
System.exit(1);
|
||||||
} else {
|
} else {
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Pair<String, InputStream> f = iterator.next();
|
Pair<File, InputStream> f = iterator.next();
|
||||||
String fileName = f.getU();
|
String fileName = f.getU().getName();
|
||||||
InputStream is = f.getV();
|
InputStream is = f.getV();
|
||||||
|
|
||||||
List<ThrustCurveMotor.Builder> motors = loader.load(is, fileName);
|
List<ThrustCurveMotor.Builder> motors = loader.load(is, fileName);
|
||||||
|
@ -3,6 +3,7 @@ package net.sf.openrocket.file.iterator;
|
|||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
import net.sf.openrocket.util.Pair;
|
import net.sf.openrocket.util.Pair;
|
||||||
@ -13,14 +14,14 @@ public class TestFileIterator {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFileIterator() {
|
public void testFileIterator() {
|
||||||
final Pair<String, InputStream> one = new Pair<String, InputStream>("one", new ByteArrayInputStream(new byte[] { 1 }));
|
final Pair<File, InputStream> one = new Pair<>(new File("one"), new ByteArrayInputStream(new byte[] { 1 }));
|
||||||
final Pair<String, InputStream> two = new Pair<String, InputStream>("two", new ByteArrayInputStream(new byte[] { 2 }));
|
final Pair<File, InputStream> two = new Pair<>(new File("two"), new ByteArrayInputStream(new byte[] { 2 }));
|
||||||
|
|
||||||
FileIterator iterator = new FileIterator() {
|
FileIterator iterator = new FileIterator() {
|
||||||
private int count = 0;
|
private int count = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Pair<String, InputStream> findNext() {
|
protected Pair<File, InputStream> findNext() {
|
||||||
count++;
|
count++;
|
||||||
switch (count) {
|
switch (count) {
|
||||||
case 1:
|
case 1:
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.sf.openrocket.database;
|
package net.sf.openrocket.database;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
@ -77,8 +78,8 @@ public class ComponentPresetDatabaseLoader extends AsynchronousDatabaseLoader {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Pair<String, InputStream> f = iterator.next();
|
Pair<File, InputStream> f = iterator.next();
|
||||||
Collection<ComponentPreset> presets = loadFile(f.getU(), f.getV());
|
Collection<ComponentPreset> presets = loadFile(f.getU().getName(), f.getV());
|
||||||
componentPresetDao.addAll(presets);
|
componentPresetDao.addAll(presets);
|
||||||
fileCount++;
|
fileCount++;
|
||||||
presetCount += presets.size();
|
presetCount += presets.size();
|
||||||
@ -97,8 +98,8 @@ public class ComponentPresetDatabaseLoader extends AsynchronousDatabaseLoader {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Pair<String, InputStream> f = iterator.next();
|
Pair<File, InputStream> f = iterator.next();
|
||||||
Collection<ComponentPreset> presets = loadFile(f.getU(), f.getV());
|
Collection<ComponentPreset> presets = loadFile(f.getU().getName(), f.getV());
|
||||||
componentPresetDao.addAll(presets);
|
componentPresetDao.addAll(presets);
|
||||||
fileCount++;
|
fileCount++;
|
||||||
presetCount += presets.size();
|
presetCount += presets.size();
|
||||||
|
@ -89,7 +89,7 @@ public class MotorDatabaseLoader extends AsynchronousDatabaseLoader {
|
|||||||
log.info("Starting reading serialized motor database");
|
log.info("Starting reading serialized motor database");
|
||||||
FileIterator iterator = DirectoryIterator.findDirectory(THRUSTCURVE_DIRECTORY, new SimpleFileFilter("", false, "ser"));
|
FileIterator iterator = DirectoryIterator.findDirectory(THRUSTCURVE_DIRECTORY, new SimpleFileFilter("", false, "ser"));
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Pair<String, InputStream> f = iterator.next();
|
Pair<File, InputStream> f = iterator.next();
|
||||||
loadSerialized(f);
|
loadSerialized(f);
|
||||||
}
|
}
|
||||||
log.info("Ending reading serialized motor database, motorCount=" + motorCount);
|
log.info("Ending reading serialized motor database, motorCount=" + motorCount);
|
||||||
@ -99,12 +99,12 @@ public class MotorDatabaseLoader extends AsynchronousDatabaseLoader {
|
|||||||
/**
|
/**
|
||||||
* loads a serailized motor data from an stream
|
* loads a serailized motor data from an stream
|
||||||
*
|
*
|
||||||
* @param f the pair of a String with the filename (for logging) and the input stream
|
* @param f the pair of a File (for logging) and the input stream
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private void loadSerialized(Pair<String, InputStream> f) {
|
private void loadSerialized(Pair<File, InputStream> f) {
|
||||||
try {
|
try {
|
||||||
log.debug("Reading motors from file " + f.getU());
|
log.debug("Reading motors from file " + f.getU().getPath());
|
||||||
ObjectInputStream ois = new ObjectInputStream(f.getV());
|
ObjectInputStream ois = new ObjectInputStream(f.getV());
|
||||||
List<ThrustCurveMotor> motors = (List<ThrustCurveMotor>) ois.readObject();
|
List<ThrustCurveMotor> motors = (List<ThrustCurveMotor>) ois.readObject();
|
||||||
addMotors(motors);
|
addMotors(motors);
|
||||||
@ -124,8 +124,8 @@ public class MotorDatabaseLoader extends AsynchronousDatabaseLoader {
|
|||||||
log.debug("Loading motors from file " + file);
|
log.debug("Loading motors from file " + file);
|
||||||
loadFile(
|
loadFile(
|
||||||
loader,
|
loader,
|
||||||
new Pair<String,InputStream>(
|
new Pair<>(
|
||||||
file.getName(),
|
file,
|
||||||
new BufferedInputStream(new FileInputStream(file))));
|
new BufferedInputStream(new FileInputStream(file))));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.warn("Exception while reading " + file + ": " + e, e);
|
log.warn("Exception while reading " + file + ": " + e, e);
|
||||||
@ -138,18 +138,17 @@ public class MotorDatabaseLoader extends AsynchronousDatabaseLoader {
|
|||||||
* @param loader an object to handle the loading
|
* @param loader an object to handle the loading
|
||||||
* @param f the pair of File name and its input stream
|
* @param f the pair of File name and its input stream
|
||||||
*/
|
*/
|
||||||
private void loadFile(GeneralMotorLoader loader, Pair<String, InputStream> f) {
|
private void loadFile(GeneralMotorLoader loader, Pair<File, InputStream> f) {
|
||||||
try {
|
try {
|
||||||
List<ThrustCurveMotor.Builder> motors = loader.load(f.getV(), f.getU());
|
List<ThrustCurveMotor.Builder> motors = loader.load(f.getV(), f.getU().getName());
|
||||||
try {
|
try {
|
||||||
addMotorsFromBuilders(motors);
|
addMotorsFromBuilders(motors);
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException e) {
|
catch (IllegalArgumentException e) {
|
||||||
Translator trans = Application.getTranslator();
|
Translator trans = Application.getTranslator();
|
||||||
File thrustCurveDir = ((SwingPreferences) Application.getPreferences()).getDefaultUserThrustCurveFile();
|
String fullPath = f.getU().getPath();
|
||||||
File fullPath = new File(thrustCurveDir, f.getU());
|
|
||||||
String message = "<html><body><p style='width: 400px;'><i>" + e.getMessage() +
|
String message = "<html><body><p style='width: 400px;'><i>" + e.getMessage() +
|
||||||
"</i>.<br><br>" + MessageFormat.format( trans.get("MotorDbLoaderDlg.message1"), fullPath.getPath()) +
|
"</i>.<br><br>" + MessageFormat.format( trans.get("MotorDbLoaderDlg.message1"), fullPath) +
|
||||||
"<br>" + trans.get("MotorDbLoaderDlg.message2") + "</p></body></html>";
|
"<br>" + trans.get("MotorDbLoaderDlg.message2") + "</p></body></html>";
|
||||||
JOptionPane pane = new JOptionPane(message, JOptionPane.WARNING_MESSAGE);
|
JOptionPane pane = new JOptionPane(message, JOptionPane.WARNING_MESSAGE);
|
||||||
JDialog dialog = pane.createDialog(null, trans.get("MotorDbLoaderDlg.title"));
|
JDialog dialog = pane.createDialog(null, trans.get("MotorDbLoaderDlg.title"));
|
||||||
|
@ -95,10 +95,10 @@ public final class MotorLoaderHelper {
|
|||||||
List<ThrustCurveMotor.Builder> list = new ArrayList<ThrustCurveMotor.Builder>();
|
List<ThrustCurveMotor.Builder> list = new ArrayList<ThrustCurveMotor.Builder>();
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
final Pair<String, InputStream> input = iterator.next();
|
final Pair<File, InputStream> input = iterator.next();
|
||||||
log.debug("Loading motors from file " + input.getU());
|
log.debug("Loading motors from file " + input.getU());
|
||||||
try {
|
try {
|
||||||
List<ThrustCurveMotor.Builder> motors = load(input.getV(), input.getU());
|
List<ThrustCurveMotor.Builder> motors = load(input.getV(), input.getU().getName());
|
||||||
for (ThrustCurveMotor.Builder m : motors) {
|
for (ThrustCurveMotor.Builder m : motors) {
|
||||||
list.add(m);
|
list.add(m);
|
||||||
}
|
}
|
||||||
|
@ -50,8 +50,8 @@ public class SerializePresets extends BasicApplication {
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
Pair<String, InputStream> f = iterator.next();
|
Pair<File, InputStream> f = iterator.next();
|
||||||
String fileName = f.getU();
|
String fileName = f.getU().getName();
|
||||||
InputStream is = f.getV();
|
InputStream is = f.getV();
|
||||||
|
|
||||||
OpenRocketComponentLoader loader = new OpenRocketComponentLoader();
|
OpenRocketComponentLoader loader = new OpenRocketComponentLoader();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user