diff --git a/src/main/java/org/cryptomator/common/vaults/VaultComponent.java b/src/main/java/org/cryptomator/common/vaults/VaultComponent.java index be844f510..ae525d7b0 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultComponent.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultComponent.java @@ -19,22 +19,13 @@ public interface VaultComponent { Vault vault(); - @Subcomponent.Builder - interface Builder { + @Subcomponent.Factory + interface Factory { - @BindsInstance - Builder vaultSettings(VaultSettings vaultSettings); + VaultComponent create(@BindsInstance VaultSettings vaultSettings, // + @BindsInstance VaultConfigCache configCache, // + @BindsInstance VaultState.Value vaultState, // + @BindsInstance @Nullable @Named("lastKnownException") Exception initialErrorCause); - @BindsInstance - Builder vaultConfigCache(VaultConfigCache configCache); - - @BindsInstance - Builder initialVaultState(VaultState.Value vaultState); - - @BindsInstance - Builder initialErrorCause(@Nullable @Named("lastKnownException") Exception initialErrorCause); - - VaultComponent build(); } - -} +} \ No newline at end of file diff --git a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java index e727ec5ca..138d74e36 100644 --- a/src/main/java/org/cryptomator/common/vaults/VaultListManager.java +++ b/src/main/java/org/cryptomator/common/vaults/VaultListManager.java @@ -38,15 +38,15 @@ public class VaultListManager { private static final Logger LOG = LoggerFactory.getLogger(VaultListManager.class); private final AutoLocker autoLocker; - private final VaultComponent.Builder vaultComponentBuilder; + private final VaultComponent.Factory vaultComponentFactory; private final ObservableList vaultList; private final String defaultVaultName; @Inject - public VaultListManager(ObservableList vaultList, AutoLocker autoLocker, VaultComponent.Builder vaultComponentBuilder, ResourceBundle resourceBundle, Settings settings) { + public VaultListManager(ObservableList vaultList, AutoLocker autoLocker, VaultComponent.Factory vaultComponentFactory, ResourceBundle resourceBundle, Settings settings) { this.vaultList = vaultList; this.autoLocker = autoLocker; - this.vaultComponentBuilder = vaultComponentBuilder; + this.vaultComponentFactory = vaultComponentFactory; this.defaultVaultName = resourceBundle.getString("defaults.vault.vaultName"); addAll(settings.getDirectories()); @@ -93,21 +93,17 @@ public class VaultListManager { } private Vault create(VaultSettings vaultSettings) { - VaultComponent.Builder compBuilder = vaultComponentBuilder.vaultSettings(vaultSettings); - VaultConfigCache wrapper = new VaultConfigCache(vaultSettings); - compBuilder.vaultConfigCache(wrapper); //first set the wrapper in the builder, THEN try to load config + var wrapper = new VaultConfigCache(vaultSettings); try { - VaultState.Value vaultState = determineVaultState(vaultSettings.path().get()); + var vaultState = determineVaultState(vaultSettings.path().get()); if (vaultState == LOCKED) { //for legacy reasons: pre v8 vault do not have a config, but they are in the NEEDS_MIGRATION state wrapper.reloadConfig(); } - compBuilder.initialVaultState(vaultState); + return vaultComponentFactory.create(vaultSettings, wrapper, vaultState, null).vault(); } catch (IOException e) { LOG.warn("Failed to determine vault state for " + vaultSettings.path().get(), e); - compBuilder.initialVaultState(ERROR); - compBuilder.initialErrorCause(e); + return vaultComponentFactory.create(vaultSettings, wrapper, ERROR, e).vault(); } - return compBuilder.build().vault(); } public static VaultState.Value redetermineVaultState(Vault vault) { diff --git a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java index dab1f7a54..cf1009ea9 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java @@ -21,13 +21,13 @@ public class VaultDetailLockedController implements FxController { private final ReadOnlyObjectProperty vault; private final FxApplicationWindows appWindows; - private final VaultOptionsComponent.Builder vaultOptionsWindow; + private final VaultOptionsComponent.Factory vaultOptionsWindow; private final KeychainManager keychain; private final Stage mainWindow; private final BooleanExpression passwordSaved; @Inject - VaultDetailLockedController(ObjectProperty vault, FxApplicationWindows appWindows, VaultOptionsComponent.Builder vaultOptionsWindow, KeychainManager keychain, @MainWindow Stage mainWindow) { + VaultDetailLockedController(ObjectProperty vault, FxApplicationWindows appWindows, VaultOptionsComponent.Factory vaultOptionsWindow, KeychainManager keychain, @MainWindow Stage mainWindow) { this.vault = vault; this.appWindows = appWindows; this.vaultOptionsWindow = vaultOptionsWindow; @@ -47,12 +47,12 @@ public class VaultDetailLockedController implements FxController { @FXML public void showVaultOptions() { - vaultOptionsWindow.vault(vault.get()).build().showVaultOptionsWindow(SelectedVaultOptionsTab.ANY); + vaultOptionsWindow.create(vault.get()).showVaultOptionsWindow(SelectedVaultOptionsTab.ANY); } @FXML public void showKeyVaultOptions() { - vaultOptionsWindow.vault(vault.get()).build().showVaultOptionsWindow(SelectedVaultOptionsTab.KEY); + vaultOptionsWindow.create(vault.get()).showVaultOptionsWindow(SelectedVaultOptionsTab.KEY); } /* Getter/Setter */ diff --git a/src/main/java/org/cryptomator/ui/mainwindow/VaultListContextMenuController.java b/src/main/java/org/cryptomator/ui/mainwindow/VaultListContextMenuController.java index c9d788b90..23f8e889d 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/VaultListContextMenuController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/VaultListContextMenuController.java @@ -31,7 +31,7 @@ public class VaultListContextMenuController implements FxController { private final VaultService vaultService; private final KeychainManager keychain; private final RemoveVaultComponent.Builder removeVault; - private final VaultOptionsComponent.Builder vaultOptionsWindow; + private final VaultOptionsComponent.Factory vaultOptionsWindow; private final OptionalBinding selectedVaultState; private final Binding selectedVaultPassphraseStored; private final Binding selectedVaultRemovable; @@ -39,7 +39,7 @@ public class VaultListContextMenuController implements FxController { private final Binding selectedVaultLockable; @Inject - VaultListContextMenuController(ObjectProperty selectedVault, @MainWindow Stage mainWindow, FxApplicationWindows appWindows, VaultService vaultService, KeychainManager keychain, RemoveVaultComponent.Builder removeVault, VaultOptionsComponent.Builder vaultOptionsWindow) { + VaultListContextMenuController(ObjectProperty selectedVault, @MainWindow Stage mainWindow, FxApplicationWindows appWindows, VaultService vaultService, KeychainManager keychain, RemoveVaultComponent.Builder removeVault, VaultOptionsComponent.Factory vaultOptionsWindow) { this.selectedVault = EasyBind.wrapNullable(selectedVault); this.mainWindow = mainWindow; this.appWindows = appWindows; @@ -69,7 +69,7 @@ public class VaultListContextMenuController implements FxController { @FXML public void didClickShowVaultOptions() { selectedVault.ifValuePresent(v -> { - vaultOptionsWindow.vault(v).build().showVaultOptionsWindow(SelectedVaultOptionsTab.ANY); + vaultOptionsWindow.create(v).showVaultOptionsWindow(SelectedVaultOptionsTab.ANY); }); } diff --git a/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsComponent.java b/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsComponent.java index e56c30f5c..ac749132a 100644 --- a/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsComponent.java +++ b/src/main/java/org/cryptomator/ui/vaultoptions/VaultOptionsComponent.java @@ -36,13 +36,10 @@ public interface VaultOptionsComponent { stage.requestFocus(); } - @Subcomponent.Builder - interface Builder { + @Subcomponent.Factory + interface Factory { - @BindsInstance - Builder vault(@VaultOptionsWindow Vault vault); - - VaultOptionsComponent build(); + VaultOptionsComponent create(@BindsInstance @VaultOptionsWindow Vault vault); } }