
org.mobicents.smsc.domain.CcMccmncCollection Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of domain Show documentation
Show all versions of domain Show documentation
SMSC Gateway Domain Object
/*
* 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.smsc.domain;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import javolution.util.FastMap;
import javolution.xml.XMLFormat;
import javolution.xml.stream.XMLStreamException;
import org.mobicents.protocols.ss7.map.primitives.ArrayListSerializingBase;
/**
*
* @author sergey vetyutnev
*
*/
public class CcMccmncCollection {
private static final String CC_MCCMNC = "ccMccmnc";
private static final String CC_MCCMNC_LIST = "ccMccmncList";
private CcMccmncMap ccMccmncMap = new CcMccmncMap();
private static CcMccmncComparator ccMccmncComparator = new CcMccmncComparator();
public CcMccmnc findMccmnc(String countryCode) {
for (FastMap.Entry e = this.ccMccmncMap.head(), end = this.ccMccmncMap.tail(); (e = e.getNext()) != end;) {
CcMccmncImpl ccMccmnc = e.getValue();
if (ccMccmnc.getCountryCode().equals(""))
return ccMccmnc;
if (countryCode.startsWith(ccMccmnc.getCountryCode())) {
return ccMccmnc;
}
}
return null;
}
public void addCcMccmnc(CcMccmncImpl ccMccmnc) throws Exception {
if (ccMccmnc == null) {
throw new Exception(String.format(SMSCOAMMessages.NULL_ARGUMENT, "ccMccmnc"));
}
if (ccMccmnc.getCountryCode() == null) {
throw new Exception(String.format(SMSCOAMMessages.NULL_ARGUMENT, "ccMccmnc.getCountryCode()"));
}
synchronized (this) {
if (this.ccMccmncMap.containsKey(ccMccmnc.getCountryCode())) {
throw new Exception(String.format(SMSCOAMMessages.CC_MCCMNC_IS_PRESENT, ccMccmnc.getCountryCode()));
}
CcMccmncImpl[] ccMccmncArray = new CcMccmncImpl[(this.ccMccmncMap.size() + 1)];
int count = 0;
for (FastMap.Entry e = this.ccMccmncMap.head(), end = this.ccMccmncMap.tail(); (e = e.getNext()) != end;) {
CcMccmncImpl ccMccmncTemp1 = (CcMccmncImpl) e.getValue();
ccMccmncArray[count++] = ccMccmncTemp1;
}
// add latest rule
ccMccmncArray[count++] = ccMccmnc;
// Sort
Arrays.sort(ccMccmncArray, ccMccmncComparator);
CcMccmncMap newCcMccmnc = new CcMccmncMap();
for (int i = 0; i < ccMccmncArray.length; i++) {
CcMccmncImpl ccMccmncTemp = ccMccmncArray[i];
newCcMccmnc.put(ccMccmncTemp.getCountryCode(), ccMccmncTemp);
}
this.ccMccmncMap = newCcMccmnc;
}
}
public Map getCcMccmncMap() {
return this.ccMccmncMap;
}
public void modifyCcMccmnc(String countryCode, String mccMnc, String smsc) throws Exception {
if (countryCode == null) {
throw new Exception(String.format(SMSCOAMMessages.NULL_ARGUMENT, "countryCode"));
}
synchronized (this) {
CcMccmncImpl el = this.ccMccmncMap.get(countryCode);
if (el == null) {
throw new Exception(String.format(SMSCOAMMessages.CC_MCCMNC_NOT_FOUND, countryCode));
}
el.setMccMnc(mccMnc);
el.setSmsc(smsc);
}
}
public void removeCcMccmnc(String countryCode) throws Exception {
if (countryCode == null) {
throw new Exception(String.format(SMSCOAMMessages.NULL_ARGUMENT, "countryCode"));
}
synchronized (this) {
if (!this.ccMccmncMap.containsKey(countryCode)) {
throw new Exception(String.format(SMSCOAMMessages.CC_MCCMNC_NOT_FOUND, countryCode));
}
CcMccmncMap newCcMccmnc = new CcMccmncMap();
newCcMccmnc.putAll(this.ccMccmncMap);
newCcMccmnc.remove(countryCode);
this.ccMccmncMap = newCcMccmnc;
}
}
public CcMccmnc getCcMccmnc(String countryCode) {
return this.ccMccmncMap.get(countryCode);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("CcMccmncCollection=[");
int i1 = 0;
for (FastMap.Entry e = this.ccMccmncMap.head(), end = this.ccMccmncMap.tail(); (e = e.getNext()) != end;) {
if (i1 == 0)
i1 = 1;
else
sb.append(", ");
CcMccmncImpl ccMccmns = e.getValue();
sb.append(ccMccmns.toString());
}
sb.append("]");
return sb.toString();
}
/**
* XML Serialization/Deserialization
*/
protected static final XMLFormat CC_MCCMNC_COLLECTION_XML = new XMLFormat(CcMccmncCollection.class) {
@Override
public void read(javolution.xml.XMLFormat.InputElement xml, CcMccmncCollection ccMccmnsCollection) throws XMLStreamException {
CcMccmnsCollection_CcMccmns al = xml.get(CC_MCCMNC_LIST, CcMccmnsCollection_CcMccmns.class);
if (al != null) {
CcMccmncImpl[] ccMccmncArray = new CcMccmncImpl[(al.getData().size())];
al.getData().toArray(ccMccmncArray);
Arrays.sort(ccMccmncArray, ccMccmncComparator);
CcMccmncMap newCcMccmnc = new CcMccmncMap();
for (int i = 0; i < ccMccmncArray.length; i++) {
CcMccmncImpl ccMccmncTemp = ccMccmncArray[i];
newCcMccmnc.put(ccMccmncTemp.getCountryCode(), ccMccmncTemp);
}
ccMccmnsCollection.ccMccmncMap = newCcMccmnc;
}
}
@Override
public void write(CcMccmncCollection ccMccmnsCollection, javolution.xml.XMLFormat.OutputElement xml) throws XMLStreamException {
ArrayList all = new ArrayList(ccMccmnsCollection.ccMccmncMap.values());
CcMccmnsCollection_CcMccmns al = new CcMccmnsCollection_CcMccmns(all);
xml.add(al, CC_MCCMNC_LIST, CcMccmnsCollection_CcMccmns.class);
}
};
public static class CcMccmnsCollection_CcMccmns extends ArrayListSerializingBase {
public CcMccmnsCollection_CcMccmns() {
super(CC_MCCMNC, CcMccmncImpl.class);
}
public CcMccmnsCollection_CcMccmns(ArrayList data) {
super(CC_MCCMNC, CcMccmncImpl.class, data);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy