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

com.guigarage.toggles.DefaultFeatureToggle Maven / Gradle / Ivy

The newest version!
package com.guigarage.toggles;

import org.togglz.core.Feature;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Function;

/**
 * Default feature toggle. The toggle is observable and can be generated by ObservableToggleManager
 * 
 * @author Hendrik Ebbers
 * @see ObservableToggleManager
 *
 */
public class DefaultFeatureToggle implements ObservableFeatureToggle, FeatureStateListener {

	private Feature feature;
	
	private Function activeCheck;
	
	private List listeners;
	
	/**
	 * Default Constructor
	 * 
	 * @param feature The Togglz feature that is wrapped by this toggle
	 * @param activeCheck a function to check the active state of the toggle
	 */
	protected DefaultFeatureToggle(Feature feature, Function activeCheck) {
		this.feature = feature;
		this.activeCheck = activeCheck;
		listeners = new CopyOnWriteArrayList<>();
	}

	/* (non-Javadoc)
	 * @see com.guigarage.toggles.ObservableFeatureToggle#isActive()
	 */
	public boolean isActive() {
		return activeCheck.apply(feature);
	}

	/* (non-Javadoc)
	 * @see com.guigarage.toggles.ObservableFeatureToggle#getName()
	 */
	public String getName() {
		return feature.name();
	}

	/* (non-Javadoc)
	 * @see com.guigarage.toggles.FeatureObservable#addListener(com.guigarage.toggles.FeatureStateListener)
	 */
	@Override
	public void addListener(FeatureStateListener listener) {
		listeners.add(listener);
	}

	/* (non-Javadoc)
	 * @see com.guigarage.toggles.FeatureObservable#removeListener(com.guigarage.toggles.FeatureStateListener)
	 */
	@Override
	public void removeListener(FeatureStateListener listener) {
		listeners.remove(listener);
	}

	protected void fireStateChanged(boolean active) {
		for(FeatureStateListener listener : listeners) {
			listener.stateChanged(this.feature, active);
		}
	}
	
	/* (non-Javadoc)
	 * @see com.guigarage.toggles.FeatureStateListener#stateChanged(org.togglz.core.Feature, boolean)
	 */
	@Override
	public void stateChanged(Feature feature, boolean active) {
		if(this.feature.equals(feature)) {
			fireStateChanged(active);
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy