All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mobicents.smsc.domain.CcMccmncCollection Maven / Gradle / Ivy

There is a newer version: 7.4.179
Show newest version
/*
 * 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