package com.github.vbauer.jconditions.checker;
import com.github.vbauer.jconditions.annotation.UrlIsReachable;
import com.github.vbauer.jconditions.core.CheckerContext;
import com.github.vbauer.jconditions.core.ConditionChecker;
import com.github.vbauer.jconditions.util.NetUtils;
import com.github.vbauer.jconditions.util.PropUtils;
/**
* @author Vladislav Bauer
*/
public class UrlIsReachableChecker implements ConditionChecker<UrlIsReachable> {
/**
* {@inheritDoc}
*/
@Override
public boolean isSatisfied(final CheckerContext<UrlIsReachable> context) throws Exception {
final UrlIsReachable annotation = context.getAnnotation();
final String[] urlAddresses = annotation.value();
final int timeout = annotation.timeout();
return isReachable(urlAddresses, timeout);
}
private boolean isReachable(final String[] urlAddresses, final int timeout) throws Exception {
for (final String urlAddress : urlAddresses) {
final String url = PropUtils.injectProperties(urlAddress);
if (!isReachable(url, timeout)) {
return false;
}
}
return urlAddresses.length > 0;
}
private boolean isReachable(final String url, final int timeout) {
try {
return NetUtils.connectURL(url, timeout) != null;
} catch (final Exception ex) {
return false;
}
}
}