package com.github.vbauer.jconditions.checker; import com.github.vbauer.jconditions.annotation.PropertyIsDefined; import com.github.vbauer.jconditions.core.CheckerContext; import com.github.vbauer.jconditions.core.ConditionChecker; import com.github.vbauer.jconditions.util.PropUtils; import com.github.vbauer.jconditions.util.TextUtils; /** * @author Vladislav Bauer */ public class PropertyIsDefinedChecker implements ConditionChecker<PropertyIsDefined> { /** * {@inheritDoc} */ @Override public boolean isSatisfied(final CheckerContext<PropertyIsDefined> context) throws Exception { final PropertyIsDefined annotation = context.getAnnotation(); final String[] keys = annotation.keys(); final String[] values = annotation.values(); return isSatisfied(keys, values); } private boolean isSatisfied(final String[] keys, final String[] values) { int index = 0; for (final String key : keys) { final String variable = PropUtils.getSystemProperty( PropUtils.injectProperties(key) ); try { final String value = PropUtils.injectProperties(values[index++]); if (!TextUtils.equalsSafe(variable, value)) { return false; } } catch (final IndexOutOfBoundsException ex) { if (variable == null) { return false; } } } return keys.length > 0; } }