Simple Load Balancer Application - Recommitting the source codewith the whole source...
[controller.git] / opendaylight / samples / loadbalancer / src / main / java / org / opendaylight / controller / samples / loadbalancer / entities / Pool.java
diff --git a/opendaylight/samples/loadbalancer/src/main/java/org/opendaylight/controller/samples/loadbalancer/entities/Pool.java b/opendaylight/samples/loadbalancer/src/main/java/org/opendaylight/controller/samples/loadbalancer/entities/Pool.java
new file mode 100644 (file)
index 0000000..bbf3116
--- /dev/null
@@ -0,0 +1,276 @@
+/*
+ * Copyright IBM Corporation, 2013.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.samples.loadbalancer.entities;
+
+import java.util.ArrayList;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * This class represents the pool of hosts among which incoming traffic
+ * will be load balanced. Each pool will load balance the traffic among its pool members 
+ * based on the loadbalancing policy set for the pool. 
+ * Currently, the pool supports two load balancing policies:
+ * 1. Round Robin Policy{@link org.opendaylight.controller.samples.loadbalancer.policies.RoundRobinLBPolicy}
+ * 2. Random Policy {@link org.opendaylight.controller.samples.loadbalancer.policies.RandomLBPolicy}
+ * 
+ * NOTE: After creation of the pool, user can't update (change) its load balancing policy.
+ * NOTE: Each Pool should have a unique name.
+ */
+
+@XmlRootElement(name="pool")
+@XmlAccessorType(XmlAccessType.NONE)
+public class Pool {
+    
+    /*
+     * Unique name of the pool
+     */
+    @XmlElement
+    private String name;
+    
+    /*
+     * Associated load balancing policy
+     */
+    @XmlElement(name="lbmethod")
+    private String lbMethod;
+    
+    /*
+     * Status of the pool (active/inactive)
+     */
+    @XmlElement
+    private String status;
+    
+    /*
+     * List of all the VIPs using this pool for load balancing their traffic - more than
+     * one VIP can be mapped to each pool.
+     */
+    @XmlElement
+    private ArrayList<VIP> vips = new ArrayList<VIP>();
+    
+    /*
+     * List of all the pool members used for load balancing the traffic
+     */
+    @XmlElement
+    private ArrayList<PoolMember> members = new ArrayList<PoolMember>();
+    
+    /*
+     * Private constructor used for JAXB mapping
+     */
+    @SuppressWarnings("unused")
+    private Pool() {}
+    
+    /**
+     * Getter/ Setter methods
+     */
+    
+    public Pool(String name,
+                    String lbMethod) {
+        this.name = name;
+        this.lbMethod = lbMethod;
+    }
+    
+    /**
+     * @return the name
+     */
+    public String getName() {
+        return name;
+    }
+    
+    /**
+     * @param name the name to set
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+    
+    /**
+     * @return the lbMethod
+     */
+    public String getLbMethod() {
+        return lbMethod;
+    }
+    
+    /**
+     * @param lbMethod the lbMethod to set
+     */
+    public void setLbMethod(String lbMethod) {
+        this.lbMethod = lbMethod;
+    }
+    
+    /**
+     * @return the status
+     */
+    public String getStatus() {
+        return status;
+    }
+    
+    /**
+     * @param status the status to set
+     */
+    public void setStatus(String status) {
+        this.status = status;
+    }
+    
+    /**
+     * @return the vip
+     */
+    public ArrayList<VIP> getAllVip() {
+        return vips;
+    }
+    
+    /**
+     * @param vip the vip to set
+     */
+    public void setVips(ArrayList<VIP> vips) {
+        this.vips = vips;
+    }
+    
+    /**
+     * @return the members
+     */
+    public ArrayList<PoolMember> getAllMembers() {
+        return members;
+    }
+    
+    /**
+     * @param members the members to set
+     */
+    public void setMembers(ArrayList<PoolMember> members) {
+        this.members = members;
+    }
+    
+    /**
+     * Add new VIP to the VIP list
+     * @param vip       new VIP to add
+     */
+    public void addVIP(VIP vip){
+        this.vips.add(vip);
+    }
+    
+    /**
+     * Remove VIP with given name from the VIP list of the pool
+     * @param name      Name of the VIP
+     * @return true     If VIP was using this pool and removed
+     *          false   IF VIP is not using this pool
+     */
+    public boolean removeVIP(String name){
+        for(VIP vip: this.vips){
+            if(vip.getName().equals(name)){
+                this.members.remove(vip);
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * Check if the given pool member is part of this pool
+     * @param pm        Search for this pool member
+     * @return true     If pool member is attached to this pool
+     *          false   else
+     */
+    public boolean poolMemberExists(PoolMember pm){
+        return this.members.contains(pm);
+    }
+    
+    /**
+     * Returns the pool member with the given name
+     * @param name      Search for this pool member
+     * @return PoolMember       If pool member is attached to this pool
+     *          null            else
+     */
+    public PoolMember getMember(String name){
+        
+        for(PoolMember pm: this.members){
+            if(pm.getName().equals(name)){
+                return pm;
+            }
+        }
+        return null;
+    }
+    
+    /**
+     * Add new pool member to the pool
+     * @param pm        Add this new pool
+     */
+    public void addMember(PoolMember pm){
+        this.members.add(pm);
+    }
+    
+    /**
+     * Remove pool member from the pool list
+     * @param name Remove this pool member
+     * @return true    If pool member was attached to this pool and successfully removed
+     *          false  If pool member is not attached to this pool
+     */
+    public boolean removeMember(String name){
+        for(PoolMember pm: this.members){
+            if(pm.getName().equals(name)){
+                this.members.remove(pm);
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    /* (non-Javadoc)
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result+ ((lbMethod == null) ? 0 : lbMethod.hashCode());
+        result = prime * result + ((name == null) ? 0 : name.hashCode());
+        return result;
+    }
+    
+    /* (non-Javadoc)
+     * @see java.lang.Object#equals(java.lang.Object)
+     */
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (!(obj instanceof Pool)) {
+            return false;
+        }
+        Pool other = (Pool) obj;
+        if (lbMethod == null) {
+            if (other.lbMethod != null) {
+                return false;
+            }
+        }else if (!lbMethod.equals(other.lbMethod)) {
+            return false;
+        }
+        if (name == null) {
+            if (other.name != null) {
+                return false;
+            }
+        }else if (!name.equals(other.name)) {
+            return false;
+        }
+        return true;
+    }
+    
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "Pool [name=" + name + ", lbMethod=" + lbMethod + ", status="
+                            + status + ", vips=" + vips + ", members=" + members + "]";
+    }
+}
\ No newline at end of file