Bladeren bron

Feature/2200 illegal use of builders (#2262)

* Replaced Builder in VaultComponent with Factory
* migrate VaultOptionsComponent

Co-authored-by: JaniruTEC <JaniruTEC@gmail.com>
Armin Schrenk 2 jaren geleden
bovenliggende
commit
3d95276a7f

+ 7 - 16
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();
 	}
-
-}
+}

+ 7 - 11
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<Vault> vaultList;
 	private final String defaultVaultName;
 
 	@Inject
-	public VaultListManager(ObservableList<Vault> vaultList, AutoLocker autoLocker, VaultComponent.Builder vaultComponentBuilder, ResourceBundle resourceBundle, Settings settings) {
+	public VaultListManager(ObservableList<Vault> 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) {

+ 4 - 4
src/main/java/org/cryptomator/ui/mainwindow/VaultDetailLockedController.java

@@ -21,13 +21,13 @@ public class VaultDetailLockedController implements FxController {
 
 	private final ReadOnlyObjectProperty<Vault> 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> vault, FxApplicationWindows appWindows,  VaultOptionsComponent.Builder vaultOptionsWindow, KeychainManager keychain, @MainWindow Stage mainWindow) {
+	VaultDetailLockedController(ObjectProperty<Vault> 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 */

+ 3 - 3
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<VaultState.Value> selectedVaultState;
 	private final Binding<Boolean> selectedVaultPassphraseStored;
 	private final Binding<Boolean> selectedVaultRemovable;
@@ -39,7 +39,7 @@ public class VaultListContextMenuController implements FxController {
 	private final Binding<Boolean> selectedVaultLockable;
 
 	@Inject
-	VaultListContextMenuController(ObjectProperty<Vault> selectedVault, @MainWindow Stage mainWindow, FxApplicationWindows appWindows, VaultService vaultService, KeychainManager keychain, RemoveVaultComponent.Builder removeVault, VaultOptionsComponent.Builder vaultOptionsWindow) {
+	VaultListContextMenuController(ObjectProperty<Vault> 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);
 		});
 	}
 

+ 3 - 6
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);
 	}
 
 }