package org.opendaylight.defense4all.core; import org.opendaylight.defense4all.core.DFAppRoot.HealthStatus; public class AMSConnection { public String label; public String amsLabel; private HealthStatus amsStatus; public String netNodeNorthPort; // port in the node - closer to client private HealthStatus netNodeNorthPortStatus; public String netNodeSouthPort; // port in the node - closer to server private HealthStatus netNodeSouthPortStatus; public int amsNorthPort; // port in the AMS device - connected to netNodeNorthPort private HealthStatus amsNorthPortStatus; public int amsSouthPort; // port in the AMS device - connected to netNodeSouthPort private HealthStatus amsSouthPortStatus; private HealthStatus healthStatus; public String getLabel() {return label;} public void setLabel(String label) {this.label = label;} public int getAmsNorthPort() {return amsNorthPort;} public void setAmsNorthPort(int amsNorthPort) {this.amsNorthPort = amsNorthPort;} public String getAmsLabel() {return amsLabel;} public void setAmsLabel(String amsLabel) {this.amsLabel = amsLabel;} public String getNetNodeNorthPort() {return netNodeNorthPort;} public void setNetNodeNorthPort(String netNodeNorthPort) {this.netNodeNorthPort = netNodeNorthPort;} public int getAmsSouthPort() {return amsSouthPort;} public void setAmsSouthPort(int amsSouthPort) {this.amsSouthPort = amsSouthPort;} public String getNetNodeSouthPort() {return netNodeSouthPort;} public void setNetNodeSouthPort(String netNodeSouthPort) {this.netNodeSouthPort = netNodeSouthPort;} public HealthStatus getHealthStatus() {return healthStatus;} /* In all set status methods return true if the overall status changes as a result of the set. */ public boolean setAmsStatus(HealthStatus amsStatus) { if(this.amsStatus == amsStatus) return false; this.amsStatus = amsStatus; return recalcHealthStatus(); } public boolean setNetNodeNorthPortStatus(HealthStatus netNodeNorthPortStatus) { if(this.netNodeNorthPortStatus == netNodeNorthPortStatus) return false; this.netNodeNorthPortStatus = netNodeNorthPortStatus; return recalcHealthStatus(); } public HealthStatus getNetNodeNorthPortStatus() { return netNodeNorthPortStatus; } public boolean setNetNodeSouthPortStatus(HealthStatus netNodeSouthPortStatus) { if(this.netNodeSouthPortStatus == netNodeSouthPortStatus) return false; this.netNodeSouthPortStatus = netNodeSouthPortStatus; return recalcHealthStatus(); } public HealthStatus getNetNodeSouthPortStatus() { return netNodeSouthPortStatus; } public boolean setAmsNorthPortStatus(HealthStatus amsNorthPortStatus) { if(this.amsNorthPortStatus == amsNorthPortStatus) return false; this.amsNorthPortStatus = amsNorthPortStatus; return recalcHealthStatus(); } public boolean setAmsSouthPortStatus(HealthStatus amsSouthPortStatus) { if(this.amsSouthPortStatus == amsSouthPortStatus) return false; this.amsSouthPortStatus = amsSouthPortStatus; return recalcHealthStatus(); } public AMSConnection() { label = null; amsLabel = null; netNodeNorthPort = "0"; netNodeSouthPort = "0"; amsNorthPort = 0; amsSouthPort = 0; healthStatus = amsStatus = netNodeNorthPortStatus = netNodeSouthPortStatus = amsNorthPortStatus = amsSouthPortStatus = HealthStatus.UP; } public AMSConnection(String label, String amsLabel, String netNodeNorthPort, String netNodeSouthPort, int amsNorthPort,int amsSouthPort) { this.label = label; this.amsLabel = amsLabel; this.netNodeNorthPort = netNodeNorthPort; this.netNodeSouthPort = netNodeSouthPort; this.amsNorthPort = amsNorthPort; this.amsSouthPort = amsSouthPort; healthStatus = amsStatus = netNodeNorthPortStatus = netNodeSouthPortStatus = amsNorthPortStatus = amsSouthPortStatus = HealthStatus.UP; } public AMSConnection(AMSConnection other) { this.label = other.label; this.amsLabel = other.amsLabel; this.netNodeNorthPort = other.netNodeNorthPort; this.netNodeSouthPort = other.netNodeSouthPort; this.amsNorthPort = other.amsNorthPort; this.amsSouthPort = other.amsSouthPort; healthStatus = other.healthStatus; amsStatus = other.amsStatus; netNodeNorthPortStatus = other.netNodeNorthPortStatus; netNodeSouthPortStatus = other.netNodeSouthPortStatus; amsNorthPortStatus = other.amsNorthPortStatus; amsSouthPortStatus = other.amsSouthPortStatus; } public String toString() { StringBuilder sb = new StringBuilder(); sb.append(label); sb.append(NetNode.ITEMS_DELIMITER); sb.append(amsLabel); sb.append(NetNode.ITEMS_DELIMITER); sb.append(netNodeNorthPort); sb.append(NetNode.ITEMS_DELIMITER); sb.append(netNodeSouthPort); sb.append(NetNode.ITEMS_DELIMITER); sb.append(amsNorthPort); sb.append(NetNode.ITEMS_DELIMITER); sb.append(amsSouthPort); sb.append(NetNode.ITEMS_DELIMITER); sb.append(healthStatus); sb.append(NetNode.ITEMS_DELIMITER); sb.append(amsStatus); sb.append(NetNode.ITEMS_DELIMITER); sb.append(netNodeNorthPortStatus); sb.append(NetNode.ITEMS_DELIMITER); sb.append(netNodeSouthPortStatus); sb.append(NetNode.ITEMS_DELIMITER); sb.append(amsNorthPortStatus); sb.append(NetNode.ITEMS_DELIMITER); sb.append(amsSouthPortStatus); return sb.toString(); } public AMSConnection(String s) throws IllegalArgumentException { String[] split = s.split(NetNode.ITEMS_DELIMITER); if(split == null || split.length < 6 ) { NetNode.log.error("Invalid param s " + s + "."); throw new IllegalArgumentException("Invalid param s " + s + "."); } label = split[0]; amsLabel = split[1]; try { netNodeNorthPort = split[2]; netNodeSouthPort = split[3]; amsNorthPort = Integer.valueOf(split[4]); amsSouthPort = Integer.valueOf(split[5]); if ( split.length > 6 ) { // String includes statuses from repo healthStatus = HealthStatus.valueOf(split[6]); amsStatus = HealthStatus.valueOf(split[7]); netNodeNorthPortStatus = HealthStatus.valueOf(split[8]); netNodeSouthPortStatus = HealthStatus.valueOf(split[9]); amsNorthPortStatus = HealthStatus.valueOf(split[10]); amsSouthPortStatus = HealthStatus.valueOf(split[11]); } else { healthStatus = amsStatus = netNodeNorthPortStatus = netNodeSouthPortStatus = amsNorthPortStatus = amsSouthPortStatus = HealthStatus.UP; } } catch (NumberFormatException e) { NetNode.log.error("Invalid param s " + s + "." + e.getLocalizedMessage()); throw new IllegalArgumentException("Invalid param s " + s + "." + e.getLocalizedMessage()); } } protected boolean recalcHealthStatus() { HealthStatus oldHealthStatus = healthStatus; if(netNodeNorthPortStatus == HealthStatus.UP && netNodeSouthPortStatus == HealthStatus.UP && amsNorthPortStatus == HealthStatus.UP && amsSouthPortStatus == HealthStatus.UP && amsStatus == HealthStatus.UP) healthStatus = HealthStatus.UP; else healthStatus = HealthStatus.DOWN; return(healthStatus != oldHealthStatus); // Return true if status changed. } public void validate() throws Exception { if(netNodeNorthPort.isEmpty() || netNodeSouthPort.isEmpty() || netNodeNorthPort.equals(netNodeSouthPort)) throw new Exception("Invalid netnode north/south ports - cannot be empty and north cannot be equal to south."); if(amsNorthPort == 0 || amsSouthPort == 0 || amsNorthPort == amsSouthPort) throw new Exception("Invalid ams north/south ports - cannot be 0 and north cannot be equal to south."); } }