Improved some things.

This commit is contained in:
Andrew Lalis 2021-05-30 11:24:37 +02:00
parent 439235c568
commit ca6bea60dd
7 changed files with 88 additions and 25 deletions

View File

@ -9,18 +9,18 @@ import nl.andrewlalis.crystalkeep.model.Shard;
import nl.andrewlalis.crystalkeep.model.shards.LoginCredentialsShard;
import nl.andrewlalis.crystalkeep.model.shards.TextShard;
import nl.andrewlalis.crystalkeep.view.ShardTreeItem;
import nl.andrewlalis.crystalkeep.view.shard_details.LoginCredentialsPane;
import nl.andrewlalis.crystalkeep.view.shard_details.ShardPane;
import nl.andrewlalis.crystalkeep.view.shard_details.TextShardPane;
import nl.andrewlalis.crystalkeep.view.shard_details.LoginCredentialsViewModel;
import nl.andrewlalis.crystalkeep.view.shard_details.ShardViewModel;
import nl.andrewlalis.crystalkeep.view.shard_details.TextShardViewModel;
import java.util.HashMap;
import java.util.Map;
public class ClusterTreeViewItemSelectionListener implements ChangeListener<TreeItem<CrystalItem>> {
private static final Map<Class<? extends Shard>, Class<? extends ShardPane<? extends Shard>>> shardPanesMap = new HashMap<>();
private static final Map<Class<? extends Shard>, Class<? extends ShardViewModel<? extends Shard>>> shardPanesMap = new HashMap<>();
static {
shardPanesMap.put(TextShard.class, TextShardPane.class);
shardPanesMap.put(LoginCredentialsShard.class, LoginCredentialsPane.class);
shardPanesMap.put(TextShard.class, TextShardViewModel.class);
shardPanesMap.put(LoginCredentialsShard.class, LoginCredentialsViewModel.class);
}
private final VBox shardDetailContainer;
@ -36,8 +36,8 @@ public class ClusterTreeViewItemSelectionListener implements ChangeListener<Tree
var node = (ShardTreeItem) newValue;
var paneClass = shardPanesMap.get(node.getShard().getClass());
try {
var pane = paneClass.getDeclaredConstructor(node.getShard().getClass()).newInstance(node.getShard());
shardDetailContainer.getChildren().add(pane);
var vm = paneClass.getDeclaredConstructor(node.getShard().getClass()).newInstance(node.getShard());
shardDetailContainer.getChildren().add(vm.getContentPane());
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -1,5 +1,6 @@
package nl.andrewlalis.crystalkeep.model;
import nl.andrewlalis.crystalkeep.model.shards.FileShard;
import nl.andrewlalis.crystalkeep.model.shards.LoginCredentialsShard;
import nl.andrewlalis.crystalkeep.model.shards.TextShard;
@ -20,7 +21,12 @@ public enum ShardType {
/**
* Represents a {@link LoginCredentialsShard}
*/
LOGIN_CREDENTIALS(2);
LOGIN_CREDENTIALS(2),
/**
* Represents a {@link FileShard}
*/
FILE(3);
private final int value;

View File

@ -1,7 +1,9 @@
package nl.andrewlalis.crystalkeep.model.serialization;
import javafx.scene.control.Dialog;
import javafx.scene.control.TextInputDialog;
import javafx.geometry.Pos;
import javafx.scene.control.*;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import nl.andrewlalis.crystalkeep.model.Cluster;
import javax.crypto.Cipher;
@ -29,11 +31,21 @@ public class ClusterLoader {
private static final byte[] IV = "Fafioje;a324fsde".getBytes(StandardCharsets.UTF_8);
public Optional<String> promptPassword() {
Dialog<String> d = new TextInputDialog();
d.setContentText("Enter the password");
d.setGraphic(null);
d.setHeaderText(null);
Dialog<String> d = new Dialog<>();
d.setTitle("Enter Password");
d.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
PasswordField pwField = new PasswordField();
VBox content = new VBox(10);
content.setAlignment(Pos.CENTER);
content.getChildren().addAll(new Label("Enter password"), pwField);
d.getDialogPane().setContent(content);
d.setResultConverter(param -> {
if (param == ButtonType.OK) {
return pwField.getText();
}
return null;
});
return d.showAndWait();
}

View File

@ -0,0 +1,35 @@
package nl.andrewlalis.crystalkeep.model.shards;
import nl.andrewlalis.crystalkeep.model.Shard;
import nl.andrewlalis.crystalkeep.model.ShardType;
import java.time.LocalDateTime;
public class FileShard extends Shard {
private String fileName;
private String mimeType;
private byte[] contents;
public FileShard(String name, LocalDateTime createdAt, String fileName, String mimeType, byte[] contents) {
super(name, createdAt, ShardType.FILE);
this.fileName = fileName;
this.mimeType = mimeType;
this.contents = contents;
}
public FileShard(String name, String fileName, String mimeType, byte[] contents) {
this(name, LocalDateTime.now(), fileName, mimeType, contents);
}
public String getFileName() {
return fileName;
}
public String getMimeType() {
return mimeType;
}
public byte[] getContents() {
return contents;
}
}

View File

@ -10,8 +10,8 @@ import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import nl.andrewlalis.crystalkeep.model.shards.LoginCredentialsShard;
public class LoginCredentialsPane extends ShardPane<LoginCredentialsShard> {
public LoginCredentialsPane(LoginCredentialsShard shard) {
public class LoginCredentialsViewModel extends ShardViewModel<LoginCredentialsShard> {
public LoginCredentialsViewModel(LoginCredentialsShard shard) {
super(shard);
}
@ -23,6 +23,7 @@ public class LoginCredentialsPane extends ShardPane<LoginCredentialsShard> {
gp.setVgap(5);
gp.add(new Label("Username"), 0, 0);
var usernameField = new TextField(shard.getUsername());
usernameField.setPrefColumnCount(40);
usernameField.textProperty().addListener((observable, oldValue, newValue) -> {
shard.setUsername(newValue);
});
@ -30,8 +31,10 @@ public class LoginCredentialsPane extends ShardPane<LoginCredentialsShard> {
gp.add(new Label("Password"), 0, 1);
var passwordField = new PasswordField();
passwordField.setText(shard.getPassword());
passwordField.setPrefColumnCount(40);
var rawPasswordField = new TextField(shard.getPassword());
rawPasswordField.setVisible(false);
rawPasswordField.setPrefColumnCount(40);
passwordField.textProperty().addListener((observable, oldValue, newValue) -> {
shard.setPassword(newValue);
rawPasswordField.setText(newValue);

View File

@ -12,9 +12,15 @@ import nl.andrewlalis.crystalkeep.model.Shard;
import java.time.format.DateTimeFormatter;
public abstract class ShardPane<T extends Shard> extends VBox {
public ShardPane(T shard) {
this.setSpacing(5);
public abstract class ShardViewModel<T extends Shard> {
protected final T shard;
public ShardViewModel(T shard) {
this.shard = shard;
}
public Node getContentPane() {
VBox pane = new VBox(5);
GridPane gp = new GridPane();
gp.setPadding(new Insets(5));
gp.setHgap(5);
@ -29,9 +35,10 @@ public abstract class ShardPane<T extends Shard> extends VBox {
var createdAtField = new TextField(shard.getCreatedAt().format(DateTimeFormatter.ofPattern("dd MMMM yyyy HH:mm:ss")));
createdAtField.setEditable(false);
gp.add(createdAtField, 1, 1);
this.getChildren().add(gp);
this.getChildren().add(new Separator(Orientation.HORIZONTAL));
this.getChildren().add(this.getContent(shard));
pane.getChildren().add(gp);
pane.getChildren().add(new Separator(Orientation.HORIZONTAL));
pane.getChildren().add(this.getContent(shard));
return pane;
}
protected abstract Node getContent(T shard);

View File

@ -4,8 +4,8 @@ import javafx.scene.Node;
import javafx.scene.control.TextArea;
import nl.andrewlalis.crystalkeep.model.shards.TextShard;
public class TextShardPane extends ShardPane<TextShard> {
public TextShardPane(TextShard shard) {
public class TextShardViewModel extends ShardViewModel<TextShard> {
public TextShardViewModel(TextShard shard) {
super(shard);
}