From ef09aa34d156bcbc9e82f1f8f32f4a88c445aa85 Mon Sep 17 00:00:00 2001
From: Glenn Van Lint <glenn.vanlint@is4u.be>
Date: Wed, 24 Apr 2013 08:36:35 +0000
Subject: [PATCH] Correction of header copyright. Applied correct formatting style. Removed hard-coded values: "opendj_db" in fillTablesList() and "dc=example,dc=com" in search requests to work dynamically.
---
opendj3/opendj-virtual/src/main/java/org/forgerock/opendj/virtual/JDBCMapper.java | 405 ++++++++++++++++++++++++++++++---------------------------
1 files changed, 216 insertions(+), 189 deletions(-)
diff --git a/opendj3/opendj-virtual/src/main/java/org/forgerock/opendj/virtual/JDBCMapper.java b/opendj3/opendj-virtual/src/main/java/org/forgerock/opendj/virtual/JDBCMapper.java
index 62c8d92..6145e8e 100644
--- a/opendj3/opendj-virtual/src/main/java/org/forgerock/opendj/virtual/JDBCMapper.java
+++ b/opendj3/opendj-virtual/src/main/java/org/forgerock/opendj/virtual/JDBCMapper.java
@@ -1,32 +1,27 @@
/*
* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the Common Development and
+ * Distribution License (the License). You may not use this file except in compliance with the
+ * License.
*
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
+ * specific language governing permission and limitations under the License.
*
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- * Portions Copyright [yyyy] [name of copyright owner]
+ * When distributing Covered Software, include this CDDL Header Notice in each file and include
+ * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
+ * Header, with the fields enclosed by brackets [] replaced by your own identifying
+ * information: "Portions Copyright [year] [name of copyright owner]".
*
* CDDL HEADER END
*
- *
- * Copyright 2010 Sun Microsystems, Inc.
- * Portions copyright 2011 ForgeRock AS
+ * Copyright 2013 ForgeRock AS.
+ * Portions Copyright 2013 IS4U.
*/
package org.forgerock.opendj.virtual;
+import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
@@ -44,188 +39,220 @@
import org.forgerock.opendj.ldap.SearchScope;
import org.forgerock.opendj.ldap.responses.SearchResultEntry;
import org.forgerock.opendj.ldif.ConnectionEntryReader;
+import org.forgerock.opendj.ldif.EntryReader;
public final class JDBCMapper {
-
- final private java.sql.Connection jdbcConnection;
- final private Connection ldapConnection;
- final private ArrayList<String> tables = new ArrayList<String>();
- final private Map<String, ArrayList<String>> tableColumnsMap = new HashMap<String, ArrayList<String>>();
- final private Map<String, String> tableColumnNullableMap = new HashMap<String, String>();
- final private Map<String, String> tableColumnDataTypeMap = new HashMap<String, String>();
- final private ArrayList <String> organizationalUnits = new ArrayList<String>();
- final private Map<String, ArrayList<String>> organizationalUnitAttributesMap = new HashMap<String, ArrayList<String>>();
- private Map<String, String> SQLToLDAPMap = new HashMap<String, String>();
-
- JDBCMapper(final Connection jdbcconnection, final Connection ldapconnection) {
- this.jdbcConnection = ((JDBCConnection) jdbcconnection).getSqlConnection();
- this.ldapConnection = ldapconnection;
- }
-
- public void closeConnections() throws SQLException{
- this.jdbcConnection.close();
- this.ldapConnection.close();
- }
-
- public void fillMaps() throws ErrorResultException, ErrorResultIOException, SearchResultReferenceIOException, SQLException{
- fillTablesList();
- fillTableColumnsMap();
- fillOrganizationalUnitsList();
- fillOrganizationalUnitAttributesMap();
- }
-
- private void fillTablesList() throws SQLException{
- final String sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE " +
- "TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='opendj_db'";
- final Statement st = jdbcConnection.createStatement();
- final ResultSet rs = st.executeQuery(sql);
-
- while(rs.next()){
- tables.add(rs.getString(1));
- }
- }
-
- private void fillTableColumnsMap() throws SQLException, ErrorResultIOException, SearchResultReferenceIOException{
- for(int i =0; i < tables.size(); i++){
- final String tableName = tables.get(i);
- final String sql = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + tableName + "'";
- final Statement st = jdbcConnection.createStatement();
- final ResultSet rs = st.executeQuery(sql);
- final ArrayList<String> columnsList = new ArrayList<String>();
-
- String columnName = "", columnNullable = "", columnDataType = "";
- while(rs.next()){
- columnName = rs.getString(4);
- columnNullable = rs.getString(7);
- columnDataType = rs.getString(8);
- columnsList.add(columnName);
- tableColumnNullableMap.put(tableName + ":" + columnName, columnNullable);
- tableColumnDataTypeMap.put(tableName + ":" + columnName, columnDataType);
- }
- tableColumnsMap.put(tableName, columnsList);
- }
- }
-
- public ArrayList<String> getTables() throws SQLException{
- return tables;
- }
-
- public ArrayList<String> getTableColumns(String tableName) throws SQLException{
- final ArrayList<String> tableColumnsList = tableColumnsMap.get(tableName);
- return tableColumnsList;
- }
-
- public boolean getTableColumnNullable(String tableName, String columnName){
- String mappingKey = tableName + ":" + columnName;
- String nullable = tableColumnNullableMap.get(mappingKey);
- if(nullable.equals("NO")) return false;
- else return true;
- }
-
- public Object getTableColumnDataType(String tableName, String columnName){
- String mappingKey = tableName + ":" + columnName;
- String mappingValue = tableColumnDataTypeMap.get(mappingKey);
- if(mappingValue.equals("int")) return Integer.class;
- return String.class;
- }
-
- public ArrayList<String> getOrganizationalUnits(){
- return organizationalUnits;
- }
-
- public ArrayList<String> getOrganizationalUnitAttributes(String organizationalUnitName){
- final ArrayList<String> organizationalUnitAttributesList = organizationalUnitAttributesMap.get(organizationalUnitName);
- return organizationalUnitAttributesList;
- }
-
- private void fillOrganizationalUnitsList() throws ErrorResultException, ErrorResultIOException, SearchResultReferenceIOException{
- ConnectionEntryReader reader = ldapConnection.search("dc=example,dc=com", SearchScope.WHOLE_SUBTREE, "ou=*");
- while (reader.hasNext()) {
- final SearchResultEntry entry = reader.readEntry();
- final Iterator<Attribute> it = entry.getAllAttributes().iterator();
- organizationalUnits.add(it.next().firstValueAsString());
+ final private java.sql.Connection jdbcConnection;
+ final private Connection ldapConnection;
+ private String dbName;
+ final private ArrayList<String> tablesList = new ArrayList<String>();
+ final private ArrayList<String> baseDNList = new ArrayList<String>();
+ final private Map<String, ArrayList<String>> tableColumnsMap = new HashMap<String, ArrayList<String>>();
+ final private Map<String, String> tableColumnNullableMap = new HashMap<String, String>();
+ final private Map<String, String> tableColumnDataTypeMap = new HashMap<String, String>();
+ final private Map<String, ArrayList<String>> organizationalUnitsMap = new HashMap<String, ArrayList<String>>();
+ final private Map<String, ArrayList<String>> organizationalUnitAttributesMap = new HashMap<String, ArrayList<String>>();
+ private Map<String, String> SQLToLDAPMap = new HashMap<String, String>();
+
+ JDBCMapper(final Connection jdbcconnection, final Connection ldapconnection) {
+ this.jdbcConnection = ((JDBCConnection) jdbcconnection).getSqlConnection();
+ this.ldapConnection = ldapconnection;
+ }
+
+ public void setDbName(String DBName){
+ this.dbName = DBName;
+ }
+
+ public void closeConnections() throws SQLException{
+ this.jdbcConnection.close();
+ this.ldapConnection.close();
+ }
+
+ public void fillMaps() throws ErrorResultException, SQLException, IOException{
+ fillBaseDNList();
+ fillTablesList();
+ fillTableColumnsMap();
+ fillOrganizationalUnitsMap();
+ fillOrganizationalUnitAttributesMap();
+ }
+
+ private void fillBaseDNList() throws IOException{
+ EntryReader reader = this.ldapConnection.search(" ", SearchScope.SINGLE_LEVEL, "objectClass=*");
+ while(reader.hasNext()){
+ baseDNList.add(reader.readEntry().getName().toString());
+ }
+ }
+
+ private void fillTablesList() throws SQLException{
+ final String sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE " +
+ "TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = '" + this.dbName + "'";
+ final Statement st = this.jdbcConnection.createStatement();
+ final ResultSet rs = st.executeQuery(sql);
+
+ while(rs.next()){
+ tablesList.add(rs.getString(1));
+ }
+ }
+
+ private void fillTableColumnsMap() throws SQLException, ErrorResultIOException, SearchResultReferenceIOException{
+ for(int i =0; i < tablesList.size(); i++){
+ final String tableName = tablesList.get(i);
+ final String sql = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + tableName + "'";
+ final Statement st = jdbcConnection.createStatement();
+ final ResultSet rs = st.executeQuery(sql);
+ final ArrayList<String> columnsList = new ArrayList<String>();
+
+ String columnName = "", columnNullable = "", columnDataType = "";
+ while(rs.next()){
+ columnName = rs.getString(4);
+ columnNullable = rs.getString(7);
+ columnDataType = rs.getString(8);
+ columnsList.add(columnName);
+ tableColumnNullableMap.put(tableName + ":" + columnName, columnNullable);
+ tableColumnDataTypeMap.put(tableName + ":" + columnName, columnDataType);
+ }
+ tableColumnsMap.put(tableName, columnsList);
+ }
+ }
+
+ public ArrayList<String> getTables() throws SQLException{
+ return tablesList;
+ }
+
+ public ArrayList<String> getBaseDNs(){
+ return baseDNList;
+ }
+
+ public ArrayList<String> getTableColumns(String tableName) throws SQLException{
+ final ArrayList<String> tableColumnsList = tableColumnsMap.get(tableName);
+ return tableColumnsList;
+ }
+
+ public boolean getTableColumnNullable(String tableName, String columnName){
+ String mappingKey = tableName + ":" + columnName;
+ String nullable = tableColumnNullableMap.get(mappingKey);
+ if(nullable.equals("NO")) return false;
+ else return true;
+ }
+
+ public Object getTableColumnDataType(String tableName, String columnName){
+ String mappingKey = tableName + ":" + columnName;
+ String mappingValue = tableColumnDataTypeMap.get(mappingKey);
+ if(mappingValue.equals("int")) return Integer.class;
+ return String.class;
+ }
+
+ public ArrayList<String> getOrganizationalUnits(String baseDN){
+ return organizationalUnitsMap.get(baseDN);
+ }
+
+ public ArrayList<String> getOrganizationalUnitAttributes(String baseDN, String organizationalUnitName){
+ return organizationalUnitAttributesMap.get(baseDN + ":" + organizationalUnitName);
+ }
+
+ private void fillOrganizationalUnitsMap() throws ErrorResultException, ErrorResultIOException, SearchResultReferenceIOException{
+ for(int i = 0; i < baseDNList.size(); i++){
+ String baseDN = baseDNList.get(i);
+ ConnectionEntryReader reader = ldapConnection.search(baseDN, SearchScope.WHOLE_SUBTREE, "ou=*");
+
+ ArrayList<String> organizationalUnitsList = new ArrayList<String>();
+ while (reader.hasNext()) {
+ final SearchResultEntry entry = reader.readEntry();
+ final Iterator<Attribute> it = entry.getAllAttributes().iterator();
+ organizationalUnitsList.add(it.next().firstValueAsString());
+ }
+ organizationalUnitsMap.put(baseDN, organizationalUnitsList);
+ }
+ }
+
+ private void fillOrganizationalUnitAttributesMap() throws ErrorResultIOException, SearchResultReferenceIOException{
+ for(int i = 0; i < baseDNList.size(); i++){
+ String baseDN = baseDNList.get(i);
+ ArrayList<String> organizationalUnitsList = organizationalUnitsMap.get(baseDN);
+
+ for(int j = 0; j < organizationalUnitsList.size(); j++){
+ final String organizationalUnitName = organizationalUnitsList.get(j);
+ final ConnectionEntryReader reader = ldapConnection.search("ou=" + organizationalUnitName + "," + baseDN, SearchScope.WHOLE_SUBTREE, "objectClass=*");
+ final ArrayList<String> attributesList;
+
+ if(reader.hasNext()){
+ final Iterator<Attribute> it = reader.readEntry().getAllAttributes().iterator();
+ attributesList = new ArrayList<String>();
+
+ while(it.hasNext()){
+ final Attribute att = it.next();
+ attributesList.add(att.getAttributeDescriptionAsString());
+ }
}
- }
-
- private void fillOrganizationalUnitAttributesMap() throws ErrorResultIOException, SearchResultReferenceIOException{
- for(int i=0; i < organizationalUnits.size(); i++){
- final String organizationalUnitName = organizationalUnits.get(i);
- final ConnectionEntryReader reader = ldapConnection.search("ou=" + organizationalUnitName + ",dc=example,dc=com", SearchScope.WHOLE_SUBTREE, "uid=*");
-
- if(reader.hasNext()){
- final Iterator<Attribute> it = reader.readEntry().getAllAttributes().iterator();
- final ArrayList <String> attributesList = new ArrayList <String>();
-
- while(it.hasNext()){
- final Attribute att = it.next();
- attributesList.add(att.getAttributeDescriptionAsString());
- }
- organizationalUnitAttributesMap.put(organizationalUnitName, attributesList);
- }
+ else{
+ attributesList = new ArrayList<String>();
+ attributesList.add("");
}
+ organizationalUnitAttributesMap.put(baseDN + ":" + organizationalUnitName, attributesList);
+ }
}
-
- public void addCurrentMapToMapping(String tableName, String[] columnNames, String OUName, String[] attributeNames){
- String mappingKey, mappingValue;
-
- for(int i = 0; i < columnNames.length; i++){
- mappingKey = tableName + ":" + columnNames[i];
- mappingValue = OUName + ":" + attributeNames[i];
- SQLToLDAPMap.put(mappingKey, mappingValue);
- }
+ }
+
+ public void addCurrentMapToMapping(String tableName, String[] columnNames, String baseDN, String OUName, String[] attributeNames){
+ String mappingKey, mappingValue;
+
+ for(int i = 0; i < columnNames.length; i++){
+ mappingKey = tableName + ":" + columnNames[i];
+ mappingValue = baseDN + ":" + OUName + ":" + attributeNames[i];
+ SQLToLDAPMap.put(mappingKey, mappingValue);
}
-
- public Map<String, String> getMapping(){
- return SQLToLDAPMap;
+ }
+
+ public Map<String, String> getMapping(){
+ return SQLToLDAPMap;
+ }
+
+ public Map<String, String> loadCurrentMapFromMapping(String tableName) {
+ String mappingKey, mappingValue;
+ final ArrayList<String> tableColumnsList = tableColumnsMap.get(tableName);
+ Map<String, String> currentMap = new HashMap<String, String>();
+
+ for(int i = 0; i < tableColumnsList.size(); i++){
+ mappingKey = tableName + ":" + tableColumnsList.get(i);
+ if(!SQLToLDAPMap.containsKey(mappingKey)) continue;
+ mappingValue = SQLToLDAPMap.get(mappingKey);
+ currentMap.put(mappingKey, mappingValue);
}
+ return currentMap;
+ }
- public Map<String, String> loadCurrentMapFromMapping(String tableName) {
- String mappingKey, mappingValue;
- final ArrayList<String> tableColumnsList = tableColumnsMap.get(tableName);
- Map<String, String> currentMap = new HashMap<String, String>();
-
- for(int i = 0; i < tableColumnsList.size(); i++){
- mappingKey = tableName + ":" + tableColumnsList.get(i);
- if(!SQLToLDAPMap.containsKey(mappingKey)) continue;
- mappingValue = SQLToLDAPMap.get(mappingKey);
- currentMap.put(mappingKey, mappingValue);
- }
- return currentMap;
- }
-
- public void loadMappingConfig(Map<String, String> m){
- this.SQLToLDAPMap = m;
- }
+ public void loadMappingConfig(Map<String, String> m){
+ this.SQLToLDAPMap = m;
+ }
- public String getTableNameFromMapping(String organizationalUnit) {
- for (Entry<String, String> entry : SQLToLDAPMap.entrySet()) {
- String mappingValue = entry.getValue();
- if (mappingValue.contains(organizationalUnit)) {
- String mappingKey = entry.getKey();
- String stringSplitter[] = mappingKey.split(":");
- String tableName = stringSplitter[0];
- return tableName;
- }
- }
- return null;
- }
+ public String getTableNameFromMapping(String DN, String organizationalUnit) {
+ for (Entry<String, String> entry : SQLToLDAPMap.entrySet()) {
+ String mappingValue = entry.getValue();
+ if (mappingValue.contains(DN + ":" + organizationalUnit)) {
+ String mappingKey = entry.getKey();
+ String stringSplitter[] = mappingKey.split(":");
+ String tableName = stringSplitter[0];
+ return tableName;
+ }
+ }
+ return null;
+ }
- public String getColumnNameFromMapping(String tableName, String organizationalUnitName, String attributeName) {
- for (Entry<String, String> entry : SQLToLDAPMap.entrySet()) {
- String mappingValue = entry.getValue();
- if (mappingValue.equals(organizationalUnitName + ":" + attributeName)) {
- String mappingKey = entry.getKey();
- if(mappingKey.contains(tableName)){
- String stringSplitter[] = mappingKey.split(":");
- String columnName = stringSplitter[1];
- return columnName;
- }
- }
- }
- return null;
- }
+ public String getColumnNameFromMapping(String tableName, String baseDN, String organizationalUnitName, String attributeName) {
+ for (Entry<String, String> entry : SQLToLDAPMap.entrySet()) {
+ String mappingValue = entry.getValue();
+ if (mappingValue.equals(baseDN + ":" + organizationalUnitName + ":" + attributeName)) {
+ String mappingKey = entry.getKey();
+ if(mappingKey.contains(tableName)){
+ String stringSplitter[] = mappingKey.split(":");
+ String columnName = stringSplitter[1];
+ return columnName;
+ }
+ }
+ }
+ return null;
+ }
}
-
\ No newline at end of file
--
Gitblit v1.10.0