Skip to content

Commit 647ab20

Browse files
committed
Add load / save for peer data in GUI
1 parent 0dd353e commit 647ab20

File tree

5 files changed

+217
-116
lines changed

5 files changed

+217
-116
lines changed

convex-core/src/main/java/convex/core/util/FileUtils.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,6 @@ public static File getFile(String path) {
107107

108108

109109

110+
111+
110112
}

convex-core/src/main/java/convex/core/util/Utils.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import java.nio.charset.StandardCharsets;
1313
import java.nio.file.Path;
1414
import java.time.Instant;
15+
import java.time.ZoneId;
16+
import java.time.ZoneOffset;
17+
import java.time.format.DateTimeFormatter;
1518
import java.util.ArrayList;
1619
import java.util.Arrays;
1720
import java.util.Collection;
@@ -1362,6 +1365,15 @@ public static String getVersion() {
13621365
return v;
13631366
}
13641367

1368+
public static String timeString() {
1369+
return timeString(Instant.now());
1370+
}
1371+
1372+
private static String timeString(Instant timeStamp) {
1373+
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss").withZone(ZoneId.from(ZoneOffset.UTC));
1374+
return formatter.format(timeStamp);
1375+
}
1376+
13651377

13661378

13671379

convex-core/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@
2828
requires org.bouncycastle.util;
2929
requires org.slf4j;
3030
requires java.base;
31+
requires java.desktop;
3132
}

convex-gui/src/main/java/convex/gui/peer/PeerComponent.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package convex.gui.peer;
22

3+
import java.io.IOException;
4+
import java.nio.file.Path;
35
import java.util.Objects;
46

57
import javax.swing.JButton;
8+
import javax.swing.JFileChooser;
69
import javax.swing.JMenuItem;
10+
import javax.swing.JOptionPane;
711
import javax.swing.JPanel;
812
import javax.swing.JPopupMenu;
913

@@ -20,8 +24,12 @@
2024
import convex.core.cvm.PeerStatus;
2125
import convex.core.cvm.State;
2226
import convex.core.data.ACell;
27+
import convex.core.data.AMap;
2328
import convex.core.data.AccountKey;
29+
import convex.core.data.Keyword;
2430
import convex.core.text.Text;
31+
import convex.core.util.FileUtils;
32+
import convex.core.util.Utils;
2533
import convex.etch.EtchStore;
2634
import convex.gui.components.BaseImageButton;
2735
import convex.gui.components.BaseListComponent;
@@ -166,6 +174,15 @@ public PeerComponent(ConvexLocal value) {
166174
new WalletApp(connectLocalControllerWallet(server)).run();
167175
});
168176
popupMenu.add(walletButton);
177+
178+
JMenuItem saveButton = new JMenuItem("Save Peer Data...",Toolkit.menuIcon(0xe161));
179+
saveButton.addActionListener(e -> savePeerData(this.convex));
180+
popupMenu.add(saveButton);
181+
182+
JMenuItem loadButton = new JMenuItem("Load Peer Data...",Toolkit.menuIcon(0xeaf3));
183+
loadButton.addActionListener(e -> loadPeerData(this.convex));
184+
popupMenu.add(loadButton);
185+
169186

170187

171188
DropdownMenu dm = new DropdownMenu(popupMenu);
@@ -193,6 +210,32 @@ public PeerComponent(ConvexLocal value) {
193210
updateDescription();
194211
}
195212

213+
private void loadPeerData(ConvexLocal convex) {
214+
JFileChooser chooser=Toolkit.createCAD3Chooser(null);
215+
int result=chooser.showOpenDialog(this);
216+
if (result==JFileChooser.APPROVE_OPTION) {
217+
System.out.println("Loading: "+chooser.getSelectedFile());
218+
}
219+
}
220+
221+
private void savePeerData(ConvexLocal convex) {
222+
Peer p=convex.getLocalServer().getPeer();
223+
AMap<Keyword, ACell> data = p.toData();
224+
225+
String fileName="peer-data-"+p.getPeerKey().toHexString(8)+"-"+Utils.timeString()+".cad3";
226+
JFileChooser chooser=Toolkit.createCAD3Chooser(fileName);
227+
228+
int result=chooser.showSaveDialog(this);
229+
if (result==JFileChooser.APPROVE_OPTION) {
230+
Path path =chooser.getSelectedFile().toPath();
231+
try {
232+
FileUtils.writeCAD3(path, data);
233+
} catch (IOException e) {
234+
JOptionPane.showMessageDialog(this, "Peer data save failed:\n "+e,"Save Error",JOptionPane.ERROR_MESSAGE);
235+
}
236+
}
237+
}
238+
196239
protected void updateDescription() {
197240
String current=description.getText();
198241
String updated=getPeerDescription();

0 commit comments

Comments
 (0)