From b54a338f5933502809578214db03147c02e48b11 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 02 Dec 2013 17:23:23 +0000
Subject: [PATCH] OpenDJ 3 : config framework
---
opendj-admin/src/main/java/org/opends/server/admin/doc/ConfigGuideGeneration.java | 2815 +++++++++++++++++++++++++++-------------------------------
1 files changed, 1,314 insertions(+), 1,501 deletions(-)
diff --git a/opendj-admin/src/main/java/org/opends/server/admin/doc/ConfigGuideGeneration.java b/opendj-admin/src/main/java/org/opends/server/admin/doc/ConfigGuideGeneration.java
index 7330ba4..4464ca3 100644
--- a/opendj-admin/src/main/java/org/opends/server/admin/doc/ConfigGuideGeneration.java
+++ b/opendj-admin/src/main/java/org/opends/server/admin/doc/ConfigGuideGeneration.java
@@ -35,1593 +35,1406 @@
import java.util.Properties;
import java.util.TreeMap;
import java.util.TreeSet;
-import org.opends.messages.Message;
+
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.admin.meta.RootCfgDefn;
import org.opends.server.admin.ACIPropertyDefinition;
import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
import org.opends.server.admin.AbstractManagedObjectDefinition;
import org.opends.server.admin.AdministratorAction.Type;
-import org.opends.server.admin.std.meta.RootCfgDefn;
-import org.opends.server.admin.*;
+import org.opends.server.admin.AggregationPropertyDefinition;
+import org.opends.server.admin.AliasDefaultBehaviorProvider;
+import org.opends.server.admin.AttributeTypePropertyDefinition;
+import org.opends.server.admin.BooleanPropertyDefinition;
+import org.opends.server.admin.ClassLoaderProvider;
+import org.opends.server.admin.ClassPropertyDefinition;
+import org.opends.server.admin.DNPropertyDefinition;
+import org.opends.server.admin.DefaultBehaviorProvider;
+import org.opends.server.admin.DefinedDefaultBehaviorProvider;
+import org.opends.server.admin.DurationPropertyDefinition;
+import org.opends.server.admin.EnumPropertyDefinition;
+import org.opends.server.admin.IPAddressMaskPropertyDefinition;
+import org.opends.server.admin.IPAddressPropertyDefinition;
+import org.opends.server.admin.IntegerPropertyDefinition;
+import org.opends.server.admin.LDAPProfile;
+import org.opends.server.admin.ManagedObjectOption;
+import org.opends.server.admin.PropertyDefinition;
+import org.opends.server.admin.PropertyDefinitionVisitor;
+import org.opends.server.admin.PropertyOption;
+import org.opends.server.admin.RelationDefinition;
+import org.opends.server.admin.RelationOption;
+import org.opends.server.admin.RelativeInheritedDefaultBehaviorProvider;
+import org.opends.server.admin.SizePropertyDefinition;
+import org.opends.server.admin.StringPropertyDefinition;
+import org.opends.server.admin.Tag;
+import org.opends.server.admin.TopCfgDefn;
+import org.opends.server.admin.UndefinedDefaultBehaviorProvider;
import org.opends.server.types.InitializationException;
-import org.opends.server.util.EmbeddedUtils;
import org.opends.server.util.DynamicConstants;
+import org.opends.server.util.EmbeddedUtils;
/**
- * This class allow Configuration Guide documentation generation (html format).
+ * This class allow Configuration Guide documentation generation (html format).
* It is based on the Admin Framework Introspection API
- *
*/
public class ConfigGuideGeneration {
- // Note : still to be done :
- // I18n support. Today all the strings are hardcoded in this file
+ // Note : still to be done :
+ // I18n support. Today all the strings are hardcoded in this file
- private final static String ACI_SYNTAX_REL_URL =
- "/doc/admin-guide/#about-acis";
- private final static String DURATION_SYNTAX_REL_URL =
- "duration-syntax.html";
- private final String CSS_FILE = "opendj-config.css";
+ private final static String ACI_SYNTAX_REL_URL = "/doc/admin-guide/#about-acis";
+ private final static String DURATION_SYNTAX_REL_URL = "duration-syntax.html";
+ private final String CSS_FILE = "opendj-config.css";
- private final String MAIN_FILE = "index.html";
- private final String INHERITANCE_TREE_FILE =
- "ManagedObjectInheritanceTree.html";
- private final String RELATION_TREE_FILE = "ManagedObjectRelationTree.html";
- private final String MO_LIST_FILE = "ManagedObjectList.html";
- private final String PROPERTIES_INDEX_FILE = "PropertiesIndex.html";
- private final String WELCOME_FILE = "welcome.html";
- private final String MAINTOP_FILE = "maintop.html";
- private final String INDEX_FILE = "index.html";
- private final String FAVICON = "http://forgerock.org/favicon.ico";
+ private final String MAIN_FILE = "index.html";
+ private final String INHERITANCE_TREE_FILE = "ManagedObjectInheritanceTree.html";
+ private final String RELATION_TREE_FILE = "ManagedObjectRelationTree.html";
+ private final String MO_LIST_FILE = "ManagedObjectList.html";
+ private final String PROPERTIES_INDEX_FILE = "PropertiesIndex.html";
+ private final String WELCOME_FILE = "welcome.html";
+ private final String MAINTOP_FILE = "maintop.html";
+ private final String INDEX_FILE = "index.html";
+ private final String FAVICON = "http://forgerock.org/favicon.ico";
- private static final String CONFIG_GUIDE_DIR = "opendj_config_guide";
- private final String MAIN_FRAME = "mainFrame";
+ private static final String CONFIG_GUIDE_DIR = "opendj_config_guide";
+ private final String MAIN_FRAME = "mainFrame";
- /**
- * Entry point for documentation generation.
- *
- * Properties:
- * GenerationDir - The directory where the doc is generated
- * (default is /var/tmp/[CONFIG_GUIDE_DIR>])
- * LdapMapping - Presence means that the LDAP mapping section is to be
- * generated (default is no)
- * OpenDJWiki - The URL of the OpenDJ Wiki
- * (default is
- * "http://wikis.forgerock.org/confluence/display/OPENDJ")
- * OpenDJHome - The URL of the OpenDJ project Home page
- * (default is "http://opendj.forgerock.org")
- *
- * @param args none.
- */
- public static void main(String[] args) {
- Properties properties = System.getProperties();
- generationDir = properties.getProperty("GenerationDir");
- if (generationDir == null) {
- // Default dir is prefixed by the system-dependent default temporary dir
- generationDir = System.getProperty("java.io.tmpdir") + File.separator +
- CONFIG_GUIDE_DIR;
- }
- // Create new dir if necessary
- try {
- (new File(generationDir)).mkdir();
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- System.out.println("Generation directory is : " + generationDir);
-
- if (properties.getProperty("LdapMapping") != null) {
- ldapMapping = true;
- }
-
- OpenDJWiki = properties.getProperty("OpenDJWiki");
- if (OpenDJWiki == null) {
- // Default is current wiki
- OpenDJWiki = "http://wikis.forgerock.org/confluence/display/OPENDJ";
- }
-
- OpenDJHome = properties.getProperty("OpenDJHome");
- if (OpenDJHome == null) {
- // Default is current OpenDJ project home
- OpenDJHome = "http://opendj.forgerock.org";
- }
-
- aciSyntaxPage = OpenDJHome + ACI_SYNTAX_REL_URL;
- durationSyntaxPage = DURATION_SYNTAX_REL_URL;
-
- ConfigGuideGeneration myGen = new ConfigGuideGeneration();
- myGen.generate();
- }
-
- private void generate() {
- init();
-
- // Generate the relation tree of all the managed objects
- genManagedObjectRelationTree(catTopRelList);
-
- // Generate the inheritance tree of all the managed objects
- genManagedObjectInheritanceTree(catTopMoList);
-
- // Generate all the managed objects and their children
- genAllManagedObject(topMoList);
-
- // Generate a list of managed objects
- genManagedObjectList(moList);
-
- // Generate an index of properties
- genPropertiesIndex();
-
- // Generate the Index page
- genIndexPage();
-
- // Generate the Main Top page
- genMainTopPage();
-
- // Generate the Welcome page
- genWelcomePage();
- }
-
- private void init() {
-
- // Build a list of top relations
- RootCfgDefn rootCfg = RootCfgDefn.getInstance();
- for (RelationDefinition rel : rootCfg.getAllRelationDefinitions()) {
- topRelList.put(rel.getChildDefinition().getName(), rel);
- }
-
- // Enable the client-side class loader to explicitly load classes
- // which are not directly reachable from the root configuration
- EmbeddedUtils.initializeForClientUse();
- // Bootstrap definition classes.
- try {
- ClassLoaderProvider.getInstance().enable();
- } catch (InitializationException e) {
- System.err.println("ERROR : Cannot enable the client-side class loader.");
- e.printStackTrace();
- System.exit(1);
- }
- // Switch off class name validation in client.
- ClassPropertyDefinition.setAllowClassValidation(false);
- // Switch off attribute type name validation in client.
- AttributeTypePropertyDefinition.setCheckSchema(false);
-
- // Build a sorted list of top managed objects
- TopCfgDefn topCfg = TopCfgDefn.getInstance();
- Collection<AbstractManagedObjectDefinition<?, ?>> topObjects =
- topCfg.getChildren();
- for (AbstractManagedObjectDefinition topObject : topObjects) {
- if (topObject.getName().equals("")) {
- // root
- continue;
- }
- if (topObject.hasOption(ManagedObjectOption.HIDDEN))
- {
- continue;
- }
- topMoList.put(topObject.getName(), topObject);
- }
-
-
- // Build a list of top relations by category (core, database, ...)
- for (RelationDefinition rel : topRelList.values()) {
- AbstractManagedObjectDefinition<?, ?> mo = rel.getChildDefinition();
- Collection<Tag> tags = mo.getAllTags();
- for (Tag tag : tags) {
- TreeMap<String, RelationDefinition> catMap =
- catTopRelList.get(tag.getName());
- if (catMap == null) {
- catMap = new TreeMap<String, RelationDefinition>();
- catTopRelList.put(tag.getName(), catMap);
+ /**
+ * Entry point for documentation generation. Properties: GenerationDir - The
+ * directory where the doc is generated (default is
+ * /var/tmp/[CONFIG_GUIDE_DIR>]) LdapMapping - Presence means that the LDAP
+ * mapping section is to be generated (default is no) OpenDJWiki - The URL
+ * of the OpenDJ Wiki (default is
+ * "http://wikis.forgerock.org/confluence/display/OPENDJ") OpenDJHome - The
+ * URL of the OpenDJ project Home page (default is
+ * "http://opendj.forgerock.org")
+ *
+ * @param args
+ * none.
+ */
+ public static void main(String[] args) {
+ Properties properties = System.getProperties();
+ generationDir = properties.getProperty("GenerationDir");
+ if (generationDir == null) {
+ // Default dir is prefixed by the system-dependent default temporary
+ // dir
+ generationDir = System.getProperty("java.io.tmpdir") + File.separator + CONFIG_GUIDE_DIR;
}
- catMap.put(mo.getName(), rel);
- }
+ // Create new dir if necessary
+ try {
+ (new File(generationDir)).mkdir();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ System.out.println("Generation directory is : " + generationDir);
+
+ if (properties.getProperty("LdapMapping") != null) {
+ ldapMapping = true;
+ }
+
+ OpenDJWiki = properties.getProperty("OpenDJWiki");
+ if (OpenDJWiki == null) {
+ // Default is current wiki
+ OpenDJWiki = "http://wikis.forgerock.org/confluence/display/OPENDJ";
+ }
+
+ OpenDJHome = properties.getProperty("OpenDJHome");
+ if (OpenDJHome == null) {
+ // Default is current OpenDJ project home
+ OpenDJHome = "http://opendj.forgerock.org";
+ }
+
+ aciSyntaxPage = OpenDJHome + ACI_SYNTAX_REL_URL;
+ durationSyntaxPage = DURATION_SYNTAX_REL_URL;
+
+ ConfigGuideGeneration myGen = new ConfigGuideGeneration();
+ myGen.generate();
}
- // Build a list of top managed objects by category (core, database, ...)
- for (AbstractManagedObjectDefinition<?, ?> topObject : topMoList.values()) {
- Collection<Tag> tags = topObject.getAllTags();
- for (Tag tag : tags) {
- TreeMap<String, AbstractManagedObjectDefinition> catMap =
- catTopMoList.get(tag.getName());
- if (catMap == null) {
- catMap = new TreeMap<String, AbstractManagedObjectDefinition>();
- catTopMoList.put(tag.getName(), catMap);
- }
- catMap.put(topObject.getName(), topObject);
- }
+ private void generate() {
+ init();
+
+ // Generate the relation tree of all the managed objects
+ genManagedObjectRelationTree(catTopRelList);
+
+ // Generate the inheritance tree of all the managed objects
+ genManagedObjectInheritanceTree(catTopMoList);
+
+ // Generate all the managed objects and their children
+ genAllManagedObject(topMoList);
+
+ // Generate a list of managed objects
+ genManagedObjectList(moList);
+
+ // Generate an index of properties
+ genPropertiesIndex();
+
+ // Generate the Index page
+ genIndexPage();
+
+ // Generate the Main Top page
+ genMainTopPage();
+
+ // Generate the Welcome page
+ genWelcomePage();
}
- }
+ private void init() {
- /**
- * Generate the inheritance tree of all the managed objects.
- */
- @SuppressWarnings("unchecked")
- private void genManagedObjectInheritanceTree(
- TreeMap<String, TreeMap<String, AbstractManagedObjectDefinition>> list) {
-
- htmlHeader(DynamicConstants.PRODUCT_NAME + " " +
- "Configuration Reference - Inheritance View");
- tabMenu(INHERITANCE_TREE_FILE);
- viewHelp("This view represents the inheritance relationships between " +
- "configuration components.");
- jumpSection();
-
- for (String catName : list.keySet()) {
- heading3(getFriendlyName(catName));
- // Get the list of the category
- TreeMap<String, AbstractManagedObjectDefinition> catList =
- list.get(catName);
- for (AbstractManagedObjectDefinition mo : catList.values()) {
- if ((relList.get(mo.getName()) != null) &&
- (relList.get(mo.getName()).hasOption(RelationOption.HIDDEN))) {
- continue;
+ // Build a list of top relations
+ RootCfgDefn rootCfg = RootCfgDefn.getInstance();
+ for (RelationDefinition rel : rootCfg.getAllRelationDefinitions()) {
+ topRelList.put(rel.getChildDefinition().getName(), rel);
}
- paragraph(
- getLink(mo.getUserFriendlyName().toString(),
- mo.getName() + ".html", MAIN_FRAME));
+
+ // Enable the client-side class loader to explicitly load classes
+ // which are not directly reachable from the root configuration
+ EmbeddedUtils.initializeForClientUse();
+ // Bootstrap definition classes.
+ try {
+ ClassLoaderProvider.getInstance().enable();
+ } catch (InitializationException e) {
+ System.err.println("ERROR : Cannot enable the client-side class loader.");
+ e.printStackTrace();
+ System.exit(1);
+ }
+ // Switch off class name validation in client.
+ ClassPropertyDefinition.setAllowClassValidation(false);
+ // Switch off attribute type name validation in client.
+ AttributeTypePropertyDefinition.setCheckSchema(false);
+
+ // Build a sorted list of top managed objects
+ TopCfgDefn topCfg = TopCfgDefn.getInstance();
+ Collection<AbstractManagedObjectDefinition<?, ?>> topObjects = topCfg.getChildren();
+ for (AbstractManagedObjectDefinition topObject : topObjects) {
+ if (topObject.getName().equals("")) {
+ // root
+ continue;
+ }
+ if (topObject.hasOption(ManagedObjectOption.HIDDEN)) {
+ continue;
+ }
+ topMoList.put(topObject.getName(), topObject);
+ }
+
+ // Build a list of top relations by category (core, database, ...)
+ for (RelationDefinition rel : topRelList.values()) {
+ AbstractManagedObjectDefinition<?, ?> mo = rel.getChildDefinition();
+ Collection<Tag> tags = mo.getAllTags();
+ for (Tag tag : tags) {
+ TreeMap<String, RelationDefinition> catMap = catTopRelList.get(tag.getName());
+ if (catMap == null) {
+ catMap = new TreeMap<String, RelationDefinition>();
+ catTopRelList.put(tag.getName(), catMap);
+ }
+ catMap.put(mo.getName(), rel);
+ }
+ }
+
+ // Build a list of top managed objects by category (core, database, ...)
+ for (AbstractManagedObjectDefinition<?, ?> topObject : topMoList.values()) {
+ Collection<Tag> tags = topObject.getAllTags();
+ for (Tag tag : tags) {
+ TreeMap<String, AbstractManagedObjectDefinition> catMap = catTopMoList.get(tag.getName());
+ if (catMap == null) {
+ catMap = new TreeMap<String, AbstractManagedObjectDefinition>();
+ catTopMoList.put(tag.getName(), catMap);
+ }
+ catMap.put(topObject.getName(), topObject);
+ }
+ }
+
+ }
+
+ /**
+ * Generate the inheritance tree of all the managed objects.
+ */
+ @SuppressWarnings("unchecked")
+ private void genManagedObjectInheritanceTree(TreeMap<String, TreeMap<String, AbstractManagedObjectDefinition>> list) {
+
+ htmlHeader(DynamicConstants.PRODUCT_NAME + " " + "Configuration Reference - Inheritance View");
+ tabMenu(INHERITANCE_TREE_FILE);
+ viewHelp("This view represents the inheritance relationships between " + "configuration components.");
+ jumpSection();
+
+ for (String catName : list.keySet()) {
+ heading3(getFriendlyName(catName));
+ // Get the list of the category
+ TreeMap<String, AbstractManagedObjectDefinition> catList = list.get(catName);
+ for (AbstractManagedObjectDefinition mo : catList.values()) {
+ if ((relList.get(mo.getName()) != null) && (relList.get(mo.getName()).hasOption(RelationOption.HIDDEN))) {
+ continue;
+ }
+ paragraph(getLink(mo.getUserFriendlyName().toString(), mo.getName() + ".html", MAIN_FRAME));
+ if (mo.hasChildren()) {
+ genMoInheritanceTree(makeMOTreeMap(mo.getChildren()));
+ }
+ }
+ }
+
+ htmlFooter();
+ generateFile(INHERITANCE_TREE_FILE);
+ }
+
+ @SuppressWarnings("unchecked")
+ private void genMoInheritanceTree(TreeMap<String, AbstractManagedObjectDefinition> catList) {
+
+ beginList();
+ for (AbstractManagedObjectDefinition mo : catList.values()) {
+ link(mo.getUserFriendlyName().toString(), mo.getName() + ".html", MAIN_FRAME);
+ if (mo.hasChildren()) {
+ genMoInheritanceTree(makeMOTreeMap(mo.getChildren()));
+ }
+ }
+ endList();
+ }
+
+ private void jumpSection() {
+ htmlBuff.append("<p class=\"category-index\">" + "<strong>Jump To:</strong><br>\n");
+
+ String[] catNames = catTopMoList.keySet().toArray(new String[0]);
+ for (int ii = 0; ii < catNames.length; ii++) {
+ if (ii != 0) {
+ htmlBuff.append(", ");
+ }
+ String catFriendlyName = getFriendlyName(catNames[ii]);
+ htmlBuff.append(getLink(catFriendlyName, "#" + catFriendlyName));
+ }
+ htmlBuff.append("</p>\n");
+ }
+
+ /**
+ * Generate the relation tree of all the managed objects.
+ */
+ private void genManagedObjectRelationTree(TreeMap<String, TreeMap<String, RelationDefinition>> list) {
+
+ htmlHeader(DynamicConstants.PRODUCT_NAME + " Configuration Reference - Structure View");
+ tabMenu(RELATION_TREE_FILE);
+ viewHelp("This view represents the structural relationships between "
+ + "components and indicates how certain components can exist only within " + "container components.");
+ jumpSection();
+
+ for (String catName : list.keySet()) {
+ heading3(getFriendlyName(catName));
+ // Get the list of the category
+ TreeMap<String, RelationDefinition> catList = list.get(catName);
+ genMORelationTree(catList);
+ }
+
+ htmlFooter();
+ generateFile(RELATION_TREE_FILE);
+ }
+
+ @SuppressWarnings("unchecked")
+ private void genMORelationTree(TreeMap<String, RelationDefinition> list) {
+ for (RelationDefinition rel : list.values()) {
+ AbstractManagedObjectDefinition childMo = rel.getChildDefinition();
+ AbstractManagedObjectDefinition parentMo = rel.getParentDefinition();
+ // Does not generate several entry for the same relation
+ if (relList.put(childMo.getName(), rel) != null) {
+ continue;
+ }
+ if (rel.hasOption(RelationOption.HIDDEN)) {
+ continue;
+ }
+ String linkStr = getLink(childMo.getUserFriendlyName().toString(), childMo.getName() + ".html", MAIN_FRAME);
+ String fromStr = "";
+ if (!parentMo.getName().equals("")) {
+ fromStr = " (from "
+ + getLink(parentMo.getUserFriendlyName().toString(), parentMo.getName() + ".html", MAIN_FRAME)
+ + ")";
+ }
+ if (!inList) {
+ paragraph(linkStr + fromStr);
+ } else {
+ bullet(linkStr + fromStr);
+ }
+ genMORelationSubTree(makeRelTreeMap(childMo.getAllRelationDefinitions()));
+ if (childMo.hasChildren()) {
+ for (Iterator<AbstractManagedObjectDefinition> it = childMo.getChildren().iterator(); it.hasNext();) {
+
+ AbstractManagedObjectDefinition mo = it.next();
+ if (mo.hasOption(ManagedObjectOption.HIDDEN)) {
+ continue;
+ }
+ genMORelationSubTree(makeRelTreeMap(mo.getAllRelationDefinitions()));
+ }
+ }
+ }
+ }
+
+ private void genMORelationSubTree(TreeMap<String, RelationDefinition> list) {
+ if (!list.values().isEmpty()) {
+ beginList();
+ genMORelationTree(list);
+ endList();
+ }
+ }
+
+ /**
+ * Generate all the managed objects HTML pages.
+ */
+ @SuppressWarnings("unchecked")
+ private void genAllManagedObject(TreeMap<String, AbstractManagedObjectDefinition> list) {
+
+ for (AbstractManagedObjectDefinition mo : list.values()) {
+ if ((relList.get(mo.getName()) != null) && (relList.get(mo.getName()).hasOption(RelationOption.HIDDEN))) {
+ continue;
+ }
+ moList.put(mo.getName(), mo);
+ genManagedObject(mo);
+ if (mo.hasChildren()) {
+ genAllManagedObject(makeMOTreeMap(mo.getChildren()));
+ }
+ }
+ }
+
+ private void genManagedObject(AbstractManagedObjectDefinition mo) {
+ // ------------------------------------------------------------------------
+ // Header
+ // ------------------------------------------------------------------------
+
+ homeLink();
+ String title = mo.getUserFriendlyName().toString();
+ htmlHeader(DynamicConstants.PRODUCT_NAME + " - " + title);
+
+ // title
+ heading2(title);
+
+ // Abstract notice
if (mo.hasChildren()) {
- genMoInheritanceTree(makeMOTreeMap(mo.getChildren()));
+ paragraph("Note: this is an abstract component, that cannot be instantiated.", TextStyle.ITALIC);
}
- }
- }
- htmlFooter();
- generateFile(INHERITANCE_TREE_FILE);
- }
+ // description
+ paragraph(mo.getSynopsis());
+ paragraph(mo.getDescription());
- @SuppressWarnings("unchecked")
- private void genMoInheritanceTree(
- TreeMap<String, AbstractManagedObjectDefinition> catList) {
+ // sub-components
+ if (mo.hasChildren()) {
+ heading3("Direct Subcomponents");
+ paragraph("The following " + mo.getUserFriendlyPluralName() + " are available in the server :");
+ beginList();
+ @SuppressWarnings("unchecked")
+ TreeMap<String, AbstractManagedObjectDefinition> children = makeMOTreeMap(mo.getChildren());
+ for (AbstractManagedObjectDefinition child : children.values()) {
+ link(child.getUserFriendlyName().toString(), child.getName() + ".html");
+ }
+ endList();
- beginList();
- for (AbstractManagedObjectDefinition mo : catList.values()) {
- link(mo.getUserFriendlyName().toString(), mo.getName() + ".html",
- MAIN_FRAME);
- if (mo.hasChildren()) {
- genMoInheritanceTree(makeMOTreeMap(mo.getChildren()));
- }
- }
- endList();
- }
-
- private void jumpSection() {
- htmlBuff.append("<p class=\"category-index\">" +
- "<strong>Jump To:</strong><br>\n");
-
- String[] catNames = catTopMoList.keySet().toArray(new String[0]);
- for (int ii=0; ii < catNames.length; ii++) {
- if (ii != 0) {
- htmlBuff.append(", ");
- }
- String catFriendlyName = getFriendlyName(catNames[ii]);
- htmlBuff.append(getLink(catFriendlyName, "#" + catFriendlyName));
- }
- htmlBuff.append("</p>\n");
- }
-
-
- /**
- * Generate the relation tree of all the managed objects.
- */
- private void genManagedObjectRelationTree(
- TreeMap <String, TreeMap<String, RelationDefinition>> list) {
-
- htmlHeader(DynamicConstants.PRODUCT_NAME +
- " Configuration Reference - Structure View");
- tabMenu(RELATION_TREE_FILE);
- viewHelp("This view represents the structural relationships between " +
- "components and indicates how certain components can exist only within " +
- "container components.");
- jumpSection();
-
- for (String catName : list.keySet()) {
- heading3(getFriendlyName(catName));
- // Get the list of the category
- TreeMap<String, RelationDefinition> catList = list.get(catName);
- genMORelationTree(catList);
- }
-
- htmlFooter();
- generateFile(RELATION_TREE_FILE);
- }
-
-
- @SuppressWarnings("unchecked")
- private void genMORelationTree(TreeMap<String, RelationDefinition> list) {
- for (RelationDefinition rel : list.values()) {
- AbstractManagedObjectDefinition childMo = rel.getChildDefinition();
- AbstractManagedObjectDefinition parentMo = rel.getParentDefinition();
- // Does not generate several entry for the same relation
- if (relList.put(childMo.getName(), rel) != null) {
- continue;
- }
- if (rel.hasOption(RelationOption.HIDDEN)) {
- continue;
- }
- String linkStr = getLink(childMo.getUserFriendlyName().toString(),
- childMo.getName() + ".html", MAIN_FRAME);
- String fromStr = "";
- if (!parentMo.getName().equals("")) {
- fromStr = " (from " +
- getLink(parentMo.getUserFriendlyName().toString(),
- parentMo.getName() + ".html", MAIN_FRAME) + ")";
- }
- if (!inList) {
- paragraph(linkStr + fromStr);
- } else {
- bullet(linkStr + fromStr);
- }
- genMORelationSubTree(makeRelTreeMap(childMo.getAllRelationDefinitions()));
- if (childMo.hasChildren()) {
- for (Iterator<AbstractManagedObjectDefinition> it =
- childMo.getChildren().iterator(); it.hasNext();) {
-
- AbstractManagedObjectDefinition mo = it.next();
- if (mo.hasOption(ManagedObjectOption.HIDDEN))
- {
- continue;
- }
- genMORelationSubTree(makeRelTreeMap(mo.getAllRelationDefinitions()));
+ paragraph("These " + mo.getUserFriendlyPluralName() + " inherit from the properties described below.");
}
- }
- }
- }
+ // Parent
+ if (!mo.getParent().isTop()) {
+ heading3("Parent Component");
+ paragraph("The " + mo.getUserFriendlyName() + " component inherits from the "
+ + getLink(mo.getParent().getUserFriendlyName().toString(), mo.getParent().getName() + ".html"));
+ }
- private void genMORelationSubTree(TreeMap<String, RelationDefinition> list) {
- if (!list.values().isEmpty()) {
- beginList();
- genMORelationTree(list);
- endList();
- }
- }
+ // Relations
+ generateRelationsSection(mo);
+ // Page links in case of LDAP mapping
+ if (ldapMapping) {
+ newline();
+ horizontalLine();
+ newline();
+ paragraph("This page describes the " + mo.getUserFriendlyName() + ":");
+ beginList();
+ link("Properties", "#Properties");
+ link("LDAP Mapping", "#LDAP Mapping");
+ endList();
+ newline();
+ }
- /**
- * Generate all the managed objects HTML pages.
- */
- @SuppressWarnings("unchecked")
- private void genAllManagedObject(
- TreeMap<String, AbstractManagedObjectDefinition> list) {
+ // ------------------------------------------------------------------------
+ // Properties
+ // ------------------------------------------------------------------------
- for (AbstractManagedObjectDefinition mo : list.values()) {
- if ((relList.get(mo.getName()) != null) &&
- (relList.get(mo.getName()).hasOption(RelationOption.HIDDEN))) {
- continue;
- }
- moList.put(mo.getName(), mo);
- genManagedObject(mo);
- if (mo.hasChildren()) {
- genAllManagedObject(makeMOTreeMap(mo.getChildren()));
- }
- }
- }
+ heading3("Properties");
- private void genManagedObject(AbstractManagedObjectDefinition mo) {
- //------------------------------------------------------------------------
- // Header
- //------------------------------------------------------------------------
-
- homeLink();
- String title = mo.getUserFriendlyName().toString();
- htmlHeader(DynamicConstants.PRODUCT_NAME + " - " + title);
-
- // title
- heading2(title);
-
- // Abstract notice
- if (mo.hasChildren()) {
- paragraph(
- "Note: this is an abstract component, that cannot be instantiated.",
- TextStyle.ITALIC);
- }
-
- // description
- paragraph(mo.getSynopsis());
- paragraph(mo.getDescription());
-
- // sub-components
- if (mo.hasChildren()) {
- heading3("Direct Subcomponents");
- paragraph("The following " + mo.getUserFriendlyPluralName() +
- " are available in the server :");
- beginList();
- @SuppressWarnings("unchecked")
- TreeMap<String, AbstractManagedObjectDefinition> children =
- makeMOTreeMap(mo.getChildren());
- for ( AbstractManagedObjectDefinition child : children.values()) {
- link(child.getUserFriendlyName().toString(), child.getName() + ".html");
- }
- endList();
-
- paragraph("These " + mo.getUserFriendlyPluralName() +
- " inherit from the properties described below.");
- }
-
- // Parent
- if (!mo.getParent().isTop()) {
- heading3("Parent Component");
- paragraph("The " + mo.getUserFriendlyName() +
- " component inherits from the " +
- getLink(mo.getParent().getUserFriendlyName().toString(),
- mo.getParent().getName() + ".html"));
- }
-
- // Relations
- generateRelationsSection(mo);
-
- // Page links in case of LDAP mapping
- if (ldapMapping) {
- newline();
- horizontalLine();
- newline();
- paragraph("This page describes the " + mo.getUserFriendlyName() + ":");
- beginList();
- link("Properties", "#Properties");
- link("LDAP Mapping", "#LDAP Mapping");
- endList();
- newline();
- }
-
-
- //------------------------------------------------------------------------
- // Properties
- //------------------------------------------------------------------------
-
- heading3("Properties");
-
- paragraph("A description of each property follows.");
- newline();
-
- TreeMap<String, PropertyDefinition> basicProps =
- new TreeMap<String, PropertyDefinition>();
- TreeMap<String, PropertyDefinition> advancedProps =
- new TreeMap<String, PropertyDefinition>();
- // Properties actually defined in this managed object
- @SuppressWarnings("unchecked")
- Collection<PropertyDefinition> props = mo.getAllPropertyDefinitions();
- for ( PropertyDefinition prop : props) {
- if (prop.hasOption(PropertyOption.ADVANCED)) {
- advancedProps.put(prop.getName(), prop);
- } else {
- basicProps.put(prop.getName(), prop);
- }
- }
-
- propertiesLinkTable(basicProps, advancedProps);
-
- // basic properties
- if (basicProps.size() > 0) {
- heading4("Basic Properties");
- for ( PropertyDefinition prop : basicProps.values()) {
- generateProperty(mo, prop);
+ paragraph("A description of each property follows.");
newline();
- }
- newline();
- }
- // advanced properties
- if (advancedProps.size() > 0) {
- heading4("Advanced Properties");
- for ( PropertyDefinition prop : advancedProps.values()) {
- generateProperty(mo, prop);
- newline();
- }
- newline();
- }
-
- if (ldapMapping) {
- genLdapMapping(mo);
- }
-
- htmlFooter();
-
- generateFile(mo.getName() + ".html");
- }
-
-
- private TreeMap<String, PropertyDefinition>
- getPropertyList(AbstractManagedObjectDefinition mo) {
-
- @SuppressWarnings("unchecked")
- Collection<PropertyDefinition> props = mo.getAllPropertyDefinitions();
- return makePropTreeMap(props);
- }
-
- private void homeLink() {
- htmlBuff.append("<div style=\"font-size:11px;margin-top:-10px;" +
- "margin-bottom:-10px; text-align:right\"><a href=\"" +
- MAIN_FILE +
- "\" target=\"_top\">Configuration Reference Home</a></div>");
- }
-
-
- 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;
- }
- }
-
- // Check if something to print in reverse aggregation relations
- // (even if the list not empty, it may contain only relations from
- // hidden component)
- boolean isReverseAggregPropsEmpty = true;
- if (!reverseAggregProps.isEmpty()) {
- for (AggregationPropertyDefinition agg : reverseAggregProps) {
- AbstractManagedObjectDefinition fromMo =
- agg.getManagedObjectDefinition();
+ TreeMap<String, PropertyDefinition> basicProps = new TreeMap<String, PropertyDefinition>();
+ TreeMap<String, PropertyDefinition> advancedProps = new TreeMap<String, PropertyDefinition>();
+ // Properties actually defined in this managed object
@SuppressWarnings("unchecked")
- Collection<RelationDefinition> rels =
- fromMo.getAllReverseRelationDefinitions();
- for (RelationDefinition rel : rels) {
- if (rel.hasOption(RelationOption.HIDDEN)) {
- continue;
- }
- isReverseAggregPropsEmpty = false;
+ Collection<PropertyDefinition> props = mo.getAllPropertyDefinitions();
+ for (PropertyDefinition prop : props) {
+ if (prop.hasOption(PropertyOption.ADVANCED)) {
+ advancedProps.put(prop.getName(), prop);
+ } else {
+ basicProps.put(prop.getName(), prop);
+ }
}
- }
- }
+ propertiesLinkTable(basicProps, advancedProps);
- //
- // 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;
+ // basic properties
+ if (basicProps.size() > 0) {
+ heading4("Basic Properties");
+ for (PropertyDefinition prop : basicProps.values()) {
+ generateProperty(mo, prop);
+ newline();
+ }
+ newline();
}
- 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 || !isReverseAggregPropsEmpty) {
- 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();
+ // advanced properties
+ if (advancedProps.size() > 0) {
+ heading4("Advanced Properties");
+ for (PropertyDefinition prop : advancedProps.values()) {
+ generateProperty(mo, prop);
+ newline();
+ }
+ newline();
}
- }
- }
- if (!isReverseAggregPropsEmpty) {
- 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();
- }
+ if (ldapMapping) {
+ genLdapMapping(mo);
+ }
+
+ htmlFooter();
+
+ generateFile(mo.getName() + ".html");
}
- }
+ private TreeMap<String, PropertyDefinition> getPropertyList(AbstractManagedObjectDefinition mo) {
- private void generateProperty(
- AbstractManagedObjectDefinition mo, PropertyDefinition prop) {
-
- // Property name
- paragraph(getAnchor(prop.getName()) + prop.getName(), TextStyle.STANDARD,
- "propertyname");
-
- // Property table
- startTable();
- tableRow("Description",
- ((prop.getSynopsis() != null) ? prop.getSynopsis().toString()+ " " : "") +
- ((prop.getDescription() != null) ?
- prop.getDescription().toString() : ""));
-
- // Default value
- String defValueStr = getDefaultBehaviorString(prop);
- tableRow("Default Value", defValueStr);
-
- tableRow("Allowed Values", getSyntaxStr(prop));
-
- tableRow("Multi-valued",
- (prop.hasOption(PropertyOption.MULTI_VALUED) ? "Yes" : "No"));
-
- if (prop.hasOption(PropertyOption.MANDATORY)) {
- tableRow("Required", "Yes");
- } else {
- tableRow("Required", "No");
+ @SuppressWarnings("unchecked")
+ Collection<PropertyDefinition> props = mo.getAllPropertyDefinitions();
+ return makePropTreeMap(props);
}
- String action = "None";
- if (prop.getAdministratorAction() != null) {
- Message synopsis = prop.getAdministratorAction().getSynopsis();
- Type actionType = prop.getAdministratorAction().getType();
- String actionStr = "";
- if (actionType == Type.COMPONENT_RESTART) {
- actionStr = "The " + mo.getUserFriendlyName() +
- " must be disabled and re-enabled for changes to this setting " +
- "to take effect";
- } else if (actionType == Type.SERVER_RESTART) {
- actionStr = "Restart the server";
- } else if (actionType == Type.NONE) {
- actionStr = "None";
- }
- String dot = (actionStr.equals("") ? "" : ". ");
- action = actionStr +
- ((synopsis != null) ? dot + synopsis : "");
- }
- tableRow("Admin Action Required", action);
-
- if (prop.hasOption(PropertyOption.ADVANCED)) {
- tableRow("Advanced Property", "Yes");
- } else {
- tableRow("Advanced Property", "No");
+ private void homeLink() {
+ htmlBuff.append("<div style=\"font-size:11px;margin-top:-10px;"
+ + "margin-bottom:-10px; text-align:right\"><a href=\"" + MAIN_FILE
+ + "\" target=\"_top\">Configuration Reference Home</a></div>");
}
- if (prop.hasOption(PropertyOption.READ_ONLY)) {
- tableRow("Read-only", "Yes");
- } else {
- tableRow("Read-only", "No");
+ 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;
+ }
+ }
+
+ // Check if something to print in reverse aggregation relations
+ // (even if the list not empty, it may contain only relations from
+ // hidden component)
+ boolean isReverseAggregPropsEmpty = true;
+ if (!reverseAggregProps.isEmpty()) {
+ for (AggregationPropertyDefinition agg : reverseAggregProps) {
+ AbstractManagedObjectDefinition fromMo = agg.getManagedObjectDefinition();
+ @SuppressWarnings("unchecked")
+ Collection<RelationDefinition> rels = fromMo.getAllReverseRelationDefinitions();
+ for (RelationDefinition rel : rels) {
+ if (rel.hasOption(RelationOption.HIDDEN)) {
+ continue;
+ }
+ isReverseAggregPropsEmpty = 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 || !isReverseAggregPropsEmpty) {
+ 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 (!isReverseAggregPropsEmpty) {
+ 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();
+
+ }
+ }
+
}
- endTable();
+ private void generateProperty(AbstractManagedObjectDefinition mo, PropertyDefinition prop) {
- }
+ // Property name
+ paragraph(getAnchor(prop.getName()) + prop.getName(), TextStyle.STANDARD, "propertyname");
+ // Property table
+ startTable();
+ tableRow("Description",
+ ((prop.getSynopsis() != null) ? prop.getSynopsis().toString() + " " : "")
+ + ((prop.getDescription() != null) ? prop.getDescription().toString() : ""));
- private void propertiesLinkTable(TreeMap<String,
- PropertyDefinition> basicProps,
- TreeMap<String, PropertyDefinition> advancedProps) {
- htmlBuff.append(
- "<table border=\"0\" cellspacing=\"0\" class=\"jump-table\">\n" +
- " <tr>\n" +
- " <th>Basic Properties:</th>\n" +
- " <th>Advanced Properties:</th>\n" +
- " </tr>\n");
+ // Default value
+ String defValueStr = getDefaultBehaviorString(prop);
+ tableRow("Default Value", defValueStr);
- PropertyDefinition[] basicPropsArray =
- basicProps.values().toArray(new PropertyDefinition[0]);
- PropertyDefinition[] advancedPropsArray =
- advancedProps.values().toArray(new PropertyDefinition[0]);
+ tableRow("Allowed Values", getSyntaxStr(prop));
- for (int ii=0;
- (ii < basicPropsArray.length) || (ii < advancedPropsArray.length);
- ii++) {
- String basicPropName =
- ii < basicPropsArray.length ? basicPropsArray[ii].getName() : null;
- String advancedPropName =
- ii < advancedPropsArray.length ?
- advancedPropsArray[ii].getName() : null;
+ tableRow("Multi-valued", (prop.hasOption(PropertyOption.MULTI_VALUED) ? "Yes" : "No"));
- String basicHtmlCell = "";
- if (basicPropName != null) {
- basicHtmlCell = " <td>↓ <a href=\"#" + basicPropName + "\">"
- + basicPropName + "</a></td>\n";
- } else if ((basicPropsArray.length == 0) && (ii == 0)) {
- basicHtmlCell = " <td> None</td>\n";
- } else if (ii >= basicPropsArray.length) {
- // Case of nb of basic props < nb of advanced props
- basicHtmlCell = " <td></td>\n";
- }
-
- String advancedHtmlCell = "";
- if (advancedPropName != null) {
- advancedHtmlCell = " <td>↓ <a href=\"#" + advancedPropName +
- "\">" + advancedPropName + "</a></td>\n";
- } else if ((advancedPropsArray.length == 0) && (ii == 0)) {
- advancedHtmlCell = " <td> None</td>\n";
- }
-
- htmlBuff.append("<tr>\n");
- htmlBuff.append(basicHtmlCell + advancedHtmlCell);
- htmlBuff.append("</tr>\n");
- }
- htmlBuff.append("</table>\n");
- }
-
-
- private void genLdapMapping(AbstractManagedObjectDefinition mo) {
- //------------------------------------------------------------------------
- // LDAP mapping
- //------------------------------------------------------------------------
-
- heading3("LDAP Mapping");
- paragraph(
- "Each configuration property can be mapped to a specific " +
- "LDAP attribute under the \"cn=config\" entry. " +
- "The mappings that follow are provided for information only. " +
- "In general, you should avoid changing the server configuration " +
- "by manipulating the LDAP attributes directly.");
-
- // Managed object table
- startTable();
-
- LDAPProfile ldapProfile = LDAPProfile.getInstance();
- tableRow("Base DN", getBaseDN(mo, ldapProfile));
-
- tableRow("objectclass name", ldapProfile.getObjectClass(mo));
- if (mo.getParent().getName() != null) {
- String superior = "";
- if (mo.getParent().getName().equals("top")) {
- superior = "top";
- } else {
- if (moList.get(mo.getParent().getName()) != null) {
- superior =
- ldapProfile.getObjectClass(moList.get(mo.getParent().getName()));
+ if (prop.hasOption(PropertyOption.MANDATORY)) {
+ tableRow("Required", "Yes");
} else {
- System.err.println(
- "Error: managed object " + mo.getName() + " not found.");
+ tableRow("Required", "No");
}
- }
- tableRow("objectclass superior", superior);
- } else {
- System.err.println(
- "Error: objectclass superior not found for " + mo.getName());
- }
- endTable();
- newline();
- // Properties table
- startTable();
- tableRow("Property", "LDAP attribute");
- for ( PropertyDefinition prop : getPropertyList(mo).values()) {
- tableRow(prop.getName(), ldapProfile.getAttributeName(mo, prop));
+ String action = "None";
+ if (prop.getAdministratorAction() != null) {
+ LocalizableMessage synopsis = prop.getAdministratorAction().getSynopsis();
+ Type actionType = prop.getAdministratorAction().getType();
+ String actionStr = "";
+ if (actionType == Type.COMPONENT_RESTART) {
+ actionStr = "The " + mo.getUserFriendlyName()
+ + " must be disabled and re-enabled for changes to this setting " + "to take effect";
+ } else if (actionType == Type.SERVER_RESTART) {
+ actionStr = "Restart the server";
+ } else if (actionType == Type.NONE) {
+ actionStr = "None";
+ }
+ String dot = (actionStr.equals("") ? "" : ". ");
+ action = actionStr + ((synopsis != null) ? dot + synopsis : "");
+ }
+ tableRow("Admin Action Required", action);
+
+ if (prop.hasOption(PropertyOption.ADVANCED)) {
+ tableRow("Advanced Property", "Yes");
+ } else {
+ tableRow("Advanced Property", "No");
+ }
+
+ if (prop.hasOption(PropertyOption.READ_ONLY)) {
+ tableRow("Read-only", "Yes");
+ } else {
+ tableRow("Read-only", "No");
+ }
+
+ endTable();
+
}
- endTable();
+ private void propertiesLinkTable(TreeMap<String, PropertyDefinition> basicProps,
+ TreeMap<String, PropertyDefinition> advancedProps) {
+ htmlBuff.append("<table border=\"0\" cellspacing=\"0\" class=\"jump-table\">\n" + " <tr>\n"
+ + " <th>Basic Properties:</th>\n" + " <th>Advanced Properties:</th>\n" + " </tr>\n");
- }
+ PropertyDefinition[] basicPropsArray = basicProps.values().toArray(new PropertyDefinition[0]);
+ PropertyDefinition[] advancedPropsArray = advancedProps.values().toArray(new PropertyDefinition[0]);
- private void genManagedObjectList(
- TreeMap<String, AbstractManagedObjectDefinition> list) {
+ for (int ii = 0; (ii < basicPropsArray.length) || (ii < advancedPropsArray.length); ii++) {
+ String basicPropName = ii < basicPropsArray.length ? basicPropsArray[ii].getName() : null;
+ String advancedPropName = ii < advancedPropsArray.length ? advancedPropsArray[ii].getName() : null;
- htmlHeader(DynamicConstants.PRODUCT_NAME
- + " Configuration Reference - Components View");
- tabMenu(MO_LIST_FILE);
- viewHelp("This view provides a list of all configuration components, " +
- "in alphabetical order.");
+ String basicHtmlCell = "";
+ if (basicPropName != null) {
+ basicHtmlCell = " <td>↓ <a href=\"#" + basicPropName + "\">" + basicPropName + "</a></td>\n";
+ } else if ((basicPropsArray.length == 0) && (ii == 0)) {
+ basicHtmlCell = " <td> None</td>\n";
+ } else if (ii >= basicPropsArray.length) {
+ // Case of nb of basic props < nb of advanced props
+ basicHtmlCell = " <td></td>\n";
+ }
- newline();
- StringBuffer moPointers = new StringBuffer();
- String lettersPointers = "";
- String firstChar = ".";
- for (AbstractManagedObjectDefinition mo : list.values()) {
- if (!mo.getName().startsWith(firstChar)) {
- firstChar = mo.getName().substring(0, 1);
- String letter = firstChar.toUpperCase();
- moPointers.append(getAnchor(letter) + getHeading2(letter));
- lettersPointers += getLink(letter, "#" + letter) + " ";
- }
- moPointers.append(
- "<p> " +
- getLink(mo.getUserFriendlyName().toString(), mo.getName() + ".html",
- MAIN_FRAME) +
- "</p>\n");
- }
- paragraph(lettersPointers);
- htmlBuff.append(moPointers);
- htmlFooter();
- generateFile(MO_LIST_FILE);
- }
+ String advancedHtmlCell = "";
+ if (advancedPropName != null) {
+ advancedHtmlCell = " <td>↓ <a href=\"#" + advancedPropName + "\">" + advancedPropName
+ + "</a></td>\n";
+ } else if ((advancedPropsArray.length == 0) && (ii == 0)) {
+ advancedHtmlCell = " <td> None</td>\n";
+ }
- private void genPropertiesIndex() {
-
- // Build a sorted list of (property name + its managed object name)
- TreeSet<String> propMoList = new TreeSet<String>();
- for (AbstractManagedObjectDefinition<?, ?> mo : moList.values()) {
- for (PropertyDefinition<?> prop : mo.getPropertyDefinitions()) {
- propMoList.add(
- prop.getName() + "," + prop.getManagedObjectDefinition().getName());
- }
+ htmlBuff.append("<tr>\n");
+ htmlBuff.append(basicHtmlCell + advancedHtmlCell);
+ htmlBuff.append("</tr>\n");
+ }
+ htmlBuff.append("</table>\n");
}
- String lettersPointers = "";
- String firstChar = ".";
- for (String propMoStr : propMoList) {
- String[] propMoArray = propMoStr.split(",");
- String propName = propMoArray[0];
- AbstractManagedObjectDefinition mo = moList.get(propMoArray[1]);
- if (!propName.startsWith(firstChar)) {
- firstChar = propName.substring(0, 1);
- String letter = firstChar.toUpperCase();
- htmlBuff.append(getAnchor(letter) + getHeading2(letter));
- lettersPointers += getLink(letter, "#" + letter) + " ";
- }
- String propLink = getLink(propName,
- mo.getName() + ".html" + "#" + propName, MAIN_FRAME);
- String moLink =
- getLink(mo.getUserFriendlyName().toString(), mo.getName() + ".html",
- MAIN_FRAME, "#666");
- paragraph(propLink + " [ " + moLink + " ]");
+ private void genLdapMapping(AbstractManagedObjectDefinition mo) {
+ // ------------------------------------------------------------------------
+ // LDAP mapping
+ // ------------------------------------------------------------------------
+
+ heading3("LDAP Mapping");
+ paragraph("Each configuration property can be mapped to a specific "
+ + "LDAP attribute under the \"cn=config\" entry. "
+ + "The mappings that follow are provided for information only. "
+ + "In general, you should avoid changing the server configuration "
+ + "by manipulating the LDAP attributes directly.");
+
+ // Managed object table
+ startTable();
+
+ LDAPProfile ldapProfile = LDAPProfile.getInstance();
+ tableRow("Base DN", getBaseDN(mo, ldapProfile));
+
+ tableRow("objectclass name", ldapProfile.getObjectClass(mo));
+ if (mo.getParent().getName() != null) {
+ String superior = "";
+ if (mo.getParent().getName().equals("top")) {
+ superior = "top";
+ } else {
+ if (moList.get(mo.getParent().getName()) != null) {
+ superior = ldapProfile.getObjectClass(moList.get(mo.getParent().getName()));
+ } else {
+ System.err.println("Error: managed object " + mo.getName() + " not found.");
+ }
+ }
+ tableRow("objectclass superior", superior);
+ } else {
+ System.err.println("Error: objectclass superior not found for " + mo.getName());
+ }
+ endTable();
+
+ newline();
+ // Properties table
+ startTable();
+ tableRow("Property", "LDAP attribute");
+ for (PropertyDefinition prop : getPropertyList(mo).values()) {
+ tableRow(prop.getName(), ldapProfile.getAttributeName(mo, prop));
+ }
+
+ endTable();
+
}
- String indexBody = htmlBuff.toString();
- htmlBuff = new StringBuffer();
- htmlHeader(DynamicConstants.PRODUCT_NAME +
- " Configuration Reference - Properties View");
- tabMenu(PROPERTIES_INDEX_FILE);
- viewHelp("This view provides a list of all configuration properties, " +
- "in alphabetical order, and indicates the configuration component to " +
- "which each property applies.");
+ private void genManagedObjectList(TreeMap<String, AbstractManagedObjectDefinition> list) {
- newline();
- paragraph(lettersPointers);
- htmlBuff.append(indexBody);
- htmlFooter();
- generateFile(PROPERTIES_INDEX_FILE);
- }
+ htmlHeader(DynamicConstants.PRODUCT_NAME + " Configuration Reference - Components View");
+ tabMenu(MO_LIST_FILE);
+ viewHelp("This view provides a list of all configuration components, " + "in alphabetical order.");
+
+ newline();
+ StringBuffer moPointers = new StringBuffer();
+ String lettersPointers = "";
+ String firstChar = ".";
+ for (AbstractManagedObjectDefinition mo : list.values()) {
+ if (!mo.getName().startsWith(firstChar)) {
+ firstChar = mo.getName().substring(0, 1);
+ String letter = firstChar.toUpperCase();
+ moPointers.append(getAnchor(letter) + getHeading2(letter));
+ lettersPointers += getLink(letter, "#" + letter) + " ";
+ }
+ moPointers.append("<p> " + getLink(mo.getUserFriendlyName().toString(), mo.getName() + ".html", MAIN_FRAME)
+ + "</p>\n");
+ }
+ paragraph(lettersPointers);
+ htmlBuff.append(moPointers);
+ htmlFooter();
+ generateFile(MO_LIST_FILE);
+ }
+
+ private void genPropertiesIndex() {
+
+ // Build a sorted list of (property name + its managed object name)
+ TreeSet<String> propMoList = new TreeSet<String>();
+ for (AbstractManagedObjectDefinition<?, ?> mo : moList.values()) {
+ for (PropertyDefinition<?> prop : mo.getPropertyDefinitions()) {
+ propMoList.add(prop.getName() + "," + prop.getManagedObjectDefinition().getName());
+ }
+ }
+
+ String lettersPointers = "";
+ String firstChar = ".";
+ for (String propMoStr : propMoList) {
+ String[] propMoArray = propMoStr.split(",");
+ String propName = propMoArray[0];
+ AbstractManagedObjectDefinition mo = moList.get(propMoArray[1]);
+ if (!propName.startsWith(firstChar)) {
+ firstChar = propName.substring(0, 1);
+ String letter = firstChar.toUpperCase();
+ htmlBuff.append(getAnchor(letter) + getHeading2(letter));
+ lettersPointers += getLink(letter, "#" + letter) + " ";
+ }
+ String propLink = getLink(propName, mo.getName() + ".html" + "#" + propName, MAIN_FRAME);
+ String moLink = getLink(mo.getUserFriendlyName().toString(), mo.getName() + ".html", MAIN_FRAME, "#666");
+ paragraph(propLink + " [ " + moLink + " ]");
+ }
+
+ String indexBody = htmlBuff.toString();
+ htmlBuff = new StringBuffer();
+ htmlHeader(DynamicConstants.PRODUCT_NAME + " Configuration Reference - Properties View");
+ tabMenu(PROPERTIES_INDEX_FILE);
+ viewHelp("This view provides a list of all configuration properties, "
+ + "in alphabetical order, and indicates the configuration component to "
+ + "which each property applies.");
+
+ newline();
+ paragraph(lettersPointers);
+ htmlBuff.append(indexBody);
+ htmlFooter();
+ generateFile(PROPERTIES_INDEX_FILE);
+ }
private void genWelcomePage() {
- htmlHeader(DynamicConstants.PRODUCT_NAME +
- " Configuration Reference - Welcome");
- heading2("About This Reference");
- paragraph("This reference " +
- "describes the " + DynamicConstants.PRODUCT_NAME +
- " configuration properties that can be manipulated " +
- "with the dsconfig command.");
- paragraph("Configuration components are grouped according to the area of " +
- "the server in which they are used, as follows:");
+ htmlHeader(DynamicConstants.PRODUCT_NAME + " Configuration Reference - Welcome");
+ heading2("About This Reference");
+ paragraph("This reference " + "describes the " + DynamicConstants.PRODUCT_NAME
+ + " configuration properties that can be manipulated " + "with the dsconfig command.");
+ paragraph("Configuration components are grouped according to the area of "
+ + "the server in which they are used, as follows:");
- beginList();
- for (String catName : catTopMoList.keySet()) {
- bullet(getFriendlyName(catName));
- }
- endList();
-
- paragraph(
- "For ease of reference, the configuration is described on multiple " +
- "tabs. These tabs provide alternative views of the configuration " +
- "components:");
- beginList();
- bullet("The <strong>Inheritance</strong> view represents the inheritance " +
- "relationships between configuration components. A sub-component " +
- "inherits all of the properties of its parent component.");
- bullet("The <strong>Structure</strong> view represents the structural " +
- "relationships between components and indicates how certain components " +
- "can exist only within container components. When a container " +
- "component is deleted, all of the components within it are also " +
- "deleted.");
- bullet(
- "The <strong>Components</strong> view provides an alphabetical list " +
- "of all configuration components.");
- bullet(
- "The <strong>Properties</strong> view provides an alphabetical list " +
- "of all configuration properties, and indicates the configuration " +
- "component to which each property applies.");
- endList();
-
- newline();
- paragraph("When you set up " +
- DynamicConstants.PRODUCT_NAME +
- ", certain components are created in the " +
- "configuration by default. These components are configured with " +
- "specific values, which are not necessarily the same as the " +
- "\"default values\" of new components that you create using dsconfig. " +
- "The \"default values\" listed in this document refer to the values " +
- "of the new components that you create using dsconfig.");
-
- htmlFooter();
- generateFile(WELCOME_FILE);
-
- }
-
- private void genMainTopPage() {
- htmlHeader(DynamicConstants.PRODUCT_NAME +
- " Configuration Reference - Main Top");
- htmlBuff.append("<div class=\"breadcrumb\"><span class=\"pageactions\">" +
- "<a href=\"" + OpenDJHome + "\" target=\"_parent\">" +
- "<span style=\"font-size: 12px;\">« </span>" +
- "Back to " +
- DynamicConstants.PRODUCT_NAME + " Home</a></span> </div>\n");
- htmlBuff.append("<table class=\"titletable\" cellspacing=\"0\" " +
- "width=\"100%\">\n");
- htmlBuff.append("<tbody><tr>\n");
- htmlBuff.append(" <td><h2>"+
- DynamicConstants.PRODUCT_NAME +
- " Configuration Reference</h2></td>\n");
- htmlBuff.append(" <td valign=\"bottom\" width=\"10%\">" +
- "<a href=\"" + OpenDJHome + "\" target=\"_parent\">" +
- "<img src=\"opendj_logo_sm.png\" alt=\"OpenDJ Logo\" align=\"bottom\" " +
- "border=\"0\" height=\"33\" width=\"114\"></a></td>\n");
- htmlBuff.append("</tr>\n");
- htmlBuff.append("</tbody></table>\n");
-
- htmlFooter();
- generateFile(MAINTOP_FILE);
-
- }
-
- private void genIndexPage() {
- htmlBuff.append(getHtmlHeader(
- DynamicConstants.PRODUCT_NAME + " Configuration Reference"));
-
- htmlBuff.append("<frameset rows=\"80,*\" framespacing=\"1\" " +
- "frameborder=\"yes\" border=\"1\" bordercolor=\"#333333\">\n");
- htmlBuff.append(" <frame src=\"" + MAINTOP_FILE + "\" name=\"topFrame\" " +
- "id=\"topFrame\" border=\"1\" title=\"topFrame\" scrolling=\"no\">\n");
- htmlBuff.append(" <frameset cols=\"375,*\" frameborder=\"yes\" " +
- "border=\"1\" " +
- "framespacing=\"1\">\n");
- htmlBuff.append(" <frame src=\"" + INHERITANCE_TREE_FILE + "\" " +
- "name=\"leftFrame\" id=\"leftFrame\" title=\"leftFrame\" " +
- "scrolling=\"auto\">\n");
- htmlBuff.append(" <frame src=\"" + WELCOME_FILE +
- "\" name=\"mainFrame\" " +
- "id=\"mainFrame\" title=\"mainFrame\" scrolling=\"auto\">\n");
- htmlBuff.append(" </frameset>\n");
- htmlBuff.append("</frameset>\n");
- htmlBuff.append("<noframes><body>\n");
- htmlBuff.append("</body>\n");
- htmlBuff.append("</noframes>\n");
- htmlBuff.append("</html>\n");
-
- generateFile(INDEX_FILE);
- }
-
- private String getBaseDN(
- AbstractManagedObjectDefinition mo, LDAPProfile ldapProfile) {
-
- RelationDefinition rel = relList.get(mo.getName());
- if (rel != null) {
- String baseDn = ldapProfile.getRelationRDNSequence(rel);
- if (!baseDn.equals("")) {
- return baseDn;
- } else {
- // Check the parent relation
- return getBaseDN(rel.getParentDefinition(), ldapProfile);
- }
- } else if (moList.get(mo.getParent().getName()) != null) {
- // check its superior
- return getBaseDN(moList.get(mo.getParent().getName()), ldapProfile);
- } else {
- System.err.println("Error: Base DN not found for " + mo.getName());
- }
- return null;
- }
-
- @SuppressWarnings("unchecked")
- private String getSyntaxStr(PropertyDefinition prop) {
- // Create a visitor for performing syntax specific processing.
- PropertyDefinitionVisitor<String, Void> visitor =
- new PropertyDefinitionVisitor<String, Void>() {
-
- @Override
- public String visitACI(ACIPropertyDefinition prop, Void p) {
- return getLink("An ACI Syntax", aciSyntaxPage);
- }
-
- @Override
- public String visitAggregation(
- AggregationPropertyDefinition prop, Void p) {
-
- RelationDefinition rel = prop.getRelationDefinition();
- String linkStr = getLink(rel.getUserFriendlyName().toString(),
- rel.getName() + ".html");
- return "The DN of any " + linkStr + ". " +
- ((prop.getSourceConstraintSynopsis() != null) ?
- prop.getSourceConstraintSynopsis().toString() : "");
- }
-
- @Override
- public String visitAttributeType(
- AttributeTypePropertyDefinition prop, Void p) {
- return "The name of an attribute type defined in the server schema.";
- }
-
- @Override
- public String visitBoolean(BooleanPropertyDefinition prop, Void p) {
- return "true" + getNewLine() + "false";
- }
-
- @Override
- public String visitClass(ClassPropertyDefinition prop, Void p) {
- String classStr =
- "A java class that implements or extends the class(es) :";
- for (String clazz : prop.getInstanceOfInterface()) {
- classStr += getNewLine() + clazz;
+ beginList();
+ for (String catName : catTopMoList.keySet()) {
+ bullet(getFriendlyName(catName));
}
- return classStr;
- }
+ endList();
- @Override
- public String visitDN(DNPropertyDefinition prop, Void p) {
- String retStr = "A valid DN.";
- if (prop.getBaseDN() != null) {
- retStr += prop.getBaseDN().toString();
+ paragraph("For ease of reference, the configuration is described on multiple "
+ + "tabs. These tabs provide alternative views of the configuration " + "components:");
+ beginList();
+ bullet("The <strong>Inheritance</strong> view represents the inheritance "
+ + "relationships between configuration components. A sub-component "
+ + "inherits all of the properties of its parent component.");
+ bullet("The <strong>Structure</strong> view represents the structural "
+ + "relationships between components and indicates how certain components "
+ + "can exist only within container components. When a container "
+ + "component is deleted, all of the components within it are also " + "deleted.");
+ bullet("The <strong>Components</strong> view provides an alphabetical list "
+ + "of all configuration components.");
+ bullet("The <strong>Properties</strong> view provides an alphabetical list "
+ + "of all configuration properties, and indicates the configuration "
+ + "component to which each property applies.");
+ endList();
+
+ newline();
+ paragraph("When you set up " + DynamicConstants.PRODUCT_NAME + ", certain components are created in the "
+ + "configuration by default. These components are configured with "
+ + "specific values, which are not necessarily the same as the "
+ + "\"default values\" of new components that you create using dsconfig. "
+ + "The \"default values\" listed in this document refer to the values "
+ + "of the new components that you create using dsconfig.");
+
+ htmlFooter();
+ generateFile(WELCOME_FILE);
+
+ }
+
+ private void genMainTopPage() {
+ htmlHeader(DynamicConstants.PRODUCT_NAME + " Configuration Reference - Main Top");
+ htmlBuff.append("<div class=\"breadcrumb\"><span class=\"pageactions\">" + "<a href=\"" + OpenDJHome
+ + "\" target=\"_parent\">" + "<span style=\"font-size: 12px;\">« </span>" + "Back to "
+ + DynamicConstants.PRODUCT_NAME + " Home</a></span> </div>\n");
+ htmlBuff.append("<table class=\"titletable\" cellspacing=\"0\" " + "width=\"100%\">\n");
+ htmlBuff.append("<tbody><tr>\n");
+ htmlBuff.append(" <td><h2>" + DynamicConstants.PRODUCT_NAME + " Configuration Reference</h2></td>\n");
+ htmlBuff.append(" <td valign=\"bottom\" width=\"10%\">" + "<a href=\"" + OpenDJHome + "\" target=\"_parent\">"
+ + "<img src=\"opendj_logo_sm.png\" alt=\"OpenDJ Logo\" align=\"bottom\" "
+ + "border=\"0\" height=\"33\" width=\"114\"></a></td>\n");
+ htmlBuff.append("</tr>\n");
+ htmlBuff.append("</tbody></table>\n");
+
+ htmlFooter();
+ generateFile(MAINTOP_FILE);
+
+ }
+
+ private void genIndexPage() {
+ htmlBuff.append(getHtmlHeader(DynamicConstants.PRODUCT_NAME + " Configuration Reference"));
+
+ htmlBuff.append("<frameset rows=\"80,*\" framespacing=\"1\" "
+ + "frameborder=\"yes\" border=\"1\" bordercolor=\"#333333\">\n");
+ htmlBuff.append(" <frame src=\"" + MAINTOP_FILE + "\" name=\"topFrame\" "
+ + "id=\"topFrame\" border=\"1\" title=\"topFrame\" scrolling=\"no\">\n");
+ htmlBuff.append(" <frameset cols=\"375,*\" frameborder=\"yes\" " + "border=\"1\" " + "framespacing=\"1\">\n");
+ htmlBuff.append(" <frame src=\"" + INHERITANCE_TREE_FILE + "\" "
+ + "name=\"leftFrame\" id=\"leftFrame\" title=\"leftFrame\" " + "scrolling=\"auto\">\n");
+ htmlBuff.append(" <frame src=\"" + WELCOME_FILE + "\" name=\"mainFrame\" "
+ + "id=\"mainFrame\" title=\"mainFrame\" scrolling=\"auto\">\n");
+ htmlBuff.append(" </frameset>\n");
+ htmlBuff.append("</frameset>\n");
+ htmlBuff.append("<noframes><body>\n");
+ htmlBuff.append("</body>\n");
+ htmlBuff.append("</noframes>\n");
+ htmlBuff.append("</html>\n");
+
+ generateFile(INDEX_FILE);
+ }
+
+ private String getBaseDN(AbstractManagedObjectDefinition mo, LDAPProfile ldapProfile) {
+
+ RelationDefinition rel = relList.get(mo.getName());
+ if (rel != null) {
+ String baseDn = ldapProfile.getRelationRDNSequence(rel);
+ if (!baseDn.equals("")) {
+ return baseDn;
+ } else {
+ // Check the parent relation
+ return getBaseDN(rel.getParentDefinition(), ldapProfile);
+ }
+ } else if (moList.get(mo.getParent().getName()) != null) {
+ // check its superior
+ return getBaseDN(moList.get(mo.getParent().getName()), ldapProfile);
+ } else {
+ System.err.println("Error: Base DN not found for " + mo.getName());
+ }
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ private String getSyntaxStr(PropertyDefinition prop) {
+ // Create a visitor for performing syntax specific processing.
+ PropertyDefinitionVisitor<String, Void> visitor = new PropertyDefinitionVisitor<String, Void>() {
+
+ @Override
+ public String visitACI(ACIPropertyDefinition prop, Void p) {
+ return getLink("An ACI Syntax", aciSyntaxPage);
+ }
+
+ @Override
+ public String visitAggregation(AggregationPropertyDefinition prop, Void p) {
+
+ RelationDefinition rel = prop.getRelationDefinition();
+ String linkStr = getLink(rel.getUserFriendlyName().toString(), rel.getName() + ".html");
+ return "The DN of any "
+ + linkStr
+ + ". "
+ + ((prop.getSourceConstraintSynopsis() != null) ? prop.getSourceConstraintSynopsis().toString()
+ : "");
+ }
+
+ @Override
+ public String visitAttributeType(AttributeTypePropertyDefinition prop, Void p) {
+ return "The name of an attribute type defined in the server schema.";
+ }
+
+ @Override
+ public String visitBoolean(BooleanPropertyDefinition prop, Void p) {
+ return "true" + getNewLine() + "false";
+ }
+
+ @Override
+ public String visitClass(ClassPropertyDefinition prop, Void p) {
+ String classStr = "A java class that implements or extends the class(es) :";
+ for (String clazz : prop.getInstanceOfInterface()) {
+ classStr += getNewLine() + clazz;
+ }
+ return classStr;
+ }
+
+ @Override
+ public String visitDN(DNPropertyDefinition prop, Void p) {
+ String retStr = "A valid DN.";
+ if (prop.getBaseDN() != null) {
+ retStr += prop.getBaseDN().toString();
+ }
+ return retStr;
+ }
+
+ @Override
+ public String visitDuration(DurationPropertyDefinition prop, Void p) {
+ String durationStr = "";
+
+ durationStr += getLink("A duration Syntax", durationSyntaxPage) + ". ";
+ if (prop.isAllowUnlimited()) {
+ durationStr += "A value of \"-1\" or \"unlimited\" for no limit. ";
+ }
+ if (prop.getMaximumUnit() != null) {
+ durationStr += "Maximum unit is \"" + prop.getMaximumUnit().getLongName() + "\". ";
+ }
+ long lowerLimitStr = new Double(prop.getBaseUnit().fromMilliSeconds(prop.getLowerLimit())).longValue();
+ durationStr += "Lower limit is " + lowerLimitStr + " " + prop.getBaseUnit().getLongName() + ". ";
+ if (prop.getUpperLimit() != null) {
+ long upperLimitStr = new Double(prop.getBaseUnit().fromMilliSeconds(prop.getUpperLimit()))
+ .longValue();
+ durationStr += "Upper limit is " + upperLimitStr + " " + prop.getBaseUnit().getLongName() + ". ";
+ }
+
+ return durationStr;
+ }
+
+ @Override
+ public String visitEnum(EnumPropertyDefinition prop, Void p) {
+ String enumStr = "";
+ Class en = prop.getEnumClass();
+ for (Object cst : en.getEnumConstants()) {
+ enumStr += cst.toString();
+ if (prop.getValueSynopsis((Enum) cst) != null) {
+ enumStr += " - " + prop.getValueSynopsis((Enum) cst).toString();
+ }
+ enumStr += getNewLine() + getNewLine();
+ }
+ return enumStr;
+ }
+
+ @Override
+ public String visitInteger(IntegerPropertyDefinition prop, Void p) {
+ String intStr = "An integer value.";
+ intStr += " Lower value is " + prop.getLowerLimit() + ".";
+ if (prop.getUpperLimit() != null) {
+ intStr += " Upper value is " + prop.getUpperLimit() + " .";
+ }
+ if (prop.isAllowUnlimited()) {
+ intStr += " A value of \"-1\" or \"unlimited\" for no limit.";
+ }
+ if (prop.getUnitSynopsis() != null) {
+ intStr += " Unit is " + prop.getUnitSynopsis() + ".";
+ }
+ return intStr;
+ }
+
+ @Override
+ public String visitIPAddress(IPAddressPropertyDefinition prop, Void p) {
+ return "An IP address";
+ }
+
+ @Override
+ public String visitIPAddressMask(IPAddressMaskPropertyDefinition prop, Void p) {
+
+ return "An IP address mask";
+ }
+
+ @Override
+ public String visitSize(SizePropertyDefinition prop, Void p) {
+ String sizeStr = "A positive integer representing a size.";
+ if (prop.getLowerLimit() != 0) {
+ sizeStr += " Lower value is " + prop.getLowerLimit() + ".";
+ }
+ if (prop.getUpperLimit() != null) {
+ sizeStr += " Upper value is " + prop.getUpperLimit() + " .";
+ }
+ if (prop.isAllowUnlimited()) {
+ sizeStr += " A value of \"-1\" or \"unlimited\" for no limit.";
+ }
+ return sizeStr;
+ }
+
+ @Override
+ public String visitString(StringPropertyDefinition prop, Void p) {
+ String retStr = "A String";
+ if (prop.getPatternSynopsis() != null) {
+ retStr = prop.getPatternSynopsis().toString();
+ }
+ return retStr;
+ }
+
+ @Override
+ public String visitUnknown(PropertyDefinition prop, Void p) {
+ return "Unknown";
+ }
+ };
+
+ // Invoke the visitor against the property definition.
+ return (String) prop.accept(visitor, null);
+
+ }
+
+ @SuppressWarnings("unchecked")
+ private String getDefaultBehaviorString(PropertyDefinition prop) {
+ DefaultBehaviorProvider defaultBehav = prop.getDefaultBehaviorProvider();
+ String defValueStr = "";
+ if (defaultBehav instanceof UndefinedDefaultBehaviorProvider) {
+ defValueStr = "None";
+ } else if (defaultBehav instanceof DefinedDefaultBehaviorProvider) {
+ DefinedDefaultBehaviorProvider defBehav = (DefinedDefaultBehaviorProvider) defaultBehav;
+ for (Iterator<String> it = defBehav.getDefaultValues().iterator(); it.hasNext();) {
+
+ String str = it.next();
+ defValueStr += str + (it.hasNext() ? "\n" : "");
+ }
+ } else if (defaultBehav instanceof AliasDefaultBehaviorProvider) {
+ AliasDefaultBehaviorProvider aliasBehav = (AliasDefaultBehaviorProvider) defaultBehav;
+ defValueStr = aliasBehav.getSynopsis().toString();
+ } else if (defaultBehav instanceof RelativeInheritedDefaultBehaviorProvider) {
+ RelativeInheritedDefaultBehaviorProvider relativBehav = (RelativeInheritedDefaultBehaviorProvider) defaultBehav;
+ defValueStr = getDefaultBehaviorString(relativBehav.getManagedObjectDefinition().getPropertyDefinition(
+ relativBehav.getPropertyName()));
+ } else if (defaultBehav instanceof AbsoluteInheritedDefaultBehaviorProvider) {
+ AbsoluteInheritedDefaultBehaviorProvider absoluteBehav = (AbsoluteInheritedDefaultBehaviorProvider) defaultBehav;
+ defValueStr = getDefaultBehaviorString(absoluteBehav.getManagedObjectDefinition().getPropertyDefinition(
+ absoluteBehav.getPropertyName()));
+ }
+ return defValueStr;
+ }
+
+ private TreeMap<String, AbstractManagedObjectDefinition> makeMOTreeMap(
+ Collection<AbstractManagedObjectDefinition> coll) {
+
+ if (coll == null) {
+ return null;
+ }
+ TreeMap<String, AbstractManagedObjectDefinition> map = new TreeMap<String, AbstractManagedObjectDefinition>();
+ for (AbstractManagedObjectDefinition mo : coll) {
+ if (mo.hasOption(ManagedObjectOption.HIDDEN)) {
+ continue;
+ }
+ map.put(mo.getName(), mo);
+ }
+ return map;
+ }
+
+ private TreeMap<String, RelationDefinition> makeRelTreeMap(Collection<RelationDefinition> coll) {
+
+ if (coll == null) {
+ return null;
+ }
+ TreeMap<String, RelationDefinition> map = new TreeMap<String, RelationDefinition>();
+ for (RelationDefinition rel : coll) {
+ map.put(rel.getChildDefinition().getName(), rel);
+ }
+ return map;
+ }
+
+ private TreeMap<String, PropertyDefinition> makePropTreeMap(Collection<PropertyDefinition> coll) {
+
+ if (coll == null) {
+ return null;
+ }
+ TreeMap<String, PropertyDefinition> map = new TreeMap<String, PropertyDefinition>();
+ for (PropertyDefinition prop : coll) {
+ map.put(prop.getName(), prop);
+ }
+ return map;
+ }
+
+ private void horizontalLine() {
+ htmlBuff.append("<hr style=\"width: 100%; height: 2px;\">");
+ }
+
+ private void endTable() {
+ htmlBuff.append("</tbody>\n");
+ htmlBuff.append("</table>\n");
+ }
+
+ private void bullet(String str) {
+ htmlBuff.append("<li>" + str + "</li>\n");
+ }
+
+ private void heading2(String string) {
+ heading(string, 2);
+ }
+
+ private void heading3(String string) {
+ heading(string, 3);
+ }
+
+ private void heading4(String string) {
+ heading(string, 4);
+ }
+
+ private void heading(String str, int level) {
+ htmlBuff.append(getHeading(str, level));
+ }
+
+ private String getHeading(String str, int level) {
+ String strLevel = (new Integer(level)).toString();
+ return "<h" + strLevel + ">" + "<a name=\"" + str + "\"></a>" + str + "</h" + strLevel + ">\n";
+ }
+
+ private String getHeading2(String str) {
+ return getHeading(str, 2);
+ }
+
+ private String getAnchor(String str) {
+ return "<a name=\"" + str + "\"></a>";
+ }
+
+ private void htmlHeader(String pageTitle) {
+ htmlBuff.append(getHtmlHeader(pageTitle) + "<body>\n");
+
+ }
+
+ private final String Now = new Date().toString();
+
+ private String getHtmlHeader(String pageTitle) {
+ return ("<html>\n" + "<head>\n" + "<meta http-equiv=\"content-type\"\n"
+ + "content=\"text/html; charset=ISO-8859-1\">\n" + "<title>" + pageTitle + "</title>\n"
+ + "<link rel=\"stylesheet\" type=\"text/css\"\n" + "href=\"" + CSS_FILE + "\">\n"
+ + "<link rel=\"shortcut icon\" href=\"" + FAVICON + "\">\n"
+ + "<meta name=\"date generated\" content=\"" + Now + "\">\n" + "</head>\n");
+ }
+
+ // Add a Tab Menu, the active tab is the one given as parameter
+ private void tabMenu(String activeTab) {
+ htmlBuff.append("<div class=\"tabmenu\"> " +
+
+ "<span><a " + (activeTab.equals(INHERITANCE_TREE_FILE) ? "class=\"activetab\" " : "") + "href=\""
+ + INHERITANCE_TREE_FILE + "\"" + " title=\"Inheritance View of Components\">Inheritance</a></span> " +
+
+ "<span><a " + (activeTab.equals(RELATION_TREE_FILE) ? "class=\"activetab\" " : "") + "href=\""
+ + RELATION_TREE_FILE + "\"" + " title=\"Relational View of Components\">Structure</a></span> " +
+
+ "<span><a " + (activeTab.equals(MO_LIST_FILE) ? "class=\"activetab\" " : "") + "href=\"" + MO_LIST_FILE
+ + "\"" + " title=\"Alphabetical Index of Components\">Components</a></span> " +
+
+ "<span><a " + (activeTab.equals(PROPERTIES_INDEX_FILE) ? "class=\"activetab\" " : "") + "href=\""
+ + PROPERTIES_INDEX_FILE + "\"" + " title=\"Alphabetical Index of Properties\" >Properties</a></span>" +
+
+ "</div>" + "\n");
+ }
+
+ private String getLink(String str, String link) {
+ return getLink(str, link, null, null);
+ }
+
+ private String getLink(String str, String link, String target) {
+ return getLink(str, link, target, null);
+ }
+
+ private String getLink(String str, String link, String target, String color) {
+ return "<a " + (color != null ? "style=\"color:" + color + "\" " : "") + "href=\"" + link + "\""
+ + (target == null ? "" : " target=\"" + target + "\"") + ">" + str + "</a>";
+ }
+
+ private void link(String str, String link) {
+ link(str, link, null, null);
+ }
+
+ private void link(String str, String link, String target) {
+ link(str, link, target, null);
+ }
+
+ private void link(String str, String link, String target, String color) {
+ String htmlStr = "";
+ if (!inList && getIndentPixels() > 0) {
+ htmlStr += "<div style=\"margin-left: " + getIndentPixels() + "px;\">";
+ } else if (inList) {
+ htmlStr += "<li>";
+ }
+ htmlStr += getLink(str, link, target, color);
+ if (!inList && getIndentPixels() > 0) {
+ htmlStr += "</div>";
+ } else if (inList) {
+ htmlStr += "</li>";
+ }
+ if (!inList) {
+ htmlStr += "<br>";
+ }
+ htmlBuff.append(htmlStr + "\n");
+ }
+
+ private void newline() {
+ htmlBuff.append(getNewLine());
+ }
+
+ private String getNewLine() {
+ return "<br>\n";
+ }
+
+ private void paragraph(LocalizableMessage description) {
+ if (description != null) {
+ paragraph(description.toString());
+ }
+ }
+
+ private void paragraph(String description) {
+ paragraph(description, TextStyle.STANDARD, null);
+ }
+
+ private void paragraph(String description, TextStyle style) {
+ paragraph(description, style, null);
+ }
+
+ private void paragraph(String description, TextStyle style, String pClass) {
+ String indentStr = "";
+ String styleStr = "";
+ String classStr = "";
+ if (getIndentPixels() > 0) {
+ indentStr = "style=\"margin-left: " + getIndentPixels() + "px;\"";
+ }
+ if (style == TextStyle.BOLD) {
+ styleStr = "style=\"font-weight: bold;\"";
+ } else if (style == TextStyle.ITALIC) {
+ styleStr = "style=\"font-style: italic;\"";
+ }
+ if (pClass != null) {
+ classStr = "class=" + pClass;
+ }
+
+ htmlBuff.append("<p " + indentStr + " " + styleStr + " " + classStr + ">" + description + "</p>\n");
+ }
+
+ private int getIndentPixels() {
+ return (ind * 40);
+ }
+
+ private void startTable() {
+ htmlBuff.append("<table " + "style=\"width: 100%; text-align: left;\"" + "border=\"1\"" + "cellpadding=\"1\""
+ + "cellspacing=\"0\"" + ">\n");
+
+ htmlBuff.append("<tbody>\n");
+ }
+
+ /*
+ * Generate a "friendly" name from a string : '-' and '_' replaced by space
+ * first letter of a word in uppercase
+ */
+ private String getFriendlyName(String str) {
+ String retStr = "";
+ String[] words = str.split("\\p{Punct}");
+ for (int ii = 0; ii < words.length; ii++) {
+ if (ii > 0) {
+ retStr += " ";
+ }
+ String word = words[ii];
+ String firstChar = word.substring(0, 1).toUpperCase();
+ retStr += firstChar + word.substring(1, word.length());
}
return retStr;
- }
+ }
- @Override
- public String visitDuration(DurationPropertyDefinition prop, Void p) {
- String durationStr = "";
-
- durationStr += getLink("A duration Syntax", durationSyntaxPage) +
- ". ";
- if (prop.isAllowUnlimited()) {
- durationStr += "A value of \"-1\" or \"unlimited\" for no limit. ";
+ private void tableRow(String... strings) {
+ htmlBuff.append("<tr>\n");
+ for (int ii = 0; ii < strings.length; ii++) {
+ String string = strings[ii];
+ htmlBuff.append("<td style=\"" + "vertical-align: top; " + ((ii == 0) ? "width: 20%;" : "") + "\">"
+ + string + "<br></td>");
}
- if (prop.getMaximumUnit() != null) {
- durationStr += "Maximum unit is \"" +
- prop.getMaximumUnit().getLongName() + "\". ";
+ htmlBuff.append("</tr>\n");
+ }
+
+ /**
+ * Text style.
+ */
+ private enum TextStyle {
+
+ STANDARD, BOLD, ITALIC, UNDERLINE, FIXED_WIDTH
+ }
+
+ private void beginList() {
+ inList = true;
+ listLevel++;
+ htmlBuff.append("<ul>\n");
+ }
+
+ private void endList() {
+ listLevel--;
+ if (listLevel == 0) {
+ inList = false;
}
- long lowerLimitStr = new Double(prop.getBaseUnit().
- fromMilliSeconds(prop.getLowerLimit())).longValue();
- durationStr += "Lower limit is " + lowerLimitStr +
- " " + prop.getBaseUnit().getLongName() + ". ";
- if (prop.getUpperLimit() != null) {
- long upperLimitStr = new Double(prop.getBaseUnit().
- fromMilliSeconds(prop.getUpperLimit())).longValue();
- durationStr += "Upper limit is " + upperLimitStr +
- " " + prop.getBaseUnit().getLongName() + ". ";
+ htmlBuff.append("</ul>\n");
+ }
+
+ private void htmlFooter() {
+ htmlBuff.append("</body>\n" + "</html>\n");
+ }
+
+ private void viewHelp(String helpStr) {
+ htmlBuff.append("<p class=\"view-help\" >" + helpStr + "</p>" + "\n");
+ }
+
+ private void generateFile(String fileName) {
+ // Write the html buffer in a file
+ try {
+ PrintWriter file = new java.io.PrintWriter(
+ new java.io.FileWriter(generationDir + File.separator + fileName));
+ file.write(htmlBuff.toString());
+ file.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
}
-
- return durationStr;
- }
-
- @Override
- public String visitEnum(EnumPropertyDefinition prop, Void p) {
- String enumStr = "";
- Class en = prop.getEnumClass();
- for (Object cst : en.getEnumConstants()) {
- enumStr += cst.toString();
- if (prop.getValueSynopsis((Enum) cst) != null) {
- enumStr += " - " + prop.getValueSynopsis((Enum) cst).toString();
- }
- enumStr += getNewLine() + getNewLine();
- }
- return enumStr;
- }
-
- @Override
- public String visitInteger(IntegerPropertyDefinition prop, Void p) {
- String intStr = "An integer value.";
- intStr += " Lower value is " + prop.getLowerLimit() + ".";
- if (prop.getUpperLimit() != null) {
- intStr += " Upper value is " + prop.getUpperLimit() + " .";
- }
- if (prop.isAllowUnlimited()) {
- intStr += " A value of \"-1\" or \"unlimited\" for no limit.";
- }
- if (prop.getUnitSynopsis() != null) {
- intStr += " Unit is " + prop.getUnitSynopsis() + ".";
- }
- return intStr;
- }
-
- @Override
- public String visitIPAddress(IPAddressPropertyDefinition prop, Void p) {
- return "An IP address";
- }
-
- @Override
- public String visitIPAddressMask(
- IPAddressMaskPropertyDefinition prop, Void p) {
-
- return "An IP address mask";
- }
-
- @Override
- public String visitSize(SizePropertyDefinition prop, Void p) {
- String sizeStr = "A positive integer representing a size.";
- if (prop.getLowerLimit() != 0) {
- sizeStr += " Lower value is " + prop.getLowerLimit() + ".";
- }
- if (prop.getUpperLimit() != null) {
- sizeStr += " Upper value is " + prop.getUpperLimit() + " .";
- }
- if (prop.isAllowUnlimited()) {
- sizeStr += " A value of \"-1\" or \"unlimited\" for no limit.";
- }
- return sizeStr;
- }
-
- @Override
- public String visitString(StringPropertyDefinition prop, Void p) {
- String retStr = "A String";
- if (prop.getPatternSynopsis() != null) {
- retStr = prop.getPatternSynopsis().toString();
- }
- return retStr;
- }
-
- @Override
- public String visitUnknown(PropertyDefinition prop, Void p) {
- return "Unknown";
- }
- };
-
- // Invoke the visitor against the property definition.
- return (String) prop.accept(visitor, null);
-
- }
-
- @SuppressWarnings("unchecked")
- private String getDefaultBehaviorString(PropertyDefinition prop) {
- DefaultBehaviorProvider defaultBehav = prop.getDefaultBehaviorProvider();
- String defValueStr = "";
- if (defaultBehav instanceof UndefinedDefaultBehaviorProvider) {
- defValueStr = "None";
- } else if (defaultBehav instanceof DefinedDefaultBehaviorProvider) {
- DefinedDefaultBehaviorProvider defBehav =
- (DefinedDefaultBehaviorProvider) defaultBehav;
- for (Iterator<String> it = defBehav.getDefaultValues().iterator();
- it.hasNext();) {
-
- String str = it.next();
- defValueStr += str + (it.hasNext() ? "\n" : "");
- }
- } else if (defaultBehav instanceof AliasDefaultBehaviorProvider) {
- AliasDefaultBehaviorProvider aliasBehav = (
- AliasDefaultBehaviorProvider) defaultBehav;
- defValueStr = aliasBehav.getSynopsis().toString();
- } else if
- (defaultBehav instanceof RelativeInheritedDefaultBehaviorProvider) {
- RelativeInheritedDefaultBehaviorProvider relativBehav =
- (RelativeInheritedDefaultBehaviorProvider) defaultBehav;
- defValueStr = getDefaultBehaviorString(
- relativBehav.getManagedObjectDefinition().
- getPropertyDefinition(relativBehav.getPropertyName()));
- } else if
- (defaultBehav instanceof AbsoluteInheritedDefaultBehaviorProvider) {
- AbsoluteInheritedDefaultBehaviorProvider absoluteBehav =
- (AbsoluteInheritedDefaultBehaviorProvider) defaultBehav;
- defValueStr = getDefaultBehaviorString(
- absoluteBehav.getManagedObjectDefinition().
- getPropertyDefinition(absoluteBehav.getPropertyName()));
- }
- return defValueStr;
- }
-
- private TreeMap<String, AbstractManagedObjectDefinition> makeMOTreeMap(
- Collection<AbstractManagedObjectDefinition> coll) {
-
- if (coll == null) {
- return null;
- }
- TreeMap<String, AbstractManagedObjectDefinition> map =
- new TreeMap<String, AbstractManagedObjectDefinition>();
- for (AbstractManagedObjectDefinition mo : coll) {
- if (mo.hasOption(ManagedObjectOption.HIDDEN))
- {
- continue;
- }
- map.put(mo.getName(), mo);
- }
- return map;
- }
-
- private TreeMap<String, RelationDefinition> makeRelTreeMap(
- Collection<RelationDefinition> coll) {
-
- if (coll == null) {
- return null;
- }
- TreeMap<String, RelationDefinition> map =
- new TreeMap<String, RelationDefinition>();
- for (RelationDefinition rel : coll) {
- map.put(rel.getChildDefinition().getName(), rel);
- }
- return map;
- }
-
- private TreeMap<String, PropertyDefinition> makePropTreeMap(
- Collection<PropertyDefinition> coll) {
-
- if (coll == null) {
- return null;
- }
- TreeMap<String, PropertyDefinition> map =
- new TreeMap<String, PropertyDefinition>();
- for (PropertyDefinition prop : coll) {
- map.put(prop.getName(), prop);
- }
- return map;
- }
-
- private void horizontalLine() {
- htmlBuff.append("<hr style=\"width: 100%; height: 2px;\">");
- }
-
- private void endTable() {
- htmlBuff.append("</tbody>\n");
- htmlBuff.append("</table>\n");
- }
-
- private void bullet(String str) {
- htmlBuff.append(
- "<li>" +
- str +
- "</li>\n");
- }
-
- private void heading2(String string) {
- heading(string, 2);
- }
-
- private void heading3(String string) {
- heading(string, 3);
- }
-
- private void heading4(String string) {
- heading(string, 4);
- }
-
- private void heading(String str, int level) {
- htmlBuff.append(getHeading(str, level));
- }
-
- private String getHeading(String str, int level) {
- String strLevel = (new Integer(level)).toString();
- return "<h" + strLevel + ">" +
- "<a name=\"" + str + "\"></a>" +
- str +
- "</h" + strLevel + ">\n";
- }
-
- private String getHeading2(String str) {
- return getHeading(str, 2);
- }
-
- private String getAnchor(String str) {
- return "<a name=\"" + str + "\"></a>";
- }
-
- private void htmlHeader(String pageTitle) {
- htmlBuff.append(getHtmlHeader(pageTitle) +
- "<body>\n");
-
- }
-
- private final String Now = new Date().toString();
- private String getHtmlHeader(String pageTitle) {
- return ("<html>\n" +
- "<head>\n" +
- "<meta http-equiv=\"content-type\"\n" +
- "content=\"text/html; charset=ISO-8859-1\">\n" +
- "<title>" + pageTitle + "</title>\n" +
- "<link rel=\"stylesheet\" type=\"text/css\"\n" +
- "href=\"" + CSS_FILE + "\">\n" +
- "<link rel=\"shortcut icon\" href=\"" + FAVICON + "\">\n" +
- "<meta name=\"date generated\" content=\"" + Now + "\">\n" +
- "</head>\n");
- }
-
- // Add a Tab Menu, the active tab is the one given as parameter
- private void tabMenu(String activeTab) {
- htmlBuff.append(
- "<div class=\"tabmenu\"> " +
-
- "<span><a " +
- (activeTab.equals(INHERITANCE_TREE_FILE) ? "class=\"activetab\" " : "") +
- "href=\"" + INHERITANCE_TREE_FILE + "\"" +
- " title=\"Inheritance View of Components\">Inheritance</a></span> " +
-
- "<span><a " +
- (activeTab.equals(RELATION_TREE_FILE) ? "class=\"activetab\" " : "") +
- "href=\"" + RELATION_TREE_FILE + "\"" +
- " title=\"Relational View of Components\">Structure</a></span> " +
-
- "<span><a " +
- (activeTab.equals(MO_LIST_FILE) ? "class=\"activetab\" " : "") +
- "href=\"" + MO_LIST_FILE + "\"" +
- " title=\"Alphabetical Index of Components\">Components</a></span> " +
-
- "<span><a " +
- (activeTab.equals(PROPERTIES_INDEX_FILE) ? "class=\"activetab\" " : "") +
- "href=\"" + PROPERTIES_INDEX_FILE + "\"" +
- " title=\"Alphabetical Index of Properties\" >Properties</a></span>" +
-
- "</div>" +
- "\n"
- );
- }
-
- private String getLink(String str, String link) {
- return getLink(str, link, null, null);
- }
-
- private String getLink(String str, String link, String target) {
- return getLink(str, link, target, null);
- }
-
- private String getLink(String str, String link, String target, String color) {
- return "<a " +
- (color != null ? "style=\"color:" + color + "\" " : "") +
- "href=\"" + link + "\"" +
- (target == null ? "" : " target=\"" + target + "\"") +
- ">"
- + str + "</a>";
- }
-
- private void link(String str, String link) {
- link(str, link, null, null);
- }
-
- private void link(String str, String link, String target) {
- link(str, link, target, null);
- }
-
- private void link(String str, String link, String target, String color) {
- String htmlStr = "";
- if (!inList && getIndentPixels() > 0) {
- htmlStr += "<div style=\"margin-left: " + getIndentPixels() + "px;\">";
- } else if (inList) {
- htmlStr += "<li>";
- }
- htmlStr += getLink(str, link, target, color);
- if (!inList && getIndentPixels() > 0) {
- htmlStr += "</div>";
- } else if (inList) {
- htmlStr += "</li>";
- }
- if (!inList) {
- htmlStr += "<br>";
- }
- htmlBuff.append(htmlStr + "\n");
- }
-
- private void newline() {
- htmlBuff.append(
- getNewLine());
- }
-
- private String getNewLine() {
- return "<br>\n";
- }
-
- private void paragraph(Message description) {
- if (description != null) {
- paragraph(description.toString());
- }
- }
-
- private void paragraph(String description) {
- paragraph(description, TextStyle.STANDARD, null);
- }
-
- private void paragraph(String description, TextStyle style) {
- paragraph(description, style, null);
- }
-
- private void paragraph(String description, TextStyle style, String pClass) {
- String indentStr = "";
- String styleStr = "";
- String classStr = "";
- if (getIndentPixels() > 0) {
- indentStr = "style=\"margin-left: " + getIndentPixels() + "px;\"";
- }
- if (style == TextStyle.BOLD) {
- styleStr = "style=\"font-weight: bold;\"";
- } else if (style == TextStyle.ITALIC) {
- styleStr = "style=\"font-style: italic;\"";
- }
- if (pClass != null) {
- classStr = "class=" + pClass;
+ // re-init html buffer
+ htmlBuff = new StringBuffer();
}
- htmlBuff.append(
- "<p " +
- indentStr + " " +
- styleStr + " " +
- classStr +
- ">" +
- description +
- "</p>\n");
- }
-
- private int getIndentPixels() {
- return (ind * 40);
- }
-
- private void startTable() {
- htmlBuff.append(
- "<table " +
- "style=\"width: 100%; text-align: left;\"" +
- "border=\"1\"" +
- "cellpadding=\"1\"" +
- "cellspacing=\"0\"" +
- ">\n");
-
- htmlBuff.append("<tbody>\n");
- }
-
- /*
- * Generate a "friendly" name from a string :
- * '-' and '_' replaced by space
- * first letter of a word in uppercase
- */
- private String getFriendlyName(String str) {
- String retStr = "";
- String[] words = str.split("\\p{Punct}");
- for (int ii = 0; ii < words.length; ii++) {
- if (ii>0) {
- retStr += " ";
- }
- String word = words[ii];
- String firstChar = word.substring(0, 1).toUpperCase();
- retStr += firstChar + word.substring(1, word.length());
- }
- return retStr;
- }
-
- private void tableRow(String... strings) {
- htmlBuff.append(
- "<tr>\n");
- for (int ii = 0; ii < strings.length; ii++) {
- String string = strings[ii];
- htmlBuff.append(
- "<td style=\"" +
- "vertical-align: top; " +
- ((ii == 0) ? "width: 20%;" : "") +
- "\">" +
- string +
- "<br></td>");
- }
- htmlBuff.append(
- "</tr>\n");
- }
-
- /**
- * Text style.
- */
- private enum TextStyle {
-
- STANDARD, BOLD, ITALIC, UNDERLINE, FIXED_WIDTH
- }
-
- private void beginList() {
- inList = true;
- listLevel++;
- htmlBuff.append(
- "<ul>\n");
- }
-
- private void endList() {
- listLevel--;
- if (listLevel == 0) {
- inList = false;
- }
- htmlBuff.append(
- "</ul>\n");
- }
-
- private void htmlFooter() {
- htmlBuff.append(
- "</body>\n" +
- "</html>\n");
- }
-
- private void viewHelp(String helpStr) {
- htmlBuff.append(
- "<p class=\"view-help\" >" +
- helpStr +
- "</p>" +
- "\n"
- );
- }
-
- private void generateFile(String fileName) {
- // Write the html buffer in a file
- try {
- PrintWriter file = new java.io.PrintWriter(
- new java.io.FileWriter(generationDir + File.separator + fileName));
- file.write(htmlBuff.toString());
- file.close();
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- // re-init html buffer
- htmlBuff = new StringBuffer();
- }
-
- // Relation List from RootConfiguration
- private final TreeMap<String, RelationDefinition> topRelList =
- new TreeMap<String, RelationDefinition>();
- private final TreeMap<String, RelationDefinition> relList =
- new TreeMap<String, RelationDefinition>();
- private final TreeMap<String, TreeMap<String, RelationDefinition>>
- catTopRelList = new TreeMap<String, TreeMap<String, RelationDefinition>>();
- // managed object list
- private final TreeMap<String, AbstractManagedObjectDefinition> moList =
- new TreeMap<String, AbstractManagedObjectDefinition>();
- private final TreeMap<String, AbstractManagedObjectDefinition> topMoList =
- new TreeMap<String, AbstractManagedObjectDefinition>();
- private final TreeMap<String,
- TreeMap<String, AbstractManagedObjectDefinition>>
- catTopMoList =
- new TreeMap<String, TreeMap<String, AbstractManagedObjectDefinition>>();
- private final int ind = 0;
- private StringBuffer htmlBuff = new StringBuffer();
- private static String generationDir;
- private static boolean ldapMapping = false;
- private static String OpenDJWiki;
- private static String OpenDJHome;
- private static String aciSyntaxPage;
- private static String durationSyntaxPage;
- private boolean inList = false;
- private int listLevel = 0;
+ // Relation List from RootConfiguration
+ private final TreeMap<String, RelationDefinition> topRelList = new TreeMap<String, RelationDefinition>();
+ private final TreeMap<String, RelationDefinition> relList = new TreeMap<String, RelationDefinition>();
+ private final TreeMap<String, TreeMap<String, RelationDefinition>> catTopRelList = new TreeMap<String, TreeMap<String, RelationDefinition>>();
+ // managed object list
+ private final TreeMap<String, AbstractManagedObjectDefinition> moList = new TreeMap<String, AbstractManagedObjectDefinition>();
+ private final TreeMap<String, AbstractManagedObjectDefinition> topMoList = new TreeMap<String, AbstractManagedObjectDefinition>();
+ private final TreeMap<String, TreeMap<String, AbstractManagedObjectDefinition>> catTopMoList = new TreeMap<String, TreeMap<String, AbstractManagedObjectDefinition>>();
+ private final int ind = 0;
+ private StringBuffer htmlBuff = new StringBuffer();
+ private static String generationDir;
+ private static boolean ldapMapping = false;
+ private static String OpenDJWiki;
+ private static String OpenDJHome;
+ private static String aciSyntaxPage;
+ private static String durationSyntaxPage;
+ private boolean inList = false;
+ private int listLevel = 0;
}
--
Gitblit v1.10.0