it.geosolutions.geoserver.jms.events.ToggleSwitch.java Source code

Java tutorial

Introduction

Here is the source code for it.geosolutions.geoserver.jms.events.ToggleSwitch.java

Source

/* Copyright (c) 2011 GeoSolutions - http://www.geo-solutions.it/.  All rights reserved.
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package it.geosolutions.geoserver.jms.events;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * An instance of this class can be used to send over the Application Context
 * ToggleEvent events. Those events can be used by the a producer to enable or
 * disable the message events production over the JMS channel.
 * 
 * @see {@link JMSEventListener}
 * 
 * @author Carlo Cancellieri - carlo.cancellieri@geo-solutions.it
 * 
 */
public class ToggleSwitch implements ApplicationContextAware {

    private ApplicationContext ctx;

    /**
     * true if the toggle can run enable and disable publishing events, false
     * otherwise
     */
    private volatile Boolean status = true;

    private final ToggleType toggleType;

    public ToggleSwitch(final ToggleType toggleType) {
        this.toggleType = toggleType;
    }

    public ToggleSwitch(final ApplicationContext ctx, final Boolean status, final ToggleType toggleType) {
        super();
        this.ctx = ctx;
        this.status = status;
        this.toggleType = toggleType;
    }

    /**
     * @param toggleEnabled
     *            set enabled and disabled the toggle itself
     */
    public final void setToggle(boolean status) {
        synchronized (this.status) {
            this.status = status;
        }
    }

    /**
     * @return the true if the toggle can enable and disable, false otherwise
     */
    public final boolean isToggleEnabled() {
        return status;
    }

    public void setApplicationContext(ApplicationContext ctx) {
        this.ctx = ctx;
    }

    public void enable() {
        if (isToggleEnabled()) {
            ctx.publishEvent(new ToggleEvent(Boolean.TRUE, toggleType));
        }
    }

    public void disable() {
        if (isToggleEnabled()) {
            ctx.publishEvent(new ToggleEvent(Boolean.FALSE, toggleType));
        }
    }

}