From 95df5cfdba474acb03076953e992b898fbb277a8 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Mon, 02 Feb 2009 23:37:54 +0000
Subject: [PATCH] Fix issue 3734 - Make network group policies extensible.
---
opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java | 69 +++++++++++++++++++++++++++++++++-
1 files changed, 66 insertions(+), 3 deletions(-)
diff --git a/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java b/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
index 2dfe238..247da4f 100644
--- a/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
+++ b/opends/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
@@ -21,7 +21,6 @@
*
* CDDL HEADER END
*
- *
* Copyright 2008-2009 Sun Microsystems, Inc.
*/
package org.opends.server.tools.dsconfig;
@@ -47,6 +46,7 @@
import org.opends.server.admin.OptionalRelationDefinition;
import org.opends.server.admin.PropertyDefinition;
import org.opends.server.admin.RelationDefinition;
+import org.opends.server.admin.SetRelationDefinition;
import org.opends.server.admin.client.AuthorizationException;
import org.opends.server.admin.client.CommunicationException;
import org.opends.server.admin.client.ConcurrentModificationException;
@@ -100,6 +100,28 @@
/**
+ * Creates a new list-xxx sub-command for a set relation.
+ *
+ * @param parser
+ * The sub-command argument parser.
+ * @param p
+ * The parent managed object path.
+ * @param r
+ * The set relation.
+ * @return Returns the new list-xxx sub-command.
+ * @throws ArgumentException
+ * If the sub-command could not be created successfully.
+ */
+ public static ListSubCommandHandler create(
+ SubCommandArgumentParser parser, ManagedObjectPath<?, ?> p,
+ SetRelationDefinition<?, ?> r) throws ArgumentException {
+ return new ListSubCommandHandler(parser, p, r, r.getPluralName(), r
+ .getUserFriendlyPluralName());
+ }
+
+
+
+ /**
* Creates a new list-xxx sub-command for an optional relation.
*
* @param parser
@@ -216,6 +238,10 @@
InstantiableRelationDefinition<?, ?> irelation =
(InstantiableRelationDefinition<?, ?>) relation;
ufn = irelation.getUserFriendlyPluralName();
+ } else if (relation instanceof SetRelationDefinition) {
+ SetRelationDefinition<?, ?> srelation =
+ (SetRelationDefinition<?, ?>) relation;
+ ufn = srelation.getUserFriendlyPluralName();
} else {
ufn = relation.getUserFriendlyName();
}
@@ -291,6 +317,39 @@
throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
msg);
}
+ } else if (relation instanceof SetRelationDefinition) {
+ SetRelationDefinition<?, ?> srelation =
+ (SetRelationDefinition<?, ?>) relation;
+ try {
+ for (String s : parent.listChildren(srelation)) {
+ try {
+ children.put(s, parent.getChild(srelation, s));
+ } catch (ManagedObjectNotFoundException e) {
+ // Ignore - as it's been removed since we did the list.
+ }
+ }
+ } catch (DefinitionDecodingException e) {
+ // FIXME: just output this as a warnings (incl. the name) but
+ // continue.
+ Message msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
+ throw new ClientException(LDAPResultCode.OTHER, msg);
+ } catch (ManagedObjectDecodingException e) {
+ // FIXME: just output this as a warnings (incl. the name) but
+ // continue.
+ Message msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
+ throw new ClientException(LDAPResultCode.OTHER, msg, e);
+ } catch (AuthorizationException e) {
+ Message msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
+ throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
+ msg);
+ } catch (ConcurrentModificationException e) {
+ Message msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
+ throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
+ } catch (CommunicationException e) {
+ Message msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
+ throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
+ msg);
+ }
} else if (relation instanceof OptionalRelationDefinition) {
OptionalRelationDefinition<?, ?> orelation =
(OptionalRelationDefinition<?, ?>) relation;
@@ -363,7 +422,7 @@
}
builder.addSortKey(0);
- String baseType = relation.getName();
+ String baseType = relation.getChildDefinition().getName();
String typeSuffix = "-" + baseType;
for (String name : children.keySet()) {
ManagedObject<?> child = children.get(name);
@@ -382,7 +441,11 @@
// First output the name.
builder.startRow();
- builder.appendCell(name);
+ if (relation instanceof SetRelationDefinition) {
+ builder.appendCell(d.getUserFriendlyName());
+ } else {
+ builder.appendCell(name);
+ }
// Output the managed object type in the form used in
// create-xxx commands.
--
Gitblit v1.10.0