/**
*
*/
package org.identityconnectors.oracle;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.identityconnectors.common.security.GuardedString;
import org.identityconnectors.framework.common.objects.Attribute;
import org.identityconnectors.framework.common.objects.AttributeBuilder;
import org.identityconnectors.framework.common.objects.Name;
import org.identityconnectors.framework.common.objects.ObjectClass;
import org.identityconnectors.framework.common.objects.Uid;
import org.identityconnectors.framework.spi.operations.SPIOperation;
/**
* Full normalizer normalizes both input and output attributes.
*
* @author kitko
*
*/
final class OracleFullNormalizer implements OracleAttributeNormalizer {
private static final Map<String, OracleUserAttribute> MAPPING =
new TreeMap<String, OracleUserAttribute>(OracleConnectorHelper
.getAttributeNamesComparator());
static {
MAPPING.put(Name.NAME, OracleUserAttribute.USER);
MAPPING.put(Uid.NAME, OracleUserAttribute.USER);
MAPPING.put(OracleConstants.ORACLE_GLOBAL_ATTR_NAME, OracleUserAttribute.GLOBAL_NAME);
MAPPING.put(OracleConstants.ORACLE_ROLES_ATTR_NAME, OracleUserAttribute.ROLE);
MAPPING.put(OracleConstants.ORACLE_PRIVS_ATTR_NAME, OracleUserAttribute.PRIVILEGE);
MAPPING.put(OracleConstants.ORACLE_PROFILE_ATTR_NAME, OracleUserAttribute.PROFILE);
MAPPING.put(OracleConstants.ORACLE_DEF_TS_ATTR_NAME, OracleUserAttribute.DEF_TABLESPACE);
MAPPING.put(OracleConstants.ORACLE_TEMP_TS_ATTR_NAME, OracleUserAttribute.TEMP_TABLESPACE);
}
private final OracleCaseSensitivitySetup cs;
OracleFullNormalizer(OracleCaseSensitivitySetup cs) {
this.cs = cs;
}
public Set<Attribute> normalizeAttributes(ObjectClass objectClass,
Class<? extends SPIOperation> op, Set<Attribute> attrs) {
return attrs;
}
public Attribute normalizeAttribute(ObjectClass oclass, Attribute attribute) {
if (attribute == null) {
return null;
}
String name = attribute.getName();
final OracleUserAttribute oracleUserAttribute = MAPPING.get(name);
if (oracleUserAttribute == null) {
return attribute;
}
if (attribute.getValue() == null) {
return attribute;
}
List<Object> values = new ArrayList<Object>();
for (Object o : attribute.getValue()) {
if (o instanceof String) {
o = cs.normalizeToken(oracleUserAttribute, (String) o);
} else if (o instanceof GuardedString) {
o = cs.normalizeToken(oracleUserAttribute, (GuardedString) o);
}
values.add(o);
}
return AttributeBuilder.build(name, values);
}
public Pair<String, GuardedString> normalizeAuthenticateEntry(String username,
GuardedString password) {
String nusername = cs.normalizeToken(OracleUserAttribute.USER, username);
GuardedString npassword = cs.normalizeToken(OracleUserAttribute.PASSWORD, password);
return new Pair<String, GuardedString>(nusername, npassword);
}
}