donaldp 2002/11/11 17:22:45 Added: info/src/java/org/apache/avalon/framework/tools/infobuilder XMLInfoWriter.java Log: Add in the first cut of an xml writer Revision Changes Path 1.1 jakarta-avalon-excalibur/info/src/java/org/apache/avalon/framework/tools/infobuilder/XMLInfoWriter.java Index: XMLInfoWriter.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE.txt file. */ package org.apache.avalon.framework.tools.infobuilder; import java.io.OutputStream; import java.io.IOException; import java.io.Writer; import java.io.OutputStreamWriter; import org.apache.avalon.framework.info.ComponentInfo; import org.apache.avalon.framework.info.ServiceInfo; import org.apache.avalon.framework.info.ComponentDescriptor; import org.apache.avalon.framework.info.Attribute; import org.apache.avalon.framework.info.LoggerDescriptor; import org.apache.avalon.framework.info.ContextDescriptor; import org.apache.avalon.framework.info.EntryDescriptor; import org.apache.avalon.framework.info.ServiceDescriptor; import org.apache.avalon.framework.info.DependencyDescriptor; /** * Write [EMAIL PROTECTED] ComponentInfo} and [EMAIL PROTECTED] ServiceInfo} objects * to a stream as xml documents. * * @author <a href="mailto:peter at apache.org">Peter Donald</a> * @version $Revision: 1.1 $ $Date: 2002/11/12 01:22:45 $ */ public class XMLInfoWriter implements InfoWriter { private static final String CONTEXT_CLASS = "org.apache.avalon.framework.context.Context"; public void writeServiceInfo( final ServiceInfo info, final OutputStream outputStream ) throws Exception { throw new UnsupportedOperationException(); } public void writeComponentInfo( final ComponentInfo info, final OutputStream outputStream ) throws Exception { final Writer writer = new OutputStreamWriter( outputStream ); writeHeader( writer ); writeDoctype( writer, "component-info" ); writer.write( "<component-info>" ); writeComponent( writer, info.getComponentDescriptor() ); writeLoggers( writer, info.getLoggers() ); writeContext( writer, info.getContextDescriptor() ); writeServices( writer, info.getServices() ); writeDependencies( writer, info.getDependencies() ); writer.write( "</component-info>" ); writer.flush(); } private void writeHeader( final Writer writer ) throws IOException { writer.write( "<?xml version=\"1.0\" ?>" ); } private void writeDoctype( final Writer writer, final String root ) throws IOException { final String doctype = "<!DOCTYPE " + root + " PUBLIC \"-//AVALON/Component Info DTD Version 1.0//EN\" " + "\"http://jakarta.apache.org/avalon/dtds/info/componentinfo_1_0.dtd\" >"; writer.write( doctype ); } private void writeComponent( final Writer writer, final ComponentDescriptor component ) throws IOException { writer.write( "<component type=\"" ); writer.write( component.getImplementationKey() ); final Attribute[] attributes = component.getAttributes(); if( 0 == attributes.length ) { writer.write( "\"/>" ); } else { writer.write( "\">" ); writeAttributes( writer, attributes ); writer.write( "</component>" ); } } private void writeLoggers( final Writer writer, final LoggerDescriptor[] loggers ) throws IOException { writer.write( "<loggers>" ); for( int i = 0; i < loggers.length; i++ ) { writeLogger( writer, loggers[ i ] ); } writer.write( "</loggers>" ); } private void writeLogger( final Writer writer, final LoggerDescriptor logger ) throws IOException { writer.write( "<logger name=\"" ); writer.write( logger.getName() ); final Attribute[] attributes = logger.getAttributes(); if( 0 == attributes.length ) { writer.write( "\"/>" ); } else { writer.write( "\">" ); writeAttributes( writer, attributes ); writer.write( "</logger>" ); } } private void writeContext( final Writer writer, final ContextDescriptor context ) throws IOException { writer.write( "<context" ); final String type = context.getType(); if( !CONTEXT_CLASS.equals( type ) ) { writer.write( " type=\"" ); writer.write( type ); writer.write( "\"" ); } final Attribute[] attributes = context.getAttributes(); final EntryDescriptor[] entrys = context.getEntrys(); if( 0 == attributes.length && 0 == entrys.length ) { writer.write( "/>" ); } else { writer.write( ">" ); for( int i = 0; i < entrys.length; i++ ) { writeEntry( writer, entrys[ i ] ); } writeAttributes( writer, attributes ); } writer.write( "</context>" ); } private void writeEntry( final Writer writer, final EntryDescriptor entry ) throws IOException { writer.write( "<entry key=\"" ); writer.write( entry.getKey() ); writer.write( "\" type=\"" ); writer.write( entry.getType() ); if( entry.isOptional() ) { writer.write( "\" optional=\"true" ); } final Attribute[] attributes = entry.getAttributes(); if( 0 == attributes.length ) { writer.write( "\"/>" ); } else { writer.write( "\">" ); writeAttributes( writer, attributes ); writer.write( "</entry>" ); } } private void writeServices( final Writer writer, final ServiceDescriptor[] services ) throws IOException { writer.write( "<services>" ); for( int i = 0; i < services.length; i++ ) { final ServiceDescriptor service = services[ i ]; writer.write( "<service type=\"" ); writer.write( service.getImplementationKey() ); final Attribute[] attributes = service.getAttributes(); if( 0 == attributes.length ) { writer.write( "\"/>" ); } else { writer.write( "\">" ); writeAttributes( writer, attributes ); writer.write( "</service>" ); } } writer.write( "</services>" ); } private void writeDependencies( final Writer writer, final DependencyDescriptor[] dependencies ) throws IOException { writer.write( "<dependencies>" ); for( int i = 0; i < dependencies.length; i++ ) { final DependencyDescriptor dependency = dependencies[ i ]; writer.write( "<dependency " ); if( !dependency.getKey().equals( dependency.getType() ) ) { writer.write( "key=\"" ); writer.write( dependency.getKey() ); writer.write( "\" " ); } writer.write( "type=\"" ); writer.write( dependency.getType() ); if( dependency.isOptional() ) { writer.write( "\" optional=\"true" ); } final Attribute[] attributes = dependency.getAttributes(); if( 0 == attributes.length ) { writer.write( "\"/>" ); } else { writer.write( "\">" ); writeAttributes( writer, attributes ); writer.write( "</dependency>" ); } } writer.write( "</dependencies>" ); } private void writeAttributes( final Writer writer, final Attribute[] attributes ) throws IOException { for( int i = 0; i < attributes.length; i++ ) { writeAttribute( writer, attributes[ i ] ); } } private void writeAttribute( final Writer writer, final Attribute attribute ) throws IOException { writer.write( "<attribute name=\"" ); writer.write( attribute.getName() ); writer.write( "\">" ); final String[] names = attribute.getParameterNames(); for( int i = 0; i < names.length; i++ ) { final String name = names[ i ]; final String value = attribute.getParameter( name ); writer.write( "<param name=\"" ); writer.write( name ); writer.write( "\" value=\"" ); writer.write( value ); writer.write( "\"/>" ); } writer.write( "</attribute>" ); } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>