com.archimatetool.editor.actions.CheckForNewVersionAction.java Source code

Java tutorial

Introduction

Here is the source code for com.archimatetool.editor.actions.CheckForNewVersionAction.java

Source

/**
 * This program and the accompanying materials
 * are made available under the terms of the License
 * which accompanies this distribution in the file LICENSE.txt
 */
package com.archimatetool.editor.actions;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.browser.IWebBrowser;
import org.eclipse.ui.browser.IWorkbenchBrowserSupport;

import com.archimatetool.editor.Application;
import com.archimatetool.editor.utils.StringUtils;

/**
 * Check for New Action
 * 
 * @author Phillip Beauvoir
 */
public class CheckForNewVersionAction extends Action {

    String versionFile = "http://www.archimatetool.com/archi-version.txt"; //$NON-NLS-1$

    String downloadPage = "http://www.archimatetool.com/download"; //$NON-NLS-1$

    public CheckForNewVersionAction() {
        super(Messages.CheckForNewVersionAction_0);
    }

    String getOnlineVersion(URL url) throws IOException {
        URLConnection connection = url.openConnection();
        connection.connect();

        InputStream is = connection.getInputStream();
        char[] buf = new char[32];
        Reader r = new InputStreamReader(is, "UTF-8"); //$NON-NLS-1$
        StringBuilder s = new StringBuilder();
        while (true) {
            int n = r.read(buf);
            if (n < 0) {
                break;
            }
            s.append(buf, 0, n);
        }

        is.close();
        r.close();

        return s.toString();
    }

    @Override
    public void run() {
        try {
            URL url = new URL(versionFile);
            String newVersion = getOnlineVersion(url);

            // Get this app's main version number
            String thisVersion = System.getProperty(Application.APPLICATION_VERSIONID);

            if (StringUtils.compareVersionNumbers(newVersion, thisVersion) > 0) {
                boolean reply = MessageDialog.openQuestion(null, Messages.CheckForNewVersionAction_1,
                        Messages.CheckForNewVersionAction_2 + " (" + newVersion + "). " + //$NON-NLS-1$ //$NON-NLS-2$
                                Messages.CheckForNewVersionAction_3);

                if (reply) {
                    IWorkbenchBrowserSupport support = PlatformUI.getWorkbench().getBrowserSupport();
                    IWebBrowser browser = support.getExternalBrowser();
                    if (browser != null) {
                        URL url2 = new URL(downloadPage);
                        browser.openURL(url2);
                    }
                }
            } else {
                MessageDialog.openInformation(null, Messages.CheckForNewVersionAction_1,
                        Messages.CheckForNewVersionAction_4);
            }
        } catch (MalformedURLException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
            showErrorMessage(Messages.CheckForNewVersionAction_5);
            return;
        } catch (PartInitException ex) {
            ex.printStackTrace();
        }

    };

    private void showErrorMessage(String message) {
        MessageDialog.openError(null, Messages.CheckForNewVersionAction_6, message);
    }
}