package net.sourceforge.squirrel_sql.client.gui.db.aliasproperties;
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.gui.db.SQLAlias;
import net.sourceforge.squirrel_sql.fw.gui.MultipleLineLabel;
import net.sourceforge.squirrel_sql.fw.id.IIdentifier;
import net.sourceforge.squirrel_sql.fw.sql.ISQLAlias;
import net.sourceforge.squirrel_sql.fw.sql.SQLDriverPropertyCollection;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.Driver;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.util.Properties;
/**
* This dialog allows the user to review and maintain
* the properties for a JDBC driver.
*
* @author <A HREF="mailto:colbell@users.sourceforge.net">Colin Bell</A>
*/
public class DriverPropertiesController implements IAliasPropertiesPanelController
{
/**
* Internationalized strings for this class.
*/
private static final StringManager s_stringMgr =
StringManagerFactory.getStringManager(DriverPropertiesController.class);
private DriverPropertiesPanel _propsPnl;
/**
* The driver properties. This is only available once OK pressed.
*/
private SQLDriverPropertyCollection _driverPropInfo;
private ISQLAlias _alias;
private IApplication _app;
String _errMsg;
private Color _origTblColor;
public DriverPropertiesController(SQLAlias alias, IApplication app)
{
_alias = alias;
_app = app;
String aliasUrl = alias.getUrl();
IIdentifier driverIdentifier = alias.getDriverIdentifier();
if (driverIdentifier == null)
{
// I18n[DriverPropertiesController.noDriverSelected=No driver available in this Alias.\nCan not load driver properties tab.]
_errMsg = s_stringMgr.getString("DriverPropertiesController.noDriverSelected");
_app.getMessageHandler().showErrorMessage(_errMsg);
return;
}
final Driver jdbcDriver = app.getSQLDriverManager().getJDBCDriver(driverIdentifier);
if (jdbcDriver == null)
{
// I18n[DriverPropertiesController.loadingDriverFailed=Loading JDBC driver "{0}" failed.\nCan not load driver properties tab.]
_errMsg = s_stringMgr.getString("DriverPropertiesController.loadingDriverFailed", app.getDataCache().getDriver(driverIdentifier).getName());
_app.getMessageHandler().showErrorMessage(_errMsg);
return;
} else {
try {
if (!jdbcDriver.acceptsURL( aliasUrl )) {
String driverName =
app.getDataCache().getDriver(driverIdentifier).getName();
//I18n[DriverPropertiesController.invalidUrl=According to
//the driver "{0}", the url "{1}" is invalid.]
_errMsg =
s_stringMgr.getString(
"DriverPropertiesController.invalidUrl",
new String[] {driverName, aliasUrl});
_app.getMessageHandler().showErrorMessage(_errMsg);
return;
}
} catch (Exception e) {
// I18n[DriverPropertiesController.loadingDriverFailed=Loading JDBC driver "{0}" failed.\nCan not load driver properties tab.]
_errMsg = s_stringMgr.getString("DriverPropertiesController.loadingDriverFailed", app.getDataCache().getDriver(driverIdentifier).getName());
_app.getMessageHandler().showErrorMessage(_errMsg);
return;
}
}
DriverPropertyInfo[] infoAr = new DriverPropertyInfo[0];
try
{
infoAr = jdbcDriver.getPropertyInfo(alias.getUrl(), new Properties());
}
catch (Exception e)
{
// I18n[DriverPropertiesController.gettingDriverPropetiesFailed=Loading the properties from the JDBC driver failed.\nCan not load driver properties tab.]
_errMsg = s_stringMgr.getString("DriverPropertiesController.gettingDriverPropetiesFailed");
_app.getMessageHandler().showErrorMessage(_errMsg);
//return;
}
SQLDriverPropertyCollection driverPropertiesClone = alias.getDriverPropertiesClone();
driverPropertiesClone.applyDriverPropertynfo(infoAr);
_propsPnl = new DriverPropertiesPanel(driverPropertiesClone);
_propsPnl.chkUseDriverProperties.setSelected(alias.getUseDriverProperties());
updateTableEnabled();
_propsPnl.chkUseDriverProperties.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
updateTableEnabled();
}
});
}
private void updateTableEnabled()
{
if(null == _origTblColor)
{
_origTblColor = _propsPnl.tbl.getForeground();
}
_propsPnl.tbl.setEnabled(_propsPnl.chkUseDriverProperties.isSelected());
if(_propsPnl.chkUseDriverProperties.isSelected())
{
_propsPnl.tbl.setForeground(_origTblColor);
}
else
{
_propsPnl.tbl.setForeground(Color.lightGray);
}
}
/**
* Retrieve the database driver properties. This is only valid if the
* OK button was pressed.
*
* @return the database driver properties.
*/
public SQLDriverPropertyCollection getSQLDriverPropertyCollection()
{
return _driverPropInfo;
}
public Component getPanelComponent()
{
if(null == _propsPnl)
{
return new MultipleLineLabel(_errMsg);
}
else
{
return _propsPnl;
}
}
public void applyChanges()
{
if (null != _propsPnl)
{
_alias.setDriverProperties(_propsPnl.getSQLDriverProperties());
_alias.setUseDriverProperties(_propsPnl.chkUseDriverProperties.isSelected());
}
}
public String getTitle()
{
//i18n[DriverPropertiesController.title=DriverProperties]
return s_stringMgr.getString("DriverPropertiesController.title");
}
public String getHint()
{
//i18n[DriverPropertiesController.Hint=DriverProperties]
return s_stringMgr.getString("DriverPropertiesController.title");
}
}