geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hiram Chirino" <hi...@hiramchirino.com>
Subject Re: svn commit: r432530 - /geronimo/xbean/trunk/xbean-spring-common/src/main/java/org/apache/xbean/spring/generator/WikiDocumentationGenerator.java
Date Mon, 21 Aug 2006 21:38:32 GMT
opps.. thanks Guillaume!

On 8/18/06, gnodet@apache.org <gnodet@apache.org> wrote:
> Author: gnodet
> Date: Fri Aug 18 01:57:12 2006
> New Revision: 432530
>
> URL: http://svn.apache.org/viewvc?rev=432530&view=rev
> Log:
> Add missing class from XBEAN-33
>
> Added:
>     geronimo/xbean/trunk/xbean-spring-common/src/main/java/org/apache/xbean/spring/generator/WikiDocumentationGenerator.java
>
> Added: geronimo/xbean/trunk/xbean-spring-common/src/main/java/org/apache/xbean/spring/generator/WikiDocumentationGenerator.java
> URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-spring-common/src/main/java/org/apache/xbean/spring/generator/WikiDocumentationGenerator.java?rev=432530&view=auto
> ==============================================================================
> --- geronimo/xbean/trunk/xbean-spring-common/src/main/java/org/apache/xbean/spring/generator/WikiDocumentationGenerator.java
(added)
> +++ geronimo/xbean/trunk/xbean-spring-common/src/main/java/org/apache/xbean/spring/generator/WikiDocumentationGenerator.java
Fri Aug 18 01:57:12 2006
> @@ -0,0 +1,213 @@
> +/**
> + *
> + * Copyright 2005-2006 The Apache Software Foundation or its licensors, as applicable.
> + *
> + *  Licensed under the Apache License, Version 2.0 (the "License");
> + *  you may not use this file except in compliance with the License.
> + *  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + *  Unless required by applicable law or agreed to in writing, software
> + *  distributed under the License is distributed on an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + *  See the License for the specific language governing permissions and
> + *  limitations under the License.
> + */
> +package org.apache.xbean.spring.generator;
> +
> +import java.io.File;
> +import java.io.FileWriter;
> +import java.io.IOException;
> +import java.io.PrintWriter;
> +import java.util.ArrayList;
> +import java.util.Collection;
> +import java.util.HashMap;
> +import java.util.Iterator;
> +import java.util.Map;
> +import java.util.Map.Entry;
> +
> +/**
> + * @author Hiram Chirino
> + * @version $Id$
> + * @since 1.0
> + */
> +public class WikiDocumentationGenerator implements GeneratorPlugin {
> +    private final File destFile;
> +    private LogFacade log;
> +
> +    public WikiDocumentationGenerator(File destFile) {
> +        this.destFile = destFile;
> +    }
> +
> +    public void generate(NamespaceMapping namespaceMapping) throws IOException {
> +        String namespace = namespaceMapping.getNamespace();
> +        File file = new File(destFile.getParentFile(), destFile.getName() + ".wiki");
> +        log.log("Generating WIKI documentation file: " + file + " for namespace: " +
namespace);
> +        PrintWriter out = new PrintWriter(new FileWriter(file));
> +        try {
> +            generateDocumentation(out, namespaceMapping);
> +        } finally {
> +            out.close();
> +        }
> +    }
> +
> +    private void generateDocumentation(PrintWriter out, NamespaceMapping namespaceMapping)
{
> +
> +        HashMap refercencedTypes = new HashMap();
> +
> +        // Build of map of types that are referenced by element types.
> +        for (Iterator iter = namespaceMapping.getElements().iterator(); iter.hasNext();)
{
> +            ElementMapping element = (ElementMapping) iter.next();
> +            for (Iterator iterator = element.getAttributes().iterator(); iterator.hasNext();)
{
> +                AttributeMapping attribute = (AttributeMapping) iterator.next();
> +                Type type = getNestedType( attribute.getType() );
> +
> +                if( Utils.isSimpleType( type) )
> +                    continue;
> +
> +                if( !refercencedTypes.containsKey(type.getName()) )
> +                    refercencedTypes.put(type.getName(), new ArrayList());
> +            }
> +        }
> +
> +        // Add all the elements that implement those types.
> +        for (Iterator iter = refercencedTypes.entrySet().iterator(); iter.hasNext();)
{
> +
> +            Map.Entry entry = (Map.Entry) iter.next();
> +            String type = (String) entry.getKey();
> +            ArrayList implementations = (ArrayList) entry.getValue();
> +
> +            for (Iterator iterator = namespaceMapping.getElements().iterator(); iterator.hasNext();)
{
> +                ElementMapping element = (ElementMapping) iterator.next();
> +
> +                // Check to see if the class is matches
> +                boolean matched=false;
> +                if (type.equals(element.getClassName())) {
> +                    implementations.add(element);
> +                    matched=true;
> +                }
> +
> +                // Perhaps a super class matches.
> +                if(!matched) {
> +                    for (Iterator j = element.getSuperClasses().iterator(); j.hasNext();)
{
> +                        String t = (String) j.next();
> +                        if( type.equals(t) ) {
> +                            implementations.add(element);
> +                            matched=true;
> +                            break;
> +                        }
> +                    }
> +                }
> +
> +                // Or it might be an interface.
> +                if(!matched) {
> +                    for (Iterator j = element.getInterfaces().iterator(); j.hasNext();)
{
> +                        String t = (String) j.next();
> +                        if( type.equals(t) ) {
> +                            implementations.add(element);
> +                            matched=true;
> +                            break;
> +                        }
> +                    }
> +                }
> +            }
> +        }
> +
> +        // Remove any entries that did not have associated elements
> +        for (Iterator iter = refercencedTypes.values().iterator(); iter.hasNext();)
{
> +            ArrayList implementations = (ArrayList) iter.next();
> +            if( implementations.isEmpty() )
> +                iter.remove();
> +        }
> +
> +        generateElementsByType(out, namespaceMapping, refercencedTypes);
> +        generateElementsDetail(out, namespaceMapping, refercencedTypes);
> +        generateElementsIndex(out, namespaceMapping, refercencedTypes);
> +    }
> +
> +    private Type getNestedType(Type type) {
> +        if( type.isCollection() ) {
> +            return getNestedType(type.getNestedType());
> +        } else {
> +            return type;
> +        }
> +    }
> +
> +    private void generateElementsByType(PrintWriter out, NamespaceMapping namespaceMapping,
HashMap refercencedTypes) {
> +        out.println("h3. Elements By Type");
> +        for (Iterator iter = refercencedTypes.entrySet().iterator(); iter.hasNext();)
{
> +            Entry entry = (Entry) iter.next();
> +            String className = (String) entry.getKey();
> +            Collection elements = (Collection) entry.getValue();
> +
> +            out.println("{anchor:"+className+"-types}");
> +            out.println("h4. The _["+className+"|#"+className+"-types]_ Type Implementations");
> +
> +            for (Iterator iterator = elements.iterator(); iterator.hasNext();) {
> +                ElementMapping element = (ElementMapping) iterator.next();
> +                out.println("    | _[<"+element.getElementName() +">|#"+element.getElementName()
+"-element]_ | {html}"+element.getDescription()+"{html} |");
> +            }
> +            out.println();
> +        }
> +        out.println();
> +    }
> +
> +       private void generateElementsIndex(PrintWriter out, NamespaceMapping namespaceMapping,
HashMap refercencedTypes) {
> +
> +        out.println("h3. Element Index");
> +        for (Iterator iter = namespaceMapping.getElements().iterator(); iter.hasNext();)
{
> +            ElementMapping element = (ElementMapping) iter.next();
> +               out.println("    | _[<"+element.getElementName() +">|#"+element.getElementName()
+"-element]_ | {html}"+element.getDescription()+"{html} |");
> +        }
> +        out.println();
> +    }
> +
> +    private void generateElementsDetail(PrintWriter out, NamespaceMapping namespaceMapping,
HashMap refercencedTypes) {
> +        for (Iterator iter = namespaceMapping.getElements().iterator(); iter.hasNext();)
{
> +            ElementMapping element = (ElementMapping) iter.next();
> +            generateElementDetail(out, namespaceMapping, element, refercencedTypes);
> +        }
> +    }
> +
> +    private void generateElementDetail(PrintWriter out, NamespaceMapping namespaceMapping,
ElementMapping element, HashMap refercencedTypes) {
> +
> +        out.println("{anchor:" + element.getElementName() + "-element}");
> +        out.println("h3. The _[<" + element.getElementName() + ">|#" + element.getElementName()
+ "-element]_ Element");
> +
> +        out.println("    {html}"+element.getDescription()+"{html}");
> +
> +        if( element.getAttributes().size() > 0 ) {
> +            out.println("h4. Properties");
> +            out.println("    || Property Name || Type || Description ||");
> +
> +            for ( Iterator iterator = element.getAttributes().iterator(); iterator.hasNext();
) {
> +                AttributeMapping attribute = (AttributeMapping) iterator.next();
> +                Type type = attribute.getType();
> +                out.println("    | " + attribute.getAttributeName() + " | "+getTypeLink(type,
refercencedTypes)+" | {html}"+attribute.getDescription()+"{html} |");
> +                 }
> +        }
> +        out.println();
> +    }
> +
> +    private String getTypeLink(Type type, HashMap refercencedTypes) {
> +        if (type.isCollection()) {
> +            return "(" + getTypeLink(type.getNestedType(), refercencedTypes) +  ")\\*";
> +        } else {
> +                 if( refercencedTypes.containsKey(type.getName()) ) {
> +                           return "_["+type.getName()+"|#"+type.getName()+"-types]_";
> +                 } else {
> +                return "_"+type.getName()+"_";
> +            }
> +        }
> +    }
> +
> +    public LogFacade getLog() {
> +        return log;
> +    }
> +
> +    public void setLog(LogFacade log) {
> +        this.log = log;
> +    }
> +}
> +
>
>
>


-- 
Regards,
Hiram

Blog: http://hiramchirino.com

Mime
View raw message