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

fr.soleil.tango.clientapi.command.MockCommand Maven / Gradle / Ivy

There is a newer version: 10.0.0
Show newest version
package fr.soleil.tango.clientapi.command;

import java.util.Arrays;

import org.tango.command.CommandTangoType;
import org.tango.utils.DevFailedUtils;

import fr.esrf.Tango.DevFailed;
import fr.esrf.Tango.DevVarDoubleStringArray;
import fr.esrf.Tango.DevVarLongStringArray;
import fr.esrf.TangoApi.DeviceProxy;
import fr.soleil.tango.clientapi.util.TypeConversionUtil;

public final class MockCommand implements ITangoCommand {

    private static final String DESC = "input type not supported";
    private static final String TANGO_WRONG_DATA_ERROR = "TANGO_WRONG_DATA_ERROR";

    private Object returnMockValue;
    private final Class parameterMockType;
    private final String commandName;
    private final Class returnMockType;
    private boolean returnInput;

    public MockCommand(final String commandName, final Object parameterMockValue, final Object returnMockValue) {
        this.returnMockValue = returnMockValue;
        parameterMockType = parameterMockValue.getClass();
        returnMockType = returnMockValue.getClass();
        if (parameterMockType.equals(returnMockType)) {
            returnInput = true;
        } else {
            returnInput = false;
        }
        this.commandName = commandName;
    }

    public MockCommand(final String commandName) {
        parameterMockType = void.class;
        returnMockType = void.class;
        returnInput = false;
        this.commandName = commandName;
    }

    public MockCommand(final boolean isParameterVoid, final String commandName, final Object mockValue) {
        if (isParameterVoid) {
            parameterMockType = void.class;
            returnMockType = mockValue.getClass();
            returnMockValue = mockValue;
            returnInput = true;
        } else {
            returnMockType = void.class;
            parameterMockType = mockValue.getClass();
            returnInput = false;
        }
        this.commandName = commandName;
    }

    @Override
    public String getCommandName() {
        return commandName;
    }

    @Override
    public void execute() throws DevFailed {
    }

    @Override
    public void execute(final Object value) throws DevFailed {
        if (returnInput) {
            returnMockValue = TypeConversionUtil.castToType(returnMockType, value);
        }
    }

    @Override
    public Object executeExtract(final Object value) throws DevFailed {
        if (returnInput) {
            returnMockValue = TypeConversionUtil.castToType(returnMockType, value);
        }
        return returnMockValue;
    }

    @Override
    public Object executeExtract() throws DevFailed {
        return returnMockValue;
    }

    @Override
    public void insertMixArgin(final String[] numberArgin, final String[] stringArgin) throws DevFailed {
        if (returnInput) {
            if (DevVarDoubleStringArray.class.isAssignableFrom(parameterMockType)) {
                final double[] d = TypeConversionUtil.castToType(double[].class, numberArgin);
                returnMockValue = new DevVarDoubleStringArray(d, stringArgin);
            } else if (DevVarLongStringArray.class.isAssignableFrom(parameterMockType)) {
                final int[] in = TypeConversionUtil.castToType(int[].class, numberArgin);
                returnMockValue = new DevVarLongStringArray(in, stringArgin);
            } else {
                DevFailedUtils.throwDevFailed(TANGO_WRONG_DATA_ERROR, DESC);
            }
        }
    }

    @Override
    public void insertMixArgin(final double[] numberArgin, final String[] stringArgin) throws DevFailed {
        if (returnInput) {
            if (DevVarDoubleStringArray.class.isAssignableFrom(parameterMockType)) {
                returnMockValue = new DevVarDoubleStringArray(Arrays.copyOf(numberArgin, numberArgin.length),
                        Arrays.copyOf(stringArgin, stringArgin.length));
            } else if (DevVarLongStringArray.class.isAssignableFrom(parameterMockType)) {
                final int[] in = TypeConversionUtil.castToType(int[].class, numberArgin);
                returnMockValue = new DevVarLongStringArray(in, Arrays.copyOf(stringArgin, stringArgin.length));
            } else {
                DevFailedUtils.throwDevFailed(TANGO_WRONG_DATA_ERROR, DESC);
            }
        }
    }

    @Override
    public void insertMixArgin(final int[] numberArgin, final String[] stringArgin) throws DevFailed {
        if (returnInput) {
            if (DevVarDoubleStringArray.class.isAssignableFrom(parameterMockType)) {
                final double[] d = TypeConversionUtil.castToType(double[].class, numberArgin);
                returnMockValue = new DevVarDoubleStringArray(d, Arrays.copyOf(stringArgin, stringArgin.length));
            } else if (DevVarLongStringArray.class.isAssignableFrom(parameterMockType)) {
                returnMockValue = new DevVarLongStringArray(Arrays.copyOf(numberArgin, numberArgin.length),
                        Arrays.copyOf(stringArgin, stringArgin.length));
            } else {
                DevFailedUtils.throwDevFailed(TANGO_WRONG_DATA_ERROR, DESC);
            }
        }
    }

