Skip to content

Commit

Permalink
Merge pull request #6578 from osandamaleesha/action-dao
Browse files Browse the repository at this point in the history
Add fallback to IDN_ACTION_PROPERTIES table
  • Loading branch information
ashanthamara authored Mar 4, 2025
2 parents 4382bdc + 90cb2b3 commit 4b62fe9
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public static class Column {
public static final String ACTION_PROPERTIES_UUID = "ACTION_UUID";
public static final String ACTION_PROPERTIES_PROPERTY_NAME = "PROPERTY_NAME";
public static final String ACTION_PROPERTIES_PROPERTY_VALUE = "PROPERTY_VALUE";
public static final String ACTION_PROPERTIES_PRIMITIVE_VALUE = "PRIMITIVE_VALUE";
public static final String TENANT_ID = "TENANT_ID";

private Column() {
Expand All @@ -58,11 +59,11 @@ public static class Query {
"DESCRIPTION, STATUS, TENANT_ID, VERSION) VALUES (:UUID;, :TYPE;, :NAME;, :DESCRIPTION;, :STATUS;, " +
":TENANT_ID;, :VERSION;)";
public static final String ADD_ACTION_PROPERTIES = "INSERT INTO IDN_ACTION_PROPERTIES (ACTION_UUID, " +
"PROPERTY_NAME, PROPERTY_VALUE, TENANT_ID) VALUES (:ACTION_UUID;, :PROPERTY_NAME;, :PROPERTY_VALUE;, " +
":TENANT_ID;)";
"PROPERTY_NAME, PRIMITIVE_VALUE, TENANT_ID) VALUES (:ACTION_UUID;, :PROPERTY_NAME;, " +
":PRIMITIVE_VALUE;, :TENANT_ID;)";
public static final String GET_ACTION_BASIC_INFO_BY_ID = "SELECT TYPE, NAME, DESCRIPTION, STATUS FROM " +
"IDN_ACTION WHERE TYPE = :TYPE; AND UUID = :UUID; AND TENANT_ID = :TENANT_ID;";
public static final String GET_ACTION_PROPERTIES_INFO_BY_ID = "SELECT PROPERTY_NAME, PROPERTY_VALUE FROM " +
public static final String GET_ACTION_PROPERTIES_INFO_BY_ID = "SELECT PROPERTY_NAME, PRIMITIVE_VALUE FROM " +
"IDN_ACTION_PROPERTIES WHERE ACTION_UUID = :ACTION_UUID; AND TENANT_ID = :TENANT_ID;";
public static final String GET_ACTIONS_BASIC_INFO_BY_ACTION_TYPE = "SELECT UUID, TYPE, NAME, DESCRIPTION," +
" STATUS FROM IDN_ACTION WHERE TYPE = :TYPE; AND TENANT_ID = :TENANT_ID;";
Expand All @@ -77,9 +78,20 @@ public static class Query {
public static final String GET_ACTIONS_COUNT_PER_ACTION_TYPE = "SELECT TYPE, COUNT(UUID) AS COUNT" +
" FROM IDN_ACTION WHERE TENANT_ID = :TENANT_ID; GROUP BY TYPE";
public static final String UPDATE_ACTION_PROPERTY = "UPDATE IDN_ACTION_PROPERTIES SET " +
"PROPERTY_VALUE = :PROPERTY_VALUE; WHERE ACTION_UUID = :ACTION_UUID; AND " +
"PRIMITIVE_VALUE = :PRIMITIVE_VALUE; WHERE ACTION_UUID = :ACTION_UUID; AND " +
"TENANT_ID = :TENANT_ID; AND PROPERTY_NAME = :PROPERTY_NAME;";

//TODO: Adding following queries to support existing schema. Should be removed once the PROPERTY_VALUE column
// name to PRIMITIVE_TYPE schema change is deployed.
public static final String ADD_ACTION_PROPERTIES_WITH_PROPERTY_VALUE_COLUMN = "INSERT INTO " +
"IDN_ACTION_PROPERTIES (ACTION_UUID, PROPERTY_NAME, PROPERTY_VALUE, TENANT_ID) VALUES " +
"(:ACTION_UUID;, :PROPERTY_NAME;, :PROPERTY_VALUE;, :TENANT_ID;)";
public static final String GET_ACTION_PROPERTIES_INFO_BY_ID_WITH_PROPERTY_VALUE_COLUMN = "SELECT " +
"PROPERTY_NAME, PROPERTY_VALUE FROM IDN_ACTION_PROPERTIES WHERE ACTION_UUID = :ACTION_UUID; AND " +
"TENANT_ID = :TENANT_ID;";
public static final String UPDATE_ACTION_PROPERTY_WITH_PROPERTY_VALUE_COLUMN = "UPDATE IDN_ACTION_PROPERTIES " +
"SET PROPERTY_VALUE = :PROPERTY_VALUE; WHERE ACTION_UUID = :ACTION_UUID; AND " +
"TENANT_ID = :TENANT_ID; AND PROPERTY_NAME = :PROPERTY_NAME;";
private Query() {

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,6 @@ public Map<String, Integer> getActionsCountPerType(Integer tenantId) throws Acti
resultSet.getInt(ActionMgtSQLConstants.Column.ACTION_COUNT));
return null;
}, statement -> statement.setInt(ActionMgtSQLConstants.Column.TENANT_ID, tenantId)));

return actionTypesCountMap;
} catch (TransactionException e) {
throw new ActionMgtServerException("Error while retrieving Actions count per Action Type from the system.",
Expand Down Expand Up @@ -581,21 +580,30 @@ private void addActionPropertiesToDB(String actionId, Map<String, String> action
throws TransactionException {

NamedJdbcTemplate jdbcTemplate = new NamedJdbcTemplate(IdentityDatabaseUtil.getDataSource());
jdbcTemplate.withTransaction(template -> {
template.executeBatchInsert(ActionMgtSQLConstants.Query.ADD_ACTION_PROPERTIES,
statement -> {
for (Map.Entry<String, String> property : actionProperties.entrySet()) {
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_UUID, actionId);
statement.setInt(ActionMgtSQLConstants.Column.TENANT_ID, tenantId);
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_NAME,
property.getKey());
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_VALUE,
property.getValue());
statement.addBatch();
}
}, null);
return null;
});
try {
boolean primitiveValueColumnExists = isPrimitiveValueColumnExists();
String query = primitiveValueColumnExists ? ActionMgtSQLConstants.Query.ADD_ACTION_PROPERTIES
: ActionMgtSQLConstants.Query.ADD_ACTION_PROPERTIES_WITH_PROPERTY_VALUE_COLUMN;
jdbcTemplate.withTransaction(template -> {
template.executeBatchInsert(query,
statement -> {
for (Map.Entry<String, String> property : actionProperties.entrySet()) {
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_UUID, actionId);
statement.setInt(ActionMgtSQLConstants.Column.TENANT_ID, tenantId);
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_NAME,
property.getKey());
statement.setString(primitiveValueColumnExists ?
ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PRIMITIVE_VALUE :
ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_VALUE,
property.getValue());
statement.addBatch();
}
}, null);
return null;
});
} catch (SQLException e) {
throw new TransactionException("Error while adding Action Properties in the system.", e);
}
}

