package org.freeplane.main.application; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import org.freeplane.core.util.FreeplaneVersion; import org.freeplane.core.util.LogUtils; /** * Handles communication with update webservice. * @author robert ladstaetter */ class HttpVersionClient { private static URL getUrl(final String versionUrl) { try { return new URL(versionUrl); } catch (final MalformedURLException e) { return null; } } private String history; private FreeplaneVersion remoteVersion; private boolean successful; public HttpVersionClient(final String versionUrl, final FreeplaneVersion currentVersion) { this(HttpVersionClient.getUrl(versionUrl), currentVersion); } public HttpVersionClient(final URL url, final FreeplaneVersion currentVersion) { remoteVersion = null; history = ""; successful = false; BufferedReader in = null; try { in = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream())); String line = in.readLine(); while (line != null && !line.startsWith("=====")) { line = in.readLine(); } while (line != null && line.startsWith("=====")) { line = in.readLine(); } if (line == null) { return; } remoteVersion = FreeplaneVersion.getVersion(line); successful = true; if (remoteVersion.compareTo(currentVersion) <= 0) { return; } final StringBuilder historyBuffer = new StringBuilder(); historyBuffer.append(line); historyBuffer.append('\n'); for (line = in.readLine(); line != null; line = in.readLine()) { try { final FreeplaneVersion version = FreeplaneVersion.getVersion(line); if (version.compareTo(currentVersion) <= 0) { break; } } catch (final IllegalArgumentException e) { } historyBuffer.append(line); historyBuffer.append('\n'); } history = historyBuffer.toString(); } catch (final NullPointerException e) { return; } catch (final IOException e) { LogUtils.warn("Could not read update url - check your internet connection."); return; } catch (final IllegalArgumentException e) { LogUtils.warn("Could not read version."); return; } finally { if (in != null) { try { in.close(); } catch (final IOException e) { LogUtils.warn("Couldn't close buffered reader."); return; } } } } public String getHistory() { return history; } public FreeplaneVersion getRemoteVersion() { return remoteVersion; } public boolean isSuccessful() { return successful; } }