From 02805157fa504b3dbf701a62280ca9aaf82183b5 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Wed, 05 Sep 2007 20:12:11 +0000
Subject: [PATCH] Partial fix for issue 1449: administration framework aggregation support
---
opends/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 48 insertions(+), 2 deletions(-)
diff --git a/opends/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java b/opends/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java
index 7b60e04..ec2f65e 100644
--- a/opends/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java
+++ b/opends/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java
@@ -41,6 +41,7 @@
import javax.naming.ldap.Rdn;
import org.opends.messages.Message;
+import org.opends.server.admin.AggregationPropertyDefinition;
import org.opends.server.admin.Configuration;
import org.opends.server.admin.ConfigurationClient;
import org.opends.server.admin.InstantiableRelationDefinition;
@@ -50,7 +51,10 @@
import org.opends.server.admin.ManagedObjectPath;
import org.opends.server.admin.PropertyDefinition;
import org.opends.server.admin.PropertyOption;
+import org.opends.server.admin.PropertyValueVisitor;
+import org.opends.server.admin.Reference;
import org.opends.server.admin.RelationDefinition;
+import org.opends.server.admin.UnknownPropertyDefinitionException;
import org.opends.server.admin.client.AuthorizationException;
import org.opends.server.admin.client.CommunicationException;
import org.opends.server.admin.client.ConcurrentModificationException;
@@ -73,6 +77,47 @@
final class LDAPManagedObject<T extends ConfigurationClient> extends
AbstractManagedObject<T> {
+ /**
+ * A visitor which is used to encode property LDAP values.
+ */
+ private static final class ValueEncoder extends
+ PropertyValueVisitor<Object, Void> {
+
+ // Prevent instantiation.
+ private ValueEncoder() {
+ // No implementation required.
+ }
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public <C extends ConfigurationClient, S extends Configuration>
+ Object visitAggregation(
+ AggregationPropertyDefinition<C, S> d, String v, Void p) {
+ // Aggregations values are stored as full DNs in LDAP, but
+ // just their common name is exposed in the admin framework.
+ Reference<C, S> reference = Reference.parseName(d.getParentPath(), d
+ .getRelationDefinition(), v);
+ return reference.toDN().toString();
+ }
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public <PD> Object visitUnknown(PropertyDefinition<PD> d, PD v, Void p)
+ throws UnknownPropertyDefinitionException {
+ return d.encodeValue(v);
+ }
+ }
+
+
+
// The LDAP management driver associated with this managed object.
private final LDAPDriver driver;
@@ -294,17 +339,18 @@
// Encode a property into LDAP string values.
private <PD> void encodeProperty(Attribute attribute,
PropertyDefinition<PD> pd) {
+ PropertyValueVisitor<Object, Void> visitor = new ValueEncoder();
Property<PD> p = getProperty(pd);
if (pd.hasOption(PropertyOption.MANDATORY)) {
// For mandatory properties we fall-back to the default values
// if defined which can sometimes be the case e.g when a
// mandatory property is overridden.
for (PD value : p.getEffectiveValues()) {
- attribute.add(pd.encodeValue(value));
+ attribute.add(pd.accept(visitor, value, null));
}
} else {
for (PD value : p.getPendingValues()) {
- attribute.add(pd.encodeValue(value));
+ attribute.add(pd.accept(visitor, value, null));
}
}
}
--
Gitblit v1.10.0