From c15ef13192cb53cf8fd0931975a17b1c79441b74 Mon Sep 17 00:00:00 2001
From: jcambon <jcambon@localhost>
Date: Mon, 07 Apr 2008 08:55:04 +0000
Subject: [PATCH] Fix for issue #3089: Configuration Reference - Missing aggregation relations 

---
 opendj-sdk/opends/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java |  185 ++++++++++++++++++++++++++++++++--------------
 1 files changed, 129 insertions(+), 56 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java b/opendj-sdk/opends/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java
index 42bf077..293e9b2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java
@@ -453,62 +453,7 @@
     }
 
     // Relations
-    if (!mo.getRelationDefinitions().isEmpty()) {
-      boolean emptyList = true;
-      @SuppressWarnings("unchecked")
-      Collection<RelationDefinition> rels = mo.getRelationDefinitions();
-      for ( RelationDefinition rel : rels) {
-        if (rel.hasOption(RelationOption.HIDDEN)) {
-          continue;
-        }
-        emptyList = false;
-      }
-      if (!emptyList) {
-        heading3("Relations From this Component");
-        paragraph(
-          "The following components have a direct composition relation FROM " +
-          mo.getUserFriendlyPluralName() + " :");
-        for ( RelationDefinition rel : rels) {
-          if (rel.hasOption(RelationOption.HIDDEN)) {
-            continue;
-          }
-          beginList();
-          AbstractManagedObjectDefinition childRel = rel.getChildDefinition();
-          link(childRel.getUserFriendlyName().toString(), childRel.getName() +
-            ".html");
-          endList();
-        }
-      }
-    }
-
-    if (!mo.getReverseRelationDefinitions().isEmpty()) {
-      boolean emptyList = true;
-      @SuppressWarnings("unchecked")
-      Collection<RelationDefinition> rels = mo.getReverseRelationDefinitions();
-      for ( RelationDefinition rel : rels) {
-        if (rel.hasOption(RelationOption.HIDDEN)) {
-          continue;
-        }
-        // check if it is not root
-        if (rel.getParentDefinition().getName().equals("")) {
-          continue;
-        }
-        emptyList = false;
-      }
-      if (!emptyList) {
-        heading3("Relations To this Component");
-        paragraph(
-          "The following components have a direct composition relation TO " +
-          mo.getUserFriendlyPluralName() + " :");
-        for ( RelationDefinition rel : rels) {
-          beginList();
-          AbstractManagedObjectDefinition childRel = rel.getParentDefinition();
-          link(childRel.getUserFriendlyName().toString(), childRel.getName() +
-            ".html");
-          endList();
-        }
-      }
-    }
+    generateRelationsSection(mo);
 
     // Page links in case of LDAP mapping
     if (ldapMapping) {
@@ -596,6 +541,134 @@
   }
 
 
