TciCDWrapper.java 6.73 KB
Newer Older
filatov's avatar
filatov committed
/**
 * @author    STF 424_ITS_Test_Platform
 * @version    $id$
 */
package org.etsi.tool.elvior;

import java.math.BigInteger;
import java.util.logging.Logger;
filatov's avatar
filatov committed

import org.elvior.ttcn.tritci.IntegerValueEx;
import org.elvior.ttcn.tritci.TciProvider;
garciay's avatar
garciay committed
import org.etsi.adapter.TERFactory;
filatov's avatar
filatov committed
import org.etsi.codec.ITciCDWrapper;
import org.etsi.ttcn.tci.BooleanValue;
import org.etsi.ttcn.tci.CharstringValue;
import org.etsi.ttcn.tci.EnumeratedValue;
filatov's avatar
filatov committed
import org.etsi.ttcn.tci.FloatValue;
import org.etsi.ttcn.tci.IntegerValue;
import org.etsi.ttcn.tci.OctetstringValue;
import org.etsi.ttcn.tci.RecordOfValue;
import org.etsi.ttcn.tci.RecordValue;
filatov's avatar
filatov committed
import org.etsi.ttcn.tci.TciCDRequired;
import org.etsi.ttcn.tci.Type;
import org.etsi.ttcn.tci.Value;

/** This class implements the ITciCDWrapper interface
 * 
 * Note that the TCI Codec Interface (TCI-CD) describes the operations a TTCN-3 Executable is required to implement and the operations a codec implementation for a certain encoding scheme shall provide to the TE
 * 
 * See ETSI ES 201 873-6 V4.2.1 - Clause 7.3.2.1 TCI-CD required
 */
public class TciCDWrapper implements ITciCDWrapper {

    private TciCDRequired _tciFactory = TciProvider.getInstance().getTciCDRequired();
    
    private Logger _logger;
    
filatov's avatar
filatov committed
    public TciCDWrapper() {
        _logger = Logger.getLogger("org.etsi.its");
filatov's avatar
filatov committed
    }
    
    @Override
    public IntegerValue setInteger(final Integer value) {
        IntegerValue iv = (IntegerValue)_tciFactory.getInteger().newInstance();
        iv.setInteger(value);
        return iv;
filatov's avatar
filatov committed
    }

    @Override
    public int getInteger(final IntegerValue iv) {
        return iv.getInteger();
    }

