Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,14 @@ public class DatabaseConnectionInfo {
private String username;
private String password;
private String tableNamePatternExpression;
private String selectLimit;
private Set<String> resourceIds;

public DatabaseConnectionInfo(String driver, String url, String username, String password, String tableNamePatternExpression, String selectLimit, Set<String> resourceIds) {
public DatabaseConnectionInfo(String driver, String url, String username, String password, String tableNamePatternExpression, Set<String> resourceIds) {
this.driver = driver;
this.url = url;
this.username = username;
this.password = password;
this.tableNamePatternExpression = tableNamePatternExpression;
this.selectLimit = selectLimit;
this.resourceIds = resourceIds;
}

Expand Down Expand Up @@ -70,14 +68,6 @@ public void setTableNamePatternExpression(String tableNamePatternExpression) {
this.tableNamePatternExpression = tableNamePatternExpression;
}

public String getSelectLimit() {
return selectLimit;
}

public void setSelectLimit(String selectLimit) {
this.selectLimit = selectLimit;
}

public Set<String> getResourceIds() {
return resourceIds;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,8 @@ public List<DriverInfo> getDrivers() {
String name = StringUtils.trim((String) driversTable.getModel().getValueAt(row, 0));
String className = StringUtils.trim((String) driversTable.getModel().getValueAt(row, 1));
String template = StringUtils.trim((String) driversTable.getModel().getValueAt(row, 2));
String selectLimit = StringUtils.trim((String) driversTable.getModel().getValueAt(row, 3));
List<String> alternativeClassNames = new ArrayList<String>(Arrays.asList(StringUtils.split(StringUtils.trim((String) driversTable.getModel().getValueAt(row, 4)), ',')));
drivers.add(new DriverInfo(name, className, template, selectLimit, alternativeClassNames));
List<String> alternativeClassNames = new ArrayList<String>(Arrays.asList(StringUtils.split(StringUtils.trim((String) driversTable.getModel().getValueAt(row, 3)), ',')));
drivers.add(new DriverInfo(name, className, template, alternativeClassNames));
}

return drivers;
Expand All @@ -124,21 +123,20 @@ private void setDrivers(List<DriverInfo> drivers) {
drivers = new ArrayList<DriverInfo>();
}

Object[][] data = new Object[drivers.size()][5];
Object[][] data = new Object[drivers.size()][4];

for (int i = 0; i < drivers.size(); i++) {
DriverInfo info = drivers.get(i);
data[i][0] = StringUtils.trim(StringUtils.defaultString(info.getName()));
data[i][1] = StringUtils.trim(StringUtils.defaultString(info.getClassName()));
data[i][2] = StringUtils.trim(StringUtils.defaultString(info.getTemplate()));
data[i][3] = StringUtils.trim(StringUtils.defaultString(info.getSelectLimit()));

String alternativeClassNamesStr = "";
List<String> alternativeClassNames = info.getAlternativeClassNames();
if (CollectionUtils.isNotEmpty(alternativeClassNames)) {
alternativeClassNamesStr = StringUtils.join(alternativeClassNames, ',');
}
data[i][4] = alternativeClassNamesStr;
data[i][3] = alternativeClassNamesStr;
}

((RefreshTableModel) driversTable.getModel()).refreshDataVector(data);
Expand Down Expand Up @@ -184,7 +182,7 @@ private void initComponents() {

driversTable = new MirthTable();
driversTable.setModel(new RefreshTableModel(new Object[] { "Name", "Driver Class",
"JDBC URL Template", "Select with Limit Query", "Legacy Driver Classes" }, 0));
"JDBC URL Template", "Legacy Driver Classes" }, 0));
driversTable.setDragEnabled(false);
driversTable.setRowSelectionAllowed(true);
driversTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Expand All @@ -204,8 +202,7 @@ private void initComponents() {
driversTable.getColumnExt(0).setPreferredWidth(101);
driversTable.getColumnExt(1).setPreferredWidth(162);
driversTable.getColumnExt(2).setPreferredWidth(269);
driversTable.getColumnExt(3).setPreferredWidth(200);
driversTable.getColumnExt(4).setPreferredWidth(137);
driversTable.getColumnExt(3).setPreferredWidth(137);

driversScrollPane = new JScrollPane(driversTable);

Expand Down Expand Up @@ -233,8 +230,7 @@ private void initToolTips() {
driversTable.getColumnExt(0).setToolTipText("<html>The name of the driver entry. This will appear in the<br/>drop-down menu for the Database Reader/Writer connectors.</html>");
driversTable.getColumnExt(1).setToolTipText("<html>The fully-qualified Java class name for the JDBC driver.</html>");
driversTable.getColumnExt(2).setToolTipText("<html>The template for the JDBC connection URL that can be<br/>auto-populated from the Database Reader/Writer settings.</html>");
driversTable.getColumnExt(3).setToolTipText("<html>A select query (with limit 1) that can be used to<br/>retrieve column metadata. If empty the driver-specific<br/>generic query will be used, which could be slow.</html>");
driversTable.getColumnExt(4).setToolTipText("<html>A comma-separated list of alternate or legacy JDBC driver class names.<br/>Any Database Reader/Writer connector using one of these driver classes<br/>will have the corresponding entry selected in the Driver drop-down menu.<br/>The driver will be updated to the primary value upon next channel save.</html>");
driversTable.getColumnExt(3).setToolTipText("<html>A comma-separated list of alternate or legacy JDBC driver class names.<br/>Any Database Reader/Writer connector using one of these driver classes<br/>will have the corresponding entry selected in the Driver drop-down menu.<br/>The driver will be updated to the primary value upon next channel save.</html>");
}

private void initLayout() {
Expand All @@ -256,12 +252,11 @@ private void addDriver() {
int selectedRow = getSelectedRow();
if (selectedRow >= 0) {
((RefreshTableModel) driversTable.getModel()).insertRow(selectedRow + 1, new Object[] {
"", "", "", "", "" });
"", "", "", "" });
driversTable.getSelectionModel().setSelectionInterval(selectedRow + 1, selectedRow + 1);
driversTable.scrollRowToVisible(selectedRow + 1);
} else {
((RefreshTableModel) driversTable.getModel()).addRow(new Object[] { "", "", "", "",
"" });
((RefreshTableModel) driversTable.getModel()).addRow(new Object[] { "", "", "", "" });
driversTable.getSelectionModel().setSelectionInterval(driversTable.getRowCount() - 1, driversTable.getRowCount() - 1);
driversTable.scrollRowToVisible(driversTable.getRowCount() - 1);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -564,7 +564,7 @@ public void handle(Object response) {
Set<String> tableNamePatterns = new HashSet<String>(Arrays.asList(databaseConnectionInfo.getTableNamePatternExpression().trim().split("[, ]+")));
try {
metaDataWorkerId = UUID.randomUUID().toString();
parentConnector.getServlet(DatabaseConnectorServletInterface.class, "Retrieving tables...", "Could not retrieve database metadata. Please ensure that your driver, URL, username, and password are correct.\n\n", handler, metaDataWorkerId).getTables(parent.channelEditPanel.currentChannel.getId(), parent.channelEditPanel.currentChannel.getName(), databaseConnectionInfo.getDriver(), databaseConnectionInfo.getUrl(), databaseConnectionInfo.getUsername(), databaseConnectionInfo.getPassword(), tableNamePatterns, databaseConnectionInfo.getSelectLimit(), databaseConnectionInfo.getResourceIds());
parentConnector.getServlet(DatabaseConnectorServletInterface.class, "Retrieving tables...", "Could not retrieve database metadata. Please ensure that your driver, URL, username, and password are correct.\n\n", handler, metaDataWorkerId).getTables(parent.channelEditPanel.currentChannel.getId(), parent.channelEditPanel.currentChannel.getName(), databaseConnectionInfo.getDriver(), databaseConnectionInfo.getUrl(), databaseConnectionInfo.getUsername(), databaseConnectionInfo.getPassword(), tableNamePatterns, databaseConnectionInfo.getResourceIds());
} catch (ClientException e) {
// Should not happen
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -729,11 +729,11 @@ private DriverInfo getSelectedDriver() {
}

private DriverInfo getSelectOneDriver() {
return new DriverInfo(DatabaseReceiverProperties.DRIVER_DEFAULT, "", "", "");
return new DriverInfo(DatabaseReceiverProperties.DRIVER_DEFAULT, "", "");
}

private DriverInfo getCustomDriver() {
return new DriverInfo(DatabaseReceiverProperties.DRIVER_CUSTOM, "", "", "");
return new DriverInfo(DatabaseReceiverProperties.DRIVER_CUSTOM, "", "");
}

private void fixDriversList() {
Expand Down Expand Up @@ -932,7 +932,7 @@ public void showDatabaseMetaData(STATEMENT_TYPE type) {
} else {
Connector sourceConnector = PlatformUI.MIRTH_FRAME.channelEditPanel.currentChannel.getSourceConnector();
Set<String> resourceIds = PlatformUI.MIRTH_FRAME.channelEditPanel.resourceIds.get(sourceConnector.getMetaDataId()).keySet();
new DatabaseMetadataDialog(this, type, new DatabaseConnectionInfo(properties.getDriver(), properties.getUrl(), properties.getUsername(), properties.getPassword(), "", getSelectedDriver().getSelectLimit(), resourceIds));
new DatabaseMetadataDialog(this, type, new DatabaseConnectionInfo(properties.getDriver(), properties.getUrl(), properties.getUsername(), properties.getPassword(), "", resourceIds));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -412,11 +412,11 @@ private DriverInfo getSelectedDriver() {
}

private DriverInfo getSelectOneDriver() {
return new DriverInfo(DatabaseReceiverProperties.DRIVER_DEFAULT, "", "", "");
return new DriverInfo(DatabaseReceiverProperties.DRIVER_DEFAULT, "", "");
}

private DriverInfo getCustomDriver() {
return new DriverInfo(DatabaseReceiverProperties.DRIVER_CUSTOM, "", "", "");
return new DriverInfo(DatabaseReceiverProperties.DRIVER_CUSTOM, "", "");
}

private void fixDriversList() {
Expand Down Expand Up @@ -508,7 +508,7 @@ public void showDatabaseMetaData(STATEMENT_TYPE type) {
} else {
Connector destinationConnector = PlatformUI.MIRTH_FRAME.channelEditPanel.currentChannel.getDestinationConnectors().get(PlatformUI.MIRTH_FRAME.channelEditPanel.lastModelIndex);
Set<String> resourceIds = PlatformUI.MIRTH_FRAME.channelEditPanel.resourceIds.get(destinationConnector.getMetaDataId()).keySet();
new DatabaseMetadataDialog(this, type, new DatabaseConnectionInfo(properties.getDriver(), properties.getUrl(), properties.getUsername(), properties.getPassword(), "", getSelectedDriver().getSelectLimit(), resourceIds));
new DatabaseMetadataDialog(this, type, new DatabaseConnectionInfo(properties.getDriver(), properties.getUrl(), properties.getUsername(), properties.getPassword(), "", resourceIds));
}
}

Expand Down
13 changes: 6 additions & 7 deletions server/conf/dbdrivers.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@
class = the driver class name, cannot be empty
name = database driver name to be displayed as, cannot be empty
template = the template for creating the database connection, cannot be empty
selectLimit = defines the select statement used for retrieving column information, empty means use the generic query (which could be slow)
alternativeClasses = A comma-separated list of legacy driver classes (optional).
-->
<drivers>
<driver class="com.mysql.cj.jdbc.Driver" name="MySQL" template="jdbc:mysql://host:port/dbname" selectLimit="SELECT * FROM ? LIMIT 1" alternativeClasses="com.mysql.jdbc.Driver" />
<driver class="oracle.jdbc.driver.OracleDriver" name="Oracle" template="jdbc:oracle:thin:@host:port:dbname" selectLimit="SELECT * FROM ? WHERE ROWNUM &lt; 2" />
<driver class="org.postgresql.Driver" name="PostgreSQL" template="jdbc:postgresql://host:port/dbname" selectLimit="SELECT * FROM ? LIMIT 1" />
<driver class="net.sourceforge.jtds.jdbc.Driver" name="SQL Server/Sybase (jTDS)" template="jdbc:jtds:sqlserver://host:port/dbname" selectLimit="SELECT TOP 1 * FROM ?" />
<driver class="com.microsoft.sqlserver.jdbc.SQLServerDriver" name="Microsoft SQL Server" template="jdbc:sqlserver://host:port;databaseName=dbname" selectLimit="SELECT TOP 1 * FROM ?" />
<driver class="org.sqlite.JDBC" name="SQLite" template="jdbc:sqlite:dbfile.db" selectLimit="SELECT * FROM ? LIMIT 1" />
<driver class="com.mysql.cj.jdbc.Driver" name="MySQL" template="jdbc:mysql://host:port/dbname" alternativeClasses="com.mysql.jdbc.Driver" />
<driver class="oracle.jdbc.driver.OracleDriver" name="Oracle" template="jdbc:oracle:thin:@host:port:dbname" />
<driver class="org.postgresql.Driver" name="PostgreSQL" template="jdbc:postgresql://host:port/dbname" />
<driver class="net.sourceforge.jtds.jdbc.Driver" name="SQL Server/Sybase (jTDS)" template="jdbc:jtds:sqlserver://host:port/dbname" />
<driver class="com.microsoft.sqlserver.jdbc.SQLServerDriver" name="Microsoft SQL Server" template="jdbc:sqlserver://host:port;databaseName=dbname" />
<driver class="org.sqlite.JDBC" name="SQLite" template="jdbc:sqlite:dbfile.db" />
</drivers>
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,7 @@ public DatabaseConnectorServlet(@Context HttpServletRequest request, @Context Se
}

@Override
public SortedSet<Table> getTables(String channelId, String channelName, String driver, String url, String username, String password, Set<String> tableNamePatterns, String selectLimit, Set<String> resourceIds) {
// selectLimit is deprecated and ignored for security reasons. Kept for backcompat.
selectLimit = null;

public SortedSet<Table> getTables(String channelId, String channelName, String driver, String url, String username, String password, Set<String> tableNamePatterns, Set<String> resourceIds) {
CustomDriver customDriver = null;
Connection connection = null;
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ public SortedSet<Table> getTables(// @formatter:off
@Param("username") @Parameter(description = "The username to authenticate with.") @DefaultValue("") @QueryParam("username") String username,
@Param(value = "password", excludeFromAudit = true) @Parameter(description = "The password to authenticate with.", schema = @Schema(format = "password")) @DefaultValue("") @QueryParam("password") String password,
@Param("tableNamePatterns") @Parameter(description = "If specified, filters by table name. Wildcards (* or %) are allowed.") @QueryParam("tableNamePattern") Set<String> tableNamePatterns,
@Param("selectLimit") @Parameter(description = "A simple query to use to retrieve database metadata information.", schema = @Schema(defaultValue = "SELECT * FROM ? LIMIT 1")) @DefaultValue("SELECT * FROM ? LIMIT 1") @QueryParam("selectLimit") String selectLimit,
@Param("resourceIds") @Parameter(description = "Library resource IDs to use, if a custom driver is necessary.") @QueryParam("resourceId") Set<String> resourceIds) throws ClientException;
// @formatter:on)
}
Loading
Loading