/*
* Copyright (c) 2005-2016 Vincent Vandenschrick. All rights reserved.
*
* This file is part of the Jspresso framework.
*
* Jspresso is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Jspresso is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Jspresso. If not, see <http://www.gnu.org/licenses/>.
*/
package org.jspresso.framework.model.gate;
/**
* This gate opens and closes based on the value of a boolean property of the
* assigned model.
*
* @author Vincent Vandenschrick
*/
public class BooleanPropertyModelGate extends AbstractPropertyModelGate<Object> {
private boolean negatedByName;
/**
* Configures the boolean property name.
*
* @param booleanPropertyName
* the propertyName to set.
* @deprecated use setPropertyName instead.
*/
@Deprecated
public void setBooleanPropertyName(String booleanPropertyName) {
setPropertyName(booleanPropertyName);
}
/**
* Configures the boolean property name to use. Unless the
* {@code openOnTrue} property is set to {@code false}, the state of
* the gate will follow the boolean property value. It supports
* "<b>!</b>" prefix to negate the property value. It also supports
* non-boolean properties. In that case, the test is performed against the
* {@code property != null} condition.
* @param propertyName the name of the property.
*/
@Override
public void setPropertyName(String propertyName) {
if (propertyName != null && propertyName.startsWith("!")) {
super.setPropertyName(propertyName.substring(1));
negatedByName = true;
} else {
super.setPropertyName(propertyName);
negatedByName = false;
}
}
/**
* {@inheritDoc}
*/
@Override
protected boolean shouldOpen(Object propertyValue) {
boolean shouldOpen = propertyValue != null;
if (propertyValue instanceof Boolean) {
shouldOpen = (Boolean) propertyValue;
}
if (negatedByName) {
return !shouldOpen;
}
return shouldOpen;
}
}