*added support for library files in user platforms (for example in dev and sys subdirectories)

*added user platform history in platform configs
*throwing 'include user platform directories' flags to compiler

*fixed bug in platform config viewer
*removed old custom class loader
This commit is contained in:
fros4943 2006-08-22 15:28:17 +00:00
parent e10f020fec
commit c8f379adf7
5 changed files with 229 additions and 247 deletions

View file

@ -1,143 +0,0 @@
/*
* Copyright (c) 2006, Swedish Institute of Computer Science.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the Institute nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: DirectoryClassLoader.java,v 1.1 2006/08/21 12:12:56 fros4943 Exp $
*/
package se.sics.cooja;
import java.io.*;
import org.apache.log4j.Logger;
/**
* Loads an external file from the given directory as a Java class.
*
* @author Fredrik Osterlind
*/
public class DirectoryClassLoader extends ClassLoader {
private static Logger logger = Logger.getLogger(DirectoryClassLoader.class);
private File directory;
/**
* Creates a new class loader reading from given directory.
*
* @param directory
* Directory
*/
public DirectoryClassLoader(File directory) {
super();
this.directory = directory;
}
/**
* Creates a new class loader reading from given directory, with the given
* class loader as parent class loader.
*
* @param parent
* Parent class loader
* @param directory
* Directory
*/
public DirectoryClassLoader(ClassLoader parent, File directory) {
super(parent);
this.directory = directory;
}
public Class<?> findClass(String name) throws ClassNotFoundException {
String fullFilePath = directory.getPath() + File.separatorChar + name
+ ".class";
// Read external file
//logger.info("Directory class loader reading file: " + fullFilePath);
byte[] classData = loadClassData(fullFilePath);
if (classData == null) {
throw new ClassNotFoundException();
}
// Create class
return defineClass(name, classData, 0, classData.length);
}
private byte[] loadClassData(String name) {
// Support for fill class names in configuration file
// TODO Quick-fix (may contain bugs)
name = name.replace('.', File.separatorChar);
name = name.replace(File.separatorChar + "class", ".class");
// Open file for read access
File classFile = new File(name);
InputStream inputStream = null;
if (!classFile.exists()) {
//logger.fatal("File " + classFile + " does not exist!");
return null;
}
try {
inputStream = new FileInputStream(classFile);
if (inputStream == null) {
logger.fatal("File input stream is null!");
return null;
}
} catch (FileNotFoundException e) {
logger.fatal("Could not open file (not found?)!");
return null;
}
long fileSize = classFile.length();
if (fileSize > Integer.MAX_VALUE) {
logger.fatal("Class file is too large");
return null;
}
// Read class data
byte[] classData = new byte[(int) fileSize];
int offset = 0;
int numRead = 0;
try {
while (offset < classData.length
&& (numRead = inputStream.read(classData, offset, classData.length
- offset)) >= 0) {
offset += numRead;
}
inputStream.close();
} catch (IOException e) {
logger.fatal("Error when reading class file");
return null;
}
// Ensure all the bytes have been read in
if (offset < classData.length) {
logger.fatal("Could not read entire class file");
return null;
}
return classData;
}
}

View file

