1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package p3j.database;
17
18 import java.awt.event.ActionEvent;
19 import java.awt.event.ActionListener;
20 import java.io.File;
21
22 import javax.swing.JButton;
23 import javax.swing.JFileChooser;
24 import javax.swing.JPanel;
25 import javax.swing.JTextField;
26
27 import org.jamesii.core.data.DBConnectionData;
28 import org.jamesii.core.util.misc.Pair;
29
30 import p3j.gui.P3J;
31 import p3j.gui.panels.PropertiesShowPanelFactory;
32 import p3j.misc.Misc;
33
34
35
36
37
38
39
40
41
42 public class HSQLDBPreferencesUIProvider implements IPreferencesUIProvider {
43
44
45 private static final int TEXT_FIELD_WIDTH = 20;
46
47
48 final JTextField dbLocation = new JTextField();
49
50
51 final JButton chooseFile = new JButton("...");
52 {
53 chooseFile.addActionListener(new ActionListener() {
54 @Override
55 public void actionPerformed(ActionEvent e) {
56 JFileChooser chooser = new JFileChooser(dbLocation.getText());
57 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
58 if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(P3J
59 .getInstance())) {
60 dbLocation.setText(chooser.getSelectedFile().getAbsolutePath());
61 }
62 }
63 });
64 }
65
66
67
68
69
70 final JPanel dbLocationPanel = new JPanel();
71
72
73
74
75 public HSQLDBPreferencesUIProvider() {
76 dbLocation.setColumns(TEXT_FIELD_WIDTH);
77 dbLocationPanel.add(dbLocation);
78 dbLocationPanel.add(chooseFile);
79 }
80
81 @Override
82 public int getHeight() {
83 return 30;
84 }
85
86 @Override
87 public void addUIElements(PropertiesShowPanelFactory pspf,
88 Pair<DBConnectionData, String> connData) {
89 setDBPreferences(connData);
90 pspf.app(Misc.GUI_LABEL_DB_FILE_LOCATION, dbLocationPanel);
91 }
92
93 @Override
94 public Pair<DBConnectionData, String> getDBPreferences() {
95 return new Pair<>(new DBConnectionData(Misc.HSQLDB_URL_PREFIX
96 + dbLocation.getText() + File.separator + Misc.HSQLDB_FILE_NAME,
97 Misc.DEFAULT_DB_USERS.get(DatabaseType.HSQLDB),
98 Misc.DEFAULT_DB_PWDS.get(DatabaseType.HSQLDB),
99 Misc.JDBC_DRIVERS.get(DatabaseType.HSQLDB)),
100 Misc.HIBERNATE_DIALECTS.get(DatabaseType.HSQLDB));
101 }
102
103 @Override
104 public void setDBPreferences(Pair<DBConnectionData, String> connData) {
105 dbLocation.setText((new File(connData
106 .getFirstValue()
107 .getURL()
108 .substring(
109 Misc.HSQLDB_URL_PREFIX.length(),
110 connData.getFirstValue().getURL().length()
111 - Misc.HSQLDB_FILE_NAME.length())).getAbsolutePath()));
112 }
113
114 }