From 1e545de844fe77a701b0f47f28bafda17927f6d0 Mon Sep 17 00:00:00 2001
From: Glenn Van Lint <glenn.vanlint@is4u.be>
Date: Tue, 30 Apr 2013 11:34:48 +0000
Subject: [PATCH] Fixed a bug with incorrect value returns from the attribute mapping.
---
opendj3/opendj-virtual/src/main/java/org/forgerock/opendj/virtual/JDBCMapper.java | 96 +++++++++++++++++++++++-------------------------
1 files changed, 46 insertions(+), 50 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 6145e8e..ce759e5 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
@@ -33,6 +33,7 @@
import org.forgerock.opendj.ldap.Attribute;
import org.forgerock.opendj.ldap.Connection;
+import org.forgerock.opendj.ldap.DN;
import org.forgerock.opendj.ldap.ErrorResultException;
import org.forgerock.opendj.ldap.ErrorResultIOException;
import org.forgerock.opendj.ldap.SearchResultReferenceIOException;
@@ -73,12 +74,11 @@
fillBaseDNList();
fillTablesList();
fillTableColumnsMap();
- fillOrganizationalUnitsMap();
- fillOrganizationalUnitAttributesMap();
+ fillOrganizationalUnitsAndAttributesMap();
}
private void fillBaseDNList() throws IOException{
- EntryReader reader = this.ldapConnection.search(" ", SearchScope.SINGLE_LEVEL, "objectClass=*");
+ final EntryReader reader = this.ldapConnection.search(" ", SearchScope.SINGLE_LEVEL, "objectClass=*");
while(reader.hasNext()){
baseDNList.add(reader.readEntry().getName().toString());
}
@@ -124,60 +124,52 @@
return baseDNList;
}
- public ArrayList<String> getTableColumns(String tableName) throws SQLException{
+ public ArrayList<String> getTableColumns(final 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;
+ public boolean getTableColumnNullable(final String tableName, final String columnName){
+ final String mappingKey = tableName + ":" + columnName;
+ final String nullable = tableColumnNullableMap.get(mappingKey);
+ final String nullableString = "NO";
+ if(nullable.equals(nullableString)) 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;
+ public Object getTableColumnDataType(final String tableName, final String columnName){
+ final String mappingKey = tableName + ":" + columnName;
+ final String mappingValue = tableColumnDataTypeMap.get(mappingKey);
+ final String objectTypeString = "int";
+ if(mappingValue.equals(objectTypeString)) return Integer.class;
return String.class;
}
- public ArrayList<String> getOrganizationalUnits(String baseDN){
+ public ArrayList<String> getOrganizationalUnits(final String baseDN){
return organizationalUnitsMap.get(baseDN);
}
- public ArrayList<String> getOrganizationalUnitAttributes(String baseDN, String organizationalUnitName){
+ public ArrayList<String> getOrganizationalUnitAttributes(final String baseDN, final String organizationalUnitName){
return organizationalUnitAttributesMap.get(baseDN + ":" + organizationalUnitName);
}
- private void fillOrganizationalUnitsMap() throws ErrorResultException, ErrorResultIOException, SearchResultReferenceIOException{
+ private void fillOrganizationalUnitsAndAttributesMap() 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=*");
+ final String baseDN = baseDNList.get(i);
+ final ConnectionEntryReader baseDNReader = ldapConnection.search(baseDN, SearchScope.SINGLE_LEVEL, "objectClass=*");
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);
- }
- }
+ while (baseDNReader.hasNext()) {
+ final SearchResultEntry entry = baseDNReader.readEntry();
+ final String organizationalUnitDNName = entry.getName().toString();
+ final String organizationalUnitName = DN.valueOf(organizationalUnitDNName).rdn().getFirstAVA().getAttributeValue().toString();
+ organizationalUnitsList.add(organizationalUnitName);
- 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 ConnectionEntryReader DNReader = ldapConnection.search(organizationalUnitDNName, SearchScope.SINGLE_LEVEL, "objectClass=*");
final ArrayList<String> attributesList;
- if(reader.hasNext()){
- final Iterator<Attribute> it = reader.readEntry().getAllAttributes().iterator();
+ if(DNReader.hasNext()){
+ final Iterator<Attribute> it = DNReader.readEntry().getAllAttributes().iterator();
attributesList = new ArrayList<String>();
while(it.hasNext()){
@@ -190,11 +182,12 @@
attributesList.add("");
}
organizationalUnitAttributesMap.put(baseDN + ":" + organizationalUnitName, attributesList);
- }
+ }
+ organizationalUnitsMap.put(baseDN, organizationalUnitsList);
}
}
- public void addCurrentMapToMapping(String tableName, String[] columnNames, String baseDN, String OUName, String[] attributeNames){
+ public void addCurrentMapToMapping(final String tableName, final String[] columnNames, final String baseDN, final String OUName, final String[] attributeNames){
String mappingKey, mappingValue;
for(int i = 0; i < columnNames.length; i++){
@@ -208,16 +201,17 @@
return SQLToLDAPMap;
}
- public Map<String, String> loadCurrentMapFromMapping(String tableName) {
+ public Map<String, String> loadCurrentMapFromMapping(final String tableName, String baseDN, String DN) {
+ baseDN = baseDN.replace(" ", "");
String mappingKey, mappingValue;
final ArrayList<String> tableColumnsList = tableColumnsMap.get(tableName);
- Map<String, String> currentMap = new HashMap<String, String>();
+ final 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);
+ if(mappingValue.contains(baseDN + ":" + DN)) currentMap.put(mappingKey, mappingValue);
}
return currentMap;
}
@@ -226,27 +220,29 @@
this.SQLToLDAPMap = m;
}
- public String getTableNameFromMapping(String DN, String organizationalUnit) {
+ public String getTableNameFromMapping(String DN, final String organizationalUnit) {
+ DN = DN.replace(" ", "");
for (Entry<String, String> entry : SQLToLDAPMap.entrySet()) {
- String mappingValue = entry.getValue();
+ final String mappingValue = entry.getValue();
if (mappingValue.contains(DN + ":" + organizationalUnit)) {
- String mappingKey = entry.getKey();
- String stringSplitter[] = mappingKey.split(":");
- String tableName = stringSplitter[0];
+ final String mappingKey = entry.getKey();
+ final String stringSplitter[] = mappingKey.split(":");
+ final String tableName = stringSplitter[0];
return tableName;
}
}
return null;
}
- public String getColumnNameFromMapping(String tableName, String baseDN, String organizationalUnitName, String attributeName) {
+ public String getColumnNameFromMapping(final String tableName, String baseDN, final String organizationalUnitName, final String attributeName) {
+ baseDN = baseDN.replace(" ", "");
for (Entry<String, String> entry : SQLToLDAPMap.entrySet()) {
- String mappingValue = entry.getValue();
+ final String mappingValue = entry.getValue();
if (mappingValue.equals(baseDN + ":" + organizationalUnitName + ":" + attributeName)) {
- String mappingKey = entry.getKey();
+ final String mappingKey = entry.getKey();
if(mappingKey.contains(tableName)){
- String stringSplitter[] = mappingKey.split(":");
- String columnName = stringSplitter[1];
+ final String stringSplitter[] = mappingKey.split(":");
+ final String columnName = stringSplitter[1];
return columnName;
}
}
--
Gitblit v1.10.0