1 package org.ozoneDB.adminGui.main; 9 10 import org.ozoneDB.adminGui.res.Images; 11 import org.ozoneDB.adminGui.widget.MessageBox; 12 import org.ozoneDB.adminGui.util.ThreadWorker; 13 import org.ozoneDB.ExternalDatabase; 14 15 import javax.swing.*; 16 import java.awt.*; 17 import java.awt.event.ActionListener ; 18 import java.awt.event.ActionEvent ; 19 import java.awt.event.WindowAdapter ; 20 import java.awt.event.WindowEvent ; 21 22 25 public class ConnectionDialog extends JDialog { 26 private static final Dimension DIMENSION_DIALOG = new Dimension(450, 300); 27 private static final Dimension DIMENSION_BUTTON = new Dimension(20, 10); 28 private JTextField dbURLTextField; 29 private ExternalDatabase db; 30 private boolean dbHasChanged = false; 31 private String url; 32 33 public ConnectionDialog(JFrame owner, String title) { 34 super(owner, title, true); 35 layoutDialog(); 36 } 37 38 public boolean isDbChanged() { 39 return dbHasChanged; 40 } 41 42 public ExternalDatabase getDb() { 43 return db; 44 } 45 46 public String getUrl() { 47 return url; 48 } 49 50 private void layoutDialog() { 51 setSize(DIMENSION_DIALOG); 52 setLocationRelativeTo(null); 53 this.addWindowListener(new ConnectionDialog.CloseWindowListener()); 54 55 Container cp = getContentPane(); 56 cp.setBackground(Color.white); 57 58 JLabel logo = new JLabel(new ImageIcon(this.getClass().getResource(Images.IMAGE_CONNECT))); 60 cp.add(logo, BorderLayout.NORTH); 61 62 cp.add(createInputPanel(), BorderLayout.CENTER); 64 65 cp.add(createButtonPanel(), BorderLayout.SOUTH); 67 } 68 69 private JPanel createInputPanel() { 70 JPanel inputPanel = new JPanel(); 71 72 inputPanel.setLayout(new GridBagLayout()); 73 inputPanel.setBackground(Color.white); 74 75 GridBagConstraints gbcLabel = new GridBagConstraints(); 77 gbcLabel.anchor = GridBagConstraints.EAST; 78 gbcLabel.insets = new Insets(10, 0, 0, 5); 79 gbcLabel.weightx = 0; 80 gbcLabel.weighty = 0; 81 82 GridBagConstraints gbcValue = new GridBagConstraints(); 84 gbcValue.anchor = GridBagConstraints.WEST; 85 gbcValue.insets = new Insets(10, 0, 0, 0); 86 gbcValue.weightx = 0; 87 gbcValue.weighty = 0; 88 89 JLabel dbURLLabel = new JLabel("DB URL"); 91 dbURLLabel.setForeground(Color.darkGray); 92 inputPanel.add(dbURLLabel, gbcLabel); 93 dbURLTextField = new JTextField("ozonedb:remote://localhost:3333"); 94 inputPanel.add(dbURLTextField, gbcValue); 95 96 return inputPanel; 97 } 98 99 private JPanel createButtonPanel() { 100 JPanel buttonPanel = new JPanel(); 101 buttonPanel.setBackground(Color.white); 102 103 JButton logonButton = new JButton("Connect"); 104 logonButton.setMinimumSize(DIMENSION_BUTTON); 105 logonButton.setDefaultCapable(true); 106 buttonPanel.add(logonButton); 107 108 JButton cancelButton = new JButton("Cancel"); 109 cancelButton.setMinimumSize(DIMENSION_BUTTON); 110 buttonPanel.add(cancelButton); 111 112 logonButton.addActionListener(new ConnectionDialog.ConnectListener()); 113 cancelButton.addActionListener(new ConnectionDialog.cancelListener()); 114 getRootPane().setDefaultButton(logonButton); 115 116 return buttonPanel; 117 } 118 119 private class ConnectListener implements ActionListener { 120 public void actionPerformed(ActionEvent ae) { 121 ThreadWorker worker = new ThreadWorker() { 122 public Object construct() { 123 setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 124 return dbURLTextField.getText(); 125 } 126 127 public void finished() { 128 String dbURL = (String ) get(); 129 if (dbURL.equals("")) { 130 setCursor(Cursor.getDefaultCursor()); 131 MessageBox.showError("Error opening db", "No URL specified"); 132 ConnectionDialog.this.setCursor(Cursor.getDefaultCursor()); 133 return; 134 } 135 try { 136 db = ExternalDatabase.openDatabase(dbURL); 137 dbHasChanged = true; 138 url = dbURL; 139 ConnectionDialog.this.setVisible(false); 140 ConnectionDialog.this.setCursor(Cursor.getDefaultCursor()); 141 setCursor(Cursor.getDefaultCursor()); 142 } catch (Exception e) { 143 e.printStackTrace(); 144 setCursor(Cursor.getDefaultCursor()); 145 MessageBox.showError("Error opening db", e.toString()); 146 ConnectionDialog.this.setCursor(Cursor.getDefaultCursor()); 147 } 148 } 149 }; 150 worker.start(); 151 } 152 153 } 154 155 private class cancelListener implements ActionListener { 156 public void actionPerformed(ActionEvent ae) { 157 ConnectionDialog.this.setVisible(false); 158 ConnectionDialog.this.dispose(); 159 } 160 } 161 162 private class CloseWindowListener extends WindowAdapter { 163 public void windowClosing(WindowEvent we) { 164 ConnectionDialog.this.setVisible(false); 165 ConnectionDialog.this.dispose(); 166 } 167 } 168 } 169 | Popular Tags |