/*
* ARX: Powerful Data Anonymization
* Copyright 2012 - 2017 Fabian Prasser, Florian Kohlmayer and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/package org.deidentifier.arx.gui;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.deidentifier.arx.gui.resources.Resources;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
/**
* This class checks the version number
*
* @author Florian Kohlmayer
*/
public class Update implements Runnable {
/** The UPDATE_URL. */
private static final String UPDATE_URL = "http://arx.deidentifier.org/wp-content/uploads/downloads/version.txt"; //$NON-NLS-1$
/** The shell. */
private final Shell shell;
/** The charset used to read the version number */
private static final Charset CHARSET = StandardCharsets.UTF_8;
/**
* Instantiates a new update.
*
* @param shell the shell
*/
public Update(Shell shell) {
this.shell = shell;
Thread t = new Thread(this);
t.setDaemon(true);
t.start();
}
@Override
public void run() {
// Fetch
final String currentVersion = Resources.getVersion();
final String onlineVersion = getOnlineVersion();
// Compare
if (compareVersions(currentVersion, onlineVersion) < 0) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
MessageDialog.openInformation(shell, Resources.getMessage("Update.1"), Resources.getMessage("Update.2")); //$NON-NLS-1$ //$NON-NLS-2$
}
});
}
}
/**
* Compare version string (e.g. 1.1.0 < 1.2.0).
*
* @param version1 first version string
* @param version2 second version string
* @return the int
*/
private int compareVersions(String version1, String version2) {
try {
String[] version1Parts = version1.split("\\."); //$NON-NLS-1$
String[] version2Parts = version2.split("\\."); //$NON-NLS-1$
int length = Math.max(version1Parts.length, version2Parts.length);
for (int i = 0; i < length; i++) {
int version1Part = i < version1Parts.length ? Integer.parseInt(version1Parts[i]) : 0;
int version2Part = i < version2Parts.length ? Integer.parseInt(version2Parts[i]) : 0;
if (version1Part < version2Part) {
return -1;
}
if (version1Part > version2Part) {
return 1;
}
}
return 0;
} catch (Exception e) {
return 0;
}
}
/**
* Fetches the current version from the website
* @return
*/
private String getOnlineVersion() {
StringBuilder builder = new StringBuilder();
BufferedReader in = null;
try {
in = new BufferedReader(new InputStreamReader(new URL(UPDATE_URL).openStream(), CHARSET ));
String line;
while ((line = in.readLine()) != null) {
builder.append(line).append("\n"); //$NON-NLS-1$
}
} catch (IOException e) {
// Ignore
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
// Ignore
}
}
}
return builder.toString().trim();
}
}