Package org.freeplane.main.application

Source Code of org.freeplane.main.application.HttpVersionClient

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 java.util.Properties;

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;
  private URL remoteVersionDownloadUrl;
  private URL remoteVersionChangelogUrl;

  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;

    try {
      if (isPropertyUrl(url))
          parseProperties(url, currentVersion);
      else
        parseHistory(url, currentVersion);
    }
    catch (final NullPointerException e) {
        LogUtils.warn("problem with update check for url (" + url + ")", e);
    }
    catch (final IOException e) {
      LogUtils.warn("Could not read update url (" + url + ") - check your internet connection.");
    }
    catch (final IllegalArgumentException e) {
            LogUtils.warn("Could not read version from " + url + ":" + e.getMessage());
    }
  }

    private boolean isPropertyUrl(final URL url) {
        return url.getPath() != null && url.getPath().endsWith(".properties");
    }

    private boolean parseProperties(final URL url, final FreeplaneVersion currentVersion) throws IOException {
        Properties versionProperties = new Properties();
        versionProperties.load(new InputStreamReader(url.openConnection().getInputStream()));

        // if the 'version' property doesn't exist, an IllegalArgumentException will be raised since it's mandatory
        if (versionProperties.getProperty("version") != null) {
            remoteVersion = FreeplaneVersion.getVersion(versionProperties.getProperty("version"));
            successful = true;
            // optional properties
            remoteVersionDownloadUrl = parseUrl(versionProperties.getProperty("downloadUrl"));
            remoteVersionChangelogUrl = parseUrl(versionProperties.getProperty("changelogUrl"));
            return remoteVersion.compareTo(currentVersion) > 0;
        } else {
            LogUtils.warn("add-on update: no version found in " + url);
            return false;
        }
    }

    private void parseHistory(final URL url, final FreeplaneVersion currentVersion) throws IOException {
        BufferedReader in = null;
        try {
            // "version.txt" format
            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) {
                parseHistory(currentVersion, in, line);
            }
        }
        finally {
            if (in != null) {
                try {
                    in.close();
                }
                catch (final IOException e) {
                    LogUtils.warn("Couldn't close buffered reader.");
                }
            }
        }
    }

    private void parseHistory(FreeplaneVersion currentVersion, BufferedReader in, String firstLine) throws IOException {
        final StringBuilder historyBuffer = new StringBuilder();
        historyBuffer.append(firstLine);
        historyBuffer.append('\n');
        for (String 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();
    }

    private URL parseUrl(final String urlString) {
        try {
            return new URL(urlString);
        } catch (final MalformedURLException e) {
          return null;
        }
    }

  public String getHistory() {
    return history;
  }

  public FreeplaneVersion getRemoteVersion() {
    return remoteVersion;
  }

  public URL getRemoteVersionDownloadUrl() {
    return remoteVersionDownloadUrl;
  }

  public URL getRemoteVersionChangelogUrl() {
    return remoteVersionChangelogUrl;
  }
 
 
  public boolean isSuccessful() {
    return successful;
  }
}
TOP

Related Classes of org.freeplane.main.application.HttpVersionClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.