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
+ }
+ }
+}