modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataParser.java | 2 modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDescriptorProcessor.java | 204 +++++++--- modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDocGenerator.java | 62 ++- modules/core/plugindoc/src/main/resources/common-macros.vm | 2 modules/core/plugindoc/src/main/resources/plugin-doc-docbook.vm | 12 modules/core/plugindoc/src/main/resources/resource-type-doc-docbook.vm | 33 - 6 files changed, 221 insertions(+), 94 deletions(-)
New commits: commit 51de5682bac6dcd7cc0b83a806cc1bc01e3cb2bf Author: Ian Springer ian.springer@redhat.com Date: Fri May 25 22:43:28 2012 -0400
minor: fix typo in comment
diff --git a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataParser.java b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataParser.java index 4233202..88dd865 100644 --- a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataParser.java +++ b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/agent/metadata/PluginMetadataParser.java @@ -255,7 +255,7 @@ public class PluginMetadataParser { parseServerDescriptor(childServerDescriptor, serverResourceType); }
- // Look for child server types + // Look for child service types for (ServiceDescriptor childServiceDescriptor : serverDescriptor.getServices()) { parseServiceDescriptor(childServiceDescriptor, serverResourceType, null); }
commit b1d14a0faab37b7469c121240bf7bd6b5235923a Author: Ian Springer ian.springer@redhat.com Date: Fri May 25 22:43:02 2012 -0400
various fixes and improvements to generation of DocBook plugin docs
diff --git a/modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDescriptorProcessor.java b/modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDescriptorProcessor.java index 1b5a40c..d5ef123 100644 --- a/modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDescriptorProcessor.java +++ b/modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDescriptorProcessor.java @@ -1,6 +1,6 @@ /* * RHQ Management Platform - * Copyright (C) 2005-2008 Red Hat, Inc. + * Copyright (C) 2005-2012 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify @@ -18,6 +18,8 @@ */ package org.rhq.core.tool.plugindoc;
+import java.util.Collection; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -54,6 +56,7 @@ import org.rhq.core.domain.resource.CreateDeletePolicy; import org.rhq.core.domain.resource.ProcessScan; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.ResourceCreationDataType; +import org.rhq.core.domain.resource.ResourceSubCategory; import org.rhq.core.domain.resource.ResourceType;
/** @@ -86,7 +89,7 @@ public class PluginDescriptorProcessor { }
for (ServiceDescriptor serviceDescriptor : pluginDescriptor.getServices()) { - ResourceType serviceType = parseServiceDescriptor(serviceDescriptor, null); + ResourceType serviceType = parseServiceDescriptor(serviceDescriptor, null, null); if (isRootType(serviceType)) { resourceTypes.add(serviceType); } @@ -97,8 +100,8 @@ public class PluginDescriptorProcessor {
private static boolean isRootType(ResourceType type) { boolean result; - if ((type.getParentResourceTypes() == null) || (type.getParentResourceTypes().size() <= 1)) { - result = true; + if ((type.getParentResourceTypes() == null) || (type.getParentResourceTypes().isEmpty())) { + result = (type.getCategory() != ResourceCategory.SERVICE); } else { result = false; for (ResourceType parentType : type.getParentResourceTypes()) { @@ -159,7 +162,7 @@ public class PluginDescriptorProcessor { sourcePlugin = (sourcePlugin == null) ? "" : sourcePlugin.trim(); sourceServer = (sourceServer == null) ? "" : sourceServer.trim();
- if ((sourcePlugin.length() == 0) && (sourceServer.length() == 0)) { + if (sourcePlugin.isEmpty() && sourceServer.isEmpty()) { // not using Embedded extension model serverResourceType = new ResourceType(serverDescriptor.getName(), pluginDescriptor.getName(), ResourceCategory.SERVER, parentType); @@ -175,24 +178,45 @@ public class PluginDescriptorProcessor { parseResourceDescriptor(serverDescriptor, serverResourceType, null, null, null); } else if ((sourcePlugin.length() > 0) && (sourceServer.length() > 0)) { // using Embedded extension model - the defined type is actually a copy of another plugin's server type - // TODO + log.debug("Parsing embedded server type {" + pluginDescriptor.getName() + "}" + + serverDescriptor.getName() + ", which extends server type {" + sourcePlugin + "}" + sourceServer + "..."); + + Map<String, ServerDescriptor> pluginServerDescriptors = getPluginServerDescriptors(sourcePlugin); + ServerDescriptor sourceServerDescriptor = pluginServerDescriptors.get(sourceServer); + + if (sourceServerDescriptor == null) { + log.warn("There is no server type named [" + sourceServer + "] from a plugin named [" + sourcePlugin + + "]. This is probably because that plugin is missing. Resource Type [{" + + pluginDescriptor.getName() + "}" + serverDescriptor.getName() + "] will be ignored."); + return null; + }
serverResourceType = new ResourceType(serverDescriptor.getName(), pluginDescriptor.getName(), ResourceCategory.SERVER, parentType);
- // let the plugin writer override these, if not, pick up the source type's values + // Let the plugin writer override these, or if not, parseResourceDescriptor() will pick up the source type's + // values. serverResourceType.setDescription(serverDescriptor.getDescription()); - serverResourceType.setSubCategory(SubCategoriesMetadataParser.findSubCategoryOnResourceTypeAncestor( - serverResourceType, serverDescriptor.getSubCategory())); + setSubCategory(serverDescriptor, serverResourceType); + serverResourceType.setCreationDataType(convertCreationDataType(serverDescriptor.getCreationDataType())); serverResourceType .setCreateDeletePolicy(convertCreateDeletePolicy(serverDescriptor.getCreateDeletePolicy())); serverResourceType.setSingleton(serverDescriptor.isSingleton());
- String discoveryClass = getFullyQualifiedComponentClassName(pluginDescriptor.getPackage(), serverDescriptor - .getDiscovery()); - String componentClass = getFullyQualifiedComponentClassName(pluginDescriptor.getPackage(), serverDescriptor - .getClazz()); + parseResourceDescriptor(sourceServerDescriptor, serverResourceType, null, null, sourcePlugin); + // The above incorporates children from the source descriptor. The following incorporates + // children from this descriptor + + // Look for child server types + for (ServerDescriptor childServerDescriptor : serverDescriptor.getServers()) { + parseServerDescriptor(childServerDescriptor, serverResourceType); + } + + // Look for child service types + for (ServiceDescriptor childServiceDescriptor : serverDescriptor.getServices()) { + parseServiceDescriptor(childServiceDescriptor, serverResourceType, null); + } } else { // this should never happen - the XML parser should have failed to even get this far throw new InvalidPluginDescriptorException("Both sourcePlugin and sourceType must be defined: " @@ -213,16 +237,21 @@ public class PluginDescriptorProcessor { return serverResourceType; }
- private ResourceType parseServiceDescriptor(ServiceDescriptor serviceDescriptor, ResourceType parentType) + private ResourceType parseServiceDescriptor(ServiceDescriptor serviceDescriptor, ResourceType parentType, + String parentSourcePlugin) throws InvalidPluginDescriptorException { ResourceType serviceResourceType; String sourcePlugin = serviceDescriptor.getSourcePlugin(); - String sourceService = serviceDescriptor.getSourceType(); + // Fallback to using the source plugin of your parent if you don't override. + if (sourcePlugin == null) { + sourcePlugin = parentSourcePlugin; + } + String sourceType = serviceDescriptor.getSourceType();
sourcePlugin = (sourcePlugin == null) ? "" : sourcePlugin.trim(); - sourceService = (sourceService == null) ? "" : sourceService.trim(); + sourceType = (sourceType == null) ? "" : sourceType.trim();
- if ((sourcePlugin.length() == 0) && (sourceService.length() == 0)) { + if (sourcePlugin.isEmpty() && sourceType.isEmpty()) { // not using Embedded extension model serviceResourceType = new ResourceType(serviceDescriptor.getName(), pluginDescriptor.getName(), ResourceCategory.SERVICE, parentType); @@ -242,29 +271,43 @@ public class PluginDescriptorProcessor { + "The <process-scan> elements will be ignored in resource type: " + serviceResourceType); } } else if (sourcePlugin.length() > 0) { - // using Embedded extension model - the defined type is actually a copy of another plugin's service type - // TODO + // Using Embedded extension model - the defined type is actually a copy of another plugin's service or server type. + log.debug("Parsing embedded service type {" + pluginDescriptor.getName() + "}" + + serviceDescriptor.getName() + ", which extends type {" + sourcePlugin + "}" + sourceType + "..."); + + ResourceDescriptor sourceTypeDescriptor; + if (sourceType.isEmpty()) { + sourceTypeDescriptor = serviceDescriptor; + } else { + Map<String, ServiceDescriptor> pluginServiceDescriptors = getPluginServiceDescriptors(sourcePlugin); + sourceTypeDescriptor = pluginServiceDescriptors.get(sourceType); + if (sourceTypeDescriptor == null) { + Map<String, ServerDescriptor> pluginServerDescriptors = getPluginServerDescriptors(sourcePlugin); + sourceTypeDescriptor = pluginServerDescriptors.get(sourceType); + } + }
- ServiceDescriptor sourceServiceDescriptor; - if (sourceService.length() == 0) { - sourceServiceDescriptor = serviceDescriptor; + if (sourceTypeDescriptor == null) { + log.warn("There is no service or server type named [" + sourceType + "] from a plugin named [" + + sourcePlugin + "]. This is probably because that plugin is missing. Resource Type [{" + + pluginDescriptor.getName() + "}" + serviceDescriptor.getName() + "] will be ignored."); + return null; }
serviceResourceType = new ResourceType(serviceDescriptor.getName(), pluginDescriptor.getName(), ResourceCategory.SERVICE, parentType);
- // let the plugin writer override these, if not, pick up the source type's values + // Let the plugin writer override these, or if not, parseResourceDescriptor() will pick up the source type's + // values. serviceResourceType.setDescription(serviceDescriptor.getDescription()); - serviceResourceType.setSubCategory(SubCategoriesMetadataParser.findSubCategoryOnResourceTypeAncestor( - serviceResourceType, serviceDescriptor.getSubCategory())); + setSubCategory(serviceDescriptor, serviceResourceType); + serviceResourceType.setCreationDataType(convertCreationDataType(serviceDescriptor.getCreationDataType())); serviceResourceType.setCreateDeletePolicy(convertCreateDeletePolicy(serviceDescriptor .getCreateDeletePolicy())); serviceResourceType.setSingleton(serviceDescriptor.isSingleton());
- String pluginPackage = ""; // TODO - String discoveryClass = getFullyQualifiedComponentClassName(pluginPackage, serviceDescriptor.getDiscovery()); - String componentClass = getFullyQualifiedComponentClassName(pluginPackage, serviceDescriptor.getClazz()); + parseResourceDescriptor(sourceTypeDescriptor, serviceResourceType, null, null, sourcePlugin); } else { // this should never happen - the XML parser should have failed to even get this far throw new InvalidPluginDescriptorException("Both sourcePlugin and sourceType must be defined: " @@ -281,6 +324,20 @@ public class PluginDescriptorProcessor { return serviceResourceType; }
+ private static void setSubCategory(ResourceDescriptor resourceDescriptor, ResourceType resourceType) + throws InvalidPluginDescriptorException { + String subCatName = resourceDescriptor.getSubCategory(); + if (subCatName != null) { + ResourceSubCategory subCat = SubCategoriesMetadataParser.findSubCategoryOnResourceTypeAncestor( + resourceType, subCatName); + if (subCat == null) + throw new InvalidPluginDescriptorException("Resource type [" + resourceType.getName() + + "] specified a subcategory (" + subCatName + + ") that is not defined as a child subcategory of one of its ancestor resource types."); + resourceType.setSubCategory(subCat); + } + } + private void addRunsInsideParentTypes(ResourceDescriptor resourceDescriptor, ResourceType resourceType) { RunsInsideType runsInside = resourceDescriptor.getRunsInside(); if (runsInside != null) { @@ -401,7 +458,7 @@ public class PluginDescriptorProcessor { }
for (ServiceDescriptor serviceDescriptor : ((PlatformDescriptor) resourceDescriptor).getServices()) { - parseServiceDescriptor(serviceDescriptor, resourceType); + parseServiceDescriptor(serviceDescriptor, resourceType, sourcePlugin); } }
@@ -411,13 +468,13 @@ public class PluginDescriptorProcessor { }
for (ServiceDescriptor serviceDescriptor : ((ServerDescriptor) resourceDescriptor).getServices()) { - parseServiceDescriptor(serviceDescriptor, resourceType); + parseServiceDescriptor(serviceDescriptor, resourceType, sourcePlugin); } }
if (resourceDescriptor instanceof ServiceDescriptor) { for (ServiceDescriptor serviceDescriptor : ((ServiceDescriptor) resourceDescriptor).getServices()) { - parseServiceDescriptor(serviceDescriptor, resourceType); + parseServiceDescriptor(serviceDescriptor, resourceType, sourcePlugin); } } } @@ -434,6 +491,53 @@ public class PluginDescriptorProcessor { return packageName + '.' + baseClassName; }
+ private Map<String, ServerDescriptor> getPluginServerDescriptors(String pluginName) { + Map<String, ServerDescriptor> pluginServerDescriptors = new HashMap<String, ServerDescriptor>(); + + // In plugindoc, we only support embedding types from this plugin. + if (pluginName.equals(this.pluginDescriptor.getName())) { + for (ServerDescriptor server : pluginDescriptor.getServers()) { + pluginServerDescriptors.put(server.getName(), server); + } + } + + return pluginServerDescriptors; + } + + private Map<String, ServiceDescriptor> getPluginServiceDescriptors(String pluginName) { + Map<String, ServiceDescriptor> pluginServiceDescriptors = new HashMap<String, ServiceDescriptor>(); + + // In plugindoc, we only support embedding types from this plugin. + if (pluginName.equals(this.pluginDescriptor.getName())) { + addPluginServiceDescriptors(pluginDescriptor.getServices(), pluginServiceDescriptors); + addPluginServiceDescriptors(pluginDescriptor.getServers(), pluginServiceDescriptors); + } + + return pluginServiceDescriptors; + } + + private void addPluginServiceDescriptors(Collection<? extends ResourceDescriptor> parents, + Map<String, ServiceDescriptor> descriptors) { + if (parents != null) { + for (ResourceDescriptor parent : parents) { + List<ServiceDescriptor> services; + if (parent instanceof ServerDescriptor) { + services = ((ServerDescriptor) parent).getServices(); + } else if (parent instanceof ServiceDescriptor) { + services = ((ServiceDescriptor) parent).getServices(); + } else { + throw new IllegalStateException("Unsupported parent descriptor type: " + + parent.getClass().getName()); + } + + for (ServiceDescriptor service : services) { + descriptors.put(service.getName(), service); + addPluginServiceDescriptors(service.getServices(), descriptors); // recurse down the hierarchy + } + } + } + } + /** * Converts the creation data descriptor (JAXB) object into the domain enumeration. * @@ -444,13 +548,13 @@ public class PluginDescriptorProcessor { */ private ResourceCreationDataType convertCreationDataType(ResourceCreationData creationType) { switch (creationType) { - case CONTENT: { - return ResourceCreationDataType.CONTENT; - } + case CONTENT: { + return ResourceCreationDataType.CONTENT; + }
- case CONFIGURATION: { - return ResourceCreationDataType.CONFIGURATION; - } + case CONFIGURATION: { + return ResourceCreationDataType.CONFIGURATION; + } }
return null; @@ -466,24 +570,24 @@ public class PluginDescriptorProcessor { */ private CreateDeletePolicy convertCreateDeletePolicy(ResourceCreateDeletePolicy policy) { switch (policy) { - case BOTH: { - return CreateDeletePolicy.BOTH; - } + case BOTH: { + return CreateDeletePolicy.BOTH; + }
- case CREATE_ONLY: { - return CreateDeletePolicy.CREATE_ONLY; - } + case CREATE_ONLY: { + return CreateDeletePolicy.CREATE_ONLY; + }
- case DELETE_ONLY: { - return CreateDeletePolicy.DELETE_ONLY; - } + case DELETE_ONLY: { + return CreateDeletePolicy.DELETE_ONLY; + }
- case NEITHER: { - return CreateDeletePolicy.NEITHER; - } + case NEITHER: { + return CreateDeletePolicy.NEITHER; + } }
return null; }
-} \ No newline at end of file +} diff --git a/modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDocGenerator.java b/modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDocGenerator.java index 5a9d91b..605b644 100644 --- a/modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDocGenerator.java +++ b/modules/core/plugindoc/src/main/java/org/rhq/core/tool/plugindoc/PluginDocGenerator.java @@ -27,6 +27,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Properties; @@ -110,6 +111,7 @@ public class PluginDocGenerator { + ioe.getMessage()); }
+ loadProperties(props); }
public void loadProperties(Properties props) { @@ -336,7 +338,7 @@ public class PluginDocGenerator {
Plugin plugin = descriptorProcessor.getPlugin(); generateDocbookPluginPage(resourceTypes, docbookOutputDir, plugin); - generateDocbookResourceTypePages(null, resourceTypes, docbookOutputDir, plugin); + generateDocbookResourceTypePages(new ArrayList<ResourceType>(), resourceTypes, docbookOutputDir, plugin); }
private File generateDocbookPluginPage(Set<ResourceType> resourceTypes, File docBookOutputDir, Plugin plugin) { @@ -352,15 +354,23 @@ public class PluginDocGenerator {
docbookPluginTemplateProcessor.getContext().put("rhqVersion", RHQ_VERSION); docbookPluginTemplateProcessor.getContext().put("plugin", plugin); - docbookPluginTemplateProcessor.getContext().put("resourceTypes", resourceTypes); - String docbookOutputFileName = escapeFileName(getPageTitle(plugin) + ".xml"); + String pluginId = getPluginId(plugin); + docbookPluginTemplateProcessor.getContext().put("pluginId", pluginId); + List<String> typeIds = new ArrayList<String>(resourceTypes.size()); + for (ResourceType type : resourceTypes) { + String typeId = getTypeId(type, new ArrayList<ResourceType>()); + typeIds.add(typeId); + } + docbookPluginTemplateProcessor.getContext().put("typeIds", typeIds); + + String docbookOutputFileName = escapeFileName(pluginId + ".xml"); File docbookPluginOutputFile = new File(docBookOutputDir, docbookOutputFileName); docbookPluginTemplateProcessor.processTemplate(docbookPluginOutputFile);
return docbookPluginOutputFile; }
- private void generateDocbookResourceTypePages(ResourceType parentType, Set<ResourceType> resourceTypes, + private void generateDocbookResourceTypePages(List<ResourceType> ancestorTypes, Set<ResourceType> resourceTypes, File docbookOutputDir, Plugin plugin) { VelocityTemplateProcessor docbookTemplateProcessor = new VelocityTemplateProcessor( DOCBOOK_RESOURCE_TYPE_TEMPLATE_RESOURCE_PATH, DOCBOOK_MACRO_LIBRARY_RESOURCE_PATH, @@ -375,12 +385,22 @@ public class PluginDocGenerator { System.out.println("Generating DocBook content for " + resourceType + " Resource type...");
docbookTemplateProcessor.getContext().put("resourceType", resourceType); - String docbookOutputFileName = escapeFileName(getPageTitle(resourceType, parentType) + ".xml"); + String typeId = getTypeId(resourceType, ancestorTypes); + docbookTemplateProcessor.getContext().put("typeId", typeId); + List<String> childTypeIds = new ArrayList<String>(resourceType.getChildResourceTypes().size()); + for (ResourceType childType : resourceType.getChildResourceTypes()) { + String childTypeId = typeId + ":" + escapeXmlId(childType.getName()); + childTypeIds.add(childTypeId); + } + docbookTemplateProcessor.getContext().put("childTypeIds", childTypeIds); + String docbookOutputFileName = escapeFileName(typeId) + ".xml"; File docbookOutputFile = new File(docbookOutputDir, docbookOutputFileName); docbookTemplateProcessor.processTemplate(docbookOutputFile);
// Recurse on child types. - generateDocbookResourceTypePages(resourceType, resourceType.getChildResourceTypes(), docbookOutputDir, + List<ResourceType> childAncestorTypes = new ArrayList<ResourceType>(ancestorTypes); + childAncestorTypes.add(resourceType); + generateDocbookResourceTypePages(childAncestorTypes, resourceType.getChildResourceTypes(), docbookOutputDir, plugin); } } @@ -540,6 +560,10 @@ public class PluginDocGenerator { return escapePageTitle(title); }
+ private static String getPluginId(Plugin plugin) { + return escapeXmlId(plugin.getName()); + } + private static String getPageTitle(ResourceType resourceType, ResourceType parentType) { StringBuilder buffer = new StringBuilder();
@@ -572,6 +596,21 @@ public class PluginDocGenerator { return escapePageTitle(buffer.toString()); }
+ private static String getTypeId(ResourceType resourceType, List<ResourceType> ancestorTypes) { + StringBuilder buffer = new StringBuilder(); + + String pluginName = resourceType.getPlugin(); + buffer.append(pluginName).append(':'); + + for (ResourceType ancestorType : ancestorTypes) { + buffer.append(ancestorType.getName()).append(':'); + } + + buffer.append(resourceType.getName()); + + return escapeXmlId(buffer.toString()); + } + private static String getContentAsString(File contentFile) throws IOException { StringBuilder content = new StringBuilder(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(contentFile))); @@ -587,17 +626,18 @@ public class PluginDocGenerator { }
private static String escapeFileName(String fileName) { - // DocBook doesn't like parentheses or dashes in filenames. - fileName = fileName.replaceAll("\(", "").replaceAll("\)", "").replace('-', ':'); - - // Remove other characters that are generally undesirable in filenames. - return fileName.replace('/', '_').replace('\', '_').replace(' ', '_'); + // Remove characters that are generally undesirable in filenames. + return fileName.replace(' ', '_').replaceAll("[\\/\(\)\[\]\?\*]", "-"); }
private static String escapePageTitle(String fileName) { return fileName.replace('/', '-'); }
+ private static String escapeXmlId(String id) { + return id.replace(' ', '_').replaceAll("[^-\._:A-Za-z0-9]", "-"); + } + public static void main(String[] args) throws PluginDocGeneratorException { if (args.length < 1 || args.length > 2) { System.out.println("Usage: " + PluginDocGenerator.class.getSimpleName() diff --git a/modules/core/plugindoc/src/main/resources/common-macros.vm b/modules/core/plugindoc/src/main/resources/common-macros.vm index e36ed7b..9699bcf 100644 --- a/modules/core/plugindoc/src/main/resources/common-macros.vm +++ b/modules/core/plugindoc/src/main/resources/common-macros.vm @@ -1,2 +1,2 @@ #macro( displayResourceTypeName $resourceType ) -${resourceType.plugin} - #if ( ${resourceType.name.startsWith("${resourceType.plugin}")} ) ${resourceType.name.substring(${resourceType.plugin.length()})}#else ${resourceType.name}#end#if ( !${resourceType.name.endsWith(" ${resourceType.category}")} ) ${resourceType.category}#end#end +${resourceType.plugin} -#if ( ${resourceType.name.startsWith("${resourceType.plugin}")} ) ${resourceType.name.substring(${resourceType.plugin.length()})}#else ${resourceType.name}#end#if ( !${resourceType.name.endsWith(" ${resourceType.category}")} ) ${resourceType.category}#end#end diff --git a/modules/core/plugindoc/src/main/resources/plugin-doc-docbook.vm b/modules/core/plugindoc/src/main/resources/plugin-doc-docbook.vm index 7dc86dd..33cf68e 100644 --- a/modules/core/plugindoc/src/main/resources/plugin-doc-docbook.vm +++ b/modules/core/plugindoc/src/main/resources/plugin-doc-docbook.vm @@ -2,7 +2,7 @@ <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ ]>
-<section id="${plugin.displayName} Plugin"> +<section id="${pluginId}"> <title>${plugin.displayName} Plugin</title>
<table> @@ -31,9 +31,13 @@ <para>${plugin.help}</para> #end
-#if ( !${resourceTypes.empty} ) - <bridgehead>Resource Types</bridgehead> - <para>{children:all=true|style=h3}</para> + <bridgehead>Top-Level Resource Types</bridgehead> +#if ( !${typeIds.empty} ) + <itemizedlist> +#foreach( ${typeId} in ${typeIds} ) + <listitem><simpara><xref linkend="${typeId}"/></simpara></listitem> +#end + </itemizedlist> #else <para>This plugin does not define any Resource types. It it probably an "abstract plugin", that is, one that provides Resource components and/or discovery components that can be used by other plugins.</para> diff --git a/modules/core/plugindoc/src/main/resources/resource-type-doc-docbook.vm b/modules/core/plugindoc/src/main/resources/resource-type-doc-docbook.vm index 576bead..284a0c9 100644 --- a/modules/core/plugindoc/src/main/resources/resource-type-doc-docbook.vm +++ b/modules/core/plugindoc/src/main/resources/resource-type-doc-docbook.vm @@ -2,7 +2,7 @@ <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ ]>
-<section id="#displayResourceTypeLink( ${resourceType} )"> +<section id="${typeId}"> <title>#displayResourceTypeName( ${resourceType} )</title>
<bridgehead>Overview</bridgehead> @@ -32,34 +32,13 @@ #end
- <bridgehead>Parent Resource Types</bridgehead> -#if ( !${resourceType.parentResourceTypes.isEmpty()} ) - <itemizedlist> -#foreach ( ${parentResourceType} in ${resourceType.parentResourceTypes} ) - <listitem><simpara><xref linkend="#displayResourceTypeLink( ${parentResourceType} )"/></simpara></listitem> -#end - </itemizedlist> -#elseif ( ${resourceType.category.name} != "PLATFORM" ) - <itemizedlist> - <listitem><simpara><xref linkend="Managed_Platforms"/></simpara></listitem> - </itemizedlist> -#else - <para>none</para> -#end - - <bridgehead>Child Resource Types</bridgehead> -#if ( !${resourceType.childResourceTypes.isEmpty()} ) +#if ( !${childTypeIds.isEmpty()} ) <itemizedlist> -#foreach( ${childResourceType} in ${resourceType.childResourceTypes} ) - <listitem><simpara><xref linkend="#displayResourceTypeLink( ${childResourceType} )"/></simpara></listitem> +#foreach( ${childTypeId} in ${childTypeIds} ) + <listitem><simpara><xref linkend="${childTypeId}"/></simpara></listitem> #end </itemizedlist> -#elseif ( ${resourceType.category.name} == "PLATFORM" ) - <itemizedlist> - <listitem><simpara><xref linkend="Managed_Servers"/></simpara></listitem> - <listitem><simpara><xref linkend="Managed_Platform_Services"/></simpara></listitem> - </itemizedlist> #else <para>none</para> #end @@ -188,8 +167,8 @@ #end
-#foreach( ${childResourceType} in ${resourceType.childResourceTypes} ) - <xi:include href="#displayResourceTypeLink( ${childResourceType} ).xml" xmlns:xi="http://www.w3.org/2001/XInclude%22/%3E +#foreach( ${childTypeId} in ${childTypeIds} ) + <xi:include href="${childTypeId}.xml" xmlns:xi="http://www.w3.org/2001/XInclude%22/%3E #end
</section>