/* * JBoss, Home of Professional Open Source * Copyright 2011, Red Hat, 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.sccp.impl.parameter; import org.mobicents.protocols.ss7.indicator.GlobalTitleIndicator; import org.mobicents.protocols.ss7.indicator.NatureOfAddress; import org.mobicents.protocols.ss7.indicator.NumberingPlan; import org.mobicents.protocols.ss7.indicator.RoutingIndicator; import org.mobicents.protocols.ss7.sccp.parameter.EncodingScheme; import org.mobicents.protocols.ss7.sccp.parameter.GlobalTitle; import org.mobicents.protocols.ss7.sccp.parameter.GlobalTitle0001; import org.mobicents.protocols.ss7.sccp.parameter.GlobalTitle0010; import org.mobicents.protocols.ss7.sccp.parameter.GlobalTitle0011; import org.mobicents.protocols.ss7.sccp.parameter.GlobalTitle0100; import org.mobicents.protocols.ss7.sccp.parameter.HopCounter; import org.mobicents.protocols.ss7.sccp.parameter.Importance; import org.mobicents.protocols.ss7.sccp.parameter.ParameterFactory; import org.mobicents.protocols.ss7.sccp.parameter.ProtocolClass; import org.mobicents.protocols.ss7.sccp.parameter.ReturnCause; import org.mobicents.protocols.ss7.sccp.parameter.ReturnCauseValue; import org.mobicents.protocols.ss7.sccp.parameter.SccpAddress; import org.mobicents.protocols.ss7.sccp.parameter.Segmentation; /** * @author kulikov * @author baranowb */ public class ParameterFactoryImpl implements ParameterFactory { public SccpAddress createSccpAddress(RoutingIndicator ri, GlobalTitle gt, int dpc, int ssn) { return new SccpAddressImpl(ri, gt, dpc, ssn); } public Importance createImportance(int value) { return new ImportanceImpl((byte) value); } public HopCounter createHopCounter(int hopCount) { return new HopCounterImpl(hopCount); } public ProtocolClass createProtocolClass(int pClass, boolean returnMessageOnError) { return new ProtocolClassImpl(pClass, returnMessageOnError); } public Segmentation createSegmentation() { return new SegmentationImpl(); } public ReturnCause createReturnCause(ReturnCauseValue cause) { return new ReturnCauseImpl(cause); } @Override public EncodingScheme createEncodingScheme(byte i) { switch (i) { case DefaultEncodingScheme.SCHEMA_CODE: return DefaultEncodingScheme.INSTANCE; case BCDOddEncodingScheme.SCHEMA_CODE: return BCDOddEncodingScheme.INSTANCE; case BCDEvenEncodingScheme.SCHEMA_CODE: return BCDEvenEncodingScheme.INSTANCE; default: return DefaultEncodingScheme.INSTANCE; } } @Override public GlobalTitle createGlobalTitle(GlobalTitleIndicator globalTitleIndicator) { switch (globalTitleIndicator) { case GLOBAL_TITLE_INCLUDES_NATURE_OF_ADDRESS_INDICATOR_ONLY: return new GlobalTitle0001Impl(); case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_AND_ENCODING_SCHEME: return new GlobalTitle0011Impl(); case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_NUMBERING_PLAN_ENCODING_SCHEME_AND_NATURE_OF_ADDRESS: return new GlobalTitle0100Impl(); case GLOBAL_TITLE_INCLUDES_TRANSLATION_TYPE_ONLY: return new GlobalTitle0010Impl(); case NO_GLOBAL_TITLE_INCLUDED: //return new NoGlobalTitle(); return null; default: throw new IllegalArgumentException(); } } @Override public GlobalTitle0001 createGlobalTitle(String digits, NatureOfAddress noa) { return new GlobalTitle0001Impl(digits, noa); } @Override public GlobalTitle0010 createGlobalTitle(String digits, int translationType) { return new GlobalTitle0010Impl(digits, translationType); } @Override public GlobalTitle0011 createGlobalTitle(String digits, int translationType, NumberingPlan numberingPlan, EncodingScheme encodingScheme) { return new GlobalTitle0011Impl(digits, translationType, getEncodingScheme(encodingScheme, digits), numberingPlan); } @Override public GlobalTitle0100 createGlobalTitle(String digits, int translationType, NumberingPlan numberingPlan, EncodingScheme encodingScheme, NatureOfAddress noa) { return new GlobalTitle0100Impl(digits, translationType, getEncodingScheme(encodingScheme, digits), numberingPlan, noa); } @Override public GlobalTitle createGlobalTitle(String digits) { return new NoGlobalTitle(digits); } protected EncodingScheme getEncodingScheme(EncodingScheme encodingScheme, String digits) { // Rules dont support ES yet. if (encodingScheme != null) { return encodingScheme; } if (digits.length() % 2 == 0) { return BCDEvenEncodingScheme.INSTANCE; } else { return BCDOddEncodingScheme.INSTANCE; } } }