Revision: 10019
Author: brainslog
Date: Tue Feb 16 19:41:03 2010
Log: Adding Diameter Configuration Objects
http://code.google.com/p/mobicents/source/detail?r=10019

Added:
/trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/ApplicationIdJMX.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/ConcurrentEntity.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/ConcurrentEntityImpl.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/DiameterConfiguration.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/DiameterStatistic.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/LocalPeer.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/LocalPeerImpl.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/Network.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/NetworkImpl.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/NetworkPeer.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/NetworkPeerImpl.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/Parameters.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/ParametersImpl.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/Realm.java /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/RealmImpl.java

=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/ApplicationIdJMX.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,66 @@
+package org.mobicents.diameter.stack.management;
+
+import java.io.Serializable;
+
+import org.jdiameter.api.ApplicationId;
+
+public class ApplicationIdJMX implements Serializable {
+
+  private static final long serialVersionUID = 1L;
+
+  private Long vendorId = null;
+  private Long authApplicationId = null;
+  private Long acctApplicationId = null;
+
+ private ApplicationIdJMX(Long vendorId, Long authApplicationId, Long acctApplicationId) {
+    this.vendorId = vendorId;
+    this.authApplicationId = authApplicationId;
+    this.acctApplicationId = acctApplicationId;
+  }
+
+ public static ApplicationIdJMX createAcctApplicationId(long vendorId, long applicationId) {
+    return new ApplicationIdJMX(vendorId, null, applicationId);
+  }
+
+ public static ApplicationIdJMX createAuthApplicationId(long vendorId, long applicationId) {
+    return new ApplicationIdJMX(vendorId, applicationId, null);
+  }
+
+ public static ApplicationIdJMX createAcctApplicationId(long applicationId) {
+    return createAcctApplicationId(0L, applicationId);
+  }
+
+ public static ApplicationIdJMX createAuthApplicationId(long applicationId) {
+    return createAuthApplicationId(0L, applicationId);
+  }
+
+  public Long getAcctApplicationId() {
+    return acctApplicationId;
+  }
+
+  public Long getAuthApplicationId() {
+    return authApplicationId;
+  }
+
+  public Long getVendorId() {
+    return vendorId;
+  }
+
+  public ApplicationId asApplicationId() {
+ return authApplicationId != null ? ApplicationId.createByAuthAppId(vendorId, authApplicationId) : ApplicationId.createByAccAppId(vendorId, acctApplicationId);
+  }
+
+  public static ApplicationIdJMX fromApplicationId(ApplicationId appId) {
+    if(appId.getAuthAppId() != 0) {
+ return new ApplicationIdJMX(appId.getVendorId(), appId.getAuthAppId(), null);
+    }
+    else {
+ return new ApplicationIdJMX(appId.getVendorId(), null, appId.getAcctAppId());
+    }
+  }
+
+  @Override
+  public String toString() {
+ return "ApplicationID[vendor=" + vendorId + "; Auth=" + authApplicationId + "; Acct=" + acctApplicationId + "]";
+  }
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/ConcurrentEntity.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,17 @@
+package org.mobicents.diameter.stack.management;
+
+import java.io.Serializable;
+
+public interface ConcurrentEntity extends Serializable {
+
+  public static enum ConcurrentEntityNames {
+    ThreadGroup, ProcessingMessageTimer, DuplicationMessageTimer,
+ RedirectMessageTimer, PeerOverloadTimer, ConnectionTimer, StatisticTimer;
+  }
+
+  public String getName();
+
+  public String getDescription();
+
+  public Integer getSize();
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/ConcurrentEntityImpl.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,32 @@
+package org.mobicents.diameter.stack.management;
+
+public class ConcurrentEntityImpl implements ConcurrentEntity {
+
+  private static final long serialVersionUID = 1L;
+
+  private String name;
+  private String description;
+  private Integer size;
+
+ private ConcurrentEntityImpl(ConcurrentEntityNames name, String description, Integer size) {
+    this.name = name.name();
+    this.description = description;
+    this.size = size;
+  }
+
+ public static ConcurrentEntityImpl createEntity(ConcurrentEntityNames name, String description, Integer size) {
+    return new ConcurrentEntityImpl(name, description, size);
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public Integer getSize() {
+    return size;
+  }
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/DiameterConfiguration.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,200 @@
+package org.mobicents.diameter.stack.management;
+
+import static org.jdiameter.client.impl.helpers.Parameters.PeerIp;
+import static org.jdiameter.client.impl.helpers.Parameters.PeerLocalPortRange;
+import static org.jdiameter.client.impl.helpers.Parameters.PeerName;
+import static org.jdiameter.client.impl.helpers.Parameters.PeerRating;
+import static org.jdiameter.client.impl.helpers.Parameters.PeerTable;
+import static org.jdiameter.client.impl.helpers.Parameters.SecurityRef;
+import static org.jdiameter.server.impl.helpers.Parameters.PeerAttemptConnection;
+
+import java.io.Serializable;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdiameter.api.Configuration;
+import org.jdiameter.api.InternalException;
+import org.jdiameter.api.MutableConfiguration;
+import org.jdiameter.api.MutablePeerTable;
+import org.jdiameter.api.Peer;
+import org.jdiameter.api.PeerTable;
+import org.jdiameter.api.Stack;
+import org.jdiameter.client.api.controller.IPeer;
+import org.jdiameter.common.api.statistic.IStatisticRecord;
+import org.jdiameter.server.impl.MutablePeerTableImpl;
+import org.jdiameter.server.impl.PeerImpl;
+
+public class DiameterConfiguration implements Serializable {
+
+  private static final long serialVersionUID = 1L;
+
+ private final Log logger = LogFactory.getLog(DiameterConfiguration.class);
+
+  protected static Stack stack;
+
+  public DiameterConfiguration(Stack stack) {
+    DiameterConfiguration.stack = stack;
+    updateFromStack(stack);
+  }
+
+  // Mandatory and max-occurs = 1
+  private LocalPeer localPeer = new LocalPeerImpl();
+
+  private Parameters parameters = null;
+
+  private Network network = new NetworkImpl();
+
+  // Optional
+  //<xsi:element ref="Security" minOccurs="0" maxOccurs="1"/>
+  //<xsi:element ref="Extensions" minOccurs="0" maxOccurs="1"/>
+
+  private void updateFromStack(Stack stack) {
+    long startTime = System.currentTimeMillis();
+
+    // Update LocalPeer
+    Peer sLocalPeer = stack.getMetaData().getLocalPeer();
+
+    localPeer.setUri(sLocalPeer.getUri().toString());
+    for(InetAddress ipAddress : sLocalPeer.getIPAddresses()) {
+      localPeer.addIpAddress(ipAddress.getHostAddress());
+    }
+    localPeer.setRealm(sLocalPeer.getRealmName());
+    localPeer.setVendorId(sLocalPeer.getVendorId());
+    localPeer.setProductName(sLocalPeer.getProductName());
+    localPeer.setFirmwareRev(sLocalPeer.getFirmware());
+ for(org.jdiameter.api.ApplicationId appId : sLocalPeer.getCommonApplications()) { + if(appId.getAuthAppId() != org.jdiameter.api.ApplicationId.UNDEFINED_VALUE) { + localPeer.addDefaultApplication(ApplicationIdJMX.createAuthApplicationId(appId.getVendorId(), appId.getAuthAppId()));
+      }
+      else {
+ localPeer.addDefaultApplication(ApplicationIdJMX.createAcctApplicationId(appId.getVendorId(), appId.getAcctAppId()));
+      }
+    }
+ HashMap<String, DiameterStatistic> lpStats = new HashMap<String, DiameterStatistic>(); + for(IStatisticRecord stat : ((IPeer)sLocalPeer).getStatistic().getRecords()) { + lpStats.put(stat.getName(), new DiameterStatistic(stat.getName(), stat.getDescription(), stat.toString()));
+    }
+    localPeer.setStatistics(lpStats);
+
+ MutableConfiguration config = (MutableConfiguration) stack.getMetaData().getConfiguration();
+
+    // Update Parameters
+    this.parameters = new ParametersImpl(config);
+
+    // Update Network ...
+    // ... Peers (config)
+    for(Configuration curPeer : config.getChildren(PeerTable.ordinal())) {
+      String name = curPeer.getStringValue(PeerName.ordinal(), "");
+ Boolean attemptConnect = curPeer.getBooleanValue(PeerAttemptConnection.ordinal(), false);
+      Integer rating = curPeer.getIntValue(PeerRating.ordinal(), 0);
+      String ip = curPeer.getStringValue(PeerIp.ordinal(), null);
+ String portRange = curPeer.getStringValue(PeerLocalPortRange.ordinal(), "");
+      Integer portRangeLow = null;
+      Integer portRangeHigh = null;
+      if(portRange != null && !portRange.equals("")) {
+        String[] rng = portRange.trim().split("-");
+        portRangeLow = Integer.parseInt(rng[0]);
+        portRangeHigh = Integer.parseInt(rng[1]);
+      }
+ String securityRef = curPeer.getStringValue(SecurityRef.ordinal(), ""); + network.addPeer(new NetworkPeerImpl(name, attemptConnect, rating, ip, portRangeLow, portRangeHigh, securityRef));
+    }
+
+    // ... More Peers (mutable)
+    try {
+      MutablePeerTable peerTable;
+      peerTable = (MutablePeerTable) stack.unwrap(MutablePeerTable.class);
+      //Peer p = n.addPeer("aaa://127.0.0.1:21812", "mobicents.org", true);
+      for(Peer peer : peerTable.getPeerTable()) {
+        PeerImpl p = (PeerImpl) peer;
+ NetworkPeerImpl nPeer = new NetworkPeerImpl(p.getUri().toString(), p.isAttemptConnection(), p.getRating(), null, null, null, null); + HashMap<String, DiameterStatistic> npStats = new HashMap<String, DiameterStatistic>();
+        for(IStatisticRecord stat : p.getStatistic().getRecords()) {
+ npStats.put(stat.getName(), new DiameterStatistic(stat.getName(), stat.getDescription(), stat.toString()));
+        }
+        nPeer.setStatistics(npStats);
+        network.addPeer(nPeer);
+      }
+    }
+    catch (InternalException e) {
+ logger.error("Failed to update Diameter Configuration from Stack Mutable Peer Table", e);
+    }
+
+    // ... Realms (configuration)
+ /*for(Configuration realmTable : config.getChildren(RealmTable.ordinal())) { + for(Configuration curRealm : realmTable.getChildren(RealmEntry.ordinal())) {
+        String name = curRealm.getStringValue(RealmName.ordinal(), "");
+ String hosts = curRealm.getStringValue(RealmHosts.ordinal(), "localhost");
+        ArrayList<String> peers = new ArrayList<String>();
+        for(String peer : hosts.split(",")) {
+          peers.add(peer.trim());
+        }
+ String localAction = curRealm.getStringValue(RealmLocalAction.ordinal(), "LOCAL"); + Boolean dynamic = curRealm.getBooleanValue(RealmEntryIsDynamic.ordinal(), false); + Long expTime = curRealm.getLongValue(RealmEntryExpTime.ordinal(), 0); + Configuration[] sAppIds = curRealm.getChildren(ApplicationId.ordinal()); + ArrayList<ApplicationIdJMX> appIds = new ArrayList<ApplicationIdJMX>();
+        for(Configuration appId : sAppIds) {
+          Long acctAppId = appId.getLongValue(AcctApplId.ordinal(), 0);
+          Long authAppId = appId.getLongValue(AuthApplId.ordinal(), 0);
+          Long vendorId = appId.getLongValue(VendorId.ordinal(), 0);
+          if(authAppId != 0) {
+ appIds.add(ApplicationIdJMX.createAuthApplicationId(vendorId, authAppId));
+          }
+          else if (acctAppId != 0){
+ appIds.add(ApplicationIdJMX.createAcctApplicationId(vendorId, acctAppId));
+          }
+        }
+ network.addRealm(new RealmImpl(appIds, name, peers, localAction, dynamic, expTime));
+      }
+    }
+    */
+    // ... Realms (mutable)
+    try {
+ MutablePeerTableImpl mpt = (MutablePeerTableImpl) stack.unwrap(PeerTable.class);
+      for(org.jdiameter.api.Realm realm : mpt.getAllRealms()) {
+        ArrayList<ApplicationIdJMX> x = new ArrayList<ApplicationIdJMX>();
+ x.add(ApplicationIdJMX.fromApplicationId(realm.getApplicationId())); + network.addRealm(new RealmImpl(x, realm.getName(), new ArrayList<String>(Arrays.asList(realm.getPeerHosts())), realm.getLocalAction().toString(), realm.isDynamic(), realm.getExpirationTime()));
+      }
+    }
+    catch (Exception e) {
+ logger.error("Failed to update Diameter Configuration from Stack Mutable Peer Table", e);
+    }
+
+    long endTime = System.currentTimeMillis();
+
+    if(logger.isDebugEnabled()) {
+      logger.debug("Info gathered in " + (endTime - startTime) + "ms");
+    }
+  }
+
+  public LocalPeer getLocalPeer() {
+    return localPeer;
+  }
+
+  public Parameters getParameters() {
+    return parameters;
+  }
+
+  public Network getNetwork() {
+    return network;
+  }
+
+  protected static MutableConfiguration getMutableConfiguration() {
+    return (MutableConfiguration) stack.getMetaData().getConfiguration();
+  }
+
+  @Override
+  public String toString() {
+ String toString = "## LOCAL PEER ##\r\n" + localPeer.toString() + "\r\n";
+    toString += "## PARAMETERS ##\r\n" + parameters.toString() + "\r\n";
+    toString += "## NETWORK ##\r\n" + network.toString() + "\r\n";
+    return toString;
+  }
+
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/DiameterStatistic.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,35 @@
+package org.mobicents.diameter.stack.management;
+
+import java.io.Serializable;
+
+public class DiameterStatistic implements Serializable {
+
+  private static final long serialVersionUID = 1L;
+
+  private String name;
+  private String description;
+  private String value;
+
+  public DiameterStatistic(String name, String description, String value) {
+    super();
+    this.name = name;
+    this.description = description;
+    this.value = value;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public String getDescription() {
+    return description;
+  }
+
+  public Object getValue() {
+ return this.value.indexOf('.') != -1 ? Double.valueOf(value) : Long.valueOf(value);
+  }
+
+  public String getValueAsString() {
+    return value;
+  }
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/LocalPeer.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,44 @@
+package org.mobicents.diameter.stack.management;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.HashMap;
+
+public interface LocalPeer extends Serializable {
+
+  public String getUri();
+
+  public Collection<String> getIpAddresses();
+
+  public String getRealm();
+
+  public Long getVendorId();
+
+  public String getProductName();
+
+  public Long getFirmwareRev();
+
+  public Collection<ApplicationIdJMX> getDefaultApplications();
+
+  public void setUri(String uri);
+
+  public void addIpAddress(String ipAddress);
+
+  public void removeIpAddress(String ipAddress);
+
+  public void setRealm(String realm);
+
+  public void setVendorId(Long vendorId);
+
+  public void setProductName(String productName);
+
+  public void setFirmwareRev(Long firmwareRev);
+
+  public void addDefaultApplication(ApplicationIdJMX defaultApplication);
+
+ public void removeDefaultApplication(ApplicationIdJMX defaultApplication);
+
+  public HashMap<String, DiameterStatistic> getStatistics();
+
+  public void setStatistics(HashMap<String, DiameterStatistic> statistics);
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/LocalPeerImpl.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,135 @@
+package org.mobicents.diameter.stack.management;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+
+public class LocalPeerImpl implements LocalPeer {
+
+  private static final long serialVersionUID = 1L;
+
+  // The Singleton
+  // public final static LocalPeerImpl INSTANCE = new LocalPeerImpl();
+
+  private String uri;
+  private Collection<String> ipAddresses = new ArrayList<String>();
+  private String realm;
+
+  private Long vendorId;
+  private String productName;
+  private Long firmwareRev;
+
+ private Collection<ApplicationIdJMX> defaultApplications = new ArrayList<ApplicationIdJMX>();
+
+  // TODO: Implement
+  // private OverloadMonitor overloadMonitor;
+
+  private HashMap<String, DiameterStatistic> statistics;
+
+  public LocalPeerImpl() {
+  }
+
+  public String getUri() {
+    return uri;
+  }
+
+  public Collection<String> getIpAddresses() {
+    return ipAddresses;
+  }
+
+  public String getRealm() {
+    return realm;
+  }
+
+  public Long getVendorId() {
+    return vendorId;
+  }
+
+  public String getProductName() {
+    return productName;
+  }
+
+  public Long getFirmwareRev() {
+    return firmwareRev;
+  }
+
+  public Collection<ApplicationIdJMX> getDefaultApplications() {
+    return defaultApplications;
+  }
+
+  public void setUri(String uri) {
+    this.uri = uri;
+  }
+
+  public void addIpAddress(String ipAddress) {
+    this.ipAddresses.add(ipAddress);
+  }
+
+  public void removeIpAddress(String ipAddress) {
+    this.ipAddresses.remove(ipAddress);
+  }
+
+  public void setRealm(String realm) {
+    this.realm = realm;
+  }
+
+  public void setVendorId(Long vendorId) {
+    this.vendorId = vendorId;
+  }
+
+  public void setProductName(String productName) {
+    this.productName = productName;
+  }
+
+  public void setFirmwareRev(Long firmwareRev) {
+    this.firmwareRev = firmwareRev;
+  }
+
+  public void addDefaultApplication(ApplicationIdJMX defaultApplication) {
+    this.defaultApplications.add(defaultApplication);
+  }
+
+ public void removeDefaultApplication(ApplicationIdJMX defaultApplication) {
+    this.defaultApplications.remove(defaultApplication);
+  }
+
+  @Override
+  public String toString() {
+ String dotsString = " .............................................................";
+    Class<?> cls;
+    StringBuffer toStringBuffer = new StringBuffer();
+    try {
+      cls = Class.forName(this.getClass().getName());
+      Field fieldlist[] = cls.getDeclaredFields();
+      for (int i = 0; i < fieldlist.length; i++) {
+        Field fld = fieldlist[i];
+        if(!Modifier.isStatic(fld.getModifiers())) {
+          toStringBuffer.append(fld.getName());
+          int dots = 60 - fld.getName().length();
+          toStringBuffer.append(dotsString, 0, dots);
+          toStringBuffer.append(" ").append(fld.get(this)).append("\r\n");
+        }
+        //System.out.println("decl class = " + fld.getDeclaringClass());
+        //System.out.println("type = " + fld.getType());
+        //int mod = fld.getModifiers();
+        //System.out.println("modifiers = " + Modifier.toString(mod));
+        //System.out.println("-----");
+      }
+    }
+    catch (Exception e) {
+      // ignore
+    }
+
+    return toStringBuffer.toString();
+  }
+
+  public HashMap<String, DiameterStatistic> getStatistics() {
+    return statistics;
+  }
+
+ public void setStatistics(HashMap<String, DiameterStatistic> statistics) {
+    this.statistics = statistics;
+  }
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/Network.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,27 @@
+package org.mobicents.diameter.stack.management;
+
+import java.io.Serializable;
+import java.util.Map;
+
+public interface Network extends Serializable {
+
+  public Map<String, NetworkPeer> getPeers();
+
+  public NetworkPeer getPeer(String name);
+
+  public void addPeer(NetworkPeer peer);
+
+  public void addPeerRuntime(NetworkPeer peer, String realm);
+
+  public void removePeer(String name);
+
+  public Map<String, Realm> getRealms();
+
+  public Realm getRealm(String name);
+
+  public void addRealm(Realm realm);
+
+  public void addRealmRuntime(Realm realm);
+
+  public void removeRealm(String name);
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/NetworkImpl.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,104 @@
+package org.mobicents.diameter.stack.management;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jdiameter.api.InternalException;
+import org.jdiameter.api.LocalAction;
+import org.jdiameter.api.PeerTable;
+import org.jdiameter.server.impl.MutablePeerTableImpl;
+
+public class NetworkImpl implements Network {
+
+  private static final long serialVersionUID = 1L;
+
+  private final Log logger = LogFactory.getLog(NetworkImpl.class);
+
+ private Map<String, NetworkPeer> peers = new HashMap<String, NetworkPeer>();
+  private Map<String, Realm> realms = new HashMap<String, Realm>();
+
+  public NetworkImpl() {
+  }
+
+  public Map<String, NetworkPeer> getPeers() {
+    return peers;
+  }
+
+  public NetworkPeer getPeer(String name) {
+    return peers.get(name);
+  }
+
+  public void addPeer(NetworkPeer peer) {
+    this.peers.put(peer.getName(), peer);
+  }
+
+  public void addPeerRuntime(NetworkPeer peer, String realm) {
+    try {
+ org.jdiameter.server.impl.NetworkImpl n = (org.jdiameter.server.impl.NetworkImpl) DiameterConfiguration.stack.unwrap(org.jdiameter.api.Network.class);
+      n.addPeer(peer.getName(), realm, peer.getAttemptConnect());
+    }
+    catch (InternalException e) {
+      logger.error("Failed to unwrap class.", e);
+    }
+  }
+
+  public void removePeer(String name) {
+    try {
+ MutablePeerTableImpl mpt = (MutablePeerTableImpl) DiameterConfiguration.stack.unwrap(PeerTable.class);
+      mpt.removePeer(name);
+    }
+    catch (InternalException e) {
+      logger.error("Failed to unwrap class.", e);
+    }
+  }
+
+  public Map<String, Realm> getRealms() {
+    return realms;
+  }
+
+  public Realm getRealm(String name) {
+    return realms.get(name);
+  }
+
+  public void addRealm(Realm realm) {
+    realms.put(realm.getName(), realm);
+  }
+
+  public void addRealmRuntime(Realm realm) {
+    try {
+ org.jdiameter.server.impl.NetworkImpl n = (org.jdiameter.server.impl.NetworkImpl) DiameterConfiguration.stack.unwrap(org.jdiameter.api.Network.class);
+      for(ApplicationIdJMX appId : realm.getApplicationIds()) {
+ org.jdiameter.api.Realm r = n.addRealm(realm.getName(), appId.asApplicationId(), LocalAction.valueOf(realm.getLocalAction()), realm.getDynamic(), realm.getExpTime());
+      }
+    }
+    catch (InternalException e) {
+      logger.error("Failed to unwrap class.", e);
+    }
+  }
+
+  public void removeRealm(String name) {
+    try {
+ org.jdiameter.server.impl.NetworkImpl n = (org.jdiameter.server.impl.NetworkImpl) DiameterConfiguration.stack.unwrap(org.jdiameter.api.Network.class);
+      org.jdiameter.api.Realm r = n.remRealm(name);
+    }
+    catch (InternalException e) {
+      logger.error("Failed to unwrap class.", e);
+    }
+  }
+
+  @Override
+  public String toString() {
+    String toString = "  ## PEERS ##\r\n";
+    for(NetworkPeer peer : peers.values()) {
+      toString += peer.toString();
+    }
+    toString += "  ## REALMS ##\r\n";
+      for(Realm realm : realms.values()) {
+        toString += realm.toString();
+    }
+
+    return toString;
+  }
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/NetworkPeer.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,37 @@
+package org.mobicents.diameter.stack.management;
+
+import java.io.Serializable;
+import java.util.HashMap;
+
+public interface NetworkPeer extends Serializable {
+
+  public String getName();
+
+  public void setName(String name);
+
+  public Boolean getAttemptConnect();
+
+  public void setAttemptConnect(Boolean attemptConnect);
+
+  public Integer getRating();
+
+  public void setRating(Integer rating);
+
+  public String getIp();
+
+  public void setIp(String ip);
+
+  public Integer getPortRangeLow();
+
+  public Integer getPortRangeHigh();
+
+  public void setPortRange(Integer portRangeLow, Integer portRangeHigh);
+
+  public String getSecurityRef();
+
+  public void setSecurityRef(String securityRef);
+
+  public HashMap<String, DiameterStatistic> getStatistics();
+
+  public void setStatistics(HashMap<String, DiameterStatistic> statistics);
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/NetworkPeerImpl.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,173 @@
+package org.mobicents.diameter.stack.management;
+
+import static org.jdiameter.client.impl.helpers.Parameters.PeerIp;
+import static org.jdiameter.client.impl.helpers.Parameters.PeerLocalPortRange;
+import static org.jdiameter.client.impl.helpers.Parameters.PeerName;
+import static org.jdiameter.client.impl.helpers.Parameters.PeerRating;
+import static org.jdiameter.client.impl.helpers.Parameters.PeerTable;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+
+import org.jdiameter.api.Configuration;
+import org.jdiameter.client.impl.helpers.EmptyConfiguration;
+import org.jdiameter.server.impl.helpers.XMLConfiguration;
+
+public class NetworkPeerImpl implements NetworkPeer {
+
+  private static final long serialVersionUID = 1L;
+
+  // Mandatory
+  private String name;
+  private Boolean attemptConnect;
+  private Integer rating;
+
+  // Optional
+  private String ip;
+  private Integer portRangeLow;
+  private Integer portRangeHigh;
+  private String securityRef;
+
+  // Helpers
+  private final String DEFAULT_STRING = "default_string";
+
+  private HashMap<String, DiameterStatistic> statistics;
+
+ public NetworkPeerImpl(String name, Boolean attemptConnect, Integer rating) {
+    this.name = name;
+    this.attemptConnect = attemptConnect;
+    this.rating = rating;
+  }
+
+ public NetworkPeerImpl(String name, Boolean attemptConnect, Integer rating, String ip, Integer portRangeLow, Integer portRangeHigh, String securityRef) {
+    this(name, attemptConnect, rating);
+    this.ip = ip;
+    this.portRangeLow = portRangeLow;
+    this.portRangeHigh = portRangeHigh;
+    this.securityRef = securityRef;
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    if(!this.name.equals(name)) {
+      EmptyConfiguration config = getPeerConfiguration(name);
+      if (config != null) {
+        config.add(PeerName, name);
+        this.name = name;
+      }
+    }
+  }
+
+  public Boolean getAttemptConnect() {
+    return attemptConnect;
+  }
+
+  public void setAttemptConnect(Boolean attemptConnect) {
+    this.attemptConnect = attemptConnect;
+  }
+
+  public Integer getRating() {
+    return rating;
+  }
+
+  public void setRating(Integer rating) {
+    EmptyConfiguration config = getPeerConfiguration(name);
+    if (config != null) {
+      config.add(PeerRating, rating);
+      this.rating = rating;
+    }
+  }
+
+  public String getIp() {
+    return ip;
+  }
+
+  public void setIp(String ip) {
+    // TODO: Verify IP Address
+    EmptyConfiguration config = getPeerConfiguration(name);
+    if (config != null) {
+      config.add(PeerIp, ip);
+      this.ip = ip;
+    }
+  }
+
+  public Integer getPortRangeLow() {
+    return portRangeLow;
+  }
+
+  public Integer getPortRangeHigh() {
+    return portRangeHigh;
+  }
+
+  public void setPortRange(Integer portRangeLow, Integer portRangeHigh) {
+    EmptyConfiguration config = getPeerConfiguration(name);
+    if (config != null) {
+      config.add(PeerLocalPortRange, portRangeLow + "-" + portRangeHigh);
+      this.portRangeLow = portRangeLow;
+      this.portRangeHigh = portRangeHigh;
+    }
+  }
+
+  public String getSecurityRef() {
+    return securityRef;
+  }
+
+  public void setSecurityRef(String securityRef) {
+    this.securityRef = securityRef;
+  }
+
+  @Override
+  public String toString() {
+ String dotsString = " .............................................................";
+    Class<?> cls;
+    StringBuffer toStringBuffer = new StringBuffer();
+    try {
+      cls = Class.forName(this.getClass().getName());
+      Field fieldlist[] = cls.getDeclaredFields();
+      for (int i = 0; i < fieldlist.length; i++) {
+        Field fld = fieldlist[i];
+        if(!Modifier.isStatic(fld.getModifiers())) {
+          toStringBuffer.append(fld.getName());
+          int dots = 60 - fld.getName().length();
+          toStringBuffer.append(dotsString, 0, dots);
+          toStringBuffer.append(" ").append(fld.get(this)).append("\r\n");
+        }
+        //System.out.println("decl class = " + fld.getDeclaringClass());
+        //System.out.println("type = " + fld.getType());
+        //int mod = fld.getModifiers();
+        //System.out.println("modifiers = " + Modifier.toString(mod));
+        //System.out.println("-----");
+      }
+    }
+    catch (Exception e) {
+      // ignore
+    }
+
+    return toStringBuffer.toString();
+  }
+
+  private EmptyConfiguration getPeerConfiguration(String name) {
+ XMLConfiguration configuration = (XMLConfiguration) DiameterConfiguration.stack.getMetaData().getConfiguration(); + Configuration[] peerTable = configuration.getChildren(PeerTable.ordinal());
+
+    for(Configuration curPeer : peerTable) {
+ if(curPeer.getStringValue(PeerName.ordinal(), DEFAULT_STRING).equals(name)) {
+        return (EmptyConfiguration) curPeer;
+      }
+    }
+
+    return null;
+  }
+
+  public HashMap<String, DiameterStatistic> getStatistics() {
+    return statistics;
+  }
+
+ public void setStatistics(HashMap<String, DiameterStatistic> statistics) {
+    this.statistics = statistics;
+  }
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/Parameters.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,77 @@
+package org.mobicents.diameter.stack.management;
+
+import java.io.Serializable;
+import java.util.HashMap;
+
+public interface Parameters extends Serializable {
+
+  public boolean getAcceptUndefinedPeer();
+
+  public void setAcceptUndefinedPeer(boolean acceptUndefinedPeer);
+
+  public boolean getDuplicateProtection();
+
+  public void setDuplicateProtection(boolean duplicateProtection);
+
+  public long getDuplicateTimer();
+
+  public void setDuplicateTimer(long duplicateTimer);
+
+  public boolean getUseUriAsFqdn();
+
+  public void setUseUriAsFqdn(boolean useUriAsFqdn);
+
+  public int getQueueSize();
+
+  public void setQueueSize(int queueSize);
+
+  public long getMessageTimeout();
+
+  public void setMessageTimeout(long messageTimeout);
+
+  public long getStopTimeout();
+
+  public void setStopTimeout(long stopTimeout);
+
+  public long getCeaTimeout();
+
+  public void setCeaTimeout(long ceaTimeout);
+
+  public long getIacTimeout();
+
+  public void setIacTimeout(long iacTimeout);
+
+  public long getDwaTimeout();
+
+  public void setDwaTimeout(long dwaTimeout);
+
+  public long getDpaTimeout();
+
+  public void setDpaTimeout(long dpaTimeout);
+
+  public long getRecTimeout();
+
+  public void setRecTimeout(long recTimeout);
+
+  /* Gone since merge with build-350
+  public String getThreadPool_Priority();
+
+  public void setThreadPool_Priority(String threadPoolPriority);
+
+  public Integer getThreadPool_Size();
+
+  public void setThreadPool_Size(Integer threadPoolSize);
+   */
+
+  public HashMap<String, ConcurrentEntity> getConcurrentEntities();
+
+  public void setConcurrentEntity(ConcurrentEntity concurrentEntity);
+
+  public Long getStatisticLogger_Delay();
+
+  public void setStatisticLogger_Delay(Long statisticLoggerDelay);
+
+  public Long getStatisticLogger_Pause();
+
+  public void setStatisticLogger_Pause(Long statisticLoggerPause);
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/ParametersImpl.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,261 @@
+package org.mobicents.diameter.stack.management;
+
+import static org.jdiameter.client.impl.helpers.Parameters.CeaTimeOut;
+import static org.jdiameter.client.impl.helpers.Parameters.Concurrent;
+import static org.jdiameter.client.impl.helpers.Parameters.DpaTimeOut;
+import static org.jdiameter.client.impl.helpers.Parameters.DwaTimeOut;
+import static org.jdiameter.client.impl.helpers.Parameters.IacTimeOut;
+import static org.jdiameter.client.impl.helpers.Parameters.MessageTimeOut;
+import static org.jdiameter.client.impl.helpers.Parameters.QueueSize;
+import static org.jdiameter.client.impl.helpers.Parameters.RecTimeOut;
+import static org.jdiameter.client.impl.helpers.Parameters.StatisticLoggerDelay; +import static org.jdiameter.client.impl.helpers.Parameters.StatisticLoggerPause;
+import static org.jdiameter.client.impl.helpers.Parameters.StopTimeOut;
+import static org.jdiameter.client.impl.helpers.Parameters.UseUriAsFqdn;
+import static org.jdiameter.server.impl.helpers.Parameters.AcceptUndefinedPeer; +import static org.jdiameter.server.impl.helpers.Parameters.DuplicateProtection;
+import static org.jdiameter.server.impl.helpers.Parameters.DuplicateTimer;
+import static org.jdiameter.client.impl.helpers.Parameters.ConcurrentEntityName; +import static org.jdiameter.client.impl.helpers.Parameters.ConcurrentEntityDescription; +import static org.jdiameter.client.impl.helpers.Parameters.ConcurrentEntityPoolSize;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.HashMap;
+
+import org.jdiameter.api.Configuration;
+import org.jdiameter.api.MutableConfiguration;
+import org.mobicents.diameter.stack.management.ConcurrentEntity.ConcurrentEntityNames;
+
+public class ParametersImpl implements Parameters {
+
+  private static final long serialVersionUID = 1L;
+
+  // The Singleton
+  // public final static Parameters INSTANCE = new ParametersImpl();
+
+  private boolean acceptUndefinedPeer;
+
+  private boolean duplicateProtection;
+  private long duplicateTimer;
+
+  private boolean useUriAsFqdn;
+
+  private int queueSize;
+
+  private long messageTimeout;
+
+  private long stopTimeout;
+  private long ceaTimeout;
+  private long iacTimeout;
+  private long dwaTimeout;
+  private long dpaTimeout;
+  private long recTimeout;
+
+  // Gone since merge with build-350
+  // private String threadPool_Priority;
+  // private Integer threadPool_Size;
+
+  private Long statisticLogger_Pause;
+  private Long statisticLogger_Delay;
+
+ private HashMap<String, ConcurrentEntity> concurrentEntities = new HashMap<String, ConcurrentEntity>();
+
+  public ParametersImpl(MutableConfiguration config) {
+    // Generic Stack Configuration
+ this.acceptUndefinedPeer = config.getBooleanValue(AcceptUndefinedPeer.ordinal(), true); + this.duplicateProtection = config.getBooleanValue(DuplicateProtection.ordinal(), true); + this.duplicateTimer = config.getLongValue(DuplicateTimer.ordinal(), 4 * 60 * 1000L); + this.useUriAsFqdn = config.getBooleanValue(UseUriAsFqdn.ordinal(), false);
+    this.queueSize = config.getIntValue(QueueSize.ordinal(), 10000);
+
+    // Timeouts
+ this.messageTimeout = config.getLongValue(MessageTimeOut.ordinal(), 60000L);
+    this.stopTimeout = config.getLongValue(StopTimeOut.ordinal(), 10000L);
+    this.ceaTimeout = config.getLongValue(CeaTimeOut.ordinal(), 10000L);
+    this.iacTimeout = config.getLongValue(IacTimeOut.ordinal(), 20000L);
+    this.dwaTimeout = config.getLongValue(DwaTimeOut.ordinal(), 10000L);
+    this.dpaTimeout = config.getLongValue(DpaTimeOut.ordinal(), 5000L);
+    this.recTimeout = config.getLongValue(RecTimeOut.ordinal(), 10000L);
+
+    // Concurrent Entities
+ for(Configuration concurrentEntity : config.getChildren(Concurrent.ordinal())) { + String name = concurrentEntity.getStringValue(ConcurrentEntityName.ordinal(), null); + String desc = concurrentEntity.getStringValue(ConcurrentEntityDescription.ordinal(), ""); + int size = concurrentEntity.getIntValue(ConcurrentEntityPoolSize.ordinal(), 1); + this.concurrentEntities.put(name, ConcurrentEntityImpl.createEntity(ConcurrentEntityNames.valueOf(name), desc, size));
+    }
+
+    // Statistic Logger
+ this.statisticLogger_Delay = config.getLongValue(StatisticLoggerDelay.ordinal(), 5000L); + this.statisticLogger_Pause = config.getLongValue(StatisticLoggerPause.ordinal(), 5000L);
+  }
+
+  public boolean getAcceptUndefinedPeer() {
+    return acceptUndefinedPeer;
+  }
+
+  public void setAcceptUndefinedPeer(boolean acceptUndefinedPeer) {
+ DiameterConfiguration.getMutableConfiguration().setBooleanValue(AcceptUndefinedPeer.ordinal(), acceptUndefinedPeer);
+  }
+
+  public boolean getDuplicateProtection() {
+    return duplicateProtection;
+  }
+
+  public void setDuplicateProtection(boolean duplicateProtection) {
+    throw new UnsupportedOperationException();
+  }
+
+  public long getDuplicateTimer() {
+    return duplicateTimer;
+  }
+
+  public void setDuplicateTimer(long duplicateTimer) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(DuplicateTimer.ordinal(), duplicateTimer);
+  }
+
+  public boolean getUseUriAsFqdn() {
+    return useUriAsFqdn;
+  }
+
+  public void setUseUriAsFqdn(boolean useUriAsFqdn) {
+ DiameterConfiguration.getMutableConfiguration().setBooleanValue(UseUriAsFqdn.ordinal(), useUriAsFqdn);
+  }
+
+  public int getQueueSize() {
+    return queueSize;
+  }
+
+  public void setQueueSize(int queueSize) {
+    throw new UnsupportedOperationException();
+  }
+
+  public long getMessageTimeout() {
+    return messageTimeout;
+  }
+
+  public void setMessageTimeout(long messageTimeout) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(MessageTimeOut.ordinal(), messageTimeout);
+  }
+
+  public long getStopTimeout() {
+    return stopTimeout;
+  }
+
+  public void setStopTimeout(long stopTimeout) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(StopTimeOut.ordinal(), stopTimeout);
+  }
+
+  public long getCeaTimeout() {
+    return ceaTimeout;
+  }
+
+  public void setCeaTimeout(long ceaTimeout) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(CeaTimeOut.ordinal(), ceaTimeout);
+  }
+
+  public long getIacTimeout() {
+    return iacTimeout;
+  }
+
+  public void setIacTimeout(long iacTimeout) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(IacTimeOut.ordinal(), iacTimeout);
+  }
+
+  public long getDwaTimeout() {
+    return dwaTimeout;
+  }
+
+  public void setDwaTimeout(long dwaTimeout) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(DwaTimeOut.ordinal(), dwaTimeout);
+  }
+
+  public long getDpaTimeout() {
+    return dpaTimeout;
+  }
+
+  public void setDpaTimeout(long dpaTimeout) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(DpaTimeOut.ordinal(), dpaTimeout);
+  }
+
+  public long getRecTimeout() {
+    return recTimeout;
+  }
+
+  public void setRecTimeout(long recTimeout) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(RecTimeOut.ordinal(), recTimeout);
+  }
+
+  /* Gone since merge with build-350
+  public String getThreadPool_Priority() {
+    return threadPool_Priority;
+  }
+
+  public void setThreadPool_Priority(String threadPoolPriority) {
+    threadPool_Priority = threadPoolPriority;
+  }
+
+  public Integer getThreadPool_Size() {
+    return threadPool_Size;
+  }
+
+  public void setThreadPool_Size(Integer threadPoolSize) {
+    threadPool_Size = threadPoolSize;
+  }
+  */
+
+  public HashMap<String, ConcurrentEntity> getConcurrentEntities() {
+    return concurrentEntities;
+  }
+
+  public void setConcurrentEntity(ConcurrentEntity concurrentEntity) {
+ this.concurrentEntities.put(concurrentEntity.getName(), concurrentEntity);
+  }
+
+  public Long getStatisticLogger_Delay() {
+    return statisticLogger_Delay;
+  }
+
+  public void setStatisticLogger_Delay(Long statisticLoggerDelay) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(StatisticLoggerDelay.ordinal(), statisticLoggerDelay);
+  }
+
+  public Long getStatisticLogger_Pause() {
+    return statisticLogger_Pause;
+  }
+
+  public void setStatisticLogger_Pause(Long statisticLoggerPause) {
+ DiameterConfiguration.getMutableConfiguration().setLongValue(StatisticLoggerPause.ordinal(), statisticLoggerPause);
+  }
+
+  @Override
+  public String toString() {
+ String dotsString = " .............................................................";
+    Class<?> cls;
+    StringBuffer toStringBuffer = new StringBuffer();
+    try {
+      cls = Class.forName(this.getClass().getName());
+      Field fieldlist[] = cls.getDeclaredFields();
+      for (int i = 0; i < fieldlist.length; i++) {
+        Field fld = fieldlist[i];
+        if(!Modifier.isStatic(fld.getModifiers())) {
+          toStringBuffer.append(fld.getName());
+          int dots = 60 - fld.getName().length();
+          toStringBuffer.append(dotsString, 0, dots);
+          toStringBuffer.append(" ").append(fld.get(this)).append("\r\n");
+        }
+        //System.out.println("decl class = " + fld.getDeclaringClass());
+        //System.out.println("type = " + fld.getType());
+        //int mod = fld.getModifiers();
+        //System.out.println("modifiers = " + Modifier.toString(mod));
+        //System.out.println("-----");
+      }
+    }
+    catch (Exception e) {
+      // ignore
+    }
+
+    return toStringBuffer.toString();
+  }
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/Realm.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,38 @@
+package org.mobicents.diameter.stack.management;
+
+import java.io.Serializable;
+import java.util.Collection;
+
+public interface Realm extends Serializable {
+
+  public Collection<ApplicationIdJMX> getApplicationIds();
+
+  public void addApplicationId(ApplicationIdJMX applicationId);
+
+  public void removeApplicationId(ApplicationIdJMX applicationId);
+
+  public String getName();
+
+  public void setName(String name);
+
+  public Collection<String> getPeers();
+
+  public void setPeers(Collection<String> peers);
+
+  public void addPeer(String peer);
+
+  public void removePeer(String peer);
+
+  public String getLocalAction();
+
+  public void setLocalAction(String localAction);
+
+  public Boolean getDynamic();
+
+  public void setDynamic(Boolean dynamic);
+
+  public Long getExpTime();
+
+  public void setExpTime(Long expTime);
+
+}
=======================================
--- /dev/null
+++ /trunk/servers/diameter/core/mux/jar/src/main/java/org/mobicents/diameter/stack/management/RealmImpl.java Tue Feb 16 19:41:03 2010
@@ -0,0 +1,144 @@
+package org.mobicents.diameter.stack.management;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Collection;
+
+import org.jdiameter.api.InternalException;
+import org.jdiameter.api.LocalAction;
+
+public class RealmImpl implements Realm {
+
+  private static final long serialVersionUID = 1L;
+
+  private Collection<ApplicationIdJMX> applicationIds;
+
+  private String name;
+  private Collection<String> peers;
+  private String localAction;
+  private Boolean dynamic;
+  private Long expTime;
+
+  private String originalName;
+
+ public RealmImpl(Collection<ApplicationIdJMX> applicationIds, String name, Collection<String> peers, String localAction, Boolean dynamic, Long expTime) {
+    this.applicationIds = applicationIds;
+    this.name = name;
+    this.peers = peers;
+    this.localAction = localAction;
+    this.dynamic = dynamic;
+    this.expTime = expTime;
+  }
+
+  public Collection<ApplicationIdJMX> getApplicationIds() {
+    return applicationIds;
+  }
+
+  public void addApplicationId(ApplicationIdJMX applicationId) {
+    this.applicationIds.add(applicationId);
+  }
+
+  public void removeApplicationId(ApplicationIdJMX applicationId) {
+    this.applicationIds.remove(applicationId);
+  }
+
+  public String getName() {
+    return name;
+  }
+
+  public void setName(String name) {
+    if(!this.name.equals(name)) {
+      this.originalName = this.name;
+      this.name = name;
+    }
+  }
+
+  public Collection<String> getPeers() {
+    return peers;
+  }
+
+  public void setPeers(Collection<String> peers) {
+    this.peers = peers;
+  }
+
+  public void addPeer(String peer) {
+    this.peers.add(peer);
+  }
+
+  public void removePeer(String peer) {
+    this.peers.remove(peer);
+  }
+
+  public String getLocalAction() {
+    return localAction;
+  }
+
+  public void setLocalAction(String localAction) {
+    this.localAction = localAction;
+  }
+
+  public Boolean getDynamic() {
+    return dynamic;
+  }
+
+  public void setDynamic(Boolean dynamic) {
+    this.dynamic = dynamic;
+  }
+
+  public Long getExpTime() {
+    return expTime;
+  }
+
+  public void setExpTime(Long expTime) {
+    this.expTime = expTime;
+  }
+
+  @Override
+  public String toString() {
+ String dotsString = " .............................................................";
+    Class<?> cls;
+    StringBuffer toStringBuffer = new StringBuffer();
+    try {
+      cls = Class.forName(this.getClass().getName());
+      Field fieldlist[] = cls.getDeclaredFields();
+      for (int i = 0; i < fieldlist.length; i++) {
+        Field fld = fieldlist[i];
+        if(!Modifier.isStatic(fld.getModifiers())) {
+          toStringBuffer.append(fld.getName());
+          int dots = 60 - fld.getName().length();
+          toStringBuffer.append(dotsString, 0, dots);
+          toStringBuffer.append(" ").append(fld.get(this)).append("\r\n");
+        }
+        //System.out.println("decl class = " + fld.getDeclaringClass());
+        //System.out.println("type = " + fld.getType());
+        //int mod = fld.getModifiers();
+        //System.out.println("modifiers = " + Modifier.toString(mod));
+        //System.out.println("-----");
+      }
+    }
+    catch (Exception e) {
+      // ignore
+    }
+
+    return toStringBuffer.toString();
+  }
+
+  public void updateRealm() {
+    try {
+ org.jdiameter.server.impl.NetworkImpl n = (org.jdiameter.server.impl.NetworkImpl) DiameterConfiguration.stack.unwrap(org.jdiameter.api.Network.class);
+      for(ApplicationIdJMX appId : this.applicationIds) {
+ org.jdiameter.api.Realm r = n.addRealm(this.name, appId.asApplicationId(), LocalAction.valueOf(this.localAction), this.dynamic, this.expTime);
+        for(String host : this.peers) {
+          r.addPeerName(host);
+        }
+      }
+      if(this.originalName != null) {
+        n.remRealm(this.originalName);
+        this.originalName = null;
+      }
+    }
+    catch (InternalException e) {
+      // ignore
+    }
+  }
+}

Reply via email to