package net.sf.minuteProject.console.panel; import static net.sf.minuteProject.console.utils.UIUtils.createCombo; import static net.sf.minuteProject.console.utils.UIUtils.createLabel; import static net.sf.minuteProject.console.utils.UIUtils.createTextField; import static net.sf.minuteProject.console.utils.UIUtils.createPasswordField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.util.ArrayList; import java.util.List; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import net.sf.minuteProject.console.ConsoleSample; import net.sf.minuteProject.console.face.FillBasicConfiguration; import net.sf.minuteProject.integration.bean.BasicIntegrationConfiguration; import net.sf.minuteProject.loader.catalog.databasecatalog.DatabasecatalogHolder; import net.sf.minuteProject.loader.catalog.databasecatalog.node.Database; import net.sf.minuteProject.utils.catalog.DatabaseCatalogUtils; @SuppressWarnings("serial") public class ModelAccessPanel extends JPanel implements FillBasicConfiguration{ private List<Database> databases; private List<String> databaseNames; public static final String url = "url"; public static final String username = "username"; public static final String password = "password"; public static final String schema = "schema"; public static final String database_type = "database type"; private JLabel schemaL; private JComboBox databaseCb; private JTextField urlTf, usernameTf, schemaTf, driverClassNameTf; private JPasswordField passwordTf; private ConsoleSample consoleSample; public ModelAccessPanel(ConsoleSample consoleSample) { this.consoleSample = consoleSample; databases = DatabaseCatalogUtils.getPublishedDatabases(consoleSample.getCatalogDir()); databaseNames = new ArrayList<String>(); for (Database database : databases) { databaseNames.add(database.getName()); } } public void fill(BasicIntegrationConfiguration bic) { bic.setUrl(urlTf.getText()); bic.setUsername(usernameTf.getText()); bic.setPassword(passwordTf.getText()); bic.setSchema(schemaTf.getText()); bic.setDatabase(databaseCb.getSelectedItem().toString()); bic.setDriver(driverClassNameTf.getText()); } public void fillPanel (JPanel panel) { panel.add(createLabel(database_type), "skip"); databaseCb = createCombo(getTechnologies(), new DatabaseChangeListener()); panel.add(databaseCb); panel.add(createLabel("driver"), "center"); driverClassNameTf = createTextField(25); driverClassNameTf.setText(getDefaultDriverClassNameTf()); panel.add(driverClassNameTf, "span, growx"); panel.add(createLabel(url), "skip"); urlTf = createTextField(getDefaultUrlStructureTf()); panel.add(urlTf, "span, growx"); panel.add(createLabel(username), "skip"); usernameTf = createTextField(""); usernameTf.addFocusListener(new UserNameListener()); panel.add(usernameTf); panel.add(createLabel(password), "center"); passwordTf = createPasswordField(""); panel.add(passwordTf, "wrap"); schemaL = createLabel(schema); schemaL.setVisible(isSchemaVisible()); panel.add(schemaL, "skip"); schemaTf = createTextField(15); schemaTf.setVisible(isSchemaVisible()); panel.add(schemaTf, "wrap para"); } private String getDefaultUrlStructureTf() { return databases.get(0).getDefaultUrlStructure(); } private boolean isSchemaVisible() { return getDefaultDatabase().getUseSchema(); } private Database getDefaultDatabase() { return databases.get(0); } private Database getCurrentDatabase() { String databaseType = databaseCb.getSelectedItem().toString(); return getDatabase(databaseType); } private String getDefaultDriverClassNameTf() { return databases.get(0).getDriverclassname(); } private String[] getTechnologies() { return (String[])databaseNames.toArray(new String[databaseNames.size()]); } private class UserNameListener implements FocusListener { public void focusLost(FocusEvent arg0) { if (getCurrentDatabase().useSchema() && schemaTf.getText().equals("")) { schemaTf.setText(usernameTf.getText()); } } public void focusGained(FocusEvent arg0) { } } private class DatabaseChangeListener implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getSource() == databaseCb) { Database database = getCurrentDatabase(); driverClassNameTf.setText(database.getDriverclassname()); if (database.getUseSchema()) applySchema(); else removeSchema(); urlTf.setText(database.getDefaultUrlStructure()); applyCurrentPrimaryKeyPolicy(database); } } } private void applyCurrentPrimaryKeyPolicy(Database database) { consoleSample.applyCurrentPrimaryKeyPolicy(database); } private void applySchema() { schemaL.setVisible(true); schemaTf.setVisible(true); } private void removeSchema() { schemaL.setVisible(false); // schemaTf.setText(""); schemaTf.setVisible(false); } private String getDriver(String databaseType) { return getDatabase(databaseType).getDriverclassname(); } private Database getDatabase(String databaseType) { for (Database database : databases) { if (database.getName().equals(databaseType)) return database; } return null; } }