/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.cismap.commons.capabilities; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import de.cismet.security.WebAccessManager; import de.cismet.tools.CalculationCache; import de.cismet.tools.Calculator; import de.cismet.tools.TimeoutThread; /** * Caches the result of capability requests. * * @author therter * @version $Revision$, $Date$ */ public class CapabilitiesCache extends CalculationCache<String, String> { //~ Static fields/initializers --------------------------------------------- private static final CapabilitiesCache INSTANCE = new CapabilitiesCache(); //~ Constructors ----------------------------------------------------------- /** * Creates a new CapabilitiesCache object. */ private CapabilitiesCache() { super(new TimeoutHttpRequestCalculator()); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public static CapabilitiesCache getInstance() { return INSTANCE; } //~ Inner Classes ---------------------------------------------------------- /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ private static class TimeoutHttpRequestCalculator implements Calculator<String, String> { //~ Methods ------------------------------------------------------------ @Override public String calculate(final String link) throws Exception { final TimeoutHttpRequester r = new TimeoutHttpRequester(link); final StringBuilder tmp; tmp = r.start(15000); return tmp.toString(); } } /** * Performs a httpRequest with a maximum runtime. * * @version $Revision$, $Date$ */ private static class TimeoutHttpRequester extends TimeoutThread<StringBuilder> { //~ Instance fields ---------------------------------------------------- private String url; //~ Constructors ------------------------------------------------------- /** * Creates a new HttpRequester object. * * @param url DOCUMENT ME! */ public TimeoutHttpRequester(final String url) { this.url = url; } //~ Methods ------------------------------------------------------------ @Override public void run() { InputStream is = null; try { final StringBuilder sb = new StringBuilder(""); // NOI18N if (LOG.isDebugEnabled()) { LOG.debug("send Getcapabilities request to the service: " + url); // NOI18N } final URL getCapURL = new URL(url); is = WebAccessManager.getInstance().doRequest(getCapURL); if (Thread.interrupted()) { return; } final BufferedReader br = new BufferedReader(new InputStreamReader(is)); String buffer = null; while ((buffer = br.readLine()) != null) { sb.append(buffer).append("\n"); // NOI18N } result = sb; } catch (Exception e) { exception = e; } finally { if (is != null) { try { is.close(); } catch (IOException ex) { // nothing to do } } } } } }