/**
Expand All @@ -610,13 +618,19 @@ private Map<String, String> getActionPropertiesFromDB(String actionId, Integer t

NamedJdbcTemplate jdbcTemplate = new NamedJdbcTemplate(IdentityDatabaseUtil.getDataSource());
Map<String, String> actionEndpointProperties = new HashMap<>();

try {
boolean primitiveValueColumnExists = isPrimitiveValueColumnExists();
String query = primitiveValueColumnExists ? ActionMgtSQLConstants.Query.GET_ACTION_PROPERTIES_INFO_BY_ID
: ActionMgtSQLConstants.Query.GET_ACTION_PROPERTIES_INFO_BY_ID_WITH_PROPERTY_VALUE_COLUMN;
jdbcTemplate.withTransaction(template ->
template.executeQuery(ActionMgtSQLConstants.Query.GET_ACTION_PROPERTIES_INFO_BY_ID,
template.executeQuery(query,
(resultSet, rowNumber) -> {
actionEndpointProperties.put(
resultSet.getString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_NAME),
resultSet.getString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_VALUE));
resultSet.getString(primitiveValueColumnExists ?
ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PRIMITIVE_VALUE :
ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_VALUE));
return null;
},
statement -> {
Expand All @@ -625,7 +639,7 @@ private Map<String, String> getActionPropertiesFromDB(String actionId, Integer t
}));

return actionEndpointProperties;
} catch (TransactionException e) {
} catch (TransactionException | SQLException e) {
throw new ActionMgtServerException("Error while retrieving Action Properties from the system.", e);
}
}
Expand All @@ -642,19 +656,28 @@ private void updateActionPropertiesInDB(String actionId, Map<String, String> upd
Integer tenantId) throws TransactionException {

NamedJdbcTemplate jdbcTemplate = new NamedJdbcTemplate(IdentityDatabaseUtil.getDataSource());
jdbcTemplate.withTransaction(template ->
template.executeBatchInsert(ActionMgtSQLConstants.Query.UPDATE_ACTION_PROPERTY,
statement -> {
for (Map.Entry<String, String> property : updatingProperties.entrySet()) {
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_VALUE,
property.getValue());
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_NAME,
property.getKey());
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_UUID, actionId);
statement.setInt(ActionMgtSQLConstants.Column.TENANT_ID, tenantId);
statement.addBatch();
}
}, null));
try {
boolean primitiveValueColumnExists = isPrimitiveValueColumnExists();
String query = primitiveValueColumnExists ? ActionMgtSQLConstants.Query.UPDATE_ACTION_PROPERTY
: ActionMgtSQLConstants.Query.UPDATE_ACTION_PROPERTY_WITH_PROPERTY_VALUE_COLUMN;
jdbcTemplate.withTransaction(template ->
template.executeBatchInsert(query,
statement -> {
for (Map.Entry<String, String> property : updatingProperties.entrySet()) {
statement.setString(primitiveValueColumnExists ?
ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PRIMITIVE_VALUE :
ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_VALUE,
property.getValue());
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_PROPERTY_NAME,
property.getKey());
statement.setString(ActionMgtSQLConstants.Column.ACTION_PROPERTIES_UUID, actionId);
statement.setInt(ActionMgtSQLConstants.Column.TENANT_ID, tenantId);
statement.addBatch();
}
}, null));
} catch (SQLException e) {
throw new TransactionException("Error while updating Action Properties in the system.", e);
}
}

/**
Expand Down Expand Up @@ -714,4 +737,21 @@ private ActionDTO changeActionStatus(String actionType, String actionId, String
throw new ActionMgtServerException("Error while updating Action Status to " + status, e);
}
}

/**
* Check whether the PRITMITIVE_VALUE column exists in IDN_ACTION_PROPERTIES table.
* TODO: Remove this temporary method once the column name is changed.
*
* @return True if the column exists, False otherwise.
* @throws SQLException If an error occurs while checking the table existence.
*/
private boolean isPrimitiveValueColumnExists() throws SQLException {

try (Connection connection = IdentityDatabaseUtil.getDBConnection(false);
ResultSet resultSet = connection.getMetaData().getColumns(null, null,
"IDN_ACTION_PROPERTIES", "PRIMITIVE_VALUE")) {
return resultSet.next();
}
}

}

0 comments on commit 4b62fe9

Please sign in to comment.