Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Adding some new functions.
[mapping.git] / src / and / Mapping / Cluster.java
index 0561682..39c48bd 100644 (file)
@@ -14,11 +14,12 @@ public class Cluster implements Serializable
 {
        private static final long serialVersionUID = 1L;
        
-       private int nb_node ;
+//     private int nb_node ;
        private String name ;
        private ArrayList<GNode> nodes ;
+       private ArrayList<GNode> freenodes ;
        private String site ;
-       private int indice ;
+//     private int indice ;
        
        
        /**
@@ -26,52 +27,54 @@ public class Cluster implements Serializable
         */
        public Cluster()
        {
-               nb_node = 0 ;
+//             nb_node = 0 ;
                name = "" ;
                nodes = new ArrayList<GNode>() ;
+               freenodes = new ArrayList<GNode>() ;
                site = "" ;
-               indice = 0 ;
+//             indice = 0 ;
        }
        
        
-       /**
-        * Constructor.
-        * @param _nb The amount of computing nodes in the cluster
-        */
-       public Cluster( int _nb )
-       {
-               nb_node = _nb ;
-               name = "" ;
-               nodes = new ArrayList<GNode>() ;
-               site = "" ;
-               indice = 0 ;
-               
-               
-               for( int i = 0 ; i < nb_node ; i++ )
-               {
-                       nodes.add( new GNode() ) ;
-               }
-       }
+//     /**
+//      * Constructor.
+//      * @param _nb The amount of computing nodes in the cluster
+//      */
+//     public Cluster( int _nb )
+//     {
+//             nb_node = _nb ;
+//             name = "" ;
+//             nodes = new ArrayList<GNode>() ;
+//             freenodes = new ArrayList<GNode>() ;
+//             site = "" ;
+////           indice = 0 ;
+//             
+//             
+//             for( int i = 0 ; i < nb_node ; i++ )
+//             {
+//                     nodes.add( new GNode() ) ;
+//             }
+//     }
        
        
-       /**
-        * Constructor.
-        * @param _nb The amount of computing nodes in the cluster
-        * @param _name Cluster's name
-        */
-       public Cluster( int _nb, String _name )
-       {
-               nb_node = _nb ;
-               name = _name ;
-               nodes = new ArrayList<GNode>() ;
-               site = "" ;
-               indice = 0 ;
-               
-               for( int i = 0 ; i < nb_node ; i++ )
-               {
-                       nodes.add( new GNode() ) ;
-               }
-       }
+//     /**
+//      * Constructor.
+//      * @param _nb The amount of computing nodes in the cluster
+//      * @param _name Cluster's name
+//      */
+//     public Cluster( int _nb, String _name )
+//     {
+////           nb_node = _nb ;
+//             name = _name ;
+//             nodes = new ArrayList<GNode>() ;
+//             site = "" ;
+////           indice = 0 ;
+//             
+//             for( int i = 0 ; i < nb_node ; i++ )
+//             {
+//                     nodes.add( new GNode() ) ;
+//             }
+//     }
        
        
        /**
@@ -90,10 +93,18 @@ public class Cluster implements Serializable
         */
        public void addGNode( GNode _n )
        {
-               _n.setInCluster( true ) ;
-               nodes.add( _n ) ;
+               if( _n != null )
+               {
+                       _n.setInCluster( true ) ;
+                       nodes.add( _n ) ;
 
-               nb_node++ ;
+//                     nb_node++ ;
+               
+                       if( ! _n.getMapped() )
+                       {
+                               freenodes.add( _n ) ;
+                       }
+               }
        }
        
        
@@ -123,7 +134,8 @@ public class Cluster implements Serializable
         */
        public int getNbGNode()
        {
-               return nb_node ;
+//             return nb_node ;
+               return nodes.size() ;
        }
        
        
@@ -150,29 +162,35 @@ public class Cluster implements Serializable
        /**
         * Test if a computing node is in the cluster.
         * @param _g The node to be tested
-        * @return True is _g is in, False else
+        * @return The position of the node
         */
-       public boolean isIn( GNode _g )
+       public int isIn( GNode _g )
        {
+               int pos = -1 ;
+               
                if( _g != null )
                {
-                       for( int i = 0; i < nodes.size(); i ++ )
+                       for( int i = 0 ; i < nodes.size() ; i ++ )
                        {
                                if( nodes.get( i ).getId() == _g.getId() )
-                                       return true ;
+                               {
+                                       pos = i ;
+                                       break ;
+                               }
+                               
                        }
                }
                
-               return false ;
+               return pos ;
        }
        
-       /**
-        * Initialization of indice variable.
-        */
-       public void initIndice()
-       {
-               indice = 0 ;
-       }
+//     /**
+//      * Initialization of indice variable.
+//      */
+//     public void initIndice()
+//     {
+//             indice = 0 ;
+//     }
 
 
        /**
@@ -184,10 +202,14 @@ public class Cluster implements Serializable
        {
                GNode ret = null ;
                
-               if( indice < nb_node )
+//             if( indice < nb_node )
+//             {
+//                     ret = nodes.get( indice ) ;
+//                     indice++ ;
+//             }
+               if( freenodes.size() > 0 )
                {
-                       ret = nodes.get( indice ) ;
-                       indice++ ;
+                       ret = freenodes.get( 0 ) ;
                }
                
                return ret ;
@@ -206,14 +228,71 @@ public class Cluster implements Serializable
                        {
                                if( _dead.getId() == nodes.get( i ).getId() )
                                {
-                                       nodes.remove( i ) ;
-                                       nb_node-- ;
+                                       freenodes.remove( nodes.remove( i ) ) ;
+//                                     nb_node-- ;
                                        
                                        break ;
                                }
                        }
                }
+       }
+       
+       
+       /**
+        * Set the mapped status of a node of the cluster.
+        * @param _g The mapped node
+        * @param _status The status of the node
+        */
+       public void setGNodeStatus( GNode _g, boolean _status )
+       {
+               if( _g != null )
+               {
+                       for( int i = 0 ; i < nodes.size() ; i++ )
+                       {
+                               if( nodes.get( i ).getId() == _g.getId() )
+                               {
+                                       nodes.get( i ).setMapped( _status ) ;
+                                       
+                                       if( _status ) 
+                                       {
+                                               freenodes.remove( nodes.get(i) ) ;
+                                       } else {
+                                               if( ! freenodes.contains( nodes.get( i ) ) )
+                                                       freenodes.add( nodes.get( i ) ) ;
+                                       }
+                               }
+                       }
+               }
+       }
+       
+       
+       /**
+        * Return the amount of available free nodes in the cluster.
+        * @return The amount of free nodes
+        */
+       public int getNbFreeNodes()
+       {
+               return freenodes.size() ;
+       }
+
+
+       /**
+        * Initialization of computing nodes in this cluster. Set all
+        * of these nodes to be not mapped on.
+        */
+       public void initGNodes() 
+       {
+               /** Initialization of local nodes            **/
+               /** and reconstruction of the freenodes list **/
+               freenodes = null ;
+               freenodes = new ArrayList<GNode>() ;
                
+               for( int i = 0 ; i < nodes.size() ; i++ )
+               {
+                       nodes.get( i ).setMapped( false ) ;
+                       
+                       freenodes.add( nodes.get( i ) ) ;
+               }
        }
        
 }