    @Override
    public String extractToString(final String separator) throws DevFailed {
        String argout = "";
        if (isArgoutScalar()) {
            argout = returnMockValue.toString();
        } else if (!isArgoutVoid()) {
            final String[] result = TypeConversionUtil.castToType(String[].class, returnMockValue);
            final StringBuffer buff = new StringBuffer();
            for (int i = 0; i < result.length; i++) {
                buff.append(result[i]);
                if (i != result.length - 1) {
                    buff.append(separator);
                }
            }
            argout = buff.toString();
        }
        return argout;
    }

    @Override
    public String[] getNumMixArrayArgout() throws DevFailed {
        final String[] argout;
        if (DevVarDoubleStringArray.class.isAssignableFrom(returnMockType)) {
            final DevVarDoubleStringArray dvdsa = (DevVarDoubleStringArray) returnMockValue;
            argout = TypeConversionUtil.castToType(String[].class, dvdsa.dvalue);
        } else if (DevVarLongStringArray.class.isAssignableFrom(returnMockType)) {
            final DevVarLongStringArray dvlsa = (DevVarLongStringArray) returnMockValue;
            argout = TypeConversionUtil.castToType(String[].class, dvlsa.lvalue);
        } else {
            throw DevFailedUtils.newDevFailed(TANGO_WRONG_DATA_ERROR, DESC);
        }
        return argout;
    }

    @Override
    public String[] getStringMixArrayArgout() throws DevFailed {
        final String[] argout;
        if (DevVarDoubleStringArray.class.isAssignableFrom(returnMockType)) {
            final DevVarDoubleStringArray dvdsa = (DevVarDoubleStringArray) returnMockValue;
            argout = Arrays.copyOf(dvdsa.svalue, dvdsa.svalue.length);
        } else if (DevVarLongStringArray.class.isAssignableFrom(returnMockType)) {
            final DevVarLongStringArray dvlsa = (DevVarLongStringArray) returnMockValue;
            argout = Arrays.copyOf(dvlsa.svalue, dvlsa.svalue.length);
        } else {
            throw DevFailedUtils.newDevFailed(TANGO_WRONG_DATA_ERROR, DESC);
        }
        return argout;
    }

    @Override
    public double[] getNumDoubleMixArrayArgout() throws DevFailed {
        final double[] argout;
        if (DevVarDoubleStringArray.class.isAssignableFrom(returnMockType)) {
            final DevVarDoubleStringArray dvdsa = (DevVarDoubleStringArray) returnMockValue;
            argout = Arrays.copyOf(dvdsa.dvalue, dvdsa.dvalue.length);
        } else if (DevVarLongStringArray.class.isAssignableFrom(returnMockType)) {
            final DevVarLongStringArray dvlsa = (DevVarLongStringArray) returnMockValue;
            argout = TypeConversionUtil.castToType(double[].class, dvlsa.lvalue);
        } else {
            throw DevFailedUtils.newDevFailed(TANGO_WRONG_DATA_ERROR, DESC);
        }
        return argout;
    }

    @Override
    public int[] getNumLongMixArrayArgout() throws DevFailed {
        final int[] argout;
        if (DevVarLongStringArray.class.isAssignableFrom(returnMockType)) {
            final DevVarLongStringArray dvlsa = (DevVarLongStringArray) returnMockValue;
            argout = Arrays.copyOf(dvlsa.lvalue, dvlsa.lvalue.length);
        } else {
            throw DevFailedUtils.newDevFailed(TANGO_WRONG_DATA_ERROR, DESC);
        }
        return argout;
    }

    @Override
    public boolean isArginScalar() throws DevFailed {
        return !parameterMockType.isArray();
    }

    @Override
    public boolean isArginSpectrum() throws DevFailed {
        return parameterMockType.isArray() && !isArginVoid();
    }

    @Override
    public boolean isArginVoid() throws DevFailed {
        return void.class.isAssignableFrom(parameterMockType);
    }

    @Override
    public boolean isArgoutVoid() throws DevFailed {
        return void.class.isAssignableFrom(returnMockType);
    }

    @Override
    public boolean isArgoutSpectrum() throws DevFailed {
        return returnMockType.isArray();
    }

    @Override
    public boolean isArginMixFormat() throws DevFailed {
        return DevVarDoubleStringArray.class.isAssignableFrom(parameterMockType)
                || DevVarLongStringArray.class.isAssignableFrom(parameterMockType);
    }

    @Override
    public boolean isArgoutScalar() throws DevFailed {
        return !returnMockType.isArray() && !isArgoutVoid();
    }

    @Override
    public boolean isArgoutMixFormat() throws DevFailed {
        return DevVarDoubleStringArray.class.isAssignableFrom(returnMockType)
                || DevVarLongStringArray.class.isAssignableFrom(returnMockType);
    }

    @Override
    public DeviceProxy getDeviceProxy() {
        return null;
    }

    @Override
    public int getArginType() throws DevFailed {
        return CommandTangoType.getTypeFromClass(parameterMockType).getTangoIDLType();
    }

    @Override
    public int getArgoutType() throws DevFailed {
        return CommandTangoType.getTypeFromClass(returnMockType).getTangoIDLType();
    }

    @Override
    public void setTimeout(final int timeout) {
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy