📄 gui.java
字号:
moteType.setConfig(gui.getProjectConfig()); moteType.setProcesses(userProcesses); moteType.setSensors(sensors); moteType.setCoreInterfaces(coreInterfaces); moteType.setMoteInterfaces(moteIntfClasses); // Create simulation logger.info("> Creating simulation"); Simulation simulation = new Simulation(gui); simulation.setTitle("Quickstarted: " + filename); simulation.setDelayTime(delayTime); simulation.setSimulationTime(0); String radioMediumClassName = null; try { radioMediumClassName = gui.getProjectConfig().getStringArrayValue( GUI.class, "RADIOMEDIUMS")[0]; Class<? extends RadioMedium> radioMediumClass = gui.tryLoadClass(gui, RadioMedium.class, radioMediumClassName); RadioMedium radioMedium = RadioMedium.generateRadioMedium( radioMediumClass, simulation); simulation.setRadioMedium(radioMedium); } catch (Exception e) { logger.fatal(">> Failed to load radio medium, aborting: " + radioMediumClassName + ", " + e); return false; } // Create nodes logger.info("> Creating motes"); Vector<ContikiMote> motes = new Vector<ContikiMote>(); Random random = new Random(); int nextMoteID = 1; int nextIP = 0; for (int i = 0; i < numberOfNodes; i++) { ContikiMote mote = (ContikiMote) moteType.generateMote(simulation); // Set random position if (mote.getInterfaces().getPosition() != null) { mote.getInterfaces().getPosition().setCoordinates( random.nextDouble() * areaSideLength, random.nextDouble() * areaSideLength, 0); } // Set unique mote ID's if (mote.getInterfaces().getMoteID() != null) { mote.getInterfaces().getMoteID().setMoteID(nextMoteID++); } // Set unique IP address if (mote.getInterfaces().getIPAddress() != null) { mote.getInterfaces().getIPAddress().setIPNumber((char) 10, (char) ((nextIP / (254 * 255)) % 255), (char) ((nextIP / 254) % 255), (char) (nextIP % 254 + 1)); nextIP++; } motes.add(mote); } // Add mote type and motes to simulation logger.info("> Adding motes and mote type to simulation"); simulation.addMoteType(moteType); for (Mote mote : motes) { simulation.addMote(mote); } // Add simulation to GUI logger.info("> Adding simulation to GUI"); gui.setSimulation(simulation); // Start plugins and try to place them wisely logger.info("> Starting plugin and showing GUI"); VisPlugin plugin = (VisPlugin) gui.startPlugin(VisState.class, gui, simulation, null); plugin.setLocation(350, 20); plugin = (VisPlugin) gui.startPlugin(VisTraffic.class, gui, simulation, null); plugin.setLocation(350, 340); plugin = (VisPlugin) gui.startPlugin(LogListener.class, gui, simulation, null); plugin.setLocation(20, 420); frame.setJMenuBar(gui.createMenuBar()); // Finally show GUI frame.setVisible(true); if (simulationStarting) { simulation.startSimulation(); } return true; } //// PROJECT CONFIG AND EXTENDABLE PARTS METHODS //// /** * Register new mote type class. * * @param moteTypeClass * Class to register */ public void registerMoteType(Class<? extends MoteType> moteTypeClass) { moteTypeClasses.add(moteTypeClass); } /** * Unregister all mote type classes. */ public void unregisterMoteTypes() { moteTypeClasses.clear(); } /** * @return All registered mote type classes */ public Vector<Class<? extends MoteType>> getRegisteredMoteTypes() { return moteTypeClasses; } /** * Register new IP distributor class * * @param ipDistributorClass * Class to register * @return True if class was registered */ public boolean registerIPDistributor( Class<? extends IPDistributor> ipDistributorClass) { // Check that vector constructor exists try { ipDistributorClass.getConstructor(new Class[] { Vector.class }); } catch (Exception e) { logger.fatal("No vector constructor found of IP distributor: " + ipDistributorClass); return false; } ipDistributorClasses.add(ipDistributorClass); return true; } /** * Unregister all IP distributors. */ public void unregisterIPDistributors() { ipDistributorClasses.clear(); } /** * @return All registered IP distributors */ public Vector<Class<? extends IPDistributor>> getRegisteredIPDistributors() { return ipDistributorClasses; } /** * Register new positioner class. * * @param positionerClass * Class to register * @return True if class was registered */ public boolean registerPositioner(Class<? extends Positioner> positionerClass) { // Check that interval constructor exists try { positionerClass .getConstructor(new Class[] { int.class, double.class, double.class, double.class, double.class, double.class, double.class }); } catch (Exception e) { logger.fatal("No interval constructor found of positioner: " + positionerClass); return false; } positionerClasses.add(positionerClass); return true; } /** * Unregister all positioner classes. */ public void unregisterPositioners() { positionerClasses.clear(); } /** * @return All registered positioner classes */ public Vector<Class<? extends Positioner>> getRegisteredPositioners() { return positionerClasses; } /** * Register new radio medium class. * * @param radioMediumClass * Class to register * @return True if class was registered */ public boolean registerRadioMedium( Class<? extends RadioMedium> radioMediumClass) { // Check that simulation constructor exists try { radioMediumClass.getConstructor(new Class[] { Simulation.class }); } catch (Exception e) { logger.fatal("No simulation constructor found of radio medium: " + radioMediumClass); return false; } radioMediumClasses.add(radioMediumClass); return true; } /** * Unregister all radio medium classes. */ public void unregisterRadioMediums() { radioMediumClasses.clear(); } /** * @return All registered radio medium classes */ public Vector<Class<? extends RadioMedium>> getRegisteredRadioMediums() { return radioMediumClasses; } /** * Builds new project configuration using current project directories settings. * Reregisters mote types, plugins, IP distributors, positioners and radio * mediums. This method may still return true even if all classes could not be * registered, but always returns false if all project directory configuration * files were not parsed correctly. * * Any registered temporary plugins will be saved and reregistered. */ public void reparseProjectConfig() throws ParseProjectsException { if (PROJECT_DEFAULT_CONFIG_FILENAME == null) { if (isVisualizedInApplet()) { PROJECT_DEFAULT_CONFIG_FILENAME = "/cooja_applet.config"; } else { PROJECT_DEFAULT_CONFIG_FILENAME = "/cooja_default.config"; } } // Backup temporary plugins Vector<Class<? extends Plugin>> oldTempPlugins = (Vector<Class<? extends Plugin>>) pluginClassesTemporary .clone(); // Reset current configuration unregisterMoteTypes(); unregisterPlugins(); unregisterIPDistributors(); unregisterPositioners(); unregisterRadioMediums(); try { // Read default configuration projectConfig = new ProjectConfig(true); } catch (FileNotFoundException e) { logger.fatal("Could not find default project config file: " + PROJECT_DEFAULT_CONFIG_FILENAME); throw (ParseProjectsException) new ParseProjectsException( "Could not find default project config file: " + PROJECT_DEFAULT_CONFIG_FILENAME).initCause(e); } catch (IOException e) { logger.fatal("Error when reading default project config file: " + PROJECT_DEFAULT_CONFIG_FILENAME); throw (ParseProjectsException) new ParseProjectsException( "Error when reading default project config file: " + PROJECT_DEFAULT_CONFIG_FILENAME).initCause(e); } if (!isVisualizedInApplet()) { // Append project directory configurations for (File projectDir : currentProjectDirs) { try { // Append config to general config projectConfig.appendProjectDir(projectDir); } catch (FileNotFoundException e) { logger.fatal("Could not find project config file: " + projectDir); throw (ParseProjectsException) new ParseProjectsException( "Could not find project config file: " + projectDir).initCause(e); } catch (IOException e) { logger.fatal("Error when reading project config file: " + projectDir); throw (ParseProjectsException) new ParseProjectsException( "Error when reading project config file: " + projectDir).initCause(e); } } // Create class loader try { projectDirClassLoader = createClassLoader(currentProjectDirs); } catch (ClassLoaderCreationException e) { throw (ParseProjectsException) new ParseProjectsException( "Error when creating class loader").initCause(e); } } else { projectDirClassLoader = null; } // Register mote types String[] moteTypeClassNames = projectConfig.getStringArrayValue(GUI.class, "MOTETYPES"); if (moteTypeClassNames != null) { for (String moteTypeClassName : moteTypeClassNames) { Class<? extends MoteType> moteTypeClass = tryLoadClass(this, MoteType.class, moteTypeClassName); if (moteTypeClass != null) { registerMoteType(moteTypeClass); // logger.info("Loaded mote type class: " + moteTypeClassName); } else { logger.warn("Could not load mote type class: " + moteTypeClassName); } } } // Register plugins registerPlugin(SimControl.class, false); // Not in menu registerPlugin(SimInformation.class, false); // Not in menu registerPlugin(MoteTypeInformation.class, false); // Not in menu String[] pluginClassNames = projectConfig.getStringArrayValue(GUI.class, "PLUGINS"); if (pluginClassNames != null) { for (String pluginClassName : pluginClassNames) { Class<? extends Plugin> pluginClass = tryLoadClass(this, Plugin.class, pluginClassName); if (pluginClass != null) { registerPlugin(pluginClass); // logger.info("Loaded plugin class: " + pluginClassName); } else { logger.warn("Could not load plugin class: " + pluginClassName); } } } // Reregister temporary plugins again if (oldTempPlugins != null) { for (Class<? extends Plugin> pluginClass : oldTempPlugins) { if (registerTemporaryPlugin(pluginClass)) { // logger.info("Reregistered temporary plugin class: " + // getDescriptionOf(pluginClass)); } else { logger.warn("Could not reregister temporary plugin class: " + getDescriptionOf(pluginClass)); } } } // Register IP distributors String[] ipDistClassNames = projectConfig.getStringArrayValue(GUI.class, "IP_DISTRIBUTORS"); if (ipDistClassNames != null) { for (String ipDistClassName : ipDistClassNames) { Class<? extends IPDistributor> ipDistClass = tryLoadClass(this, IPDistributor.class, ipDistClassName); if (ipDistClass != null) { registerIPDistributor(ipDistClass); // logger.info("Loaded IP distributor class: " + ipDistClassName); } else { logger .warn("Could not load IP distributor class: " + ipDistClassName); } } } // Register positioners String[] positionerClassNames = projectConfig.getStringArrayValue( GUI.class, "POSITIONERS"); if (positionerClassNames != null) { for (String positionerClassName : positionerClassNames) { Class<? extends Positioner> positionerClass = tryLoadClass(this, Positioner.class, positionerClassName); if (positionerClass != null) { registerPositioner(positionerClass); // logger.info("Loaded positioner class: " + positionerClassName); } else { logger .warn("Could not load positioner class: " + positionerClassName); } } } // Register radio mediums String[] radioMediumsClassNames = projectConfig.getStringArrayValue( GUI.class, "RADIOMEDIUMS"); if (radioMediumsClassNames != null) { for (String radioMediumClassName : radioMediumsClassNames) { Class<? extends RadioMedium> radioMediumClass = tryLoadClass(this, RadioMedium.class, radioMediumClassName); if (radioMediumClass != null) { registerRadioMedium(radioMediumClass);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -