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

ro.ciprianpascu.sbus.procimg.SimpleProcessImage Maven / Gradle / Ivy

Go to download

jamod is an object oriented implementation of the S-Bus protocol, realized 100% in Java. It allows to quickly realize master and slave applications in various transport flavors (IP and serial).

The newest version!
/**
 * Copyright 2002-2010 jamod development team
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ***/

package ro.ciprianpascu.sbus.procimg;

import java.util.Vector;

/**
 * Class implementing a simple process image
 * to be able to run unit tests or handle
 * simple cases.
 *
 * @author Dieter Wimberger
 * @author Ciprian Pascu

 * @version %I% (%G%)
 */
public class SimpleProcessImage implements ProcessImageImplementation {

    // instance attributes
    protected Vector m_DigitalInputs;
    protected Vector m_DigitalOutputs;
    protected Vector m_InputRegisters;
    protected Vector m_Registers;
    protected boolean m_Locked = false;

    /**
     * Constructs a new {@link SimpleProcessImage} instance.
     */
    public SimpleProcessImage() {
        m_DigitalInputs = new Vector();
        m_DigitalOutputs = new Vector();
        m_InputRegisters = new Vector();
        m_Registers = new Vector();
    }// SimpleProcessImage

    public boolean isLocked() {
        return m_Locked;
    }// isLocked

    public void setLocked(boolean locked) {
        m_Locked = locked;
    }// setLocked

    @Override
    public void addDigitalIn(DigitalIn di) {
        if (!isLocked()) {
            m_DigitalInputs.addElement(di);
        }
    }// addDigitalIn

    @Override
    public void removeDigitalIn(DigitalIn di) {
        if (!isLocked()) {
            m_DigitalInputs.removeElement(di);
        }
    }// removeDigitalIn

    @Override
    public void setDigitalIn(int ref, DigitalIn di) throws IllegalAddressException {
        if (!isLocked()) {
            try {
                m_DigitalInputs.setElementAt(di, ref);
            } catch (IndexOutOfBoundsException ex) {
                throw new IllegalAddressException();
            }
        }
    }// setDigitalIn

    @Override
    public DigitalIn getDigitalIn(int ref) throws IllegalAddressException {

        try {
            return (DigitalIn) m_DigitalInputs.elementAt(ref);
        } catch (IndexOutOfBoundsException ex) {
            throw new IllegalAddressException();
        }
    }// getDigitalIn

    @Override
    public int getDigitalInCount() {
        return m_DigitalInputs.size();
    }// getDigitalInCount

    @Override
    public DigitalIn[] getDigitalInRange(int ref, int count) {
        // ensure valid reference range
        if (ref < 0 || ref + count > m_DigitalInputs.size()) {
            throw new IllegalAddressException();
        } else {
            DigitalIn[] dins = new DigitalIn[count];
            for (int i = 0; i < dins.length; i++) {
                dins[i] = getDigitalIn(ref + i);
            }
            return dins;
        }
    }// getDigitalInRange

    @Override
    public void addDigitalOut(DigitalOut _do) {
        if (!isLocked()) {
            m_DigitalOutputs.addElement(_do);
        }
    }// addDigitalOut

    @Override
    public void removeDigitalOut(DigitalOut _do) {
        if (!isLocked()) {
            m_DigitalOutputs.removeElement(_do);
        }
    }// removeDigitalOut

    @Override
    public void setDigitalOut(int ref, DigitalOut _do) throws IllegalAddressException {
        if (!isLocked()) {
            try {
                m_DigitalOutputs.setElementAt(_do, ref);
            } catch (IndexOutOfBoundsException ex) {
                throw new IllegalAddressException();
            }
        }
    }// setDigitalOut

    @Override
    public DigitalOut getDigitalOut(int ref) throws IllegalAddressException {
        try {
            return (DigitalOut) m_DigitalOutputs.elementAt(ref);
        } catch (IndexOutOfBoundsException ex) {
            throw new IllegalAddressException();
        }
    }// getDigitalOut

    @Override
    public int getDigitalOutCount() {
        return m_DigitalOutputs.size();
    }// getDigitalOutCount

    @Override
    public DigitalOut[] getDigitalOutRange(int ref, int count) {
        // ensure valid reference range
        if (ref < 0 || ref + count > m_DigitalOutputs.size()) {
            throw new IllegalAddressException();
        } else {
            DigitalOut[] douts = new DigitalOut[count];
            for (int i = 0; i < douts.length; i++) {
                douts[i] = getDigitalOut(ref + i);
            }
            return douts;
        }
    }// getDigitalOutRange

    @Override
    public void addInputRegister(InputRegister reg) {
        if (!isLocked()) {
            m_InputRegisters.addElement(reg);
        }
    }// addInputRegister

    @Override
    public void removeInputRegister(InputRegister reg) {
        if (!isLocked()) {
            m_InputRegisters.removeElement(reg);
        }
    }// removeInputRegister

    @Override
    public void setInputRegister(int ref, InputRegister reg) throws IllegalAddressException {
        if (!isLocked()) {
            try {
                m_InputRegisters.setElementAt(reg, ref);
            } catch (IndexOutOfBoundsException ex) {
                throw new IllegalAddressException();
            }
        }
    }// setInputRegister

    @Override
    public InputRegister getInputRegister(int ref) throws IllegalAddressException {

        try {
            return (InputRegister) m_InputRegisters.elementAt(ref);
        } catch (IndexOutOfBoundsException ex) {
            throw new IllegalAddressException();
        }
    }// getInputRegister

    @Override
    public int getInputRegisterCount() {
        return m_InputRegisters.size();
    }// getInputRegisterCount

    @Override
    public InputRegister[] getInputRegisterRange(int ref, int count) {
        // ensure valid reference range
        if (ref < 0 || ref + count > m_InputRegisters.size()) {
            throw new IllegalAddressException();
        } else {
            InputRegister[] iregs = new InputRegister[count];
            for (int i = 0; i < iregs.length; i++) {
                iregs[i] = getInputRegister(ref + i);
            }
            return iregs;
        }
    }// getInputRegisterRange

    @Override
    public void addRegister(Register reg) {
        if (!isLocked()) {
            m_Registers.addElement(reg);
        }
    }// addRegister

    @Override
    public void removeRegister(Register reg) {
        if (!isLocked()) {
            m_Registers.removeElement(reg);
        }
    }// removeRegister

    @Override
    public void setRegister(int ref, Register reg) throws IllegalAddressException {
        if (!isLocked()) {
            try {
                m_Registers.setElementAt(reg, ref);
            } catch (IndexOutOfBoundsException ex) {
                throw new IllegalAddressException();
            }
        }
    }// setRegister

    @Override
    public Register getRegister(int ref) throws IllegalAddressException {

        try {
            return (Register) m_Registers.elementAt(ref);
        } catch (IndexOutOfBoundsException ex) {
            throw new IllegalAddressException();
        }
    }// getRegister

    @Override
    public int getRegisterCount() {
        return m_Registers.size();
    }// getRegisterCount

    @Override
    public Register[] getRegisterRange(int ref, int count) {
        // ensure valid reference range
        if (ref < 0 || ref + count > m_Registers.size()) {
            throw new IllegalAddressException();
        } else {
            Register[] iregs = new Register[count];
            for (int i = 0; i < iregs.length; i++) {
                iregs[i] = getRegister(ref + i);
            }
            return iregs;
        }
    }// getRegisterRange

}// class SimpleProcessImage




© 2015 - 2024 Weber Informatics LLC | Privacy Policy