storing current project directories as meta data in simulation configs.

currently no action: only warns if loaded simulation depends on a project not active
This commit is contained in:
fros4943 2008-12-08 10:26:21 +00:00
parent 2e66e36755
commit 34829fe41e

View file

@ -24,29 +24,83 @@
* (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.94 2008/12/08 09:38:42 fros4943 Exp $ * $Id: GUI.java,v 1.95 2008/12/08 10:26:21 fros4943 Exp $
*/ */
package se.sics.cooja; package se.sics.cooja;
import java.awt.*; import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.Dialog.ModalityType; import java.awt.Dialog.ModalityType;
import java.awt.event.*; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.beans.PropertyVetoException; import java.beans.PropertyVetoException;
import java.io.*; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.io.StringReader;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader; import java.net.URLClassLoader;
import java.security.AccessControlException; import java.security.AccessControlException;
import java.util.*; import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;
import java.util.List; import java.util.List;
import java.util.Observable;
import java.util.Observer;
import java.util.Properties;
import java.util.Random;
import java.util.Vector;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.swing.*;
import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.InputMap;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.MenuEvent; import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener; import javax.swing.event.MenuListener;
import javax.swing.filechooser.FileFilter; import javax.swing.filechooser.FileFilter;
import org.apache.log4j.BasicConfigurator; import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator; import org.apache.log4j.xml.DOMConfigurator;
@ -58,9 +112,22 @@ import org.jdom.output.Format;
import org.jdom.output.XMLOutputter; import org.jdom.output.XMLOutputter;
import se.sics.cooja.MoteType.MoteTypeCreationException; import se.sics.cooja.MoteType.MoteTypeCreationException;
import se.sics.cooja.contikimote.*; import se.sics.cooja.contikimote.ContikiMote;
import se.sics.cooja.dialogs.*; import se.sics.cooja.contikimote.ContikiMoteType;
import se.sics.cooja.plugins.*; import se.sics.cooja.contikimote.ContikiMoteTypeDialog;
import se.sics.cooja.contikimote.ContikiProcess;
import se.sics.cooja.dialogs.AddMoteDialog;
import se.sics.cooja.dialogs.CreateSimDialog;
import se.sics.cooja.dialogs.ExternalToolsDialog;
import se.sics.cooja.dialogs.MessageList;
import se.sics.cooja.dialogs.ProjectDirectoriesDialog;
import se.sics.cooja.plugins.LogListener;
import se.sics.cooja.plugins.MoteTypeInformation;
import se.sics.cooja.plugins.ScriptRunnerNoGUI;
import se.sics.cooja.plugins.SimControl;
import se.sics.cooja.plugins.SimInformation;
import se.sics.cooja.plugins.VisState;
import se.sics.cooja.plugins.VisTraffic;
/** /**
* Main file of COOJA Simulator. Typically contains a visualizer for the * Main file of COOJA Simulator. Typically contains a visualizer for the
@ -3294,6 +3361,9 @@ public class GUI extends Observable {
return null; return null;
} }
/* Verify project directories */
boolean projectsOk = verifyProjects(root.getChildren(), !quick);
/* GENERATE UNIQUE MOTE TYPE IDENTIFIERS */ /* GENERATE UNIQUE MOTE TYPE IDENTIFIERS */
root.detach(); root.detach();
String configString = new XMLOutputter().outputString(new Document(root)); String configString = new XMLOutputter().outputString(new Document(root));
@ -3378,8 +3448,16 @@ public class GUI extends Observable {
public void saveSimulationConfig(File file) { public void saveSimulationConfig(File file) {
try { try {
// Create simulation configL // Create simulation config
Element root = new Element("simconf"); Element root = new Element("simconf");
/* Store project directories meta data */
for (File project: currentProjectDirs) {
Element projectElement = new Element("project");
projectElement.addContent(project.getPath().replaceAll("\\\\", "/"));
root.addContent(projectElement);
}
Element simulationElement = new Element("simulation"); Element simulationElement = new Element("simulation");
simulationElement.addContent(mySimulation.getConfigXML()); simulationElement.addContent(mySimulation.getConfigXML());
root.addContent(simulationElement); root.addContent(simulationElement);
@ -3488,6 +3566,33 @@ public class GUI extends Observable {
return config; return config;
} }
public boolean verifyProjects(Collection<Element> configXML, boolean visAvailable) {
boolean allOk = true;
/* Match current projects against projects in simulation config */
for (final Element pluginElement : configXML.toArray(new Element[0])) {
if (pluginElement.getName().equals("project")) {
String project = pluginElement.getText();
boolean found = false;
for (File currentProject: currentProjectDirs) {
if (project.equals(currentProject.getPath().replaceAll("\\\\", "/"))) {
found = true;
break;
}
}
if (!found) {
logger.warn("Loaded simulation may depend on external project: '" + project + "'");
allOk = false;
}
}
}
return allOk;
}
/** /**
* Starts plugins with arguments in given config. * Starts plugins with arguments in given config.
* *