/* 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)); } } }