/** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.tuscany.samples.sdo.internal; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.apache.tuscany.samples.sdo.internal.SampleInfrastructure.SDOFacets; /** * Class to generate html documentation for the SDO Samples. * The program introspects the sample programs listed in the * {@link SampleInfrastructure#sampleClasses sample classes} * static constant, for the values of the static CORE_FUNCTION * and SIGNIFICANT_FUNCTION variables. *

* It builds indexes from * sample to function and from function to sample and creates * html output that displays these indexes. */ public class DocumentSamples { private Map classToCoreFunction = new HashMap(); private Map coreFunctionToClass = new HashMap(); private Map classToSignificantFunction = new HashMap(); private Map significantFunctionToClass = new HashMap(); public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, IOException { DocumentSamples ds = new DocumentSamples(); ds.run(); } private static String HTML_HEADER = "\n" + "\n" + " \n"+ " \n"+ "SDO Samples\n" + "

SDO Samples

\n" + "

\n" + "The samples provided in the Tuscany SDO distribution cover many areas of\n" + "the SDO API. Here we provide two indexes into the samples. The first lists\n" + "each sample in sequence and details the central theme(s) of the sample.\n" + "It also mentions if the sample significantly demonstrates other areas in passing.\n" + "The second index lists all the themes that are covered by these samples, and\n" + "indicates which of the samples has that subject area as a central theme or as\n" + "demonstrates the subject area significant as an incidental part of the sample."; private static String CLASSES_HEADING = "

Index by Sample Program Name

\n"; private static String FUNCTION_HEADING = "

Index by function

\n"; private static String HTML_FOOTER = "\n"; private void run() throws IllegalAccessException { /* * gather the data */ for (int i = 0; i < SampleInfrastructure.sampleClasses.length; i++) { Class c = SampleInfrastructure.sampleClasses[i]; classToCoreFunction.put(c, new HashSet()); try { Field coreFunction = c.getField("CORE_FUNCTION"); recordFunction(c, coreFunction, coreFunctionToClass, classToCoreFunction); } catch (NoSuchFieldException e) { // no problem } try { Field sigFunction = c.getField("SIGNIFICANT_FUNCTION"); recordFunction(c, sigFunction, significantFunctionToClass, classToSignificantFunction); } catch (NoSuchFieldException e) { // no problem } } /* * create the documentation */ StringBuffer doc = new StringBuffer(); doc.append(HTML_HEADER); doc.append(CLASSES_HEADING); Class [] classes = SampleInfrastructure.sampleClasses; for(int i=0; i < classes.length;i++) { doc.append("

Sample Program " + getSimpleName(classes[i]) + "

\n"); doc.append("Core function:
\n"); int [] functions = (int[])classToCoreFunction.get(classes[i]); for(int j=0;j") .append(SDOFacets.subject_areas[functions[j]]) .append("
\n"); } doc.append("
"); if(classToSignificantFunction.get(classes[i])!= null) { doc.append("Also demonstrates:
\n"); functions = (int[])classToSignificantFunction.get(classes[i]); for(int j=0;j") .append(SDOFacets.subject_areas[functions[j]]) .append("
\n"); } } } doc.append(FUNCTION_HEADING); String [] facets = SDOFacets.subject_areas; for(int f = 0; f\n

") .append(SDOFacets.subject_areas[f]) .append("

\n"); if(coreFunctionToClass.keySet().contains(fobj)) { doc.append("Samples which demonstrate this as their core function
\n"); Set classesWithFunction = (Set)coreFunctionToClass.get(fobj); for(Iterator cwf = classesWithFunction.iterator(); cwf.hasNext();) { Class c = (Class)cwf.next(); doc.append(getSimpleName(c)).append("
\n"); } } if(significantFunctionToClass.keySet().contains(fobj)) { doc.append("Samples which demonstrate this in addition to their core function
\n"); Set classesWithFunction = (Set)significantFunctionToClass.get(fobj); for(Iterator cwf = classesWithFunction.iterator(); cwf.hasNext();) { Class c = (Class)cwf.next(); doc.append(getSimpleName(c)).append("
\n"); } } } doc.append(HTML_FOOTER); System.out.println(doc); } private int[] recordFunction(Class c, Field functionIndices, Map ftoc, Map ctof) throws IllegalAccessException { int[] functions = (int[]) functionIndices.get(c); for (int j = 0; j < functions.length; j++) { addClassesToFunction(ftoc, functions[j], c); } ctof.put(c, functions); return functions; } private void addClassesToFunction(Map functionToClass, int i, Class c) { Integer iobj = new Integer(i); if (!functionToClass.containsKey(iobj)) { functionToClass.put(iobj, new HashSet()); } ((Set) (functionToClass.get(iobj))).add(c); } private String getSimpleName(Class c) { String result = c.getName(); int lastDot = result.lastIndexOf('.'); if(lastDot != -1) { result = result.substring(lastDot+1); } return result; } }