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

org.bidib.wizard.gateway.model.node.ProxyNode Maven / Gradle / Ivy

package org.bidib.wizard.gateway.model.node;

import java.util.concurrent.atomic.AtomicBoolean;

import org.bidib.jbidibc.messages.SequenceNumberProvider;
import org.bidib.wizard.api.model.NodeInterface;
import org.bidib.wizard.common.node.Node;

/**
 * The {@code ProxyNode} is an extension of a wizard node that has attributes for protocol specific data (sendNum and
 * things like that).
 *
 */
public class ProxyNode extends Node implements SequenceNumberProvider {

    // private static final Logger LOGGER = LoggerFactory.getLogger(ProxyNode.class);

    private static final long serialVersionUID = 1L;

    private int currentFeature;

    private int sendNum;

    private int nodeTabVersion = 1;

    private int localAddress = 0;

    private boolean enabled;

    private AtomicBoolean publishFeatures = new AtomicBoolean();

    /**
     * Create a new node with the associated bidib node.
     * 
     * @param node
     *            the bidib node is mandatory
     * @throws IllegalArgumentException
     *             if the bidib node is null
     */
    public ProxyNode(org.bidib.jbidibc.messages.Node node) {
        super(node);
    }

    /**
     * @return the currentFeature
     */
    public int getCurrentFeature() {
        return currentFeature;
    }

    /**
     * @return the next feature number
     */
    public int getNextFeature() {
        return currentFeature++;
    }

    /**
     * @param currentFeature
     *            the currentFeature to set
     */
    public void setCurrentFeature(int currentFeature) {
        this.currentFeature = currentFeature;
    }

    /**
     * @return the publishFeatures
     */
    public AtomicBoolean getPublishFeatures() {
        return publishFeatures;
    }

    /**
     * @param publishFeatures
     *            the publishFeatures to set
     */
    public void setPublishFeatures(boolean publishFeatures) {
        this.publishFeatures.set(publishFeatures);
    }

    /**
     * Reset the send message number.
     */
    public void resetSendNum() {
        LOGGER.info("Reset the sendNum to 0.");
        sendNum = 0;
    }

    public int getCurrentSendNum() {
        return sendNum;
    }

    @Override
    public int getNextSendMessageNum() {
        int nextSendMessageNum = sendNum;
        sendNum++;
        if (sendNum > 255) {
            sendNum = 0;
        }

        LOGGER.info("Get the nextSendMessageNum: {}", nextSendMessageNum);

        return nextSendMessageNum;
    }

    /**
     * @return the nodeTabVersion
     */
    public int getNodeTabVersion() {
        return nodeTabVersion;
    }

    /**
     * @param nodeTabVersion
     *            the nodeTabVersion to set
     */
    public void setNodeTabVersion(int nodeTabVersion) {
        this.nodeTabVersion = nodeTabVersion;
    }

    /**
     * @return the localAddress
     */
    public int getLocalAddress() {
        return localAddress;
    }

    /**
     * @param localAddress
     *            the localAddress to set
     */
    public void setLocalAddress(int localAddress) {
        this.localAddress = localAddress;
    }

    /**
     * @return the enabled
     */
    public boolean isEnabled() {
        return enabled;
    }

    /**
     * @param enabled
     *            the enabled to set
     */
    public void setEnabled(boolean enabled) {
        LOGGER.info("Update the enabled state for node: {}, enabled: {}", this, enabled);
        boolean oldValue = this.enabled;

        this.enabled = enabled;

        firePropertyChange(PROPERTY_ENABLED, oldValue, enabled);
    }

    @Override
    public boolean equals(Object other) {
        LOGGER.debug("equals, other: {}", other);
        if (other != null) {
            return other.hashCode() == hashCode();
        }
        return false;
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    /**
     * Get the node as {@code ProxyNode} instance.
     * 
     * @param node
     *            the node
     * @return the node as {@code ProxyNode} instance or {@code null} if the node is not a {@code ProxyNode}.
     */
    public static ProxyNode getProxyNode(final NodeInterface node) {
        if (node instanceof ProxyNode) {
            return (ProxyNode) node;
        }

        throw new IllegalArgumentException("The provided node is not a ProxyNode: " + node);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy