/*
* TeleStax, Open Source Cloud Communications
* Copyright 2012, Telestax Inc and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.mobicents.protocols.ss7.m3ua.impl.oam;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javolution.util.FastMap;
import org.apache.log4j.Logger;
import org.mobicents.protocols.ss7.m3ua.As;
import org.mobicents.protocols.ss7.m3ua.AspFactory;
import org.mobicents.protocols.ss7.m3ua.ExchangeType;
import org.mobicents.protocols.ss7.m3ua.Functionality;
import org.mobicents.protocols.ss7.m3ua.IPSPType;
import org.mobicents.protocols.ss7.m3ua.RouteAs;
import org.mobicents.protocols.ss7.m3ua.impl.AsImpl;
import org.mobicents.protocols.ss7.m3ua.impl.AspFactoryImpl;
import org.mobicents.protocols.ss7.m3ua.impl.M3UAManagementImpl;
import org.mobicents.protocols.ss7.m3ua.impl.parameter.ParameterFactoryImpl;
import org.mobicents.protocols.ss7.m3ua.parameter.NetworkAppearance;
import org.mobicents.protocols.ss7.m3ua.parameter.ParameterFactory;
import org.mobicents.protocols.ss7.m3ua.parameter.RoutingContext;
import org.mobicents.protocols.ss7.m3ua.parameter.TrafficModeType;
import org.mobicents.protocols.ss7.mtp.RoutingLabelFormat;
import org.mobicents.ss7.management.console.ShellExecutor;
/**
*
* @author amit bhayani
*
*/
public class M3UAShellExecutor implements ShellExecutor {
private static final Logger logger = Logger.getLogger(M3UAShellExecutor.class);
private FastMap<String, M3UAManagementImpl> m3uaManagements = new FastMap<String, M3UAManagementImpl>();
private M3UAManagementImpl m3uaManagement;
protected ParameterFactory parameterFactory = new ParameterFactoryImpl();
public M3UAShellExecutor() {
}
public Map<String, M3UAManagementImpl> getM3uaManagements() {
return this.m3uaManagements;
}
public void setM3uaManagements(Map<String, M3UAManagementImpl> m3uaManagementsTemp) {
if (m3uaManagementsTemp != null) {
synchronized (this) {
FastMap<String, M3UAManagementImpl> newM3uaManagements = new FastMap<String, M3UAManagementImpl>();
newM3uaManagements.putAll(m3uaManagementsTemp);
this.m3uaManagements = newM3uaManagements;
}
}
}
private void setDefaultValue() {
if (this.m3uaManagement == null) {
Map.Entry<String, M3UAManagementImpl> m3uaManagementsTmp = this.m3uaManagements.entrySet().iterator().next();
this.m3uaManagement = m3uaManagementsTmp.getValue();
}
}
/**
* m3ua as create <as-name> <AS | SGW | IPSP> mode <SE | DE> ipspType < client | server > rc <routing-context> traffic-mode
* <traffic mode> min-asp <minimum asp active for TrafficModeType.Loadshare> network-appearance <network appearance>
* stackname <stack-name>
*
* @param args
* @return
*/
private String createAs(String[] args) throws Exception {
if (args.length < 5 || args.length > 19) {
return M3UAOAMMessages.INVALID_COMMAND;
}
// Create new Rem AS
String asName = args[3];
if (asName == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
Functionality functionlaity = Functionality.getFunctionality(args[4]);
ExchangeType exchangeType = null;
IPSPType ipspType = null;
RoutingContext rc = null;
TrafficModeType trafficModeType = null;
NetworkAppearance na = null;
if (functionlaity == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
int count = 5;
int minAspActiveForLoadbalance = 1;
while (count < args.length) {
String key = args[count++];
if (key == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (key.equals("mode")) {
exchangeType = ExchangeType.getExchangeType(args[count++]);
if (exchangeType == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
} else if (key.equals("ipspType")) {
ipspType = IPSPType.getIPSPType(args[count++]);
} else if (key.equals("rc")) {
long rcLong = Long.parseLong(args[count++]);
rc = parameterFactory.createRoutingContext(new long[] { rcLong });
} else if (key.equals("traffic-mode")) {
trafficModeType = getTrafficModeType(args[count++]);
} else if (key.equals("network-appearance")) {
na = parameterFactory.createNetworkAppearance(Long.parseLong(args[count++]));
} else if (key.equals("min-asp")) {
minAspActiveForLoadbalance = Integer.parseInt(args[count++]);
} else if (key.equals("stackname")) {
String m3uaStackName = args[count++];
M3UAManagementImpl m3uaManagementImpl = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementImpl == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementImpl;
} else {
return M3UAOAMMessages.INVALID_COMMAND;
}
}
this.setDefaultValue();
As asImpl = this.m3uaManagement.createAs(asName, functionlaity, exchangeType, ipspType, rc, trafficModeType,
minAspActiveForLoadbalance, na);
return String.format(M3UAOAMMessages.CREATE_AS_SUCESSFULL, asImpl.getName(), this.m3uaManagement.getName());
}
/**
* m3ua as destroy <as-name> stackname <stack-name>
*
* @param args
* @return
* @throws Exception
*/
private String destroyAs(String[] args) throws Exception {
if (args.length < 4) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String asName = args[3];
if (asName == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String m3uaStackName = null;
if (args.length > 4) {
if (!args[4].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
m3uaStackName = args[5];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
AsImpl asImpl = this.m3uaManagement.destroyAs(asName);
return String.format(M3UAOAMMessages.DESTROY_AS_SUCESSFULL, asName, this.m3uaManagement.getName());
}
/**
* m3ua as add <as-name> <asp-name> stackname <stack-name>
*
* @param args
* @return
* @throws Exception
*/
private String addAspToAs(String[] args) throws Exception {
if (args.length < 5) {
return M3UAOAMMessages.INVALID_COMMAND;
}
// Add Rem ASP to Rem AS
if (args[3] == null || args[4] == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (args.length > 5) {
if (!args[5].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String m3uaStackName = args[6];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
this.m3uaManagement.assignAspToAs(args[3], args[4]);
return String.format(M3UAOAMMessages.ADD_ASP_TO_AS_SUCESSFULL, args[4], args[3], this.m3uaManagement.getName());
}
/**
* m3ua as remove <as-name> <asp-name> stackname <stack-name>
*
* @param args
* @return
* @throws Exception
*/
private String removeAspFromAs(String[] args) throws Exception {
if (args.length < 5) {
return M3UAOAMMessages.INVALID_COMMAND;
}
// Add Rem ASP to Rem AS
if (args[3] == null || args[4] == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (args.length > 5) {
if (!args[5].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String m3uaStackName = args[6];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
this.m3uaManagement.unassignAspFromAs(args[3], args[4]);
return String.format(M3UAOAMMessages.REMOVE_ASP_FROM_AS_SUCESSFULL, args[4], args[3], this.m3uaManagement.getName());
}
private TrafficModeType getTrafficModeType(String mode) {
int iMode = -1;
if (mode == null) {
return null;
} else if (mode.equals("loadshare")) {
iMode = TrafficModeType.Loadshare;
} else if (mode.equals("override")) {
iMode = TrafficModeType.Override;
} else if (mode.equals("broadcast")) {
iMode = TrafficModeType.Broadcast;
} else {
return null;
}
return this.parameterFactory.createTrafficModeType(iMode);
}
private String showAspFactories(String[] args) {
// m3ua asp show stackname <stack-name>
String m3uaStackName = null;
if (args.length > 3) {
if (!args[3].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
m3uaStackName = args[4];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
List<AspFactory> aspfactories = this.m3uaManagement.getAspfactories();
if (aspfactories.size() == 0) {
return String.format(M3UAOAMMessages.NO_ASP_DEFINED_YET, this.m3uaManagement.getName());
}
StringBuffer sb = new StringBuffer();
for (AspFactory aspFactory : aspfactories) {
AspFactoryImpl aspFactoryImpl = (AspFactoryImpl) aspFactory;
sb.append(M3UAOAMMessages.NEW_LINE);
aspFactoryImpl.show(sb);
sb.append(M3UAOAMMessages.NEW_LINE);
}
return sb.toString();
}
private String showRoutes(String[] args) {
// m3ua route show stackname <stack-name>
if (args.length > 3) {
if (!args[3].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String m3uaStackName = args[4];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
Map<String, RouteAs> route = this.m3uaManagement.getRoute();
if (route.size() == 0) {
return String.format(M3UAOAMMessages.NO_ROUTE_DEFINED_YET, this.m3uaManagement.getName());
}
StringBuffer sb = new StringBuffer();
Set<String> keys = route.keySet();
for (String key : keys) {
RouteAs routeAs = route.get(key);
As[] asList = routeAs.getAsArray();
sb.append(M3UAOAMMessages.NEW_LINE);
sb.append(key);
sb.append(M3UAOAMMessages.TAB);
sb.append(routeAs.getTrafficModeType());
sb.append(M3UAOAMMessages.TAB);
for (int i = 0; i < asList.length; i++) {
As asImpl = asList[i];
if (asImpl != null) {
sb.append(asImpl.getName());
sb.append(M3UAOAMMessages.COMMA);
}
}
sb.append(M3UAOAMMessages.NEW_LINE);
}
return sb.toString();
}
private String showAs(String[] args) {
if (args.length > 3) {
if (!args[3].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String m3uaStackName = args[4];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
List<As> appServers = this.m3uaManagement.getAppServers();
if (appServers.size() == 0) {
return String.format(M3UAOAMMessages.NO_AS_DEFINED_YET, this.m3uaManagement.getName());
}
StringBuffer sb = new StringBuffer();
for (As as : appServers) {
AsImpl asImpl = (AsImpl) as;
sb.append(M3UAOAMMessages.NEW_LINE);
asImpl.show(sb);
sb.append(M3UAOAMMessages.NEW_LINE);
}
return sb.toString();
}
private String executeM3UA(String[] args) {
try {
if (args.length < 2 || args.length > 15) {
// any command will have atleast 3 args
return M3UAOAMMessages.INVALID_COMMAND;
}
if (args[1] == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (args[1].equals("as")) {
String rasCmd = args[2];
if (rasCmd == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (rasCmd.equals("create")) {
return this.createAs(args);
} else if (rasCmd.equals("destroy")) {
return this.destroyAs(args);
} else if (rasCmd.equals("add")) {
return this.addAspToAs(args);
} else if (rasCmd.equals("remove")) {
return this.removeAspFromAs(args);
} else if (rasCmd.equals("show")) {
return this.showAs(args);
}
return M3UAOAMMessages.INVALID_COMMAND;
} else if (args[1].equals("asp")) {
if (args.length < 3 || args.length > 11) {
return M3UAOAMMessages.INVALID_COMMAND;
}
// related to rem AS for SigGatewayImpl
String raspCmd = args[2];
if (raspCmd == null) {
return M3UAOAMMessages.INVALID_COMMAND;
} else if (raspCmd.equals("create")) {
// m3ua asp create <asp-name> <sctp-association> aspid <aspid> heartbeat <true|false> stackname <stack-name>
// Create new ASP
if (args.length < 5) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String aspname = args[3];
String assocName = args[4];
if (aspname == null || assocName == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
AspFactory factory = null;
long aspid = -1;
boolean isHeartBeatEnabled = false;
if (args.length > 5) {
int count = 5;
while (count < args.length) {
String key = args[count++];
if (key == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (key.equals("aspid")) {
aspid = Long.parseLong(args[count++]);
} else if (key.equals("heartbeat")) {
isHeartBeatEnabled = Boolean.parseBoolean(args[count++]);
} else if (key.equals("stackname")) {
String m3uaStackName = args[count++];
M3UAManagementImpl m3uaManagementImpl = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementImpl == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementImpl;
} else {
return M3UAOAMMessages.INVALID_COMMAND;
}
}
}
this.setDefaultValue();
if (aspid == -1) {
factory = this.m3uaManagement.createAspFactory(aspname, assocName, isHeartBeatEnabled);
} else {
factory = this.m3uaManagement.createAspFactory(aspname, assocName, aspid, isHeartBeatEnabled);
}
return String.format(M3UAOAMMessages.CREATE_ASP_SUCESSFULL, factory.getName(),
this.m3uaManagement.getName());
} else if (raspCmd.equals("destroy")) {
// m3ua asp destroy <asp-name> stackname <stack-name>
if (args.length < 4 || args.length > 6) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String aspName = args[3];
String m3uaStackName = null;
if (args.length > 4) {
if (!args[4].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
m3uaStackName = args[5];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
this.m3uaManagement.destroyAspFactory(aspName);
return String.format(M3UAOAMMessages.DESTROY_ASP_SUCESSFULL, aspName, this.m3uaManagement.getName());
} else if (raspCmd.equals("show")) {
return this.showAspFactories(args);
} else if (raspCmd.equals("start")) {
// m3ua asp start <asp-name> stackname <stack-name>
if (args.length < 4) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String aspName = args[3];
String m3uaStackName = null;
if (args.length > 4) {
if (!args[4].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
m3uaStackName = args[5];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
this.m3uaManagement.startAsp(aspName);
return String.format(M3UAOAMMessages.ASP_START_SUCESSFULL, aspName, this.m3uaManagement.getName());
} else if (raspCmd.equals("stop")) {
// m3ua asp stop <asp-name> stackname <stack-name>
if (args.length < 4) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String aspName = args[3];
String m3uaStackName = null;
if (args.length > 4) {
if (!args[4].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
m3uaStackName = args[5];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
this.m3uaManagement.stopAsp(aspName);
return String.format(M3UAOAMMessages.ASP_STOP_SUCESSFULL, aspName, this.m3uaManagement.getName());
}
return M3UAOAMMessages.INVALID_COMMAND;
} else if (args[1].equals("route")) {
String routeCmd = args[2];
if (routeCmd == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (routeCmd.equals("add")) {
// m3ua route add <as-name> <dpc> <opc> <si> trafficmode <traffic-mode> stackname <stack-name>
if (args.length < 5 || args.length > 11) {
return M3UAOAMMessages.INVALID_COMMAND;
}
int count = 3;
String asName = args[count++];
int dpc = -1;
int opc = -1;
int si = -1;
int trafficMode = TrafficModeType.Loadshare;
if (asName == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
dpc = Integer.parseInt(args[count++]);
opc = Integer.parseInt(args[count++]);
si = Integer.parseInt(args[count++]);
count = 7;
while (count < args.length) {
String key = args[count++];
if (key == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (key.equals("trafficmode")) {
trafficMode = Integer.parseInt(args[count++]);
} else if (key.equals("stackname")) {
String m3uaStackName = args[count++];
M3UAManagementImpl m3uaManagementImpl = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementImpl == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementImpl;
} else {
return M3UAOAMMessages.INVALID_COMMAND;
}
}
this.setDefaultValue();
this.m3uaManagement.addRoute(dpc, opc, si, asName, trafficMode);
return String.format(M3UAOAMMessages.ADD_ROUTE_AS_FOR_DPC_SUCCESSFULL, asName, dpc,
this.m3uaManagement.getName());
} else if (routeCmd.equals("remove")) {
// m3ua route remove <as-name> <dpc> <opc> <si> stackname <stack-name>
if (args.length < 5 || args.length > 9) {
return M3UAOAMMessages.INVALID_COMMAND;
}
int count = 3;
String asName = args[count++];
int dpc = -1;
int opc = -1;
int si = -1;
if (asName == null) {
return M3UAOAMMessages.INVALID_COMMAND;
}
dpc = Integer.parseInt(args[count++]);
opc = Integer.parseInt(args[count++]);
si = Integer.parseInt(args[count++]);
if (args.length > 7) {
if (!args[7].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String m3uaStackName = args[8];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
this.m3uaManagement.removeRoute(dpc, opc, si, asName);
return String.format(M3UAOAMMessages.REMOVE_AS_ROUTE_FOR_DPC_SUCCESSFULL, asName, dpc,
this.m3uaManagement.getName());
}
if (routeCmd.equals("show")) {
return this.showRoutes(args);
}
} else if (args[1].equals("set")) {
return this.manageSet(args);
} else if (args[1].equals("get")) {
return this.manageGet(args);
}
return M3UAOAMMessages.INVALID_COMMAND;
} catch (Exception e) {
logger.error(String.format("Error while executing comand %s", Arrays.toString(args)), e);
return e.getMessage();
} catch (Throwable t) {
logger.error(String.format("Error while executing comand %s", Arrays.toString(args)), t);
return t.getMessage();
}
}
private String manageSet(String[] options) throws Exception {
// Minimum 4 needed. Show
// m3ua set <command> <value> stackname <stack-name>
if (options.length < 4 || options.length > 6) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (options.length > 4) {
if (!options[4].equals("stackname")) {
return M3UAOAMMessages.INVALID_COMMAND;
}
String m3uaStackName = options[5];
M3UAManagementImpl m3uaManagementtmp = this.m3uaManagements.get(m3uaStackName);
if (m3uaManagementtmp == null) {
return String.format(M3UAOAMMessages.NO_M3UA_MANAGEMENT_BEAN_FOR_NAME, m3uaStackName);
}
this.m3uaManagement = m3uaManagementtmp;
} else {
this.setDefaultValue();
}
String parName = options[2].toLowerCase();
if (parName.equals("heartbeattime")) {
int val = Integer.parseInt(options[3]);
this.m3uaManagement.setHeartbeatTime(val);
} else if (parName.equals("routinglabelformat")) {
String vals = options[3];
RoutingLabelFormat rlf = Enum.valueOf(RoutingLabelFormat.class, vals);
this.m3uaManagement.setRoutingLabelFormat(rlf);
} else if (parName.equals("uselsbforlinksetselection")) {
Boolean valb = Boolean.parseBoolean(options[3]);
this.m3uaManagement.setUseLsbForLinksetSelection(valb);
} else {
return M3UAOAMMessages.INVALID_COMMAND;
}
return String.format(M3UAOAMMessages.PARAMETER_SUCCESSFULLY_SET, this.m3uaManagement.getName());
}
private String manageGet(String[] options) throws Exception {
// Minimum 2 needed. Show
// m3ua get <command>
if (options.length < 2) {
return M3UAOAMMessages.INVALID_COMMAND;
}
if (options.length == 3) {
this.setDefaultValue();
String parName = options[2].toLowerCase();
StringBuilder sb = new StringBuilder();
sb.append("stack=").append(this.m3uaManagement.getName()).append(" ");
sb.append(options[2]);
sb.append(" = ");
if (parName.equals("maxsequencenumber")) {
sb.append(this.m3uaManagement.getMaxSequenceNumber());
} else if (parName.equals("maxasforroute")) {
sb.append(this.m3uaManagement.getMaxAsForRoute());
} else if (parName.equals("heartbeattime")) {
sb.append(this.m3uaManagement.getHeartbeatTime());
} else if (parName.equals("routinglabelformat")) {
sb.append(this.m3uaManagement.getRoutingLabelFormat());
} else if (parName.equals("uselsbforlinksetselection")) {
sb.append(this.m3uaManagement.isUseLsbForLinksetSelection());
} else if (parName.equals("deliverymessagethreadcount")) {
sb.append(this.m3uaManagement.getDeliveryMessageThreadCount());
} else {
return M3UAOAMMessages.INVALID_COMMAND;
}
return sb.toString();
} else {
StringBuilder sb = new StringBuilder();
for (FastMap.Entry<String, M3UAManagementImpl> e = this.m3uaManagements.head(), end = this.m3uaManagements.tail(); (e = e
.getNext()) != end;) {
M3UAManagementImpl managementImplTmp = e.getValue();
String stackname = e.getKey();
sb.append("Properties for ");
sb.append(stackname);
sb.append("\n");
sb.append("*******************");
sb.append("\n");
sb.append("maxsequencenumber = ");
sb.append(managementImplTmp.getMaxSequenceNumber());
sb.append("\n");
sb.append("maxasforroute = ");
sb.append(managementImplTmp.getMaxAsForRoute());
sb.append("\n");
sb.append("heartbeattime = ");
sb.append(managementImplTmp.getHeartbeatTime());
sb.append("\n");
sb.append("routinglabelformat = ");
sb.append(managementImplTmp.getRoutingLabelFormat());
sb.append("\n");
sb.append("uselsbforlinksetselection = ");
sb.append(managementImplTmp.isUseLsbForLinksetSelection());
sb.append("\n");
sb.append("deliverymessagethreadcount = ");
sb.append(managementImplTmp.getDeliveryMessageThreadCount());
sb.append("\n");
sb.append("*******************");
sb.append("\n");
sb.append("\n");
}
return sb.toString();
}
}
public String execute(String[] args) {
if (args[0].equals("m3ua")) {
return this.executeM3UA(args);
}
return M3UAOAMMessages.INVALID_COMMAND;
}
/*
* (non-Javadoc)
*
* @see org.mobicents.ss7.management.console.ShellExecutor#handles(java.lang. String)
*/
@Override
public boolean handles(String command) {
return (command.startsWith("m3ua"));
}
}