/*
* Copyright (c) 2010 WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.user.mgt;
import org.wso2.carbon.user.core.util.DatabaseUtil;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
public class UMDatabaseManager {
private DataSource dataSource = null;
private static final String CREATE_TABLE = "CREATE TABLE USER_MGT_PROPERTIES(ID INTEGER GENERATED BY DEFAULT AS IDENTITY, "
+ "PROPERTY_NAME VARCHAR(255) NOT NULL, "
+ "PROPERTY_VALUE VARCHAR(255), "
+ "PRIMARY KEY (ID))";
private static final String SET_PROPERTY = "INSERT INTO USER_MGT_PROPERTIES(PROPERTY_NAME, PROPERTY_VALUE) VALUES (?,?)";
private static final String GET_PROPERTY = "SELECT PROPERTY_VALUE FROM USER_MGT_PROPERTIES WHERE PROPERTY_NAME=?";
private static final String GET_PROPERTIES = "SELECT PROPERTY_NAME, PROPERTY_VALUE FROM USER_MGT_PROPERTIES";
private static final String DELETE_PROPERTIES = "DELETE * FROM USER_MGT_PROPERTIES";
public UMDatabaseManager(DataSource dataSource) {
this.dataSource = dataSource;
}
public String getProperty(String name) throws SQLException {
String value = null;
PreparedStatement stmt = null;
Connection dbConnection = null;
ResultSet rs = null;
try {
dbConnection = dataSource.getConnection();
stmt = dbConnection.prepareStatement(GET_PROPERTY);
stmt.setString(1, name);
stmt.executeQuery();
rs = stmt.executeQuery();
if (rs.next()) {
value = rs.getString(1);
}
} finally {
DatabaseUtil.closeAllConnections(dbConnection, rs, stmt);
}
return value;
}
public Map<String, String> getExternalStoreProperties() throws SQLException {
Connection dbConnection = null;
Map<String, String> map = new HashMap<String, String>();
ResultSet rs = null;
PreparedStatement stmt = null;
try {
dbConnection = dataSource.getConnection();
stmt = dbConnection.prepareStatement(GET_PROPERTIES);
rs = stmt.executeQuery();
while (rs.next()) {
String name = rs.getString(1);
String value = rs.getString(2);
map.put(name, value);
}
} finally {
DatabaseUtil.closeAllConnections(dbConnection, rs, stmt);
}
return map;
}
public void deleteAllProperties() throws SQLException {
Connection dbConnection = null;
PreparedStatement stmt = null;
try {
dbConnection = dataSource.getConnection();
stmt = dbConnection.prepareStatement(DELETE_PROPERTIES);
stmt.executeUpdate();
} finally {
DatabaseUtil.closeAllConnections(dbConnection, stmt);
}
}
public void setProperty(String name, String value) throws SQLException {
Connection dbConnection = null;
PreparedStatement stmt = null;
try {
dataSource.getConnection();
dbConnection = dataSource.getConnection();
dbConnection.setAutoCommit(false);
stmt = dbConnection.prepareStatement(SET_PROPERTY);
stmt.setString(1, name);
stmt.setString(2, value);
stmt.executeUpdate();
stmt.executeUpdate();
} finally {
DatabaseUtil.closeAllConnections(dbConnection, stmt);
}
}
public void createManagementTables() throws SQLException {
Connection dbConnection = null;
ResultSet rs = null;
Statement stmt = null;
try {
dbConnection = dataSource.getConnection();
DatabaseMetaData dbmd = dbConnection.getMetaData();
rs = dbmd.getTables(null, null, "USER_MGT_PROPERTIES", null);
stmt =
dbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
if (!rs.next()) {
stmt.executeUpdate(CREATE_TABLE);
dbConnection.commit();
}
} finally {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
DatabaseUtil.closeAllConnections(dbConnection);
}
}
}