+  private void generateRelationsSection(AbstractManagedObjectDefinition mo) {
+    // Composition relations
+    @SuppressWarnings("unchecked")
+    Collection<RelationDefinition> compRels = mo.getRelationDefinitions();
+    @SuppressWarnings("unchecked")
+    Collection<RelationDefinition> reverseCompRels =
+      mo.getReverseRelationDefinitions();
+    // Aggregation properties
+    @SuppressWarnings("unchecked")
+    Collection<AggregationPropertyDefinition> aggregProps =
+      mo.getAggregationPropertyDefinitions();
+    @SuppressWarnings("unchecked")
+    Collection<AggregationPropertyDefinition> reverseAggregProps =
+      mo.getReverseAggregationPropertyDefinitions();
+
+
+    // Check if something to print in composition relations
+    // (even if the list not empty, it may contain only hidden relations)
+    boolean isCompRelsEmpty = true;
+    if (!compRels.isEmpty()) {
+      for (RelationDefinition rel : compRels) {
+        if (rel.hasOption(RelationOption.HIDDEN)) {
+          continue;
+        }
+        isCompRelsEmpty = false;
+      }
+    }
+    boolean isReverseCompRelsEmpty = true;
+    if (!reverseCompRels.isEmpty()) {
+      for (RelationDefinition rel : reverseCompRels) {
+        if (rel.hasOption(RelationOption.HIDDEN)) {
+          continue;
+        }
+        // check if it is not root
+        if (rel.getParentDefinition().getName().equals("")) {
+          continue;
+        }
+        isReverseCompRelsEmpty = false;
+      }
+    }
+
+    //
+    // Relations FROM this component
+    //
+
+    if (!isCompRelsEmpty || !aggregProps.isEmpty()) {
+        heading3("Relations From this Component");
+    }
+
+    if (!isCompRelsEmpty) {
+      paragraph(
+        "The following components have a direct COMPOSITION relation FROM " +
+        mo.getUserFriendlyPluralName() + " :");
+      for ( RelationDefinition rel : compRels) {
+        if (rel.hasOption(RelationOption.HIDDEN)) {
+          continue;
+        }
+        beginList();
+        AbstractManagedObjectDefinition childRel = rel.getChildDefinition();
+        link(childRel.getUserFriendlyName().toString(), childRel.getName() +
+          ".html");
+        endList();
+      }
+    }
+    if (!aggregProps.isEmpty()) {
+      paragraph(
+        "The following components have a direct AGGREGATION relation FROM " +
+        mo.getUserFriendlyPluralName() + " :");
+      TreeMap<String, AbstractManagedObjectDefinition> componentList =
+        new TreeMap<String, AbstractManagedObjectDefinition>();
+      for ( AggregationPropertyDefinition agg : aggregProps) {
+        RelationDefinition rel = agg.getRelationDefinition();
+        AbstractManagedObjectDefinition childRel = rel.getChildDefinition();
+        componentList.put(childRel.getName(), childRel);
+      }
+      for (AbstractManagedObjectDefinition component : componentList.values()) {
+        beginList();
+        link(component.getUserFriendlyName().toString(), component.getName() +
+          ".html");
+        endList();
+      }
+    }
+
+
+    //
+    // Relations TO this component
+    //
+
+    if (!isReverseCompRelsEmpty || !reverseAggregProps.isEmpty()) {
+        heading3("Relations To this Component");
+    }
+
+    if (!mo.getReverseRelationDefinitions().isEmpty()) {
+      if (!isReverseCompRelsEmpty) {
+        paragraph(
+          "The following components have a direct COMPOSITION relation TO " +
+          mo.getUserFriendlyPluralName() + " :");
+        for ( RelationDefinition rel : reverseCompRels) {
+          beginList();
+          AbstractManagedObjectDefinition childRel = rel.getParentDefinition();
+          link(childRel.getUserFriendlyName().toString(), childRel.getName() +
+            ".html");
+          endList();
+        }
+      }
+    }
+    if (!reverseAggregProps.isEmpty()) {
+      paragraph(
+        "The following components have a direct AGGREGATION relation TO " +
+        mo.getUserFriendlyPluralName() + " :");
+      TreeMap<String, AbstractManagedObjectDefinition> componentList =
+        new TreeMap<String, AbstractManagedObjectDefinition>();
+      for ( AggregationPropertyDefinition agg : reverseAggregProps) {
+        AbstractManagedObjectDefinition fromMo =
+          agg.getManagedObjectDefinition();
+        componentList.put(fromMo.getName(), fromMo);
+      }
+      for (AbstractManagedObjectDefinition component : componentList.values()) {
+        beginList();
+        link(component.getUserFriendlyName().toString(), component.getName() +
+          ".html");
+        endList();
+
+      }
+    }
+
+  }
+
   private void generateProperty(
     AbstractManagedObjectDefinition mo, PropertyDefinition prop) {
 

--
Gitblit v1.10.0