QiniuDialog.java
7.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
package org.code4everything.qiniu.util;
import com.zhazhapan.util.Checker;
import com.zhazhapan.util.dialog.Dialogs;
import javafx.application.Platform;
import javafx.scene.Node;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.stage.Modality;
import javafx.util.Pair;
import org.code4everything.qiniu.QiniuApplication;
import org.code4everything.qiniu.api.SdkConfigurer;
import org.code4everything.qiniu.api.SdkManager;
import org.code4everything.qiniu.constant.QiniuValueConsts;
import org.code4everything.qiniu.controller.MainController;
import org.code4everything.qiniu.model.BucketBean;
import java.util.Optional;
/**
* 应用弹窗
*
* @author pantao
* @since 2018/11/13
*/
public class QiniuDialog {
/**
* 显示移动文件的弹窗
*/
public Pair<SdkManager.FileAction, String[]> showFileDialog(String bucket, String key, boolean setKey) {
MainController main = MainController.getInstance();
ButtonType ok = new ButtonType(QiniuValueConsts.OK, ButtonBar.ButtonData.OK_DONE);
Dialog<String[]> dialog = getDialog(ok);
// 文件名输入框
TextField keyTextField = new TextField();
keyTextField.setPrefWidth(300);
keyTextField.setPromptText(QiniuValueConsts.FILE_NAME);
keyTextField.setText(key);
// 空间选择框
ComboBox<String> bucketCombo = new ComboBox<>();
bucketCombo.getItems().addAll(main.bucketCB.getItems());
bucketCombo.setValue(bucket);
// 保存文件副本复选框
CheckBox copyAsCheckBox = new CheckBox(QiniuValueConsts.COPY_AS);
copyAsCheckBox.setSelected(true);
// 设置容器
GridPane grid = Dialogs.getGridPane();
grid.add(copyAsCheckBox, 0, 0, 2, 1);
grid.add(new Label(QiniuValueConsts.BUCKET_NAME), 0, 1);
grid.add(bucketCombo, 1, 1);
if (setKey) {
// 显示文件名输入框
grid.add(new Label(QiniuValueConsts.FILE_NAME), 0, 2);
grid.add(keyTextField, 1, 2);
Platform.runLater(keyTextField::requestFocus);
}
dialog.getDialogPane().setContent(grid);
// 数据转换器
dialog.setResultConverter(dialogButton -> {
if (dialogButton == ok) {
return new String[]{bucketCombo.getValue(), keyTextField.getText()};
}
return null;
});
// 读取数据
Optional<String[]> result = dialog.showAndWait();
if (result.isPresent()) {
bucket = bucketCombo.getValue();
key = keyTextField.getText();
SdkManager.FileAction action = copyAsCheckBox.isSelected() ? SdkManager.FileAction.COPY :
SdkManager.FileAction.MOVE;
return new Pair<>(action, new String[]{bucket, key});
} else {
return null;
}
}
/**
* 显示输入密钥的对话框
*
* @return 返回用户是否点击确定按钮
*/
public boolean showKeyDialog() {
ButtonType ok = new ButtonType(QiniuValueConsts.OK, ButtonBar.ButtonData.OK_DONE);
Dialog<String[]> dialog = getDialog(ok);
// 文本框
TextField ak = new TextField();
ak.setMinWidth(400);
ak.setPromptText("Access Key");
TextField sk = new TextField();
sk.setPromptText("Secret Key");
// 设置超链接
Hyperlink hyperlink = new Hyperlink("查看我的KEY:" + QiniuValueConsts.QINIU_KEY_URL);
hyperlink.setOnAction(event -> QiniuUtils.openLink(QiniuValueConsts.QINIU_KEY_URL));
// 设置容器
GridPane grid = Dialogs.getGridPane();
grid.add(hyperlink, 0, 0, 2, 1);
grid.add(new Label("Access Key:"), 0, 1);
grid.add(ak, 1, 1);
grid.add(new Label("Secret Key:"), 0, 2);
grid.add(sk, 1, 2);
Node okButton = dialog.getDialogPane().lookupButton(ok);
okButton.setDisable(true);
dialog.getDialogPane().setContent(grid);
Platform.runLater(ak::requestFocus);
// 监听文本框的输入状态
ak.textProperty().addListener((observable, oldValue, newValue) -> okButton.setDisable(newValue.trim().isEmpty() || sk.getText().trim().isEmpty()));
sk.textProperty().addListener((observable, oldValue, newValue) -> okButton.setDisable(newValue.trim().isEmpty() || ak.getText().trim().isEmpty()));
// 等待用户操作
Optional<String[]> result = dialog.showAndWait();
// 处理结果
if (result.isPresent() && Checker.isNotEmpty(ak.getText()) && Checker.isNotEmpty(sk.getText())) {
QiniuApplication.getConfigBean().setAccessKey(ak.getText());
QiniuApplication.getConfigBean().setSecretKey(sk.getText());
SdkConfigurer.createAuth(ak.getText(), sk.getText());
ConfigUtils.writeConfig();
return true;
}
return false;
}
/**
* 显示添加桶的弹窗
*/
public void showBucketDialog() {
ButtonType ok = new ButtonType(QiniuValueConsts.OK, ButtonBar.ButtonData.OK_DONE);
Dialog<String[]> dialog = getDialog(ok);
// 桶名称输入框
TextField bucket = new TextField();
bucket.setPromptText(QiniuValueConsts.BUCKET_NAME);
// 桶域名输入框
TextField url = new TextField();
url.setPromptText(QiniuValueConsts.BUCKET_URL);
// 桶区域输入框
ComboBox<String> zone = new ComboBox<>();
zone.getItems().addAll(QiniuValueConsts.BUCKET_NAME_ARRAY);
zone.setValue(QiniuValueConsts.BUCKET_NAME_ARRAY[0]);
// 设置容器
GridPane grid = Dialogs.getGridPane();
grid.add(new Label(QiniuValueConsts.BUCKET_NAME), 0, 0);
grid.add(bucket, 1, 0);
grid.add(new Label(QiniuValueConsts.BUCKET_URL), 0, 1);
grid.add(url, 1, 1);
grid.add(new Label(QiniuValueConsts.BUCKET_ZONE_NAME), 0, 2);
grid.add(zone, 1, 2);
Node okButton = dialog.getDialogPane().lookupButton(ok);
okButton.setDisable(true);
dialog.getDialogPane().setContent(grid);
Platform.runLater(bucket::requestFocus);
// 监听文本框的输入状态
bucket.textProperty().addListener((observable, oldValue, newValue) -> okButton.setDisable(newValue.trim().isEmpty() || url.getText().isEmpty()));
url.textProperty().addListener((observable, oldValue, newValue) -> okButton.setDisable(newValue.trim().isEmpty() || bucket.getText().isEmpty()));
// 结果转换器
dialog.setResultConverter(dialogButton -> {
if (dialogButton == ok) {
return new String[]{bucket.getText(), zone.getValue(), (Checker.isHyperLink(url.getText()) ?
url.getText() : "example.com")};
}
return null;
});
// 等待用户操作
Optional<String[]> result = dialog.showAndWait();
result.ifPresent(res -> {
// 处理结果
Platform.runLater(() -> MainController.getInstance().appendBucket(res[0]));
BucketBean bucketBean = new BucketBean(res[0], res[1], res[2]);
QiniuApplication.getConfigBean().getBuckets().add(bucketBean);
ConfigUtils.writeConfig();
});
}
private Dialog<String[]> getDialog(ButtonType ok) {
Dialog<String[]> dialog = new Dialog<>();
dialog.setTitle(QiniuValueConsts.MAIN_TITLE);
dialog.setHeaderText(null);
dialog.initModality(Modality.APPLICATION_MODAL);
// 自定义确认和取消按钮
ButtonType cancel = new ButtonType(QiniuValueConsts.CANCEL, ButtonBar.ButtonData.CANCEL_CLOSE);
dialog.getDialogPane().getButtonTypes().addAll(ok, cancel);
return dialog;
}
}