package com.github.vbauer.jconditions.checker; import com.github.vbauer.jconditions.annotation.ResourceIsAvailable; import com.github.vbauer.jconditions.core.CheckerContext; import com.github.vbauer.jconditions.core.ConditionChecker; import com.github.vbauer.jconditions.util.FSUtils; import com.github.vbauer.jconditions.util.NetUtils; import com.github.vbauer.jconditions.util.PropUtils; import java.io.File; import java.net.URLConnection; /** * @author Vladislav Bauer */ public class ResourceIsAvailableChecker implements ConditionChecker<ResourceIsAvailable> { /** * {@inheritDoc} */ @Override public boolean isSatisfied( final CheckerContext<ResourceIsAvailable> context ) throws Exception { final ResourceIsAvailable annotation = context.getAnnotation(); final String source = NetUtils.fixScheme(PropUtils.injectProperties(annotation.source())); final String target = PropUtils.injectProperties(annotation.target()); final int timeout = annotation.timeout(); final boolean cache = annotation.cache(); if (!FSUtils.fileExists(target) || !cache && FSUtils.deleteFile(target)) { final URLConnection urlConnection = NetUtils.connectURL(source, timeout); final File file = NetUtils.copyURLContentToFile(urlConnection, target); if (!cache) { file.deleteOnExit(); } return FSUtils.fileExists(target); } return true; } }