/*
* Copyright (c) 2010, grossmann
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of the jo-widgets.org nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL jo-widgets.org BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*/
package org.jowidgets.api.command;
public final class EnabledState implements IEnabledState {
/**
* A enabled state constant for enabled = true
*/
public static final EnabledState ENABLED = new EnabledState();
/**
* A enabled state constant for enabled = false. This enabled state has no reason!
* For better usability of the application provide information why its is disabled
* to the user with help of the method {@link #disabled(String)}
*/
public static final EnabledState DISABLED = new EnabledState(false, null);
private final boolean enabled;
private final String reason;
private EnabledState() {
this(true, null);
}
private EnabledState(final boolean enabled, final String reason) {
this.enabled = enabled;
this.reason = reason;
}
@Override
public boolean isEnabled() {
return enabled;
}
@Override
public String getReason() {
return reason;
}
/**
* Creates a new enabled state that is disabled
*
* @param reason The reason why it is disabled
*
* @return The created enabled state
*/
public static EnabledState disabled(final String reason) {
return new EnabledState(false, reason);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (enabled ? 1231 : 1237);
result = prime * result + ((reason == null) ? 0 : reason.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final EnabledState other = (EnabledState) obj;
if (enabled != other.enabled) {
return false;
}
if (reason == null) {
if (other.reason != null) {
return false;
}
}
else if (!reason.equals(other.reason)) {
return false;
}
return true;
}
@Override
public String toString() {
return "EnabledState [enabled=" + enabled + ", reason=" + reason + "]";
}
}