added exception handling to project dir loading
This commit is contained in:
parent
12c539d2b5
commit
abfe10b100
|
@ -24,7 +24,7 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: GUI.java,v 1.61 2007/09/18 15:57:14 fros4943 Exp $
|
* $Id: GUI.java,v 1.62 2007/09/21 16:14:19 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja;
|
package se.sics.cooja;
|
||||||
|
@ -264,7 +264,17 @@ public class GUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load extendable parts (using current project config)
|
// Load extendable parts (using current project config)
|
||||||
reparseProjectConfig();
|
try {
|
||||||
|
reparseProjectConfig();
|
||||||
|
} catch (ParseProjectsException e) {
|
||||||
|
logger.fatal("Error when loading project directories: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
if (myDesktopPane != null) {
|
||||||
|
JOptionPane.showMessageDialog(frame,
|
||||||
|
"Loading project directories failed.\nStack trace printed to console.",
|
||||||
|
"Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Start all standard GUI plugins
|
// Start all standard GUI plugins
|
||||||
for (Class<? extends Plugin> visPluginClass : pluginClasses) {
|
for (Class<? extends Plugin> visPluginClass : pluginClasses) {
|
||||||
|
@ -772,9 +782,10 @@ public class GUI {
|
||||||
}
|
}
|
||||||
gui.currentProjectDirs.add(new File(projectDir));
|
gui.currentProjectDirs.add(new File(projectDir));
|
||||||
}
|
}
|
||||||
boolean parsedProjects = gui.reparseProjectConfig();
|
try {
|
||||||
if (!parsedProjects) {
|
gui.reparseProjectConfig();
|
||||||
logger.fatal(">> Error when parsing project directories, aborting");
|
} catch (ParseProjectsException e) {
|
||||||
|
logger.fatal(">> Error when parsing project directories: " + e.getMessage());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1273,7 +1284,8 @@ public class GUI {
|
||||||
*
|
*
|
||||||
* @return True if external configuration files were found and parsed OK
|
* @return True if external configuration files were found and parsed OK
|
||||||
*/
|
*/
|
||||||
public boolean reparseProjectConfig() {
|
public void reparseProjectConfig()
|
||||||
|
throws ParseProjectsException {
|
||||||
// Backup temporary plugins
|
// Backup temporary plugins
|
||||||
Vector<Class<? extends Plugin>> oldTempPlugins = (Vector<Class<? extends Plugin>>) pluginClassesTemporary
|
Vector<Class<? extends Plugin>> oldTempPlugins = (Vector<Class<? extends Plugin>>) pluginClassesTemporary
|
||||||
.clone();
|
.clone();
|
||||||
|
@ -1291,11 +1303,15 @@ public class GUI {
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
logger.fatal("Could not find default project config file: "
|
logger.fatal("Could not find default project config file: "
|
||||||
+ PROJECT_DEFAULT_CONFIG_FILENAME);
|
+ PROJECT_DEFAULT_CONFIG_FILENAME);
|
||||||
return false;
|
throw (ParseProjectsException) new ParseProjectsException(
|
||||||
|
"Could not find default project config file: "
|
||||||
|
+ PROJECT_DEFAULT_CONFIG_FILENAME).initCause(e);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.fatal("Error when reading default project config file: "
|
logger.fatal("Error when reading default project config file: "
|
||||||
+ PROJECT_DEFAULT_CONFIG_FILENAME);
|
+ PROJECT_DEFAULT_CONFIG_FILENAME);
|
||||||
return false;
|
throw (ParseProjectsException) new ParseProjectsException(
|
||||||
|
"Error when reading default project config file: "
|
||||||
|
+ PROJECT_DEFAULT_CONFIG_FILENAME).initCause(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Append project directory configurations
|
// Append project directory configurations
|
||||||
|
@ -1306,16 +1322,23 @@ public class GUI {
|
||||||
projectConfig.appendProjectDir(projectDir);
|
projectConfig.appendProjectDir(projectDir);
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
logger.fatal("Could not find project config file: " + projectDir);
|
logger.fatal("Could not find project config file: " + projectDir);
|
||||||
return false;
|
throw (ParseProjectsException) new ParseProjectsException(
|
||||||
|
"Could not find project config file: " + projectDir).initCause(e);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger
|
logger.fatal("Error when reading project config file: " + projectDir);
|
||||||
.fatal("Error when reading project config file: " + projectDir);
|
throw (ParseProjectsException) new ParseProjectsException(
|
||||||
return false;
|
"Error when reading project config file: " + projectDir).initCause(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create class loader
|
// Create class loader
|
||||||
|
try {
|
||||||
projectDirClassLoader = createClassLoader(currentProjectDirs);
|
projectDirClassLoader = createClassLoader(currentProjectDirs);
|
||||||
|
} catch (ClassLoaderCreationException e) {
|
||||||
|
throw (ParseProjectsException) new ParseProjectsException(
|
||||||
|
"Error when creating class loader").initCause(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Register mote types
|
// Register mote types
|
||||||
String[] moteTypeClassNames = projectConfig.getStringArrayValue(GUI.class,
|
String[] moteTypeClassNames = projectConfig.getStringArrayValue(GUI.class,
|
||||||
|
@ -1421,7 +1444,6 @@ public class GUI {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2547,7 +2569,18 @@ public class GUI {
|
||||||
currentProjectDirs, null);
|
currentProjectDirs, null);
|
||||||
if (newProjects != null) {
|
if (newProjects != null) {
|
||||||
currentProjectDirs = newProjects;
|
currentProjectDirs = newProjects;
|
||||||
reparseProjectConfig();
|
try {
|
||||||
|
reparseProjectConfig();
|
||||||
|
} catch (ParseProjectsException e2) {
|
||||||
|
logger.fatal("Error when loading projects: " + e2.getMessage());
|
||||||
|
e2.printStackTrace();
|
||||||
|
if (myGUI.isVisualized()) {
|
||||||
|
JOptionPane.showMessageDialog(frame,
|
||||||
|
"Error when loading projects.\nStack trace printed to console.",
|
||||||
|
"Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (e.getActionCommand().equals("start plugin")) {
|
} else if (e.getActionCommand().equals("start plugin")) {
|
||||||
Class<? extends VisPlugin> pluginClass = (Class<? extends VisPlugin>) ((JMenuItem) e
|
Class<? extends VisPlugin> pluginClass = (Class<? extends VisPlugin>) ((JMenuItem) e
|
||||||
|
@ -2603,14 +2636,17 @@ public class GUI {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClassLoader createProjectDirClassLoader(Vector<File> projectsDirs) {
|
public ClassLoader createProjectDirClassLoader(Vector<File> projectsDirs)
|
||||||
|
throws ParseProjectsException, ClassLoaderCreationException {
|
||||||
if (projectDirClassLoader == null) {
|
if (projectDirClassLoader == null) {
|
||||||
reparseProjectConfig();
|
reparseProjectConfig();
|
||||||
}
|
}
|
||||||
return createClassLoader(projectDirClassLoader, projectsDirs);
|
return createClassLoader(projectDirClassLoader, projectsDirs);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ClassLoader createClassLoader(Vector<File> currentProjectDirs) {
|
private ClassLoader createClassLoader(Vector<File> currentProjectDirs)
|
||||||
|
throws ClassLoaderCreationException
|
||||||
|
{
|
||||||
return createClassLoader(ClassLoader.getSystemClassLoader(),
|
return createClassLoader(ClassLoader.getSystemClassLoader(),
|
||||||
currentProjectDirs);
|
currentProjectDirs);
|
||||||
}
|
}
|
||||||
|
@ -2633,7 +2669,7 @@ public class GUI {
|
||||||
}
|
}
|
||||||
|
|
||||||
private ClassLoader createClassLoader(ClassLoader parent,
|
private ClassLoader createClassLoader(ClassLoader parent,
|
||||||
Vector<File> projectDirs) {
|
Vector<File> projectDirs) throws ClassLoaderCreationException {
|
||||||
if (projectDirs == null || projectDirs.isEmpty()) {
|
if (projectDirs == null || projectDirs.isEmpty()) {
|
||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
|
@ -2664,6 +2700,8 @@ public class GUI {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.fatal("Error when trying to read JAR-file in " + projectDir
|
logger.fatal("Error when trying to read JAR-file in " + projectDir
|
||||||
+ ": " + e);
|
+ ": " + e);
|
||||||
|
throw (ClassLoaderCreationException) new ClassLoaderCreationException(
|
||||||
|
"Error when trying to read JAR-file in " + projectDir).initCause(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3145,9 +3183,6 @@ public class GUI {
|
||||||
} catch (PropertyVetoException e) {
|
} catch (PropertyVetoException e) {
|
||||||
// Ignoring
|
// Ignoring
|
||||||
}
|
}
|
||||||
} else if (pluginSubElement.getName().equals("plugin_config")) {
|
|
||||||
startedVisPlugin.setConfigXML(pluginSubElement.getChildren(),
|
|
||||||
visAvailable);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3171,7 +3206,19 @@ public class GUI {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SimulationCreationException extends Exception {
|
public class ParseProjectsException extends Exception {
|
||||||
|
public ParseProjectsException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ClassLoaderCreationException extends Exception {
|
||||||
|
public ClassLoaderCreationException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SimulationCreationException extends Exception {
|
||||||
public SimulationCreationException(String message) {
|
public SimulationCreationException(String message) {
|
||||||
super(message);
|
super(message);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: ContikiMoteTypeDialog.java,v 1.34 2007/09/18 16:23:38 fros4943 Exp $
|
* $Id: ContikiMoteTypeDialog.java,v 1.35 2007/09/21 16:14:19 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.contikimote;
|
package se.sics.cooja.contikimote;
|
||||||
|
@ -2393,8 +2393,30 @@ public class ContikiMoteTypeDialog extends JDialog {
|
||||||
ContikiMoteType.class, "MOTE_INTERFACES");
|
ContikiMoteType.class, "MOTE_INTERFACES");
|
||||||
Vector<Class<? extends MoteInterface>> moteIntfClasses = new Vector<Class<? extends MoteInterface>>();
|
Vector<Class<? extends MoteInterface>> moteIntfClasses = new Vector<Class<? extends MoteInterface>>();
|
||||||
|
|
||||||
ClassLoader classLoader = myGUI
|
ClassLoader classLoader;
|
||||||
.createProjectDirClassLoader(moteTypeProjectDirs);
|
try {
|
||||||
|
classLoader = myGUI.createProjectDirClassLoader(moteTypeProjectDirs);
|
||||||
|
} catch (GUI.ClassLoaderCreationException e2) {
|
||||||
|
logger.fatal("Error when creating class loader: " + e2.getMessage());
|
||||||
|
e2.printStackTrace();
|
||||||
|
if (myGUI.isVisualized()) {
|
||||||
|
JOptionPane.showMessageDialog(ContikiMoteTypeDialog.this,
|
||||||
|
"Error when creating class loader.\nStack trace printed to console.",
|
||||||
|
"Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
} catch (GUI.ParseProjectsException e2) {
|
||||||
|
logger.fatal("Error when loading projects: " + e2.getMessage());
|
||||||
|
e2.printStackTrace();
|
||||||
|
if (myGUI.isVisualized()) {
|
||||||
|
JOptionPane.showMessageDialog(ContikiMoteTypeDialog.this,
|
||||||
|
"Error when loading projects.\nStack trace printed to console.",
|
||||||
|
"Error", JOptionPane.ERROR_MESSAGE);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Find and load the mote interface classes
|
// Find and load the mote interface classes
|
||||||
for (String moteInterface : moteInterfaces) {
|
for (String moteInterface : moteInterfaces) {
|
||||||
|
|
Loading…
Reference in a new issue