From 888a48a231ba221df5f8ff1fa480ffe3da831e81 Mon Sep 17 00:00:00 2001 From: Kyle Robertze Date: Sat, 24 Oct 2015 00:08:11 +0200 Subject: [PATCH] fixed self-updating --- .../client/domain/services/Updater.java | 8 ++--- .../ui/controller/UpdateController.java | 5 ++-- .../shared/domain/FileSerializer.java | 8 ++--- server/config.properties | 2 ++ .../server/domain/Configuration.java | 9 ++++++ .../server/domain/services/Updater.java | 8 ++--- .../shared/domain/FileSerializer.java | 8 ++--- .../server/domain/ConfigurationTest.java | 30 +++++++++++-------- 8 files changed, 48 insertions(+), 30 deletions(-) diff --git a/client/src/main/java/com/kritsit/casetracker/client/domain/services/Updater.java b/client/src/main/java/com/kritsit/casetracker/client/domain/services/Updater.java index 76983df..65afb42 100644 --- a/client/src/main/java/com/kritsit/casetracker/client/domain/services/Updater.java +++ b/client/src/main/java/com/kritsit/casetracker/client/domain/services/Updater.java @@ -39,9 +39,9 @@ public File update() throws IOException { logger.info("Updating client..."); ZipFile updateZip = downloadUpdate(); unzip(updateZip); - copyDirectory(root, new File("")); + copyDirectory(root, new File(".")); cleanUp(); - return getJar(new File("")); + return getJar(new File(".")); } public void launch(File jar) throws IOException { @@ -76,9 +76,9 @@ private void unzip(ZipFile file) throws IOException { logger.debug("Extracting {}", entry.toString()); controller.setStatus("Extracting " + entry.toString() + "..."); if (entry.isDirectory()) { - new File(root, entry.getName()).mkdir(); + new File(entry.getName()).mkdir(); } else { - File current = new File(root, entry.getName()); + File current = new File(entry.getName()); current.createNewFile(); int buffer = 2048; try ( diff --git a/client/src/main/java/com/kritsit/casetracker/client/domain/ui/controller/UpdateController.java b/client/src/main/java/com/kritsit/casetracker/client/domain/ui/controller/UpdateController.java index 9c8b775..39bbeaf 100644 --- a/client/src/main/java/com/kritsit/casetracker/client/domain/ui/controller/UpdateController.java +++ b/client/src/main/java/com/kritsit/casetracker/client/domain/ui/controller/UpdateController.java @@ -78,6 +78,7 @@ private void updateClient() { btnUpdate.setDisable(true); client = updater.update(); setStatus("Client updated, restart required."); + btnUpdate.setText("Restart"); btnUpdate.setDisable(false); } catch (IOException ex) { logger.error("Unable to download update", ex); @@ -85,8 +86,8 @@ private void updateClient() { btnUpdate.setDisable(false); btnUpdate.setText("Check for update"); Alert alert = new Alert(AlertType.ERROR); - alert.setTitle("Restart"); - alert.setHeaderText("Error during restart"); + alert.setTitle("Update"); + alert.setHeaderText("Error during update"); alert.setContentText("The update could not be downloaded: " + ex.getMessage()); alert.showAndWait(); } diff --git a/client/src/main/java/com/kritsit/casetracker/shared/domain/FileSerializer.java b/client/src/main/java/com/kritsit/casetracker/shared/domain/FileSerializer.java index a75eb0b..6ab041f 100644 --- a/client/src/main/java/com/kritsit/casetracker/shared/domain/FileSerializer.java +++ b/client/src/main/java/com/kritsit/casetracker/shared/domain/FileSerializer.java @@ -30,15 +30,15 @@ public byte[] serialize(File f) throws IOException { public void write(File f, byte[] bytes) throws IOException { logger.info("Writing to file {}", f.getAbsolutePath()); - boolean dirExists = f.mkdirs(); - boolean fileExists = f.delete(); - if (dirExists && fileExists) { + boolean dirExists = f.getAbsoluteFile().getParentFile().mkdirs(); + boolean fileExists = f.createNewFile(); + if (fileExists) { try (FileOutputStream output = new FileOutputStream(f)) { output.write(bytes); output.flush(); } } else { - throw new IOException("Unable to write evidence to disk"); + throw new IOException("Unable to write to " + f.getAbsolutePath()); } } } diff --git a/server/config.properties b/server/config.properties index 08f794f..e507205 100644 --- a/server/config.properties +++ b/server/config.properties @@ -3,3 +3,5 @@ db-port=3306 db-schema=CaseTracker db-user=CaseTracker db-password=casetracker + +client-version=0.3.1-ALPHA diff --git a/server/src/main/java/com/kritsit/casetracker/server/domain/Configuration.java b/server/src/main/java/com/kritsit/casetracker/server/domain/Configuration.java index 0efda88..96ff875 100644 --- a/server/src/main/java/com/kritsit/casetracker/server/domain/Configuration.java +++ b/server/src/main/java/com/kritsit/casetracker/server/domain/Configuration.java @@ -14,6 +14,7 @@ public class Configuration { private static final Logger logger = LoggerFactory.getLogger(Configuration.class); private static Map database; + private static String clientVersion; public static String getDbHost() { return getDatabaseProperty("host"); @@ -35,6 +36,13 @@ public static String getDbPassword() { return getDatabaseProperty("password"); } + public static String getClientVersion() { + if (clientVersion == null) { + readConfiguration(); + } + return clientVersion; + } + private static String getDatabaseProperty(String key) { logger.info("Retriving property {}", key); if (database == null) { @@ -56,6 +64,7 @@ private static void readConfiguration() { database.put("schema", config.getProperty("db-schema")); database.put("username", config.getProperty("db-user")); database.put("password", config.getProperty("db-password")); + clientVersion = config.getProperty("client-version"); } catch (NullPointerException | IOException ex) { logger.error("Unable to read configuration", ex); } diff --git a/server/src/main/java/com/kritsit/casetracker/server/domain/services/Updater.java b/server/src/main/java/com/kritsit/casetracker/server/domain/services/Updater.java index b93aa60..85da936 100644 --- a/server/src/main/java/com/kritsit/casetracker/server/domain/services/Updater.java +++ b/server/src/main/java/com/kritsit/casetracker/server/domain/services/Updater.java @@ -1,5 +1,6 @@ package com.kritsit.casetracker.server.domain.services; +import com.kritsit.casetracker.server.domain.Configuration; import com.kritsit.casetracker.shared.domain.FileSerializer; import org.slf4j.LoggerFactory; @@ -16,13 +17,12 @@ public class Updater implements IUpdateService { private File root; public Updater() { - root = new File(""); + root = new File("."); } public boolean isUpdateRequired(String currentVersion) throws IOException { logger.debug("Checking for update for client version {}", currentVersion); - File client = findClientArchive(); - String requiredVersion = getLatestVersion(client); + String requiredVersion = Configuration.getClientVersion(); return !currentVersion.equals(requiredVersion); } @@ -37,7 +37,7 @@ private File findClientArchive() throws FileNotFoundException { File[] files = root.listFiles(); for (File file : files) { String fileName = file.getName(); - if (fileName.contains("client") && fileName.endsWith(".jar")) { + if (fileName.contains("client") && fileName.endsWith(".zip")) { return file; } } diff --git a/server/src/main/java/com/kritsit/casetracker/shared/domain/FileSerializer.java b/server/src/main/java/com/kritsit/casetracker/shared/domain/FileSerializer.java index a75eb0b..6ab041f 100644 --- a/server/src/main/java/com/kritsit/casetracker/shared/domain/FileSerializer.java +++ b/server/src/main/java/com/kritsit/casetracker/shared/domain/FileSerializer.java @@ -30,15 +30,15 @@ public byte[] serialize(File f) throws IOException { public void write(File f, byte[] bytes) throws IOException { logger.info("Writing to file {}", f.getAbsolutePath()); - boolean dirExists = f.mkdirs(); - boolean fileExists = f.delete(); - if (dirExists && fileExists) { + boolean dirExists = f.getAbsoluteFile().getParentFile().mkdirs(); + boolean fileExists = f.createNewFile(); + if (fileExists) { try (FileOutputStream output = new FileOutputStream(f)) { output.write(bytes); output.flush(); } } else { - throw new IOException("Unable to write evidence to disk"); + throw new IOException("Unable to write to " + f.getAbsolutePath()); } } } diff --git a/server/src/test/java/com/kritsit/casetracker/server/domain/ConfigurationTest.java b/server/src/test/java/com/kritsit/casetracker/server/domain/ConfigurationTest.java index 9efd098..704e8a5 100644 --- a/server/src/test/java/com/kritsit/casetracker/server/domain/ConfigurationTest.java +++ b/server/src/test/java/com/kritsit/casetracker/server/domain/ConfigurationTest.java @@ -13,6 +13,9 @@ import java.util.Map; public class ConfigurationTest extends TestCase { + Map database; + String clientVersion; + public ConfigurationTest(String name) { super(name); } @@ -21,26 +24,29 @@ public static Test suite() { return new TestSuite(ConfigurationTest.class); } - public void testDatabaseProperties() throws IOException { - Map database = readConfiguration(); - assertTrue(database.get("host").equals(Configuration.getDbHost())); - assertTrue(database.get("port").equals("" + Configuration.getDbPort())); - assertTrue(database.get("schema").equals(Configuration.getDbSchema())); - assertTrue(database.get("username").equals(Configuration.getDbUsername())); - assertTrue(database.get("password").equals(Configuration.getDbPassword())); - } - - private Map readConfiguration() throws IOException { + public void setUp() throws IOException { Properties config = new Properties(); InputStream in = new FileInputStream(new File("config.properties")); config.load(in); in.close(); - Map database = new HashMap<>(); + database = new HashMap<>(); database.put("host", config.getProperty("db-host")); database.put("port", config.getProperty("db-port")); database.put("schema", config.getProperty("db-schema")); database.put("username", config.getProperty("db-user")); database.put("password", config.getProperty("db-password")); - return database; + clientVersion = config.getProperty("client-version"); + } + + public void testDatabaseProperties() { + assertTrue(database.get("host").equals(Configuration.getDbHost())); + assertTrue(database.get("port").equals("" + Configuration.getDbPort())); + assertTrue(database.get("schema").equals(Configuration.getDbSchema())); + assertTrue(database.get("username").equals(Configuration.getDbUsername())); + assertTrue(database.get("password").equals(Configuration.getDbPassword())); + } + + public void testClientVersion() { + assertTrue(clientVersion.equals(Configuration.getClientVersion())); } }