private void generateDocumentation()

in xbean-spring/src/main/java/org/apache/xbean/spring/generator/WikiDocumentationGenerator.java [55:126]


    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( namespaceMapping.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);
    }