This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.jcr.webconsole-1.0.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-webconsole.git
commit b6f62821b0658839199f500cd457b201914965f3 Author: Justin Edelson <[email protected]> AuthorDate: Mon Aug 30 15:58:14 2010 +0000 SLING-1707 - adding a nodetype configuration printer git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/webconsole@990832 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 8 +- .../internal/NamespaceConfigurationPrinter.java | 30 +-- .../internal/NodeTypeConfigurationPrinter.java | 231 +++++++++++++++++++++ .../OSGI-INF/metatype/metatype.properties | 3 + 4 files changed, 257 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index 2a9c8a0..90116c3 100644 --- a/pom.xml +++ b/pom.xml @@ -92,7 +92,7 @@ <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.webconsole</artifactId> - <version>1.2.0</version> + <version>3.0.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> @@ -100,6 +100,12 @@ <version>2.4</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.scr.annotations</artifactId> + <version>1.0.0</version> + <scope>provided</scope> + </dependency> </dependencies> </project> diff --git a/src/main/java/org/apache/sling/jcr/webconsole/internal/NamespaceConfigurationPrinter.java b/src/main/java/org/apache/sling/jcr/webconsole/internal/NamespaceConfigurationPrinter.java index f69a634..d2b957f 100644 --- a/src/main/java/org/apache/sling/jcr/webconsole/internal/NamespaceConfigurationPrinter.java +++ b/src/main/java/org/apache/sling/jcr/webconsole/internal/NamespaceConfigurationPrinter.java @@ -26,32 +26,34 @@ import javax.jcr.NamespaceRegistry; import javax.jcr.RepositoryException; import javax.jcr.Session; +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Properties; +import org.apache.felix.scr.annotations.Property; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferencePolicy; +import org.apache.felix.scr.annotations.Service; import org.apache.felix.webconsole.ConfigurationPrinter; import org.apache.sling.jcr.api.SlingRepository; /** * A Felix WebConsole ConfigurationPrinter which outputs the current JCR * namespace mappings. - * - * @scr.component immediate="true" label="%namespace.printer.name" - * description="%namespace.printer.description" - * metatype="no" - * @scr.property name="service.description" - * value="JCR Namespace Configuration Printer" - * @scr.property name="service.vendor" value="The Apache Software Foundation" - * @scr.service interface="org.apache.felix.webconsole.ConfigurationPrinter" - * */ +@Component(label = "%namespace.printer.name", description = "%namespace.printer.description", metatype = false) +@Service(ConfigurationPrinter.class) +@Properties({ + @Property(name = "service.description", value = "JCR Namespace Configuration Printer"), + @Property(name = "service.vendor", value = "The Apache Software Foundation") +}) public class NamespaceConfigurationPrinter implements ConfigurationPrinter { - /** - * @scr.reference policy="dynamic" - */ + + @Reference(policy=ReferencePolicy.DYNAMIC) private SlingRepository slingRepository; /** * Get the title of the configuration status page. - * + * * @return the title */ public String getTitle() { @@ -60,7 +62,7 @@ public class NamespaceConfigurationPrinter implements ConfigurationPrinter { /** * Output a list of namespace prefixes and URIs from the NamespaceRegistry. - * + * * @param pw a PrintWriter */ public void printConfiguration(PrintWriter pw) { diff --git a/src/main/java/org/apache/sling/jcr/webconsole/internal/NodeTypeConfigurationPrinter.java b/src/main/java/org/apache/sling/jcr/webconsole/internal/NodeTypeConfigurationPrinter.java new file mode 100644 index 0000000..7172f49 --- /dev/null +++ b/src/main/java/org/apache/sling/jcr/webconsole/internal/NodeTypeConfigurationPrinter.java @@ -0,0 +1,231 @@ +package org.apache.sling.jcr.webconsole.internal; + +import java.io.PrintWriter; + +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.Value; +import javax.jcr.nodetype.NodeDefinition; +import javax.jcr.nodetype.NodeType; +import javax.jcr.nodetype.NodeTypeIterator; +import javax.jcr.nodetype.NodeTypeManager; +import javax.jcr.nodetype.PropertyDefinition; +import javax.jcr.version.OnParentVersionAction; + +import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Properties; +import org.apache.felix.scr.annotations.Property; +import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferencePolicy; +import org.apache.felix.scr.annotations.Service; +import org.apache.felix.webconsole.ConfigurationPrinter; +import org.apache.felix.webconsole.ModeAwareConfigurationPrinter; +import org.apache.sling.jcr.api.SlingRepository; + +/** + * @author justin + * + */ +/** + * A Felix WebConsole ConfigurationPrinter which outputs the current JCR + * nodetypes. + */ +@Component(label = "%nodetype.printer.name", description = "%nodetype.printer.description", metatype = false) +@Service(ConfigurationPrinter.class) +@Properties({ @Property(name = "service.description", value = "JCR Nodetype Configuration Printer"), + @Property(name = "service.vendor", value = "The Apache Software Foundation") }) +public class NodeTypeConfigurationPrinter implements ModeAwareConfigurationPrinter { + + @Reference(policy = ReferencePolicy.DYNAMIC) + private SlingRepository slingRepository; + + /** + * Get the title of the configuration status page. + * + * @return the title + */ + public String getTitle() { + return "JCR NodeTypes"; + } + + /** + * {@inheritDoc} + */ + public void printConfiguration(PrintWriter pw, String mode) { + if (slingRepository != null) { + try { + Session session = slingRepository.loginAdministrative(null); + NodeTypeManager ntm = session.getWorkspace().getNodeTypeManager(); + NodeTypeIterator it = ntm.getAllNodeTypes(); + while (it.hasNext()) { + NodeType nt = it.nextNodeType(); + + pw.printf("[%s]", nt.getName()); + + printSuperTypes(pw, nt); + + if (nt.hasOrderableChildNodes()) { + pw.print(" orderable"); + } + if (nt.isMixin()) { + pw.print(" mixin"); + } + pw.println(); + + for (PropertyDefinition prop : nt.getPropertyDefinitions()) { + if (prop.getDeclaringNodeType() == nt) { + startBold(pw, mode); + } + + pw.printf("- %s", prop.getName()); + printDefaultValues(pw, prop); + if (prop.getName().equals(nt.getPrimaryItemName())) { + pw.print(" primary"); + } + if (prop.isMandatory()) { + pw.print(" mandatory"); + } + if (prop.isAutoCreated()) { + pw.print(" autocreated"); + } + if (prop.isProtected()) { + pw.print(" protected"); + } + if (prop.isMultiple()) { + pw.print(" multiple"); + } + pw.printf(" %s", OnParentVersionAction.nameFromValue(prop.getOnParentVersion())); + printConstraints(pw, prop); + + if (prop.getDeclaringNodeType() == nt) { + stopBold(pw, mode); + } + + pw.println(); + } + for (NodeDefinition child : nt.getChildNodeDefinitions()) { + if (child.getDeclaringNodeType() == nt) { + startBold(pw, mode); + } + + pw.printf("+ %s", child.getName()); + + printRequiredChildTypes(pw, child); + + if (child.getDefaultPrimaryType() != null) { + pw.printf(" = %s", child.getDefaultPrimaryType().getName()); + } + + if (child.isMandatory()) { + pw.print(" mandatory"); + } + if (child.isAutoCreated()) { + pw.print(" autocreated"); + } + if (child.isProtected()) { + pw.print(" protected"); + } + if (child.allowsSameNameSiblings()) { + pw.print(" multiple"); + } + pw.printf(" %s", OnParentVersionAction.nameFromValue(child.getOnParentVersion())); + + if (child.getDeclaringNodeType() == nt) { + stopBold(pw, mode); + } + + pw.println(); + } + + pw.println(); + + } + } catch (RepositoryException e) { + pw.println("Unable to output namespace mappings."); + e.printStackTrace(pw); + } + } else { + pw.println("SlingRepsoitory is not available."); + } + } + + /** + * Output a list of node types from the NamespaceRegistry. + * + * @param pw a PrintWriter + */ + public void printConfiguration(PrintWriter pw) { + printConfiguration(pw, ConfigurationPrinter.MODE_TXT); + + } + + private void stopBold(PrintWriter pw, String mode) { + if (ConfigurationPrinter.MODE_WEB.equals(mode)) { + pw.print("</b>"); + } + } + + private void startBold(PrintWriter pw, String mode) { + if (ConfigurationPrinter.MODE_WEB.equals(mode)) { + pw.print("<b>"); + } + } + + private void printRequiredChildTypes(PrintWriter pw, NodeDefinition child) { + if (child.getRequiredPrimaryTypes() != null && child.getRequiredPrimaryTypes().length > 0) { + pw.print(" ("); + + boolean first = true; + for (NodeType required : child.getRequiredPrimaryTypes()) { + if (!first) { + pw.print(", "); + } + pw.print(required.getName()); + first = false; + } + pw.print(")"); + } + + } + + private void printDefaultValues(PrintWriter pw, PropertyDefinition prop) throws RepositoryException { + if (prop.getDefaultValues() != null && prop.getDefaultValues().length > 0) { + pw.print(" = "); + + boolean first = true; + for (Value v : prop.getDefaultValues()) { + if (!first) { + pw.print(", "); + } + pw.print(v.getString()); + first = false; + } + } + } + + private void printConstraints(PrintWriter pw, PropertyDefinition prop) throws RepositoryException { + if (prop.getValueConstraints() != null && prop.getValueConstraints().length > 0) { + pw.print(" < "); + boolean first = true; + for (String s : prop.getValueConstraints()) { + if (!first) { + pw.print(", "); + } + pw.print(s); + first = false; + } + } + } + + private void printSuperTypes(PrintWriter pw, NodeType nt) { + pw.print(" > "); + boolean first = true; + for (NodeType st : nt.getSupertypes()) { + if (!first) { + pw.print(", "); + } + pw.print(st.getName()); + first = false; + } + } +} \ No newline at end of file diff --git a/src/main/resources/OSGI-INF/metatype/metatype.properties b/src/main/resources/OSGI-INF/metatype/metatype.properties index 12be97a..ea277ab 100644 --- a/src/main/resources/OSGI-INF/metatype/metatype.properties +++ b/src/main/resources/OSGI-INF/metatype/metatype.properties @@ -26,3 +26,6 @@ namespace.printer.name = Namespace Mapping Configuration Printer namespace.printer.description = Namespace Mapping Configuration Printer +nodetype.printer.name = NodeType Configuration Printer +nodetype.printer.description = NodeType Configuration Printer + -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
