Some refactoring: changed name of variable "filename" to "displayName" in BasicFrame to indicate that the string is used for presentation in the opening dialog and not as the name of a File to option. Moved the call to OpenRocketDocument.setFile() and setSaved() into OpenFileWorker instead of BasicFrame so the File object doesn't need to get passed around so much. Modified the RocketSaver interface to not require the filename since it doesn't need it anymore.

This commit is contained in:
Kevin Ruland 2012-07-20 21:05:35 +00:00 committed by U-WINDOWS-C28163E\Administrator
parent e9060272e4
commit f92cb2c8d6
3 changed files with 66 additions and 33 deletions

View File

@ -9,6 +9,17 @@ import net.sf.openrocket.document.StorageOptions;
public abstract class RocketSaver {
/**
* Save the document to the specified output stream using the default storage options.
*
* @param dest the destination stream.
* @param doc the document to save.
* @throws IOException in case of an I/O error.
*/
public final void save(OutputStream dest, OpenRocketDocument doc) throws IOException {
save(dest, doc, doc.getDefaultStorageOptions());
}
/**
* Save the document to the specified output stream using the given storage options.
*
@ -17,8 +28,7 @@ public abstract class RocketSaver {
* @param options the storage options.
* @throws IOException in case of an I/O error.
*/
public abstract void save(OutputStream dest, OpenRocketDocument doc,
StorageOptions options) throws IOException;
public abstract void save(OutputStream dest, OpenRocketDocument doc, StorageOptions options) throws IOException;
/**
* Provide an estimate of the file size when saving the document with the

View File

@ -1082,27 +1082,50 @@ public class BasicFrame extends JFrame {
* @return <code>true</code> if opened successfully.
*/
private static boolean open(URL url, BasicFrame parent) {
String filename = null;
String displayName = null;
if ( filename == null ) {
filename = "";
// First figure out the file name from the URL
// Try using URI.getPath();
try {
URI uri = url.toURI();
displayName = uri.getPath();
} catch (URISyntaxException ignore) {
}
// Try URL-decoding the URL
if (displayName == null) {
try {
displayName = URLDecoder.decode(url.toString(), "UTF-8");
} catch (UnsupportedEncodingException ignore) {
}
}
if ( displayName == null ) {
displayName = "";
}
// Remove path from filename
if (filename.lastIndexOf('/') >= 0) {
filename = filename.substring(filename.lastIndexOf('/') + 1);
if (displayName.lastIndexOf('/') >= 0) {
displayName = displayName.substring(displayName.lastIndexOf('/') + 1);
}
// Open the file
log.info("Opening file from url=" + url + " filename=" + filename);
log.info("Opening file from url=" + url + " filename=" + displayName);
try {
InputStream is = url.openStream();
open(is, filename, url, parent);
if (open(is, displayName, url, parent)) {
// Close previous window if replacing
if (parent.replaceable && parent.document.isSaved()) {
parent.closeAction();
parent.replaceable = false;
}
}
} catch (IOException e) {
log.warn("Error opening file" + e);
JOptionPane.showMessageDialog(parent,
"An error occurred while opening the file " + filename,
"An error occurred while opening the file " + displayName,
"Error loading file", JOptionPane.ERROR_MESSAGE);
}
@ -1115,13 +1138,13 @@ public class BasicFrame extends JFrame {
* occurs, an error dialog is shown and <code>false</code> is returned.
*
* @param stream the stream to load from.
* @param filename the file name to display in dialogs (not set to the document).
* @param displayName the file name to display in dialogs (not set to the document).
* @param parent the parent component for which a progress dialog is opened.
* @return whether the file was successfully loaded and opened.
*/
private static boolean open(InputStream stream, String filename, URL fileURL, Window parent) {
private static boolean open(InputStream stream, String displayName, URL fileURL, Window parent) {
OpenFileWorker worker = new OpenFileWorker(stream, fileURL, ROCKET_LOADER);
return open(worker, filename, null, parent);
return open(worker, displayName, parent);
}
@ -1135,7 +1158,7 @@ public class BasicFrame extends JFrame {
*/
public static boolean open(File file, Window parent) {
OpenFileWorker worker = new OpenFileWorker(file, ROCKET_LOADER);
return open(worker, file.getName(), file, parent);
return open(worker, file.getName(), parent);
}
@ -1143,18 +1166,18 @@ public class BasicFrame extends JFrame {
* Open the specified file using the provided worker.
*
* @param worker the OpenFileWorker that loads the file.
* @param filename the file name to display in dialogs.
* @param displayName the file name to display in dialogs.
* @param file the File to set the document to (may be null).
* @param parent
* @return
*/
private static boolean open(OpenFileWorker worker, String filename, File file, Window parent) {
private static boolean open(OpenFileWorker worker, String displayName, Window parent) {
MotorDatabaseLoadingDialog.check(parent);
// Open the file in a Swing worker thread
log.info("Starting OpenFileWorker");
if (!SwingWorkerDialog.runWorker(parent, "Opening file", "Reading " + filename + "...", worker)) {
if (!SwingWorkerDialog.runWorker(parent, "Opening file", "Reading " + displayName + "...", worker)) {
// User cancelled the operation
log.info("User cancelled the OpenFileWorker");
return false;
@ -1175,7 +1198,7 @@ public class BasicFrame extends JFrame {
log.warn("File not found", cause);
JOptionPane.showMessageDialog(parent,
"File not found: " + filename,
"File not found: " + displayName,
"Error opening file", JOptionPane.ERROR_MESSAGE);
return false;
@ -1183,7 +1206,7 @@ public class BasicFrame extends JFrame {
log.warn("Error loading the file", cause);
JOptionPane.showMessageDialog(parent,
"Unable to open file '" + filename + "': "
"Unable to open file '" + displayName + "': "
+ cause.getMessage(),
"Error opening file", JOptionPane.ERROR_MESSAGE);
return false;
@ -1209,21 +1232,15 @@ public class BasicFrame extends JFrame {
log.info("Warnings while reading file: " + warnings);
WarningDialog.showWarnings(parent,
new Object[] {
//// The following problems were encountered while opening
trans.get("BasicFrame.WarningDialog.txt1") + " " + filename + ".",
//// Some design features may not have been loaded correctly.
trans.get("BasicFrame.WarningDialog.txt2")
},
//// Warnings while opening file
trans.get("BasicFrame.WarningDialog.title"), warnings);
//// The following problems were encountered while opening
trans.get("BasicFrame.WarningDialog.txt1") + " " + displayName + ".",
//// Some design features may not have been loaded correctly.
trans.get("BasicFrame.WarningDialog.txt2")
},
//// Warnings while opening file
trans.get("BasicFrame.WarningDialog.title"), warnings);
}
// Set document state
doc.setFile(file);
doc.setSaved(true);
// Open the frame
log.debug("Opening new frame with the document");
BasicFrame frame = new BasicFrame(doc);

View File

@ -75,7 +75,13 @@ public class OpenFileWorker extends SwingWorker<OpenRocketDocument, Void> {
is = new ProgressInputStream(is);
try {
return loader.load(is, fileInfo, new DatabaseMotorFinder());
OpenRocketDocument document = loader.load(is, fileInfo, new DatabaseMotorFinder());
// Set document state
document.setFile(file);
document.setSaved(true);
return document;
} finally {
try {
is.close();