From b2be41e39bc9edc31a5a7477726e323b2b35f0e9 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sun, 22 Feb 2015 14:25:48 +0100 Subject: [PATCH] Refactorings --- .../org/cryptomator/ui/MainController.java | 64 +++++++++---------- .../java/org/cryptomator/ui/MainModule.java | 6 +- .../org/cryptomator/ui/UnlockController.java | 38 +++++------ .../cryptomator/ui/UnlockedController.java | 26 +++----- .../cryptomator/ui/model/VaultFactory.java | 9 +-- main/ui/src/main/resources/fxml/main.fxml | 4 +- main/ui/src/main/resources/fxml/unlocked.fxml | 11 ++-- 7 files changed, 75 insertions(+), 83 deletions(-) diff --git a/main/ui/src/main/java/org/cryptomator/ui/MainController.java b/main/ui/src/main/java/org/cryptomator/ui/MainController.java index 421fcf60f..99b0dc643 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/MainController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/MainController.java @@ -58,7 +58,7 @@ public class MainController implements Initializable, InitializationListener, Un private Stage stage; @FXML - private ContextMenu directoryContextMenu; + private ContextMenu vaultListCellContextMenu; @FXML private ContextMenu addVaultContextMenu; @@ -67,7 +67,7 @@ public class MainController implements Initializable, InitializationListener, Un private HBox rootPane; @FXML - private ListView directoryList; + private ListView vaultList; @FXML private ToggleButton addVaultButton; @@ -94,9 +94,9 @@ public class MainController implements Initializable, InitializationListener, Un this.rb = rb; final ObservableList items = FXCollections.observableList(settings.getDirectories()); - directoryList.setItems(items); - directoryList.setCellFactory(this::createDirecoryListCell); - directoryList.getSelectionModel().getSelectedItems().addListener(this::selectedDirectoryDidChange); + vaultList.setItems(items); + vaultList.setCellFactory(this::createDirecoryListCell); + vaultList.getSelectionModel().getSelectedItems().addListener(this::selectedVaultDidChange); } @FXML @@ -167,55 +167,55 @@ public class MainController implements Initializable, InitializationListener, Un } final Vault vault = vaultFactoy.createVault(vaultPath); - if (!directoryList.getItems().contains(vault)) { - directoryList.getItems().add(vault); + if (!vaultList.getItems().contains(vault)) { + vaultList.getItems().add(vault); } - directoryList.getSelectionModel().select(vault); + vaultList.getSelectionModel().select(vault); } private ListCell createDirecoryListCell(ListView param) { final DirectoryListCell cell = new DirectoryListCell(); - cell.setContextMenu(directoryContextMenu); + cell.setContextMenu(vaultListCellContextMenu); return cell; } - private void selectedDirectoryDidChange(ListChangeListener.Change change) { - final Vault selectedDir = directoryList.getSelectionModel().getSelectedItem(); - if (selectedDir == null) { + private void selectedVaultDidChange(ListChangeListener.Change change) { + final Vault selectedVault = vaultList.getSelectionModel().getSelectedItem(); + if (selectedVault == null) { stage.setTitle(rb.getString("app.name")); showWelcomeView(); - } else if (!Files.isDirectory(selectedDir.getPath())) { + } else if (!Files.isDirectory(selectedVault.getPath())) { Platform.runLater(() -> { - directoryList.getItems().remove(selectedDir); - directoryList.getSelectionModel().clearSelection(); + vaultList.getItems().remove(selectedVault); + vaultList.getSelectionModel().clearSelection(); }); stage.setTitle(rb.getString("app.name")); showWelcomeView(); } else { - stage.setTitle(selectedDir.getName()); - showDirectory(selectedDir); + stage.setTitle(selectedVault.getName()); + showVault(selectedVault); } } @FXML private void didClickRemoveSelectedEntry(ActionEvent e) { - final Vault selectedDir = directoryList.getSelectionModel().getSelectedItem(); - directoryList.getItems().remove(selectedDir); - directoryList.getSelectionModel().clearSelection(); + final Vault selectedDir = vaultList.getSelectionModel().getSelectedItem(); + vaultList.getItems().remove(selectedDir); + vaultList.getSelectionModel().clearSelection(); } // **************************************** // Subcontroller for right panel // **************************************** - private void showDirectory(Vault directory) { + private void showVault(Vault vault) { try { - if (directory.isUnlocked()) { - this.showUnlockedView(directory); - } else if (directory.containsMasterKey()) { - this.showUnlockView(directory); + if (vault.isUnlocked()) { + this.showUnlockedView(vault); + } else if (vault.containsMasterKey()) { + this.showUnlockView(vault); } else { - this.showInitializeView(directory); + this.showInitializeView(vault); } } catch (IOException e) { LOG.error("Failed to analyze directory.", e); @@ -252,25 +252,25 @@ public class MainController implements Initializable, InitializationListener, Un private void showUnlockView(Vault directory) { final UnlockController ctrl = showView("/fxml/unlock.fxml"); - ctrl.setDirectory(directory); + ctrl.setVault(directory); ctrl.setListener(this); } @Override public void didUnlock(UnlockController ctrl) { - showUnlockedView(ctrl.getDirectory()); + showUnlockedView(ctrl.getVault()); Platform.setImplicitExit(false); } - private void showUnlockedView(Vault directory) { + private void showUnlockedView(Vault vault) { final UnlockedController ctrl = showView("/fxml/unlocked.fxml"); - ctrl.setDirectory(directory); + ctrl.setVault(vault); ctrl.setListener(this); } @Override public void didLock(UnlockedController ctrl) { - showUnlockView(ctrl.getDirectory()); + showUnlockView(ctrl.getVault()); if (getUnlockedDirectories().isEmpty()) { Platform.setImplicitExit(true); } @@ -279,7 +279,7 @@ public class MainController implements Initializable, InitializationListener, Un /* Convenience */ public Collection getDirectories() { - return directoryList.getItems(); + return vaultList.getItems(); } public Collection getUnlockedDirectories() { diff --git a/main/ui/src/main/java/org/cryptomator/ui/MainModule.java b/main/ui/src/main/java/org/cryptomator/ui/MainModule.java index 5614f8a5f..37f07159a 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/MainModule.java +++ b/main/ui/src/main/java/org/cryptomator/ui/MainModule.java @@ -31,6 +31,7 @@ import org.cryptomator.webdav.WebDavServer; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.AbstractModule; import com.google.inject.Injector; +import com.google.inject.Provider; import com.google.inject.Provides; import com.google.inject.name.Names; @@ -68,8 +69,9 @@ public class MainModule extends AbstractModule { } @Provides - VaultFactory getVaultFactory(WebDavServer server, Cryptor cryptor, WebDavMounter mounter, DeferredCloser closer) { - return new VaultFactory(server, cryptor, mounter, closer); + @Singleton + VaultFactory getVaultFactory(WebDavServer server, Provider cryptorProvider, WebDavMounter mounter, DeferredCloser closer) { + return new VaultFactory(server, cryptorProvider, mounter, closer); } @Provides diff --git a/main/ui/src/main/java/org/cryptomator/ui/UnlockController.java b/main/ui/src/main/java/org/cryptomator/ui/UnlockController.java index cdc935e5f..06ee77651 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/UnlockController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/UnlockController.java @@ -52,7 +52,7 @@ public class UnlockController implements Initializable { private ResourceBundle rb; private UnlockListener listener; - private Vault directory; + private Vault vault; @FXML private ComboBox usernameBox; @@ -108,23 +108,23 @@ public class UnlockController implements Initializable { setControlsDisabled(true); final String masterKeyFileName = usernameBox.getValue() + Aes256Cryptor.MASTERKEY_FILE_EXT; final String masterKeyBackupFileName = masterKeyFileName + Aes256Cryptor.MASTERKEY_BACKUP_FILE_EXT; - final Path masterKeyPath = directory.getPath().resolve(masterKeyFileName); - final Path masterKeyBackupPath = directory.getPath().resolve(masterKeyBackupFileName); + final Path masterKeyPath = vault.getPath().resolve(masterKeyFileName); + final Path masterKeyBackupPath = vault.getPath().resolve(masterKeyBackupFileName); final CharSequence password = passwordField.getCharacters(); InputStream masterKeyInputStream = null; try { progressIndicator.setVisible(true); masterKeyInputStream = Files.newInputStream(masterKeyPath, StandardOpenOption.READ); - directory.getCryptor().decryptMasterKey(masterKeyInputStream, password); - if (!directory.startServer()) { + vault.getCryptor().decryptMasterKey(masterKeyInputStream, password); + if (!vault.startServer()) { messageLabel.setText(rb.getString("unlock.messageLabel.startServerFailed")); - directory.getCryptor().swipeSensitiveData(); + vault.getCryptor().swipeSensitiveData(); return; } // at this point we know for sure, that the masterkey can be decrypted, so lets make a backup: Files.copy(masterKeyPath, masterKeyBackupPath, StandardCopyOption.REPLACE_EXISTING); - directory.setUnlocked(true); - final Future futureMount = exec.submit(() -> directory.mount()); + vault.setUnlocked(true); + final Future futureMount = exec.submit(() -> vault.mount()); FXThreads.runOnMainThreadWhenFinished(exec, futureMount, this::didUnlockAndMount); FXThreads.runOnMainThreadWhenFinished(exec, futureMount, (result) -> { setControlsDisabled(false); @@ -158,7 +158,7 @@ public class UnlockController implements Initializable { private void findExistingUsernames() { try { - DirectoryStream ds = MasterKeyFilter.filteredDirectory(directory.getPath()); + DirectoryStream ds = MasterKeyFilter.filteredDirectory(vault.getPath()); final String masterKeyExt = Aes256Cryptor.MASTERKEY_FILE_EXT.toLowerCase(); usernameBox.getItems().clear(); for (final Path path : ds) { @@ -171,7 +171,7 @@ public class UnlockController implements Initializable { usernameBox.getSelectionModel().selectFirst(); } } catch (IOException e) { - LOG.trace("Invalid path: " + directory.getPath(), e); + LOG.trace("Invalid path: " + vault.getPath(), e); } } @@ -184,25 +184,25 @@ public class UnlockController implements Initializable { private void didTypeMountName(ObservableValue property, String oldValue, String newValue) { try { - directory.setMountName(newValue); - if (!newValue.equals(directory.getMountName())) { - mountName.setText(directory.getMountName()); + vault.setMountName(newValue); + if (!newValue.equals(vault.getMountName())) { + mountName.setText(vault.getMountName()); } } catch (IllegalArgumentException e) { - mountName.setText(directory.getMountName()); + mountName.setText(vault.getMountName()); } } /* Getter/Setter */ - public Vault getDirectory() { - return directory; + public Vault getVault() { + return vault; } - public void setDirectory(Vault directory) { - this.directory = directory; + public void setVault(Vault vault) { + this.vault = vault; this.findExistingUsernames(); - this.mountName.setText(directory.getMountName()); + this.mountName.setText(vault.getMountName()); } public UnlockListener getListener() { diff --git a/main/ui/src/main/java/org/cryptomator/ui/UnlockedController.java b/main/ui/src/main/java/org/cryptomator/ui/UnlockedController.java index f7369778d..3b51dc017 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/UnlockedController.java +++ b/main/ui/src/main/java/org/cryptomator/ui/UnlockedController.java @@ -27,7 +27,6 @@ import javafx.util.Duration; import org.cryptomator.crypto.CryptorIOSampling; import org.cryptomator.ui.model.Vault; -import org.cryptomator.webdav.WebDavServer; import com.google.inject.Inject; @@ -35,9 +34,8 @@ public class UnlockedController implements Initializable { private static final int IO_SAMPLING_STEPS = 100; private static final double IO_SAMPLING_INTERVAL = 0.25; - private ResourceBundle rb; private LockListener listener; - private Vault directory; + private Vault vault; private Timeline ioAnimation; @FXML @@ -49,24 +47,20 @@ public class UnlockedController implements Initializable { @FXML private NumberAxis xAxis; - private final WebDavServer server; - @Inject - public UnlockedController(WebDavServer server) { + public UnlockedController() { super(); - this.server = server; } @Override public void initialize(URL url, ResourceBundle rb) { - this.rb = rb; } @FXML private void didClickCloseVault(ActionEvent event) { - directory.unmount(); - directory.stopServer(); - directory.setUnlocked(false); + vault.unmount(); + vault.stopServer(); + vault.setUnlocked(false); if (listener != null) { listener.didLock(this); } @@ -128,14 +122,12 @@ public class UnlockedController implements Initializable { /* Getter/Setter */ - public Vault getDirectory() { - return directory; + public Vault getVault() { + return vault; } - public void setDirectory(Vault directory) { - this.directory = directory; - final String msg = String.format(rb.getString("unlocked.messageLabel.runningOnPort"), server.getPort()); - messageLabel.setText(msg); + public void setVault(Vault directory) { + this.vault = directory; if (directory.getCryptor() instanceof CryptorIOSampling) { startIoSampling((CryptorIOSampling) directory.getCryptor()); diff --git a/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java b/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java index fb83d7cff..e4509bb85 100644 --- a/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java +++ b/main/ui/src/main/java/org/cryptomator/ui/model/VaultFactory.java @@ -8,24 +8,25 @@ import org.cryptomator.ui.util.mount.WebDavMounter; import org.cryptomator.webdav.WebDavServer; import com.google.inject.Inject; +import com.google.inject.Provider; public class VaultFactory { private final WebDavServer server; - private final Cryptor cryptor; + private final Provider cryptorProvider; private final WebDavMounter mounter; private final DeferredCloser closer; @Inject - public VaultFactory(WebDavServer server, Cryptor cryptor, WebDavMounter mounter, DeferredCloser closer) { + public VaultFactory(WebDavServer server, Provider cryptorProvider, WebDavMounter mounter, DeferredCloser closer) { this.server = server; - this.cryptor = cryptor; + this.cryptorProvider = cryptorProvider; this.mounter = mounter; this.closer = closer; } public Vault createVault(Path path) { - return new Vault(path, server, cryptor, mounter, closer); + return new Vault(path, server, cryptorProvider.get(), mounter, closer); } } diff --git a/main/ui/src/main/resources/fxml/main.fxml b/main/ui/src/main/resources/fxml/main.fxml index a3a228783..68c5a7d1c 100644 --- a/main/ui/src/main/resources/fxml/main.fxml +++ b/main/ui/src/main/resources/fxml/main.fxml @@ -25,7 +25,7 @@ - + @@ -44,7 +44,7 @@ - + diff --git a/main/ui/src/main/resources/fxml/unlocked.fxml b/main/ui/src/main/resources/fxml/unlocked.fxml index 3a0dba968..2aaaa9859 100644 --- a/main/ui/src/main/resources/fxml/unlocked.fxml +++ b/main/ui/src/main/resources/fxml/unlocked.fxml @@ -30,16 +30,13 @@ -