package org.safehaus.penrose.studio.util;
import org.safehaus.penrose.directory.EntryAttributeConfig;
import org.safehaus.penrose.directory.EntryConfig;
import org.safehaus.penrose.directory.EntrySourceConfig;
import org.safehaus.penrose.directory.DirectoryClient;
import org.safehaus.penrose.ldap.DN;
import org.safehaus.penrose.mapping.Expression;
import org.safehaus.penrose.source.FieldConfig;
import org.safehaus.penrose.source.SourceConfig;
import org.safehaus.penrose.source.SourceManagerClient;
import org.safehaus.penrose.partition.PartitionClient;
import org.safehaus.penrose.acl.ACI;
/**
* @author Endi S. Dewata
*/
public class ADUtil {
public ADUtil() {
}
public EntryConfig createSchemaProxy(
PartitionClient partitionClient,
String connectionName,
String sourceSchemaDn,
String destSchemaDn
) throws Exception {
SourceConfig sourceConfig = new SourceConfig();
sourceConfig.setName(connectionName+"_schema");
sourceConfig.setConnectionName(connectionName);
sourceConfig.addFieldConfig(new FieldConfig("lDAPDisplayName", true));
sourceConfig.addFieldConfig(new FieldConfig("objectClass"));
sourceConfig.addFieldConfig(new FieldConfig("attributeID"));
sourceConfig.addFieldConfig(new FieldConfig("adminDescription"));
sourceConfig.addFieldConfig(new FieldConfig("attributeSyntax"));
sourceConfig.addFieldConfig(new FieldConfig("isSingleValued"));
sourceConfig.addFieldConfig(new FieldConfig("governsID"));
sourceConfig.addFieldConfig(new FieldConfig("mustContain"));
sourceConfig.addFieldConfig(new FieldConfig("systemMustContain"));
sourceConfig.addFieldConfig(new FieldConfig("mayContain"));
sourceConfig.addFieldConfig(new FieldConfig("systemMayContain"));
sourceConfig.setParameter("baseDn", sourceSchemaDn);
sourceConfig.setParameter("scope", "ONELEVEL");
//sourceConfig.setParameter("filter", "(objectClass=*)");
SourceManagerClient sourceManagerClient = partitionClient.getSourceManagerClient();
//partitionConfig.getSourceConfigManager().addSourceConfig(sourceConfig);
sourceManagerClient.createSource(sourceConfig);
DN dn = new DN(destSchemaDn);
EntryConfig entryConfig = new EntryConfig();
entryConfig.setDn(dn);
entryConfig.addObjectClass("top");
entryConfig.addObjectClass("subschema");
entryConfig.addAttributesFromRdn();
Expression atExpression = new Expression(
"import org.safehaus.penrose.schema.*;\n" +
"\n" +
"if (!s.objectClass.contains(\"attributeSchema\")) return null;\n" +
"\n" +
"AttributeType at = new AttributeType();\n" +
"at.setOid(s.attributeID);\n" +
"at.setName(s.lDAPDisplayName);\n" +
"if (s.adminDescription != void) at.setDescription(s.adminDescription);\n" +
"if (s.attributeSyntax != void) at.setSyntax(s.attributeSyntax);\n" +
"if (s.isSingleValued != void) at.setSingleValued(Boolean.valueOf(s.isSingleValued).booleanValue());\n" +
"return \"( \"+at+\" )\";"
);
entryConfig.addAttributeConfig(
new EntryAttributeConfig(
"attributeTypes",
EntryAttributeConfig.EXPRESSION,
atExpression
)
);
Expression ocExpression = new Expression(
"import java.util.*;\n" +
"import org.safehaus.penrose.schema.*;\n" +
"\n" +
"if (!s.objectClass.contains(\"classSchema\")) return null;\n" +
"\n" +
"ObjectClass oc = new ObjectClass();\n" +
"oc.setOid(s.governsID);\n" +
"oc.setName(s.lDAPDisplayName);\n" +
"if (s.adminDescription != void) oc.setDescription(s.adminDescription);\n" +
"if (s.mustContain != void) {\n" +
" if (s.mustContain instanceof Collection) {\n" +
" oc.addRequiredAttributes(s.mustContain);\n" +
" } else {\n" +
" oc.addRequiredAttribute(s.mustContain);\n" +
" }\n" +
"}\n" +
"if (s.systemMustContain != void) {\n" +
" if (s.systemMustContain instanceof Collection) {\n" +
" oc.addRequiredAttributes(s.systemMustContain);\n" +
" } else {\n" +
" oc.addRequiredAttribute(s.systemMustContain);\n" +
" }\n" +
"}\n" +
"if (s.mayContain != void) {\n" +
" if (s.mayContain instanceof Collection) {\n" +
" oc.addOptionalAttributes(s.mayContain);\n" +
" } else {\n" +
" oc.addOptionalAttribute(s.mayContain);\n" +
" }\n" +
"}\n" +
"if (s.systemMayContain != void) {\n" +
" if (s.systemMayContain instanceof Collection) {\n" +
" oc.addOptionalAttributes(s.systemMayContain);\n" +
" } else {\n" +
" oc.addOptionalAttribute(s.systemMayContain);\n" +
" }\n" +
"}\n" +
"return \"( \"+oc+\" )\";"
);
entryConfig.addAttributeConfig(
new EntryAttributeConfig(
"objectClasses",
EntryAttributeConfig.EXPRESSION,
ocExpression
)
);
EntrySourceConfig sourceMapping = new EntrySourceConfig("s", sourceConfig.getName());
entryConfig.addSourceConfig(sourceMapping);
entryConfig.addACI(new ACI("rs"));
DirectoryClient directoryClient = partitionClient.getDirectoryClient();
directoryClient.createEntry(entryConfig);
return entryConfig;
}
}