diff --git a/tools/cooja/config/cooja_applet.config b/tools/cooja/config/cooja_applet.config index e3460ad22..1d0dc43e6 100644 --- a/tools/cooja/config/cooja_applet.config +++ b/tools/cooja/config/cooja_applet.config @@ -1,5 +1,4 @@ se.sics.cooja.GUI.MOTETYPES = se.sics.cooja.motes.DisturberMoteType se.sics.cooja.contikimote.ContikiMoteType se.sics.cooja.mspmote.ESBMoteType se.sics.cooja.mspmote.SkyMoteType se.sics.cooja.GUI.PLUGINS = se.sics.cooja.plugins.Visualizer se.sics.cooja.plugins.LogListener se.sics.cooja.plugins.MoteInformation se.sics.cooja.plugins.MoteInterfaceViewer se.sics.cooja.plugins.VariableWatcher se.sics.cooja.plugins.EventListener se.sics.cooja.plugins.RadioLogger se.sics.cooja.mspmote.plugins.MspCodeWatcher se.sics.cooja.mspmote.plugins.MspStackWatcher se.sics.cooja.mspmote.plugins.MspCycleWatcher -se.sics.cooja.GUI.IP_DISTRIBUTORS = se.sics.cooja.ipdistributors.RandomIPDistributor se.sics.cooja.ipdistributors.SpatialIPDistributor se.sics.cooja.ipdistributors.IdIPDistributor se.sics.cooja.GUI.POSITIONERS = se.sics.cooja.positioners.RandomPositioner se.sics.cooja.positioners.LinearPositioner se.sics.cooja.positioners.EllipsePositioner se.sics.cooja.positioners.ManualPositioner se.sics.cooja.GUI.RADIOMEDIUMS = se.sics.cooja.radiomediums.UDGM se.sics.cooja.radiomediums.UDGMConstantLoss se.sics.cooja.radiomediums.DirectedGraphMedium se.sics.mrm.MRM se.sics.cooja.radiomediums.SilentRadioMedium diff --git a/tools/cooja/config/cooja_default.config b/tools/cooja/config/cooja_default.config index 8c8cee76d..7f46f6138 100644 --- a/tools/cooja/config/cooja_default.config +++ b/tools/cooja/config/cooja_default.config @@ -4,6 +4,5 @@ se.sics.cooja.contikimote.ContikiMoteType.MOTE_INTERFACES = se.sics.cooja.interf se.sics.cooja.contikimote.ContikiMoteType.C_SOURCES = se.sics.cooja.GUI.MOTETYPES = se.sics.cooja.motes.ImportAppMoteType se.sics.cooja.motes.DisturberMoteType se.sics.cooja.contikimote.ContikiMoteType se.sics.cooja.GUI.PLUGINS = se.sics.cooja.plugins.Visualizer se.sics.cooja.plugins.LogListener se.sics.cooja.plugins.TimeLine se.sics.cooja.plugins.MoteInformation se.sics.cooja.plugins.MoteInterfaceViewer se.sics.cooja.plugins.VariableWatcher se.sics.cooja.plugins.EventListener se.sics.cooja.plugins.RadioLogger se.sics.cooja.plugins.ScriptRunner se.sics.cooja.plugins.Notes se.sics.cooja.plugins.BufferListener -se.sics.cooja.GUI.IP_DISTRIBUTORS = se.sics.cooja.ipdistributors.RandomIPDistributor se.sics.cooja.ipdistributors.SpatialIPDistributor se.sics.cooja.ipdistributors.IdIPDistributor se.sics.cooja.GUI.POSITIONERS = se.sics.cooja.positioners.RandomPositioner se.sics.cooja.positioners.LinearPositioner se.sics.cooja.positioners.EllipsePositioner se.sics.cooja.positioners.ManualPositioner se.sics.cooja.GUI.RADIOMEDIUMS = se.sics.cooja.radiomediums.UDGM se.sics.cooja.radiomediums.UDGMConstantLoss se.sics.cooja.radiomediums.DirectedGraphMedium se.sics.cooja.radiomediums.SilentRadioMedium diff --git a/tools/cooja/java/se/sics/cooja/IPDistributor.java b/tools/cooja/java/se/sics/cooja/IPDistributor.java deleted file mode 100644 index 8dc96b800..000000000 --- a/tools/cooja/java/se/sics/cooja/IPDistributor.java +++ /dev/null @@ -1,76 +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: IPDistributor.java,v 1.2 2007/01/10 14:57:42 fros4943 Exp $ - */ - -package se.sics.cooja; - -import java.lang.reflect.Constructor; -import java.util.Vector; -import org.apache.log4j.Logger; - -/** - * A IP distributor is used for determining IP addresses of newly created motes. - * - * @see se.sics.cooja.Positioner - * @author Fredrik Osterlind - */ -public abstract class IPDistributor { - private static Logger logger = Logger.getLogger(IPDistributor.class); - - /** - * This method creates an instance of the given class with the given vector as - * constructor argument. Instead of calling the constructors directly this - * method may be used. - * - * @param ipDistClass - * Class - * @param newMotes - * All motes that later should be assigned IP numbers - * @return IP distributor instance - */ - public static final IPDistributor generateIPDistributor( - Class ipDistClass, Vector newMotes) { - try { - // Generating IP distributor - Constructor constr = ipDistClass - .getConstructor(new Class[] { Vector.class }); - return (IPDistributor) constr.newInstance(new Object[] { newMotes }); - } catch (Exception e) { - logger.fatal("Exception when creating " + ipDistClass + ": " + e); - return null; - } - } - - /** - * Returns the next mote IP address. - * - * @return IP Address - */ - public abstract String getNextIPAddress(); - -} diff --git a/tools/cooja/java/se/sics/cooja/dialogs/AddMoteDialog.java b/tools/cooja/java/se/sics/cooja/dialogs/AddMoteDialog.java index d39871a8e..06126eb88 100644 --- a/tools/cooja/java/se/sics/cooja/dialogs/AddMoteDialog.java +++ b/tools/cooja/java/se/sics/cooja/dialogs/AddMoteDialog.java @@ -31,16 +31,45 @@ package se.sics.cooja.dialogs; -import java.awt.*; -import java.awt.event.*; -import java.beans.*; -import java.text.*; -import java.util.*; -import javax.swing.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.text.NumberFormat; +import java.text.ParseException; +import java.util.Vector; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JDialog; +import javax.swing.JFormattedTextField; +import javax.swing.JLabel; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + import org.apache.log4j.Logger; -import se.sics.cooja.*; -import se.sics.cooja.interfaces.*; +import se.sics.cooja.GUI; +import se.sics.cooja.Mote; +import se.sics.cooja.MoteType; +import se.sics.cooja.Positioner; +import se.sics.cooja.Simulation; +import se.sics.cooja.interfaces.MoteID; +import se.sics.cooja.interfaces.Position; /** * A dialog for adding motes. @@ -66,7 +95,7 @@ public class AddMoteDialog extends JDialog { private JFormattedTextField numberOfMotesField, startX, endX, startY, endY, startZ, endZ; - private JComboBox positionDistributionBox /*, ipDistributionBox*/; + private JComboBox positionDistributionBox; /** @@ -176,36 +205,6 @@ public class AddMoteDialog extends JDialog { mainPane.add(smallPane); mainPane.add(Box.createRigidArea(new Dimension(0, 5))); - // IP address distribution - /*smallPane = new JPanel(); - smallPane.setAlignmentX(Component.LEFT_ALIGNMENT); - smallPane.setLayout(new BoxLayout(smallPane, BoxLayout.X_AXIS)); - label = new JLabel("IP Addressing"); - label.setPreferredSize(new Dimension(LABEL_WIDTH, LABEL_HEIGHT)); - - Vector> ipDistributors = simulation.getGUI() - .getRegisteredIPDistributors(); - String[] ipDistributions = new String[ipDistributors.size()]; - for (int i = 0; i < ipDistributions.length; i++) { - ipDistributions[i] = GUI.getDescriptionOf(ipDistributors.get(i)); - } - - comboBox = new JComboBox(ipDistributions); - - comboBox.setSelectedIndex(0); - comboBox.addActionListener(myEventHandler); - comboBox.addFocusListener(myEventHandler); - ipDistributionBox = comboBox; - label.setLabelFor(comboBox); - - smallPane.add(label); - smallPane.add(Box.createHorizontalStrut(10)); - smallPane.add(comboBox); - - mainPane.add(smallPane); - mainPane.add(Box.createRigidArea(new Dimension(0, 5))); - */ - // Position distribution smallPane = new JPanel(); smallPane.setAlignmentX(Component.LEFT_ALIGNMENT); @@ -504,7 +503,7 @@ public class AddMoteDialog extends JDialog { } } - /* Set unique mote id's for all new motes + /* Set unique mote id's for all new motes * TODO ID should be provided differently; not rely on the unsafe MoteID interface */ int nextMoteID = 1; for (Mote m: simulation.getMotes()) { @@ -522,33 +521,6 @@ public class AddMoteDialog extends JDialog { } } - // IP address new motes - /*Class ipDistClass = null; - for (Class ipDistributor : simulation.getGUI() - .getRegisteredIPDistributors()) { - if (GUI.getDescriptionOf(ipDistributor).equals( - ipDistributionBox.getSelectedItem())) { - ipDistClass = ipDistributor; - } - } - - IPDistributor ipDistributor = IPDistributor.generateIPDistributor( - ipDistClass, newMotes); - - if (ipDistributor == null) { - logger.fatal("Could not create IP distributor"); - dispose(); - return; - } - - for (int i = 0; i < newMotes.size(); i++) { - String newIPString = ipDistributor.getNextIPAddress(); - if (newMotes.get(i).getInterfaces().getIPAddress() != null) { - newMotes.get(i).getInterfaces().getIPAddress().setIPString( - newIPString); - } - }*/ - dispose(); } catch (OutOfMemoryError e2) { newMotes = null; diff --git a/tools/cooja/java/se/sics/cooja/ipdistributors/IdIPDistributor.java b/tools/cooja/java/se/sics/cooja/ipdistributors/IdIPDistributor.java deleted file mode 100644 index 29a98692f..000000000 --- a/tools/cooja/java/se/sics/cooja/ipdistributors/IdIPDistributor.java +++ /dev/null @@ -1,74 +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: IdIPDistributor.java,v 1.2 2009/09/17 13:20:03 fros4943 Exp $ - */ - -package se.sics.cooja.ipdistributors; -import java.util.Vector; -import se.sics.cooja.*; - -/** - * Generates IP addresses on the form 10.[id/256 mod 256*256].[id mod 256].1. - * - * Observe! - * - ID must be set before this is called (otherwise IP=0.0.0.0). - * - Only supports 256*256 motes, (IPs will wrap if above). - * - * @author Fredrik Osterlind - */ -@ClassDescription("From ID (10.id.id.1)") -public class IdIPDistributor extends IPDistributor { - private Vector generatedIPAddresses; - - /** - * Creates a Id IP distributor. - * @param newMotes All motes which later will be assigned IP numbers. - */ - public IdIPDistributor(Vector newMotes) { - generatedIPAddresses = new Vector(); - - for (int i=0; i < newMotes.size(); i++) { - int moteId = newMotes.get(i).getID(); - generatedIPAddresses.add("10." + - (moteId / 256 % (256*256)) - + "." + - (moteId % 256) - + ".1"); - } - - } - - public String getNextIPAddress() { - if (generatedIPAddresses.size() > 0) - return generatedIPAddresses.remove(0); - else - return "0.0.0.0"; - } - -} diff --git a/tools/cooja/java/se/sics/cooja/ipdistributors/RandomIPDistributor.java b/tools/cooja/java/se/sics/cooja/ipdistributors/RandomIPDistributor.java deleted file mode 100644 index 95000b842..000000000 --- a/tools/cooja/java/se/sics/cooja/ipdistributors/RandomIPDistributor.java +++ /dev/null @@ -1,59 +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: RandomIPDistributor.java,v 1.2 2009/02/18 12:07:19 fros4943 Exp $ - */ - -package se.sics.cooja.ipdistributors; -import java.util.Random; -import java.util.Vector; -import se.sics.cooja.*; - -/** - * Generates IP addresses randomly on the form 10.10.[1-20].[1-20]. - * Nothing prevents several motes from getting the same IP number. - * - * @author Fredrik Osterlind - */ -@ClassDescription("Random (10.10.?.?)") -public class RandomIPDistributor extends IPDistributor { - - private Random random = new Random(); /* Do not use main random generator for setup */ - - /** - * Creates a random IP distributor. - * @param newMotes All motes which later will be assigned IP numbers. - */ - public RandomIPDistributor(Vector newMotes) { - } - - public String getNextIPAddress() { - return "" + 10 + "." + 10 + "." + (1+random.nextInt(20)) + "." + (1+random.nextInt(20)); - } - -} diff --git a/tools/cooja/java/se/sics/cooja/ipdistributors/SpatialIPDistributor.java b/tools/cooja/java/se/sics/cooja/ipdistributors/SpatialIPDistributor.java deleted file mode 100644 index 72763d092..000000000 --- a/tools/cooja/java/se/sics/cooja/ipdistributors/SpatialIPDistributor.java +++ /dev/null @@ -1,106 +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: SpatialIPDistributor.java,v 1.1 2006/08/21 12:13:07 fros4943 Exp $ - */ - -package se.sics.cooja.ipdistributors; -import java.util.Vector; -import se.sics.cooja.*; - -/** - * Generates spatial IP addresses on the form 10.[z-coord].[y-coord].[x-coord]. - * The smallest coordinate in each interval will be mapped onto address 1, - * and the biggest coordinate onto address 200. - * Nothing prevents several motes from getting the same IP number. - * - * @author Fredrik Osterlind - */ -@ClassDescription("Spatial (10.x.y.z)") -public class SpatialIPDistributor extends IPDistributor { - private double lowestX, biggestX, lowestY, biggestY, lowestZ, biggestZ; - private Vector generatedIPAddresses; - - /** - * Creates a random IP distributor. - * @param newMotes All motes which later will be assigned IP numbers. - */ - public SpatialIPDistributor(Vector newMotes) { - lowestX = newMotes.get(0).getInterfaces().getPosition().getXCoordinate(); - biggestX = newMotes.get(0).getInterfaces().getPosition().getXCoordinate(); - lowestY = newMotes.get(0).getInterfaces().getPosition().getYCoordinate(); - biggestY = newMotes.get(0).getInterfaces().getPosition().getYCoordinate(); - lowestZ = newMotes.get(0).getInterfaces().getPosition().getZCoordinate(); - biggestZ = newMotes.get(0).getInterfaces().getPosition().getZCoordinate(); - - for (int i=0; i < newMotes.size(); i++) { - if (newMotes.get(i).getInterfaces().getPosition().getXCoordinate() < lowestX) - lowestX = newMotes.get(i).getInterfaces().getPosition().getXCoordinate(); - if (newMotes.get(i).getInterfaces().getPosition().getXCoordinate() > biggestX) - biggestX = newMotes.get(i).getInterfaces().getPosition().getXCoordinate(); - - if (newMotes.get(i).getInterfaces().getPosition().getYCoordinate() < lowestY) - lowestY = newMotes.get(i).getInterfaces().getPosition().getYCoordinate(); - if (newMotes.get(i).getInterfaces().getPosition().getYCoordinate() > biggestY) - biggestY = newMotes.get(i).getInterfaces().getPosition().getYCoordinate(); - - if (newMotes.get(i).getInterfaces().getPosition().getZCoordinate() < lowestZ) - lowestZ = newMotes.get(i).getInterfaces().getPosition().getZCoordinate(); - if (newMotes.get(i).getInterfaces().getPosition().getZCoordinate() > biggestZ) - biggestZ = newMotes.get(i).getInterfaces().getPosition().getZCoordinate(); - } - - generatedIPAddresses = new Vector(); - for (int i=0; i < newMotes.size(); i++) { - String ipAddress = "10."; - int partIP; - - // Z coord - partIP = (int) (1 + 199*(newMotes.get(i).getInterfaces().getPosition().getZCoordinate() - lowestZ) / (biggestZ - lowestZ)); - ipAddress = ipAddress.concat(partIP + "."); - - // Y coord - partIP = (int) (1 + 199*(newMotes.get(i).getInterfaces().getPosition().getYCoordinate() - lowestY) / (biggestY - lowestY)); - ipAddress = ipAddress.concat(partIP + "."); - - // X coord - partIP = (int) (1 + 199*(newMotes.get(i).getInterfaces().getPosition().getXCoordinate() - lowestX) / (biggestX - lowestX)); - ipAddress = ipAddress.concat(partIP + ""); - - generatedIPAddresses.add(ipAddress); - } - } - - public String getNextIPAddress() { - if (generatedIPAddresses.size() > 0) - return generatedIPAddresses.remove(0); - else - return "0.0.0.0"; - } - -}