Better error handling for missing preferences.

Fixes #1471
This commit is contained in:
Cristian Maglie 2013-07-12 19:50:57 +02:00
parent c24b3f6489
commit 8ab419fd13
6 changed files with 57 additions and 29 deletions

View File

@ -23,6 +23,7 @@
package processing.app;
import processing.app.debug.*;
import processing.app.helpers.PreferencesMapException;
import processing.app.syntax.*;
import processing.app.tools.*;
import processing.core.*;
@ -2543,9 +2544,10 @@ public class Editor extends JFrame implements RunnerListener {
statusError(_("Error while burning bootloader."));
// error message will already be visible
}
} catch (RunnerException e) {
statusError(_("Error while burning bootloader."));
e.printStackTrace();
} catch (PreferencesMapException e) {
statusError(I18n.format(
_("Error while burning bootloader: missing '{0}' configuration parameter"),
e.getMessage()));
//statusError(e);
} catch (Exception e) {
statusError(_("Error while burning bootloader."));

View File

@ -1581,7 +1581,7 @@ public class Sketch {
* Handle export to applet.
*/
public boolean exportApplet(String appletPath, boolean usingProgrammer)
throws RunnerException, IOException, SerialException {
throws Exception {
prepare();
@ -1660,7 +1660,7 @@ public class Sketch {
}
protected String upload(String buildPath, String suggestedClassName, boolean usingProgrammer)
throws RunnerException, SerialException {
throws Exception {
Uploader uploader;

View File

@ -37,6 +37,7 @@ import processing.app.Preferences;
import processing.app.Serial;
import processing.app.SerialException;
import processing.app.helpers.PreferencesMap;
import processing.app.helpers.PreferencesMapException;
import processing.app.helpers.StringReplacer;
import static processing.app.I18n._;
@ -45,7 +46,7 @@ public class BasicUploader extends Uploader {
public boolean uploadUsingPreferences(String buildPath, String className,
boolean usingProgrammer)
throws RunnerException, SerialException {
throws Exception {
// FIXME: Preferences should be reorganized
TargetPlatform targetPlatform = Base.getTargetPlatform();
PreferencesMap prefs = Preferences.getMap();
@ -71,7 +72,7 @@ public class BasicUploader extends Uploader {
boolean waitForUploadPort = (t != null) && t.equals("true");
if (doTouch) {
String uploadPort = prefs.get("serial.port");
String uploadPort = prefs.getOrExcept("serial.port");
try {
// Toggle 1200 bps on selected serial port to force board reset.
List<String> before = Serial.list();
@ -109,9 +110,9 @@ public class BasicUploader extends Uploader {
prefs.put("build.path", buildPath);
prefs.put("build.project_name", className);
if (verbose)
prefs.put("upload.verbose", prefs.get("upload.params.verbose"));
prefs.put("upload.verbose", prefs.getOrExcept("upload.params.verbose"));
else
prefs.put("upload.verbose", prefs.get("upload.params.quiet"));
prefs.put("upload.verbose", prefs.getOrExcept("upload.params.quiet"));
boolean uploadResult;
try {
@ -120,7 +121,7 @@ public class BasicUploader extends Uploader {
// flushSerialBuffer();
// }
String pattern = prefs.get("upload.pattern");
String pattern = prefs.getOrExcept("upload.pattern");
String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
uploadResult = executeUploadCommand(cmd);
} catch (Exception e) {
@ -211,7 +212,7 @@ public class BasicUploader extends Uploader {
}
public boolean uploadUsingProgrammer(String buildPath, String className)
throws RunnerException {
throws Exception {
TargetPlatform targetPlatform = Base.getTargetPlatform();
String programmer = Preferences.get("programmer");
@ -224,15 +225,15 @@ public class BasicUploader extends Uploader {
PreferencesMap prefs = Preferences.getMap();
prefs.putAll(Base.getBoardPreferences());
prefs.putAll(targetPlatform.getProgrammer(programmer));
prefs.putAll(targetPlatform.getTool(prefs.get("program.tool")));
prefs.putAll(targetPlatform.getTool(prefs.getOrExcept("program.tool")));
prefs.put("build.path", buildPath);
prefs.put("build.project_name", className);
if (verbose)
prefs.put("program.verbose", prefs.get("program.params.verbose"));
prefs.put("program.verbose", prefs.getOrExcept("program.params.verbose"));
else
prefs.put("program.verbose", prefs.get("program.params.quiet"));
prefs.put("program.verbose", prefs.getOrExcept("program.params.quiet"));
try {
// if (prefs.get("program.disable_flushing") == null
@ -241,7 +242,7 @@ public class BasicUploader extends Uploader {
// flushSerialBuffer();
// }
String pattern = prefs.get("program.pattern");
String pattern = prefs.getOrExcept("program.pattern");
String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
return executeUploadCommand(cmd);
} catch (Exception e) {
@ -249,7 +250,7 @@ public class BasicUploader extends Uploader {
}
}
public boolean burnBootloader() throws RunnerException {
public boolean burnBootloader() throws RunnerException, PreferencesMapException {
TargetPlatform targetPlatform = Base.getTargetPlatform();
// Find preferences for the selected programmer
@ -272,7 +273,7 @@ public class BasicUploader extends Uploader {
// Create configuration for bootloader tool
PreferencesMap toolPrefs = new PreferencesMap();
String tool = prefs.get("bootloader.tool");
String tool = prefs.getOrExcept("bootloader.tool");
if (tool.contains(":")) {
String[] split = tool.split(":", 2);
TargetPlatform platform = Base.getCurrentTargetPlatformFromPackage(split[0]);
@ -291,20 +292,20 @@ public class BasicUploader extends Uploader {
// Merge tool with global configuration
prefs.putAll(toolPrefs);
if (verbose) {
prefs.put("erase.verbose", prefs.get("erase.params.verbose"));
prefs.put("bootloader.verbose", prefs.get("bootloader.params.verbose"));
prefs.put("erase.verbose", prefs.getOrExcept("erase.params.verbose"));
prefs.put("bootloader.verbose", prefs.getOrExcept("bootloader.params.verbose"));
} else {
prefs.put("erase.verbose", prefs.get("erase.params.quiet"));
prefs.put("bootloader.verbose", prefs.get("bootloader.params.quiet"));
prefs.put("erase.verbose", prefs.getOrExcept("erase.params.quiet"));
prefs.put("bootloader.verbose", prefs.getOrExcept("bootloader.params.quiet"));
}
try {
String pattern = prefs.get("erase.pattern");
String pattern = prefs.getOrExcept("erase.pattern");
String[] cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
if (!executeUploadCommand(cmd))
return false;
pattern = prefs.get("bootloader.pattern");
pattern = prefs.getOrExcept("bootloader.pattern");
cmd = StringReplacer.formatAndSplit(pattern, prefs, true);
return executeUploadCommand(cmd);
} catch (Exception e) {

View File

@ -35,7 +35,6 @@ import java.util.Collection;
import processing.app.I18n;
import processing.app.Preferences;
import processing.app.Serial;
import processing.app.SerialException;
import processing.app.SerialNotFoundException;
public abstract class Uploader implements MessageConsumer {
@ -52,11 +51,11 @@ public abstract class Uploader implements MessageConsumer {
boolean verbose;
public abstract boolean uploadUsingPreferences(String buildPath, String className, boolean usingProgrammer)
throws RunnerException, SerialException;
throws Exception;
public abstract boolean burnBootloader() throws RunnerException;
public abstract boolean burnBootloader() throws Exception;
protected void flushSerialBuffer() throws RunnerException, SerialException {
protected void flushSerialBuffer() throws Exception {
// Cleanup the serial buffer
try {
Serial serialPort = new Serial();
@ -87,14 +86,14 @@ public abstract class Uploader implements MessageConsumer {
}
protected boolean executeUploadCommand(Collection<String> commandDownloader)
throws RunnerException {
throws Exception {
String[] commandArray = new String[commandDownloader.size()];
commandDownloader.toArray(commandArray);
return executeUploadCommand(commandArray);
}
protected boolean executeUploadCommand(String commandArray[])
throws RunnerException
throws Exception
{
firstErrorFound = false; // haven't found any errors yet
secondErrorFound = false;

View File

@ -245,6 +245,22 @@ public class PreferencesMap extends LinkedHashMap<String, String> {
return res;
}
/**
* Returns the value to which the specified key is mapped, or throws a
* PreferencesMapException if not found
*
* @param k
* the key whose associated value is to be returned
* @return the value to which the specified key is mapped
* @throws PreferencesMapException
*/
public String getOrExcept(String k) throws PreferencesMapException {
String r = get(k);
if (r == null)
throw new PreferencesMapException(k);
return r;
}
@Override
public String toString() {
return toString("");

View File

@ -0,0 +1,10 @@
package processing.app.helpers;
@SuppressWarnings("serial")
public class PreferencesMapException extends Exception {
public PreferencesMapException(String message) {
super(message);
}
}