/* * TeleStax, Open Source Cloud Communications Copyright 2012. * 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.tools.simulator.management; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Properties; import javax.management.Notification; import javax.management.NotificationBroadcasterSupport; import javolution.text.TextBuilder; import javolution.xml.XMLBinding; import javolution.xml.XMLObjectReader; import javolution.xml.XMLObjectWriter; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import org.mobicents.protocols.ss7.mtp.Mtp3UserPart; import org.mobicents.protocols.ss7.sccp.SccpStack; import org.mobicents.protocols.ss7.tools.simulator.Stoppable; import org.mobicents.protocols.ss7.tools.simulator.common.AddressNatureType; import org.mobicents.protocols.ss7.tools.simulator.common.ConfigurationData; import org.mobicents.protocols.ss7.tools.simulator.level1.DialogicConfigurationData_OldFormat; import org.mobicents.protocols.ss7.tools.simulator.level1.DialogicMan; import org.mobicents.protocols.ss7.tools.simulator.level1.M3uaConfigurationData_OldFormat; import org.mobicents.protocols.ss7.tools.simulator.level1.M3uaMan; import org.mobicents.protocols.ss7.tools.simulator.level2.NatureOfAddressType; import org.mobicents.protocols.ss7.tools.simulator.level2.NumberingPlanSccpType; import org.mobicents.protocols.ss7.tools.simulator.level2.SccpConfigurationData_OldFormat; import org.mobicents.protocols.ss7.tools.simulator.level2.SccpMan; import org.mobicents.protocols.ss7.tools.simulator.level3.CapMan; import org.mobicents.protocols.ss7.tools.simulator.level3.MapConfigurationData_OldFormat; import org.mobicents.protocols.ss7.tools.simulator.level3.MapMan; import org.mobicents.protocols.ss7.tools.simulator.level3.NumberingPlanMapType; import org.mobicents.protocols.ss7.tools.simulator.tests.ati.TestAtiClientMan; import org.mobicents.protocols.ss7.tools.simulator.tests.ati.TestAtiServerMan; import org.mobicents.protocols.ss7.tools.simulator.tests.cap.TestCapScfMan; import org.mobicents.protocols.ss7.tools.simulator.tests.cap.TestCapSsfMan; import org.mobicents.protocols.ss7.tools.simulator.tests.checkimei.TestCheckImeiClientConfigurationData; import org.mobicents.protocols.ss7.tools.simulator.tests.checkimei.TestCheckImeiClientMan; import org.mobicents.protocols.ss7.tools.simulator.tests.checkimei.TestCheckImeiServerMan; import org.mobicents.protocols.ss7.tools.simulator.tests.sms.NumberingPlanIdentificationType; import org.mobicents.protocols.ss7.tools.simulator.tests.sms.TestSmsClientConfigurationData_OldFormat; import org.mobicents.protocols.ss7.tools.simulator.tests.sms.TestSmsClientMan; import org.mobicents.protocols.ss7.tools.simulator.tests.sms.TestSmsServerConfigurationData_OldFormat; import org.mobicents.protocols.ss7.tools.simulator.tests.sms.TestSmsServerMan; import org.mobicents.protocols.ss7.tools.simulator.tests.sms.TypeOfNumberType; import org.mobicents.protocols.ss7.tools.simulator.tests.ussd.TestUssdClientConfigurationData_OldFormat; import org.mobicents.protocols.ss7.tools.simulator.tests.ussd.TestUssdClientMan; import org.mobicents.protocols.ss7.tools.simulator.tests.ussd.TestUssdServerConfigurationData_OldFormat; import org.mobicents.protocols.ss7.tools.simulator.tests.ussd.TestUssdServerMan; import org.mobicents.protocols.ss7.tools.simulator.tests.lcs.TestMapLcsClientMan; import org.mobicents.protocols.ss7.tools.simulator.tests.lcs.TestMapLcsServerMan; /** * * @author sergey vetyutnev * */ public class TesterHost extends NotificationBroadcasterSupport implements TesterHostMBean, Stoppable { private static final Logger logger = Logger.getLogger(TesterHost.class); private static final String TESTER_HOST_PERSIST_DIR_KEY = "testerhost.persist.dir"; private static final String USER_DIR_KEY = "user.dir"; public static String SOURCE_NAME = "HOST"; public static String SS7_EVENT = "SS7Event"; private static final String CLASS_ATTRIBUTE = "type"; private static final String TAB_INDENT = "\t"; private static final String PERSIST_FILE_NAME_OLD = "simulator.xml"; private static final String PERSIST_FILE_NAME = "simulator2.xml"; private static final String CONFIGURATION_DATA = "configurationData"; public static String SIMULATOR_HOME_VAR = "SIMULATOR_HOME"; private final String appName; private String persistDir = null; private final TextBuilder persistFile = TextBuilder.newInstance(); private static final XMLBinding binding = new XMLBinding(); // SETTINGS private boolean isStarted = false; private boolean needQuit = false; private boolean needStore = false; private ConfigurationData configurationData = new ConfigurationData(); private long sequenceNumber = 0; // Layers private Stoppable instance_L1_B = null; private Stoppable instance_L2_B = null; private Stoppable instance_L3_B = null; private Stoppable instance_TestTask_B = null; // levels M3uaMan m3ua; DialogicMan dialogic; SccpMan sccp; MapMan map; CapMan cap; TestUssdClientMan testUssdClientMan; TestUssdServerMan testUssdServerMan; TestSmsClientMan testSmsClientMan; TestSmsServerMan testSmsServerMan; TestCapSsfMan testCapSsfMan; TestCapScfMan testCapScfMan; TestAtiClientMan testAtiClientMan; TestAtiServerMan testAtiServerMan; TestCheckImeiClientMan testCheckImeiClientMan; TestCheckImeiServerMan testCheckImeiServerMan; TestMapLcsClientMan testMapLcsClientMan; TestMapLcsServerMan testMapLcsServerMan; // testers public TesterHost(String appName, String persistDir) { this.appName = appName; this.persistDir = persistDir; this.m3ua = new M3uaMan(appName); this.m3ua.setTesterHost(this); this.dialogic = new DialogicMan(appName); this.dialogic.setTesterHost(this); this.sccp = new SccpMan(appName); this.sccp.setTesterHost(this); this.map = new MapMan(appName); this.map.setTesterHost(this); this.cap = new CapMan(appName); this.cap.setTesterHost(this); this.testUssdClientMan = new TestUssdClientMan(appName); this.testUssdClientMan.setTesterHost(this); this.testUssdServerMan = new TestUssdServerMan(appName); this.testUssdServerMan.setTesterHost(this); this.testSmsClientMan = new TestSmsClientMan(appName); this.testSmsClientMan.setTesterHost(this); this.testSmsServerMan = new TestSmsServerMan(appName); this.testSmsServerMan.setTesterHost(this); this.testCapSsfMan = new TestCapSsfMan(appName); this.testCapSsfMan.setTesterHost(this); this.testCapScfMan = new TestCapScfMan(appName); this.testCapScfMan.setTesterHost(this); this.testAtiClientMan = new TestAtiClientMan(appName); this.testAtiClientMan.setTesterHost(this); this.testAtiServerMan = new TestAtiServerMan(appName); this.testAtiServerMan.setTesterHost(this); this.testCheckImeiClientMan = new TestCheckImeiClientMan(appName); this.testCheckImeiClientMan.setTesterHost(this); this.testCheckImeiServerMan = new TestCheckImeiServerMan(appName); this.testCheckImeiServerMan.setTesterHost(this); this.testMapLcsClientMan = new TestMapLcsClientMan(appName); this.testMapLcsClientMan.setTesterHost(this); this.testMapLcsServerMan = new TestMapLcsServerMan(appName); this.testMapLcsServerMan.setTesterHost(this); this.setupLog4j(appName); binding.setClassAttribute(CLASS_ATTRIBUTE); this.persistFile.clear(); TextBuilder persistFileOld = new TextBuilder(); if (persistDir != null) { persistFileOld.append(persistDir).append(File.separator).append(this.appName).append("_") .append(PERSIST_FILE_NAME_OLD); this.persistFile.append(persistDir).append(File.separator).append(this.appName).append("_") .append(PERSIST_FILE_NAME); } else { persistFileOld.append(System.getProperty(TESTER_HOST_PERSIST_DIR_KEY, System.getProperty(USER_DIR_KEY))) .append(File.separator).append(this.appName).append("_").append(PERSIST_FILE_NAME_OLD); this.persistFile.append(System.getProperty(TESTER_HOST_PERSIST_DIR_KEY, System.getProperty(USER_DIR_KEY))) .append(File.separator).append(this.appName).append("_").append(PERSIST_FILE_NAME); } File fnOld = new File(persistFileOld.toString()); File fn = new File(persistFile.toString()); if (this.loadOld(fnOld)) { this.store(); } else { this.load(fn); } if (fnOld.exists()) fnOld.delete(); } public ConfigurationData getConfigurationData() { return this.configurationData; } public M3uaMan getM3uaMan() { return this.m3ua; } public DialogicMan getDialogicMan() { return this.dialogic; } public SccpMan getSccpMan() { return this.sccp; } public MapMan getMapMan() { return this.map; } public CapMan getCapMan() { return this.cap; } public TestUssdClientMan getTestUssdClientMan() { return this.testUssdClientMan; } public TestUssdServerMan getTestUssdServerMan() { return this.testUssdServerMan; } public TestSmsClientMan getTestSmsClientMan() { return this.testSmsClientMan; } public TestSmsServerMan getTestSmsServerMan() { return this.testSmsServerMan; } public TestCapSsfMan getTestCapSsfMan() { return this.testCapSsfMan; } public TestCapScfMan getTestCapScfMan() { return this.testCapScfMan; } public TestAtiClientMan getTestAtiClientMan() { return this.testAtiClientMan; } public TestAtiServerMan getTestAtiServerMan() { return this.testAtiServerMan; } public TestCheckImeiClientMan getTestCheckImeiClientMan() { return this.testCheckImeiClientMan; } public TestCheckImeiServerMan getTestCheckImeiServerMan() { return this.testCheckImeiServerMan; } public TestMapLcsClientMan getTestMapLcsClientMan() { return this.testMapLcsClientMan; } public TestMapLcsServerMan getTestMapLcsServerMan() { return this.testMapLcsServerMan; } private void setupLog4j(String appName) { // InputStream inStreamLog4j = getClass().getResourceAsStream("/log4j.properties"); String propFileName = appName + ".log4j.properties"; File f = new File("./" + propFileName); if (f.exists()) { try { InputStream inStreamLog4j = new FileInputStream(f); Properties propertiesLog4j = new Properties(); propertiesLog4j.load(inStreamLog4j); PropertyConfigurator.configure(propertiesLog4j); } catch (Exception e) { e.printStackTrace(); BasicConfigurator.configure(); } } else { BasicConfigurator.configure(); } // logger.setLevel(Level.TRACE); logger.debug("log4j configured"); } public void sendNotif(String source, String msg, Throwable e, Level logLevel) { StringBuilder sb = new StringBuilder(); for (StackTraceElement st : e.getStackTrace()) { if (sb.length() > 0) sb.append("\n"); sb.append(st.toString()); } this.doSendNotif(source, msg + " - " + e.toString(), sb.toString()); logger.log(logLevel, msg, e); // if (showInConsole) { // logger.error(msg, e); // } else { // logger.debug(msg, e); // } } public void sendNotif(String source, String msg, String userData, Level logLevel) { this.doSendNotif(source, msg, userData); logger.log(Level.INFO, msg + "\n" + userData); // logger.log(logLevel, msg + "\n" + userData); // if (showInConsole) { // logger.warn(msg); // } else { // logger.debug(msg); // } } private synchronized void doSendNotif(String source, String msg, String userData) { Notification notif = new Notification(SS7_EVENT + "-" + source, "TesterHost", ++sequenceNumber, System.currentTimeMillis(), msg); notif.setUserData(userData); this.sendNotification(notif); } public boolean isNeedQuit() { return needQuit; } @Override public boolean isStarted() { return isStarted; } @Override public Instance_L1 getInstance_L1() { return configurationData.getInstance_L1(); } @Override public void setInstance_L1(Instance_L1 val) { configurationData.setInstance_L1(val); this.markStore(); } @Override public Instance_L2 getInstance_L2() { return configurationData.getInstance_L2(); } @Override public void setInstance_L2(Instance_L2 val) { configurationData.setInstance_L2(val); this.markStore(); } @Override public Instance_L3 getInstance_L3() { return configurationData.getInstance_L3(); } @Override public void setInstance_L3(Instance_L3 val) { configurationData.setInstance_L3(val); this.markStore(); } @Override public Instance_TestTask getInstance_TestTask() { return configurationData.getInstance_TestTask(); } @Override public void setInstance_TestTask(Instance_TestTask val) { configurationData.setInstance_TestTask(val); this.markStore(); } @Override public String getInstance_L1_Value() { return configurationData.getInstance_L1().toString(); } @Override public String getInstance_L2_Value() { return configurationData.getInstance_L2().toString(); } @Override public String getInstance_L3_Value() { return configurationData.getInstance_L3().toString(); } @Override public String getInstance_TestTask_Value() { return configurationData.getInstance_TestTask().toString(); } @Override public String getState() { return TesterHost.SOURCE_NAME + ": " + (this.isStarted() ? "Started" : "Stopped"); } @Override public String getL1State() { if (this.instance_L1_B != null) return this.instance_L1_B.getState(); else return ""; } @Override public String getL2State() { if (this.instance_L2_B != null) return this.instance_L2_B.getState(); else return ""; } @Override public String getL3State() { if (this.instance_L3_B != null) return this.instance_L3_B.getState(); else return ""; } @Override public String getTestTaskState() { if (this.instance_TestTask_B != null) return this.instance_TestTask_B.getState(); else return ""; } @Override public void start() { this.store(); this.stop(); // L1 boolean started = false; Mtp3UserPart mtp3UserPart = null; switch (this.configurationData.getInstance_L1().intValue()) { case Instance_L1.VAL_M3UA: this.instance_L1_B = this.m3ua; started = this.m3ua.start(); mtp3UserPart = this.m3ua.getMtp3UserPart(); break; case Instance_L1.VAL_DIALOGIC: this.instance_L1_B = this.dialogic; started = this.dialogic.start(); mtp3UserPart = this.dialogic.getMtp3UserPart(); break; default: // TODO: implement others test tasks ... this.sendNotif(TesterHost.SOURCE_NAME, "Instance_L1." + this.configurationData.getInstance_L1().toString() + " has not been implemented yet", "", Level.WARN); break; } if (!started) { this.sendNotif(TesterHost.SOURCE_NAME, "Layer 1 has not started", "", Level.WARN); this.stop(); return; } // L2 started = false; SccpStack sccpStack = null; switch (this.configurationData.getInstance_L2().intValue()) { case Instance_L2.VAL_SCCP: if (mtp3UserPart == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing SCCP: No Mtp3UserPart is defined at L1", "", Level.WARN); } else { this.instance_L2_B = this.sccp; this.sccp.setMtp3UserPart(mtp3UserPart); started = this.sccp.start(); sccpStack = this.sccp.getSccpStack(); } break; case Instance_L2.VAL_ISUP: // TODO Implement L2 = ISUP this.sendNotif(TesterHost.SOURCE_NAME, "Instance_L2.VAL_ISUP has not been implemented yet", "", Level.WARN); break; default: // TODO: implement others test tasks ... this.sendNotif(TesterHost.SOURCE_NAME, "Instance_L2." + this.configurationData.getInstance_L2().toString() + " has not been implemented yet", "", Level.WARN); break; } if (!started) { this.sendNotif(TesterHost.SOURCE_NAME, "Layer 2 has not started", "", Level.WARN); this.stop(); return; } // L3 started = false; MapMan curMap = null; CapMan curCap = null; switch (this.configurationData.getInstance_L3().intValue()) { case Instance_L3.VAL_MAP: if (sccpStack == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing TCAP+MAP: No SccpStack is defined at L2", "", Level.WARN); } else { this.instance_L3_B = this.map; this.map.setSccpStack(sccpStack); started = this.map.start(); curMap = this.map; } break; case Instance_L3.VAL_CAP: if (sccpStack == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing TCAP+CAP: No SccpStack is defined at L2", "", Level.WARN); } else { this.instance_L3_B = this.cap; this.cap.setSccpStack(sccpStack); started = this.cap.start(); curCap = this.cap; } break; case Instance_L3.VAL_INAP: // TODO: implement INAP ....... this.sendNotif(TesterHost.SOURCE_NAME, "Instance_L3.VAL_INAP has not been implemented yet", "", Level.WARN); break; default: // TODO: implement others test tasks ... this.sendNotif(TesterHost.SOURCE_NAME, "Instance_L3." + this.configurationData.getInstance_L3().toString() + " has not been implemented yet", "", Level.WARN); break; } if (!started) { this.sendNotif(TesterHost.SOURCE_NAME, "Layer 3 has not started", "", Level.WARN); this.stop(); return; } // Testers started = false; switch (this.configurationData.getInstance_TestTask().intValue()) { case Instance_TestTask.VAL_USSD_TEST_CLIENT: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing USSD_TEST_CLIENT: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testUssdClientMan; this.testUssdClientMan.setMapMan(curMap); started = this.testUssdClientMan.start(); } break; case Instance_TestTask.VAL_USSD_TEST_SERVER: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing USSD_TEST_SERVER: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testUssdServerMan; this.testUssdServerMan.setMapMan(curMap); started = this.testUssdServerMan.start(); } break; case Instance_TestTask.VAL_SMS_TEST_CLIENT: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing SMS_TEST_CLIENT: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testSmsClientMan; this.testSmsClientMan.setMapMan(curMap); started = this.testSmsClientMan.start(); } break; case Instance_TestTask.VAL_SMS_TEST_SERVER: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing SMS_TEST_SERVER: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testSmsServerMan; this.testSmsServerMan.setMapMan(curMap); started = this.testSmsServerMan.start(); } break; case Instance_TestTask.VAL_CAP_TEST_SCF: if (curCap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing VAL_CAP_TEST_SCF: No CAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testCapScfMan; this.testCapScfMan.setCapMan(curCap); started = this.testCapScfMan.start(); } break; case Instance_TestTask.VAL_CAP_TEST_SSF: if (curCap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing VAL_CAP_TEST_SSF: No CAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testCapSsfMan; this.testCapSsfMan.setCapMan(curCap); started = this.testCapSsfMan.start(); } break; case Instance_TestTask.VAL_ATI_TEST_CLIENT: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing ATI_TEST_CLIENT: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testAtiClientMan; this.testAtiClientMan.setMapMan(curMap); started = this.testAtiClientMan.start(); } break; case Instance_TestTask.VAL_ATI_TEST_SERVER: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing ATI_TEST_SERVER: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testAtiServerMan; this.testAtiServerMan.setMapMan(curMap); started = this.testAtiServerMan.start(); } break; case Instance_TestTask.VAL_CHECK_IMEI_TEST_CLIENT: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing CHECK_IMEI_TEST_CLIENT: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testCheckImeiClientMan; this.testCheckImeiClientMan.setMapMan(curMap); started = this.testCheckImeiClientMan.start(); } break; case Instance_TestTask.VAL_CHECK_IMEI_TEST_SERVER: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing CHECK_IMEI_TEST_SERVER: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testCheckImeiServerMan; this.testCheckImeiServerMan.setMapMan(curMap); started = this.testCheckImeiServerMan.start(); } break; case Instance_TestTask.VAL_MAP_LCS_TEST_CLIENT: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing MAP_LCS_TEST_CLIENT: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testMapLcsClientMan; this.testMapLcsClientMan.setMapMan(curMap); started = this.testMapLcsClientMan.start(); } break; case Instance_TestTask.VAL_MAP_LCS_TEST_SERVER: if (curMap == null) { this.sendNotif(TesterHost.SOURCE_NAME, "Error initializing MAP_LCS_TEST_SERVER: No MAP stack is defined at L3", "", Level.WARN); } else { this.instance_TestTask_B = this.testMapLcsServerMan; this.testMapLcsServerMan.setMapMan(curMap); started = this.testMapLcsServerMan.start(); } break; default: // TODO: implement others test tasks ... this.sendNotif(TesterHost.SOURCE_NAME, "Instance_TestTask." + this.configurationData.getInstance_TestTask().toString() + " has not been implemented yet", "", Level.WARN); break; } if (!started) { this.sendNotif(TesterHost.SOURCE_NAME, "Testing task has not started", "", Level.WARN); this.stop(); return; } this.isStarted = true; } @Override public void stop() { this.isStarted = false; // TestTask if (this.instance_TestTask_B != null) { this.instance_TestTask_B.stop(); this.instance_TestTask_B = null; } // L3 if (this.instance_L3_B != null) { this.instance_L3_B.stop(); this.instance_L3_B = null; } // L2 if (this.instance_L2_B != null) { this.instance_L2_B.stop(); this.instance_L2_B = null; } // L1 if (this.instance_L1_B != null) { this.instance_L1_B.stop(); this.instance_L1_B = null; } } @Override public void execute() { if (this.instance_L1_B != null) { this.instance_L1_B.execute(); } if (this.instance_L2_B != null) { this.instance_L2_B.execute(); } if (this.instance_L3_B != null) { this.instance_L3_B.execute(); } if (this.instance_TestTask_B != null) { this.instance_TestTask_B.execute(); } } @Override public void quit() { this.stop(); this.store(); this.needQuit = true; } @Override public void putInstance_L1Value(String val) { Instance_L1 x = Instance_L1.createInstance(val); if (x != null) this.setInstance_L1(x); } @Override public void putInstance_L2Value(String val) { Instance_L2 x = Instance_L2.createInstance(val); if (x != null) this.setInstance_L2(x); } @Override public void putInstance_L3Value(String val) { Instance_L3 x = Instance_L3.createInstance(val); if (x != null) this.setInstance_L3(x); } @Override public void putInstance_TestTaskValue(String val) { Instance_TestTask x = Instance_TestTask.createInstance(val); if (x != null) this.setInstance_TestTask(x); } public String getName() { return appName; } public String getPersistDir() { return persistDir; } // public void setPersistDir(String persistDir) { // this.persistDir = persistDir; // } public void markStore() { needStore = true; } public void checkStore() { if (needStore) { needStore = false; this.store(); } } public synchronized void store() { try { XMLObjectWriter writer = XMLObjectWriter.newInstance(new FileOutputStream(persistFile.toString())); writer.setBinding(binding); // writer.setReferenceResolver(new XMLReferenceResolver()); writer.setIndentation(TAB_INDENT); writer.write(this.configurationData, CONFIGURATION_DATA, ConfigurationData.class); writer.close(); } catch (Exception e) { this.sendNotif(SOURCE_NAME, "Error while persisting the Host state in file", e, Level.ERROR); } } private boolean load(File fn) { XMLObjectReader reader = null; try { if (!fn.exists()) { this.sendNotif(SOURCE_NAME, "Error while reading the Host state from file: file not found: " + persistFile, "", Level.WARN); return false; } reader = XMLObjectReader.newInstance(new FileInputStream(fn)); reader.setBinding(binding); this.configurationData = reader.read(CONFIGURATION_DATA, ConfigurationData.class); reader.close(); return true; } catch (Exception ex) { this.sendNotif(SOURCE_NAME, "Error while reading the Host state from file", ex, Level.WARN); return false; } } private boolean loadOld(File fn) { XMLObjectReader reader = null; try { if (!fn.exists()) { // this.sendNotif(SOURCE_NAME, "Error while reading the Host state from file: file not found: " + persistFile, // "", Level.WARN); return false; } reader = XMLObjectReader.newInstance(new FileInputStream(fn)); reader.setBinding(binding); this.configurationData.setInstance_L1(Instance_L1.createInstance(reader.read(ConfigurationData.INSTANCE_L1, String.class))); this.configurationData.setInstance_L2(Instance_L2.createInstance(reader.read(ConfigurationData.INSTANCE_L2, String.class))); this.configurationData.setInstance_L3(Instance_L3.createInstance(reader.read(ConfigurationData.INSTANCE_L3, String.class))); this.configurationData.setInstance_TestTask(Instance_TestTask.createInstance(reader.read( ConfigurationData.INSTANCE_TESTTASK, String.class))); M3uaConfigurationData_OldFormat _m3ua = reader.read(ConfigurationData.M3UA, M3uaConfigurationData_OldFormat.class); this.m3ua.setSctpLocalHost(_m3ua.getLocalHost()); this.m3ua.setSctpLocalPort(_m3ua.getLocalPort()); this.m3ua.setSctpRemoteHost(_m3ua.getRemoteHost()); this.m3ua.setSctpRemotePort(_m3ua.getRemotePort()); this.configurationData.getM3uaConfigurationData().setIpChannelType(_m3ua.getIpChannelType()); this.m3ua.setSctpIsServer(_m3ua.getIsSctpServer()); this.m3ua.doSetExtraHostAddresses(_m3ua.getSctpExtraHostAddresses()); this.configurationData.getM3uaConfigurationData().setM3uaFunctionality(_m3ua.getM3uaFunctionality()); this.configurationData.getM3uaConfigurationData().setM3uaIPSPType(_m3ua.getM3uaIPSPType()); this.configurationData.getM3uaConfigurationData().setM3uaExchangeType(_m3ua.getM3uaExchangeType()); this.m3ua.setM3uaDpc(_m3ua.getDpc()); this.m3ua.setM3uaOpc(_m3ua.getOpc()); this.m3ua.setM3uaSi(_m3ua.getSi()); DialogicConfigurationData_OldFormat _dial = reader.read(ConfigurationData.DIALOGIC, DialogicConfigurationData_OldFormat.class); this.dialogic.setSourceModuleId(_dial.getSourceModuleId()); this.dialogic.setDestinationModuleId(_dial.getDestinationModuleId()); SccpConfigurationData_OldFormat _sccp = reader.read(ConfigurationData.SCCP, SccpConfigurationData_OldFormat.class); this.sccp.setRouteOnGtMode(_sccp.isRouteOnGtMode()); this.sccp.setRemoteSpc(_sccp.getRemoteSpc()); this.sccp.setLocalSpc(_sccp.getLocalSpc()); this.sccp.setNi(_sccp.getNi()); this.sccp.setRemoteSsn(_sccp.getRemoteSsn()); this.sccp.setLocalSsn(_sccp.getLocalSsn()); this.sccp.setGlobalTitleType(_sccp.getGlobalTitleType()); this.sccp.setNatureOfAddress(new NatureOfAddressType(_sccp.getNatureOfAddress().getValue())); this.sccp.setNumberingPlan(new NumberingPlanSccpType(_sccp.getNumberingPlan().getValue())); this.sccp.setTranslationType(_sccp.getTranslationType()); this.sccp.setCallingPartyAddressDigits(_sccp.getCallingPartyAddressDigits()); // this.sccp.setExtraLocalAddressDigits(_sccp.getExtraLocalAddressDigits()); MapConfigurationData_OldFormat _map = reader.read(ConfigurationData.MAP, MapConfigurationData_OldFormat.class); // this.map.setLocalSsn(_map.getLocalSsn()); // this.map.setRemoteSsn(_map.getRemoteSsn()); this.map.setRemoteAddressDigits(_map.getRemoteAddressDigits()); this.map.setOrigReference(_map.getOrigReference()); this.map.setOrigReferenceAddressNature(new AddressNatureType(_map.getOrigReferenceAddressNature().getIndicator())); this.map.setOrigReferenceNumberingPlan(new NumberingPlanMapType(_map.getOrigReferenceNumberingPlan().getIndicator())); this.map.setDestReference(_map.getDestReference()); this.map.setDestReferenceAddressNature(new AddressNatureType(_map.getDestReferenceAddressNature().getIndicator())); this.map.setDestReferenceNumberingPlan(new NumberingPlanMapType(_map.getDestReferenceNumberingPlan().getIndicator())); TestUssdClientConfigurationData_OldFormat _TestUssdClientMan = reader.read(ConfigurationData.TEST_USSD_CLIENT, TestUssdClientConfigurationData_OldFormat.class); this.testUssdClientMan.setMsisdnAddress(_TestUssdClientMan.getMsisdnAddress()); this.testUssdClientMan.setMsisdnAddressNature(new AddressNatureType(_TestUssdClientMan.getMsisdnAddressNature() .getIndicator())); this.testUssdClientMan.setMsisdnNumberingPlan(new NumberingPlanMapType(_TestUssdClientMan.getMsisdnNumberingPlan() .getIndicator())); this.testUssdClientMan.setDataCodingScheme(_TestUssdClientMan.getDataCodingScheme()); this.testUssdClientMan.setAlertingPattern(_TestUssdClientMan.getAlertingPattern()); this.testUssdClientMan.setUssdClientAction(_TestUssdClientMan.getUssdClientAction()); this.testUssdClientMan.setAutoRequestString(_TestUssdClientMan.getAutoRequestString()); this.testUssdClientMan.setMaxConcurrentDialogs(_TestUssdClientMan.getMaxConcurrentDialogs()); this.testUssdClientMan.setOneNotificationFor100Dialogs(_TestUssdClientMan.isOneNotificationFor100Dialogs()); TestUssdServerConfigurationData_OldFormat _TestUssdServerMan = reader.read(ConfigurationData.TEST_USSD_SERVER, TestUssdServerConfigurationData_OldFormat.class); this.testUssdServerMan.setMsisdnAddress(_TestUssdServerMan.getMsisdnAddress()); this.testUssdServerMan.setMsisdnAddressNature(new AddressNatureType(_TestUssdServerMan.getMsisdnAddressNature() .getIndicator())); this.testUssdServerMan.setMsisdnNumberingPlan(new NumberingPlanMapType(_TestUssdServerMan.getMsisdnNumberingPlan() .getIndicator())); this.testUssdServerMan.setDataCodingScheme(_TestUssdServerMan.getDataCodingScheme()); this.testUssdServerMan.setAlertingPattern(_TestUssdServerMan.getAlertingPattern()); this.testUssdServerMan.setProcessSsRequestAction(_TestUssdServerMan.getProcessSsRequestAction()); this.testUssdServerMan.setAutoResponseString(_TestUssdServerMan.getAutoResponseString()); this.testUssdServerMan.setAutoUnstructured_SS_RequestString(_TestUssdServerMan .getAutoUnstructured_SS_RequestString()); this.testUssdServerMan.setOneNotificationFor100Dialogs(_TestUssdServerMan.isOneNotificationFor100Dialogs()); TestSmsClientConfigurationData_OldFormat _TestSmsClientMan = reader.read(ConfigurationData.TEST_SMS_CLIENT, TestSmsClientConfigurationData_OldFormat.class); this.testSmsClientMan.setAddressNature(new AddressNatureType(_TestSmsClientMan.getAddressNature().getIndicator())); this.testSmsClientMan .setNumberingPlan(new NumberingPlanMapType(_TestSmsClientMan.getNumberingPlan().getIndicator())); this.testSmsClientMan.setServiceCenterAddress(_TestSmsClientMan.getServiceCenterAddress()); this.testSmsClientMan.setMapProtocolVersion(_TestSmsClientMan.getMapProtocolVersion()); this.testSmsClientMan.setSRIResponseImsi(_TestSmsClientMan.getSriResponseImsi()); this.testSmsClientMan.setSRIResponseVlr(_TestSmsClientMan.getSriResponseVlr()); this.testSmsClientMan.setSmscSsn(_TestSmsClientMan.getSmscSsn()); this.testSmsClientMan.setTypeOfNumber(new TypeOfNumberType(_TestSmsClientMan.getTypeOfNumber().getCode())); this.testSmsClientMan.setNumberingPlanIdentification(new NumberingPlanIdentificationType(_TestSmsClientMan .getNumberingPlanIdentification().getCode())); this.testSmsClientMan.setSmsCodingType(_TestSmsClientMan.getSmsCodingType()); TestSmsServerConfigurationData_OldFormat _TestSmsServerMan = reader.read(ConfigurationData.TEST_SMS_SERVER, TestSmsServerConfigurationData_OldFormat.class); this.testSmsServerMan.setAddressNature(new AddressNatureType(_TestSmsServerMan.getAddressNature().getIndicator())); this.testSmsServerMan .setNumberingPlan(new NumberingPlanMapType(_TestSmsServerMan.getNumberingPlan().getIndicator())); this.testSmsServerMan.setServiceCenterAddress(_TestSmsServerMan.getServiceCenterAddress()); this.testSmsServerMan.setMapProtocolVersion(_TestSmsServerMan.getMapProtocolVersion()); this.testSmsServerMan.setHlrSsn(_TestSmsServerMan.getHlrSsn()); this.testSmsServerMan.setVlrSsn(_TestSmsServerMan.getVlrSsn()); this.testSmsServerMan.setTypeOfNumber(new TypeOfNumberType(_TestSmsServerMan.getTypeOfNumber().getCode())); this.testSmsServerMan.setNumberingPlanIdentification(new NumberingPlanIdentificationType(_TestSmsServerMan .getNumberingPlanIdentification().getCode())); this.testSmsServerMan.setSmsCodingType(_TestSmsServerMan.getSmsCodingType()); TestCheckImeiClientConfigurationData _TestCheckImeiClientMan = reader.read(ConfigurationData.TEST_CHECK_IMEI_CLIENT, TestCheckImeiClientConfigurationData.class); this.testCheckImeiClientMan.setImei(_TestCheckImeiClientMan.getImei()); this.testCheckImeiClientMan.setCheckImeiClientAction(_TestCheckImeiClientMan.getCheckImeiClientAction()); this.testCheckImeiClientMan.setMapProtocolVersion(_TestCheckImeiClientMan.getMapProtocolVersion()); this.testCheckImeiClientMan.setMaxConcurrentDialogs(_TestCheckImeiClientMan.getMaxConcurrentDialogs()); this.testCheckImeiClientMan.setOneNotificationFor100Dialogs(_TestCheckImeiClientMan.isOneNotificationFor100Dialogs()); // FIMXME mnowa: add loading of CheckIMEI data from XML for server /* TestCheckImeiServerConfigurationData _TestCheckImeiServerMan = reader.read(ConfigurationData.TEST_CHECK_IMEI_SERVER, TestCheckImeiServerConfigurationData.class); */ reader.close(); return true; } catch (Exception ex) { this.sendNotif(SOURCE_NAME, "Error while reading the Host state from file", ex, Level.WARN); return false; } } }