/* * Strongback * Copyright 2015, Strongback and individual contributors by the @authors tag. * See the COPYRIGHT.txt in the distribution for a full listing of individual * contributors. * * Licensed under the MIT License; you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://opensource.org/licenses/MIT * 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 org.strongback.components; import org.strongback.annotation.ThreadSafe; import org.strongback.command.Requirable; /** * A solenoid is a device that can be extended and retracted. * * @author Zach Anderson */ @ThreadSafe public interface Solenoid extends Requirable { /** * The direction of the solenoid. */ static enum Direction { /** The solenoid is extending. */ EXTENDING, /** The solenoid is retracting. */ RETRACTING, /** The solenoid is stopped. */ STOPPED; } /** * Get the current direction of this solenoid. * * @return the current direction; never null */ Direction getDirection(); /** * Extends this solenoid. * @return this object to allow chaining of methods; never null */ Solenoid extend(); /** * Retracts this solenoid. * @return this object to allow chaining of methods; never null */ Solenoid retract(); /** * Determine if this solenoid is or was extending. * * @return {@code true} if this solenoid is in the process of extending but not yet fully extended, or {@code false} * otherwise */ default boolean isExtending() { return getDirection() == Direction.EXTENDING; } /** * Determine if this solenoid is or was retracting. * * @return {@code true} if this solenoid is in the process of retracting but not yet fully retracted, or {@code false} * otherwise */ default boolean isRetracting() { return getDirection() == Direction.RETRACTING; } /** * Determine if this solenoid is stopped. * * @return {@code true} if this solenoid is not retracting or extending, or false otherwise */ default boolean isStopped() { return getDirection() == Direction.STOPPED; } }