    @Override
    public IntegerValue setInteger(final BigInteger value) { 
garciay's avatar
garciay committed
//        TERFactory.getInstance().logDebug(">>> getBigInteger: " + value);
        IntegerValueEx bi = (IntegerValueEx) _tciFactory.getInteger().newInstance(); //_tciFactory.getTypeForName("org.elvior.ttcn.tritci.IntegerValueEx");
filatov's avatar
filatov committed
        if (bi != null) { 
garciay's avatar
garciay committed
//            TERFactory.getInstance().logDebug("getBigInteger: then");
            bi.setInt64(value.longValue()); 
garciay's avatar
garciay committed
//            TERFactory.getInstance().logDebug("getBigInteger: bi=" + bi.getInt64());
filatov's avatar
filatov committed
            return (IntegerValue)bi;
        } else { 
garciay's avatar
garciay committed
//            TERFactory.getInstance().logDebug("getBigInteger: else");
filatov's avatar
filatov committed
            IntegerValue i = (IntegerValue) _tciFactory.getInteger().newInstance();
garciay's avatar
garciay committed
//            TERFactory.getInstance().logDebug("getBigInteger: i=" + i);
            i.setInteger(value.intValue());
    @Override
    public void setInteger(BigInteger value, IntegerValue setInt) {
        ((IntegerValueEx)setInt).setInt64(value.longValue());
    }
    
    @Override
    public long getBigInteger(final IntegerValue iv) {
        return ((IntegerValueEx)iv).getInt64();
    }

filatov's avatar
filatov committed
    @Override
    public OctetstringValue getOctetstring() {
        return (OctetstringValue)_tciFactory.getOctetstring().newInstance();
    }

    /** Constructs and returns a basic TTCN-3 string type
     * 
     * @return An instance of Type representing a TTCN-3 string type
     */
    @Override
    public CharstringValue getCharstringValue() {
        return (CharstringValue)_tciFactory.getCharstring().newInstance();
    }

filatov's avatar
filatov committed
    @Override
    public FloatValue getFloat() {
        return (FloatValue)_tciFactory.getFloat().newInstance();
    }

    @Override
    public Value getUnionValue(final Type decodingHypothesis, final String variantName) {
garciay's avatar
garciay committed
//        TERFactory.getInstance().logDebug(">>> getUnionValue: " + decodingHypothesis.getName() + ", " + variantName);
filatov's avatar
filatov committed
        
        String variantTypeName = decodingHypothesis.getDefiningModule().getModuleName() + "." + decodingHypothesis.getName() + "." + variantName;
garciay's avatar
garciay committed
//        TERFactory.getInstance().logDebug("variantTypeName is " + variantTypeName);
        Type variantType = getTypeForName(variantTypeName);
filatov's avatar
filatov committed
        if(variantType != null) {
            Value testVal = variantType.newInstance();
            if(testVal != null) {
garciay's avatar
garciay committed
//                TERFactory.getInstance().logDebug("Variant value has been created.");
filatov's avatar
filatov committed
                return testVal;
            }
        }
garciay's avatar
garciay committed
        TERFactory.getInstance().logError("variantType is null");
garciay's avatar
garciay committed
        TERFactory.getInstance().logDebug("Variant value hasn't been created.");
filatov's avatar
filatov committed
        return null;
    }
    
    @Override
    public Type getTypeForName(final String type) { 
//        TERFactory.getInstance().logDebug("TciCDWrapper.getTypeForName: " + type);
        Type originalType; 
        if (type.indexOf("DecodedBtpPayload") != -1) {
            if (type.endsWith("camPacket")) {
                originalType = _tciFactory.getTypeForName("CAM_PDU_Descriptions.CAM");
            } else if (type.endsWith("denmPacket")) {
                originalType = _tciFactory.getTypeForName("DENM_PDU_Descriptions.DENM");
            } else if (type.endsWith("mapemPacket")) {
                originalType = _tciFactory.getTypeForName("MAPEM_PDU_Descriptions.MAPEM");
            } else if (type.endsWith("spatemPacket")) {
                originalType = _tciFactory.getTypeForName("MAPEM_PDU_Descriptions.SPATEM");
            } else if (type.endsWith("ivimPacket")) {
                originalType = _tciFactory.getTypeForName("IVIM_PDU_Descriptions.IVIM");
            } else {
                originalType = _tciFactory.getTypeForName(type);
            }
        } else {
            originalType = _tciFactory.getTypeForName(type);
        }
//        TERFactory.getInstance().logDebug("TciCDWrapper.getTypeForName: " + originalType.getName());
        return originalType;
filatov's avatar
filatov committed
    } // End of method getTypeForName
    
    @Override
    public BooleanValue getBoolean() {
        return (BooleanValue)_tciFactory.getBoolean().newInstance();
    }

    @Override
    public EnumeratedValue getEnumValue(String typeName) {
        return (EnumeratedValue)_tciFactory.getTypeForName(typeName).newInstance();
    }
    
    @Override
    public RecordValue getRecordValue(final String typeName) {
        return (RecordValue)_tciFactory.getTypeForName(typeName).newInstance();
    }

    @Override
    public RecordOfValue getRecordOfValue(final String typeName) {
        return (RecordOfValue)_tciFactory.getTypeForName(typeName).newInstance();
    }

    @Override
    public void setInteger(IntegerValue intValue, final Integer value) {
        intValue.setInteger(value);
    }
    
    @Override
    public void logDebug(String debugMessage) {
        _logger.info(debugMessage);
    }

    @Override
    public void logError(String errorMessage) {
        _logger.severe(errorMessage);
    }

filatov's avatar
filatov committed
} // End of class TciCDWrapper