package com.baselet.diagram; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Scanner; import java.util.TimerTask; import com.baselet.control.enums.Program; import com.baselet.gui.BrowserLauncher; public class UpdateCheckTimerTask extends TimerTask { private static final UpdateCheckTimerTask instance = new UpdateCheckTimerTask(); private UpdateCheckTimerTask() {} public static UpdateCheckTimerTask getInstance() { return instance; } private String filename; public String getFilename() { return filename; } @Override public void run() { try { String newVersionText = getNewVersionTextWithStartupHtmlFormat(); if (newVersionText != null) { // The text is != null if a new version exists filename = StartUpHelpText.createTempFileWithText(newVersionText); } } catch (Exception e) { StartUpHelpText.log.error("Error at checking for new " + Program.getInstance().getProgramName() + " version", e); } } private static String getNewVersionTextWithStartupHtmlFormat() throws IOException { String textFromURL = getNewVersionTextFromURL(); if (textFromURL == null) { return null; } else { return wrapUpdateTextIntoStartupFileHtmlStyle(textFromURL); } } private static String wrapUpdateTextIntoStartupFileHtmlStyle(String textFromURL) throws FileNotFoundException { StringBuilder sb = new StringBuilder(""); Scanner sc = null; try { sc = new Scanner(StartUpHelpText.getStartUpFileName()); while (sc.hasNextLine()) { String line = sc.nextLine(); if (line.contains("<body>")) { break; } sb.append(line).append("\n"); } sb.append(textFromURL).append("</body></html>"); } finally { if (sc != null) { sc.close(); } } return sb.toString(); } private static String getNewVersionTextFromURL() throws IOException { String versionText = BrowserLauncher.readURL(Program.getInstance().getWebsite() + "/current_umlet_version_changes.txt"); versionText = versionText.replace("<", "<").replace(">", ">").replace("&", "&").replace("\"", """); // escape html characters for safety String[] splitString = versionText.split("\n"); String actualVersion = splitString[0]; if (Program.getInstance().getVersion().compareTo(actualVersion) >= 0) { return null; // no newer version found } StringBuilder sb = new StringBuilder(""); sb.append("<p><b>A new version of ").append(Program.getInstance().getProgramName()).append(" (").append(actualVersion).append(") is available at <a href=\"").append(Program.getInstance().getWebsite()).append("\">").append(Program.getInstance().getWebsite().substring("http://".length())).append("</a></b></p>"); // Every line after the first one describes a feature of the new version and will be listed for (int i = 1; i < splitString.length; i++) { sb.append("<p>").append(splitString[i]).append("</p>"); } return sb.toString(); } }