public JPanel getComponent() {
return mainPanel;
}
public void applyChanges() throws ConfigurationException {
ConnectionBundle connectionBundle = getConfiguration();
List<ConnectionHandler> oldConnections = new ArrayList<ConnectionHandler>(connectionBundle.getConnectionHandlers().getFullList());
List<ConnectionHandler> newConnections = new ArrayList<ConnectionHandler>();
boolean listChanged = false;
ConnectionListModel listModel = (ConnectionListModel) connectionsList.getModel();
if (oldConnections.size() == listModel.getSize()) {
for (int i=0; i<oldConnections.size(); i++) {
ConnectionDatabaseSettings oldConfig = oldConnections.get(i).getSettings().getDatabaseSettings();
ConnectionDatabaseSettings newConfig = ((ConnectionSettings) listModel.get(i)).getDatabaseSettings();
if (!oldConfig.getId().equals(newConfig.getId()) ||
(newConfig.getSettingsEditor() != null && newConfig.getSettingsEditor().isConnectionActive() != oldConfig.isActive())) {
listChanged = true;
break;
}
}
} else {
listChanged = true;
}
for (int i=0; i< listModel.getSize(); i++) {
ConnectionSettings connectionSettings = (ConnectionSettings) listModel.getElementAt(i);
connectionSettings.apply();
ConnectionHandler connectionHandler = connectionBundle.getConnection(connectionSettings.getDatabaseSettings().getId());
if (connectionHandler == null) {
connectionHandler = new ConnectionHandlerImpl(connectionBundle, connectionSettings);
connectionSettings.getDatabaseSettings().setNew(false);
} else {
oldConnections.remove(connectionHandler);
((ConnectionHandlerImpl)connectionHandler).setConnectionConfig(connectionSettings);
}
newConnections.add(connectionHandler);
}
connectionBundle.setConnectionHandlers(newConnections);
// dispose old list
for (ConnectionHandler connectionHandler : oldConnections) {
connectionHandler.dispose();
}
if (listChanged) {
EventManager.notify(connectionBundle.getProject(), ConnectionBundleSettingsListener.TOPIC).settingsChanged();
}
}