@ -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: GUI.java,v 1.3 2006/08/22 12:25:24 nifi Exp $ * $Id: GUI.java,v 1.4 2006/08/22 15:28:17 fros4943 Exp $
*/ */
package se.sics.cooja; package se.sics.cooja;
@ -560,24 +560,15 @@ public class GUI extends JDesktopPane {
unregisterPositioners(); unregisterPositioners();
unregisterRadioMediums(); unregisterRadioMediums();
// Read default configuration
platformConfig = new PlatformConfig();
// logger.info("Loading default platform configuration: " +
// PLATFORM_DEFAULT_CONFIG_FILENAME);
try { try {
InputStream input = // Read default configuration
GUI.class.getResourceAsStream(PLATFORM_DEFAULT_CONFIG_FILENAME); platformConfig = new PlatformConfig(true);
if (input != null) { // logger.info("Loading default platform configuration: " +
try { // PLATFORM_DEFAULT_CONFIG_FILENAME);
platformConfig.appendConfig(input); } catch (FileNotFoundException e) {
} finally { logger.fatal("Could not find default platform config file: "
input.close(); + PLATFORM_DEFAULT_CONFIG_FILENAME);
} return false;
} else {
logger.fatal("Could not find default platform config file: "
+ PLATFORM_DEFAULT_CONFIG_FILENAME);
return false;
}
} catch (IOException e) { } catch (IOException e) {
logger.fatal("Error when reading default platform config file: " logger.fatal("Error when reading default platform config file: "
+ PLATFORM_DEFAULT_CONFIG_FILENAME); + PLATFORM_DEFAULT_CONFIG_FILENAME);
@ -586,20 +577,18 @@ public class GUI extends JDesktopPane {
// Append user platform configurations // Append user platform configurations
for (File userPlatform : currentUserPlatforms) { for (File userPlatform : currentUserPlatforms) {
File userPlatformConfig = new File(userPlatform.getPath()
+ File.separatorChar + PLATFORM_CONFIG_FILENAME);
// logger.info("Loading platform configuration: " + userPlatformConfig);
try { try {
// Append config to general config // Append config to general config
platformConfig.appendConfig(userPlatformConfig); // logger.info("Appending user platform configuration: " + userPlatform);
platformConfig.appendUserPlatform(userPlatform);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
logger.fatal("Could not find platform config file: " logger.fatal("Could not find platform config file: "
+ userPlatformConfig); + userPlatform);
return false; return false;
} catch (IOException e) { } catch (IOException e) {
logger.fatal("Error when reading platform config file: " logger.fatal("Error when reading platform config file: "
+ userPlatformConfig); + userPlatform);
return false; return false;
} }
} }
@ -1556,45 +1545,43 @@ public class GUI extends JDesktopPane {
} }
private ClassLoader createClassLoader(ClassLoader parent, private ClassLoader createClassLoader(ClassLoader parent,
Vector<File> platformsList) { Vector<File> platformsList) {
if (platformsList == null || platformsList.isEmpty()) { if (platformsList == null || platformsList.isEmpty()) {
return parent; return parent;
} }
// Combine class loader from all user platforms (including any // Combine class loader from all user platforms (including any
// specified JAR files) // specified JAR files)
ArrayList<URL> urls = new ArrayList<URL>(); ArrayList<URL> urls = new ArrayList<URL>();
for (int j = platformsList.size() - 1; j >= 0; j--) { for (int j = platformsList.size() - 1; j >= 0; j--) {
File userPlatform = platformsList.get(j); File userPlatform = platformsList.get(j);
try { try {
urls.add((new File(userPlatform, "java")).toURL()); urls.add((new File(userPlatform, "java")).toURL());
// Read configuration to check if any JAR files should be loaded // Read configuration to check if any JAR files should be loaded
File userPlatformConfigFile = PlatformConfig userPlatformConfig = new PlatformConfig(false);
new File(userPlatform, PLATFORM_CONFIG_FILENAME); userPlatformConfig.appendUserPlatform(userPlatform);
PlatformConfig userPlatformConfig = new PlatformConfig();
userPlatformConfig.appendConfig(userPlatformConfigFile);
String[] platformJarFiles = userPlatformConfig.getStringArrayValue( String[] platformJarFiles = userPlatformConfig.getStringArrayValue(
GUI.class, "JARFILES"); GUI.class, "JARFILES");
if (platformJarFiles != null && platformJarFiles.length > 0) { if (platformJarFiles != null && platformJarFiles.length > 0) {
for (String jarfile : platformJarFiles) { for (String jarfile : platformJarFiles) {
File jarpath = findJarFile(userPlatform, jarfile); File jarpath = findJarFile(userPlatform, jarfile);
if (jarpath == null) { if (jarpath == null) {
throw new FileNotFoundException(jarfile); throw new FileNotFoundException(jarfile);
} }
urls.add(jarpath.toURL()); urls.add(jarpath.toURL());
} }
} }
} catch (Exception e) { } catch (Exception e) {
logger.fatal("Error when trying to read JAR-file in " + userPlatform logger.fatal("Error when trying to read JAR-file in " + userPlatform
+ ": " + e); + ": " + e);
} }
} }
return new URLClassLoader((URL[]) urls.toArray(new URL[urls.size()]), return new URLClassLoader((URL[]) urls.toArray(new URL[urls.size()]),
userPlatformClassLoader); userPlatformClassLoader);
} }
/** /**
* Help method that returns the description for given object. This method * Help method that returns the description for given object. This method
* reads from the object's class annotations if existing. Otherwise it returns * reads from the object's class annotations if existing. Otherwise it returns

View file

@ -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: PlatformConfig.java,v 1.1 2006/08/21 12:12:56 fros4943 Exp $ * $Id: PlatformConfig.java,v 1.2 2006/08/22 15:28:17 fros4943 Exp $
*/ */
package se.sics.cooja; package se.sics.cooja;
@ -86,13 +86,124 @@ import org.apache.log4j.Logger;
public class PlatformConfig { public class PlatformConfig {
private static Logger logger = Logger.getLogger(PlatformConfig.class); private static Logger logger = Logger.getLogger(PlatformConfig.class);
private Properties myConfig = new Properties(); private Properties myConfig = null;
private Vector<File> myUserPlatformHistory = null;
/** /**
* Creates a new empty platform configuration. * Creates new platform configuration.
*
* @param useDefault
* If true the default configuration will be loaded
* @throws FileNotFoundException
* If file was not found
* @throws IOException
* Stream read error
*/ */
public PlatformConfig() { public PlatformConfig(boolean useDefault) throws IOException,
FileNotFoundException {
// Create empty configuration
myConfig = new Properties(); myConfig = new Properties();
myUserPlatformHistory = new Vector<File>();
if (useDefault) {
InputStream input = GUI.class
.getResourceAsStream(GUI.PLATFORM_DEFAULT_CONFIG_FILENAME);
if (input != null) {
try {
appendConfigStream(input);
} finally {
input.close();
}
} else {
throw new FileNotFoundException(GUI.PLATFORM_DEFAULT_CONFIG_FILENAME);
}
}
}
/**
* Appends the given user platform's config file. Thus method also saved a
* local history of which user platforms has been loaded.
*
* @param userPlatform
* User platform
* @return True if loaded OK
* @throws FileNotFoundException
* If file was not found
* @throws IOException
* Stream read error
*/
public boolean appendUserPlatform(File userPlatform)
throws FileNotFoundException, IOException {
File userPlatformConfig = new File(userPlatform.getPath()
+ File.separatorChar + GUI.PLATFORM_CONFIG_FILENAME);
myUserPlatformHistory.add(userPlatform);
return appendConfigFile(userPlatformConfig);
}
/**
* Returns the user platform earlier appended to this configuration that
* defined the given key. If the key is of an array format and the given array
* element is non-null, then the user platform that added this element will be
* returned instead. If no such user platform can be found null is returned
* instead.
*
* @param callingClass
* Class which value belongs to
* @param key
* Key
* @param value
* Element of array
* @return User platform
*/
public File getUserPlatformDefining(Class callingClass, String key, String arrayElement) {
// Check that key really exists in current config
if (getStringValue(callingClass, key, null) == null) {
return null;
}
// Check that element really exists, if any
if (arrayElement != null) {
String[] array = getStringArrayValue(callingClass, key);
boolean foundValue = false;
for (int c=0; c < array.length; c++) {
if (array[c].equals(arrayElement))
foundValue = true;
}
if (!foundValue) {
return null;
}
}
// Search in all user platform in reversed order
try {
PlatformConfig remadeConfig = new PlatformConfig(false);
for (int i=myUserPlatformHistory.size()-1; i >= 0; i--) {
remadeConfig.appendUserPlatform(myUserPlatformHistory.get(i));
if (arrayElement != null) {
// Look for array
String[] array = remadeConfig.getStringArrayValue(callingClass, key);
for (int c=0; c < array.length; c++) {
if (array[c].equals(arrayElement))
return myUserPlatformHistory.get(i);
}
} else {
// Look for key
if (remadeConfig.getStringValue(callingClass, key, null) != null) {
return myUserPlatformHistory.get(i);
}
}
}
} catch (Exception e) {
logger.fatal("Exception when searching in user platform history: " + e);
return null;
}
return null;
} }
/** /**
@ -100,6 +211,9 @@ public class PlatformConfig {
* If a property already exists it will be overwritten, unless the new value * If a property already exists it will be overwritten, unless the new value
* begins with a '+' in which case the old value will be extended. * begins with a '+' in which case the old value will be extended.
* *
* WARNING! The user platform history will not be saved if this method is
* called, instead the appendUserPlatform method should be used.
*
* @param propertyFile * @param propertyFile
* Property file to read * Property file to read
* @return True if file was read ok, false otherwise * @return True if file was read ok, false otherwise
@ -108,35 +222,33 @@ public class PlatformConfig {
* @throws IOException * @throws IOException
* Stream read error * Stream read error
*/ */
public boolean appendConfig(File propertyFile) throws FileNotFoundException, public boolean appendConfigFile(File propertyFile)
IOException { throws FileNotFoundException, IOException {
return appendConfig(myConfig, propertyFile);
}
private static boolean appendConfig(Properties currentValues,
File propertyFile) throws FileNotFoundException, IOException {
// Open file
FileInputStream in = new FileInputStream(propertyFile); FileInputStream in = new FileInputStream(propertyFile);
return appendConfig(currentValues, in); return appendConfigStream(myConfig, in);
} }
/** /**
* Reads propertues from the given stream and appends them to the current * Reads properties from the given stream and appends them to the current
* configuration. If a property already exists it will be overwritten, unless * configuration. If a property already exists it will be overwritten, unless
* the new value begins with a '+' in which case the old value will be * the new value begins with a '+' in which case the old value will be
* extended. * extended.
* *
* WARNING! The user platform history will not be saved if this method is
* called, instead the appendUserPlatform method should be used.
*
* @param configFileStream * @param configFileStream
* Stream to read from * Stream to read from
* @return True if stream was read ok, false otherwise * @return True if stream was read ok, false otherwise
* @throws IOException * @throws IOException
* Stream read error * Stream read error
*/ */
public boolean appendConfig(InputStream configFileStream) throws IOException { public boolean appendConfigStream(InputStream configFileStream)
return appendConfig(myConfig, configFileStream); throws IOException {
return appendConfigStream(myConfig, configFileStream);
} }
private static boolean appendConfig(Properties currentValues, private static boolean appendConfigStream(Properties currentValues,
InputStream configFileStream) throws IOException { InputStream configFileStream) throws IOException {
// Read from stream // Read from stream
@ -151,7 +263,8 @@ public class PlatformConfig {
String property = newProps.getProperty(key); String property = newProps.getProperty(key);
if (property.startsWith("+ ")) { if (property.startsWith("+ ")) {
if (currentValues.getProperty(key) != null) if (currentValues.getProperty(key) != null)
currentValues.setProperty(key, currentValues.getProperty(key) + " " + property.substring(1).trim()); currentValues.setProperty(key, currentValues.getProperty(key) + " "
+ property.substring(1).trim());
else else
currentValues.setProperty(key, property.substring(1).trim()); currentValues.setProperty(key, property.substring(1).trim());
} else } else
@ -189,7 +302,8 @@ public class PlatformConfig {
String val = currentValues.getProperty(callingClass.getName() + "." + id); String val = currentValues.getProperty(callingClass.getName() + "." + id);
if (val == null) { if (val == null) {
logger.warn("Could not find key named '" + callingClass.getName() + "." + id + "'"); logger.warn("Could not find key named '" + callingClass.getName() + "."
+ id + "'");
return defaultValue; return defaultValue;
} }
@ -253,6 +367,21 @@ public class PlatformConfig {
return getStringValue(callingClass, id); return getStringValue(callingClass, id);
} }
/**
* Get string array value with given id.
*
* @param id
* Id of value to return
* @return Value or null if id wasn't found
*/
public String[] getStringArrayValue(String id) {
String stringVal = getStringValue(id);
if (stringVal == null)
return new String[0];
return getStringValue(id).split(" ");
}
/** /**
* Get integer value with given id. * Get integer value with given id.
* *
@ -352,8 +481,13 @@ public class PlatformConfig {
} }
public PlatformConfig clone() { public PlatformConfig clone() {
PlatformConfig clone = new PlatformConfig(); try {
clone.myConfig = (Properties) this.myConfig.clone(); PlatformConfig clone = new PlatformConfig(false);
return clone; clone.myConfig = (Properties) this.myConfig.clone();
clone.myUserPlatformHistory = (Vector<File>) this.myUserPlatformHistory.clone();
return clone;
} catch (Exception e) {
return null;
}
} }
} }

View file

@ -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.3 2006/08/22 12:26:36 nifi Exp $ * $Id: ContikiMoteTypeDialog.java,v 1.4 2006/08/22 15:28:18 fros4943 Exp $
*/ */
package se.sics.cooja.contikimote; package se.sics.cooja.contikimote;
@ -898,8 +898,19 @@ public class ContikiMoteTypeDialog extends JDialog {
String[] projectSourceFiles = newMoteTypeConfig.getStringArrayValue( String[] projectSourceFiles = newMoteTypeConfig.getStringArrayValue(
ContikiMoteType.class, "C_SOURCES"); ContikiMoteType.class, "C_SOURCES");
for (String projectSourceFile : projectSourceFiles) { for (String projectSourceFile : projectSourceFiles) {
if (!projectSourceFile.trim().equals("")) { if (!projectSourceFile.equals("")) {
filesToCompile.add(new File(projectSourceFile)); File file = new File(projectSourceFile);
if (file.getParent() != null) {
// Find which user platform added this file
File userPlatform = newMoteTypeConfig.getUserPlatformDefining(
ContikiMoteType.class, "C_SOURCES", projectSourceFile);
if (userPlatform != null) {
// We found a user platform - Add directory
filesToCompile.add(new File(userPlatform.getPath(),
file.getParent()));
}
}
filesToCompile.add(new File(file.getName()));
} }
} }
@ -1165,16 +1176,20 @@ public class ContikiMoteTypeDialog extends JDialog {
String sourceDirs = System.getProperty("PROJECTDIRS", ""); String sourceDirs = System.getProperty("PROJECTDIRS", "");
String sourceFileNames = ""; String sourceFileNames = "";
String ccFlags = GUI.getExternalToolsSetting("COMPILER_ARGS", "");
for (File sourceFile : sourceFiles) { for (File sourceFile : sourceFiles) {
if (sourceFile.isDirectory()) { if (sourceFile.isDirectory()) {
// Add directory to search path // Add directory to search path
sourceDirs += " " sourceDirs += " "
+ sourceFile.getPath().replace(File.separatorChar, '/'); + sourceFile.getPath().replace(File.separatorChar, '/');
ccFlags += " -I" + sourceFile.getPath().replace(File.separatorChar, '/');
} else if (sourceFile.isFile()) { } else if (sourceFile.isFile()) {
// Add both file name and directory // Add both file name and directory
sourceDirs += " " + if (sourceFile.getParent() != null) {
sourceFile.getParent().replace(File.separatorChar, '/'); sourceDirs += " " +
sourceFile.getParent().replace(File.separatorChar, '/');
}
sourceFileNames += " " + sourceFile.getName(); sourceFileNames += " " + sourceFile.getName();
} else { } else {
// Add filename and hope Contiki knows where to find it... // Add filename and hope Contiki knows where to find it...
@ -1182,12 +1197,16 @@ public class ContikiMoteTypeDialog extends JDialog {
} }
} }
logger.info("Project dirs: " + sourceDirs);
logger.info("Project sources: " + sourceFileNames);
logger.info("Compiler flags: " + ccFlags);
String[] env = new String[]{ String[] env = new String[]{
"CONTIKI=" + contikiDir.getPath().replace(File.separatorChar, '/'), "CONTIKI=" + contikiDir.getPath().replace(File.separatorChar, '/'),
"TARGET=cooja", "TYPEID=" + identifier, "TARGET=cooja", "TYPEID=" + identifier,
"LD_ARGS_1=" + GUI.getExternalToolsSetting("LINKER_ARGS_1", ""), "LD_ARGS_1=" + GUI.getExternalToolsSetting("LINKER_ARGS_1", ""),
"LD_ARGS_2=" + GUI.getExternalToolsSetting("LINKER_ARGS_2", ""), "LD_ARGS_2=" + GUI.getExternalToolsSetting("LINKER_ARGS_2", ""),
"EXTRA_CC_ARGS=" + GUI.getExternalToolsSetting("COMPILER_ARGS", ""), "EXTRA_CC_ARGS=" + ccFlags,
"CC=" + GUI.getExternalToolsSetting("PATH_C_COMPILER"), "CC=" + GUI.getExternalToolsSetting("PATH_C_COMPILER"),
"LD=" + GUI.getExternalToolsSetting("PATH_LINKER"), "COMPILE_MAIN=1", "LD=" + GUI.getExternalToolsSetting("PATH_LINKER"), "COMPILE_MAIN=1",
"PROJECTDIRS=" + sourceDirs, "PROJECTDIRS=" + sourceDirs,
@ -2008,18 +2027,12 @@ public class ContikiMoteTypeDialog extends JDialog {
// Merge with all user platform configs (if any) // Merge with all user platform configs (if any)
for (File userPlatform : moteTypeUserPlatforms) { for (File userPlatform : moteTypeUserPlatforms) {
File userPlatformConfig = new File(userPlatform.getPath() try {
+ File.separatorChar + GUI.PLATFORM_CONFIG_FILENAME); newMoteTypeConfig.appendUserPlatform(userPlatform);
if (userPlatformConfig.exists()) { } catch (Exception ex) {
try { logger.fatal("Error when parsing user platform config: " + ex);
newMoteTypeConfig.appendConfig(userPlatformConfig); return;
} catch (Exception ex) { }
logger.fatal("Error when parsing user platform config: " + ex);
return;
}
} else
logger.fatal("Could not find user platform config file: "
+ userPlatformConfig);
} }
// Get all mote interfaces available from config // Get all mote interfaces available from config

View file

@ -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: UserPlatformsDialog.java,v 1.2 2006/08/22 08:56:08 nifi Exp $ * $Id: UserPlatformsDialog.java,v 1.3 2006/08/22 15:28:18 fros4943 Exp $
*/ */
package se.sics.cooja.dialogs; package se.sics.cooja.dialogs;
@ -220,22 +220,14 @@ public class UserPlatformsDialog extends JDialog {
button = new JButton("View resulting config"); button = new JButton("View resulting config");
button.addActionListener(new ActionListener() { button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
// Create default configuration PlatformConfig config;
PlatformConfig config = new PlatformConfig();
try { try {
InputStream input = // Create default configuration
GUI.class.getResourceAsStream(GUI.PLATFORM_DEFAULT_CONFIG_FILENAME); config = new PlatformConfig(true);
if (input != null) { } catch (FileNotFoundException ex) {
try { logger.fatal("Could not find default platform config file: "
config.appendConfig(input); + GUI.PLATFORM_DEFAULT_CONFIG_FILENAME);
} finally { return;
input.close();
}
} else {
logger.fatal("Could not find default platform config file1: "
+ GUI.PLATFORM_DEFAULT_CONFIG_FILENAME);
return;
}
} catch (IOException ex) { } catch (IOException ex) {
logger.fatal("Error when reading default platform config file: " logger.fatal("Error when reading default platform config file: "
+ GUI.PLATFORM_DEFAULT_CONFIG_FILENAME); + GUI.PLATFORM_DEFAULT_CONFIG_FILENAME);
@ -245,10 +237,8 @@ public class UserPlatformsDialog extends JDialog {
// Add the fixed platform configurations // Add the fixed platform configurations
if (fixedPlatformsList != null) { if (fixedPlatformsList != null) {
for (String userPlatform : fixedPlatformsList.getItems()) { for (String userPlatform : fixedPlatformsList.getItems()) {
File userPlatformConfig = new File(userPlatform + File.separatorChar
+ GUI.PLATFORM_CONFIG_FILENAME);
try { try {
config.appendConfig(userPlatformConfig); config.appendUserPlatform(new File(userPlatform));
} catch (Exception ex) { } catch (Exception ex) {
logger.fatal("Error when merging configurations: " + ex); logger.fatal("Error when merging configurations: " + ex);
return; return;
@ -258,10 +248,8 @@ public class UserPlatformsDialog extends JDialog {
// Add the user platform configurations // Add the user platform configurations
for (String userPlatform : changablePlatformsList.getItems()) { for (String userPlatform : changablePlatformsList.getItems()) {
File userPlatformConfig = new File(userPlatform + File.separatorChar
+ GUI.PLATFORM_CONFIG_FILENAME);
try { try {
config.appendConfig(userPlatformConfig); config.appendUserPlatform(new File(userPlatform));
} catch (Exception ex) { } catch (Exception ex) {
logger.fatal("Error when merging configurations: " + ex); logger.fatal("Error when merging configurations: " + ex);
return; return;
@ -422,7 +410,10 @@ class ConfigViewer extends JDialog {
String propertyName = allPropertyNames.nextElement(); String propertyName = allPropertyNames.nextElement();
keyPane.add(new JLabel(propertyName)); keyPane.add(new JLabel(propertyName));
valuePane.add(new JLabel(config.getStringValue(propertyName))); if (config.getStringValue(propertyName).equals(""))
valuePane.add(new JLabel(" "));
else
valuePane.add(new JLabel(config.getStringValue(propertyName)));
} }
// Add components // Add components