Coverage Report - org.kuali.student.common.dictionary.service.impl.DictionaryTesterHelper
 
Classes in this File Line Coverage Branch Coverage Complexity
DictionaryTesterHelper
0%
0/65
0%
0/20
4
 
 1  
 package org.kuali.student.common.dictionary.service.impl;
 2  
 
 3  
 import java.io.File;
 4  
 import java.io.FileNotFoundException;
 5  
 import java.io.FileOutputStream;
 6  
 import java.io.OutputStream;
 7  
 import java.io.PrintStream;
 8  
 import java.util.ArrayList;
 9  
 import java.util.Date;
 10  
 import java.util.HashMap;
 11  
 import java.util.HashSet;
 12  
 import java.util.LinkedHashSet;
 13  
 import java.util.List;
 14  
 import java.util.Map;
 15  
 import java.util.Set;
 16  
 
 17  
 import org.kuali.student.common.dictionary.dto.ObjectStructureDefinition;
 18  
 import org.springframework.context.ApplicationContext;
 19  
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 20  
 
 21  
 public class DictionaryTesterHelper
 22  
 {
 23  
 
 24  
  private String outputFileName;
 25  
  private File file;
 26  
  private OutputStream outputStream;
 27  
  private PrintStream out;
 28  
  private Set<String> startingClasses;
 29  
  private String dictFileName;
 30  0
  private boolean processSubstructures = false;
 31  
 
 32  
  public DictionaryTesterHelper (String outputFileName,
 33  
                                 Set<String> startingClasses,
 34  
                                 String dictFileName,
 35  
                                 boolean processSubstructures)
 36  0
  {
 37  0
   this.outputFileName = outputFileName;
 38  0
   this.startingClasses = startingClasses;
 39  0
   this.dictFileName = dictFileName;
 40  0
   this.processSubstructures = processSubstructures;
 41  
   // get printstream from file
 42  0
   this.file = new File (this.outputFileName);
 43  
   try
 44  
   {
 45  0
    outputStream = new FileOutputStream (file, false);
 46  
   }
 47  0
   catch (FileNotFoundException ex)
 48  
   {
 49  0
    throw new IllegalArgumentException (ex);
 50  0
   }
 51  0
   this.out = new PrintStream (outputStream);
 52  0
  }
 53  
 
 54  
  private transient Map<String, ObjectStructureDefinition> objectStructures;
 55  
 
 56  
  public List<String> doTest ()
 57  
  {
 58  0
   ApplicationContext ac = new ClassPathXmlApplicationContext (
 59  
       "classpath:" + dictFileName);
 60  0
   objectStructures = new HashMap ();
 61  0
   Map<String, ObjectStructureDefinition> beansOfType =
 62  
                                          (Map<String, ObjectStructureDefinition>) ac.
 63  
       getBeansOfType (ObjectStructureDefinition.class);
 64  0
   for (ObjectStructureDefinition objStr: beansOfType.values ())
 65  
   {
 66  0
    objectStructures.put (objStr.getName (), objStr);
 67  0
    System.out.println ("Loading object structure: " + objStr.getName ());
 68  
   }
 69  
   // First validate all the starting classes
 70  0
   for (String className: startingClasses)
 71  
   {
 72  0
    ObjectStructureDefinition os = null;
 73  0
    os = objectStructures.get (className);
 74  0
    if (os == null)
 75  
    {
 76  0
     throw new RuntimeException ("className is not defined in dictionary: " + className);
 77  
    }
 78  0
    DictionaryValidator validator = new DictionaryValidator (os,
 79  
                                                             new HashSet (),
 80  
                                                             false);
 81  0
    List<String> errors = validator.validate ();
 82  0
    if (errors.size () > 0)
 83  
    {
 84  0
     return errors;
 85  
    }
 86  0
   }
 87  
 
 88  
 
 89  0
   Set<String> allStructures = new LinkedHashSet ();
 90  0
   for (String className: startingClasses)
 91  
   {
 92  0
    allStructures.addAll (getComplexSubStructures (className));
 93  
   }
 94  0
   Set<String> classesToProcess = null;
 95  0
   if (this.processSubstructures)
 96  
   {
 97  0
    classesToProcess = startingClasses;
 98  
 //   System.out.println ("Processing just the starting classes but then processing their substructures in-line");
 99  
   }
 100  
   else
 101  
   {
 102  0
    classesToProcess = allStructures;
 103  
 //   System.out.println ("Processing all substructures as separate entitiies");
 104  
   }
 105  
 
 106  0
   out.println ("(!) This page was automatically generated on " + new Date ());
 107  0
   out.println ("DO NOT UPDATE MANUALLY!");
 108  0
   out.println ("");
 109  0
   out.print ("This page represents a formatted view of [" + dictFileName
 110  
              + "|https://test.kuali.org/svn/student/trunk/ks-lum/ks-lum-impl/src/main/resources/"
 111  
              + dictFileName + "]");
 112  0
   out.println (
 113  
       " and is compared to the following java classes (and their sub-classes) for discrepancies:");
 114  0
   for (String className: startingClasses)
 115  
   {
 116  0
    out.println ("# " + className);
 117  
   }
 118  0
   out.println ("");
 119  0
   out.println ("----");
 120  0
   out.println ("{toc}");
 121  0
   out.println ("----");
 122  0
   for (String className: classesToProcess)
 123  
   {
 124  
 //   System.out.println ("processing class " + clazz.getSimpleName ());
 125  0
    doTestOnClass (className, ac);
 126  
   }
 127  0
   out.close ();
 128  0
   return new ArrayList ();
 129  
  }
 130  
 
 131  
  private Set<String> getComplexSubStructures (String className)
 132  
  {
 133  0
   return new ComplexSubstructuresHelper ().getComplexStructures (className);
 134  
  }
 135  
 
 136  
  private void doTestOnClass (String className, ApplicationContext ac)
 137  
  {
 138  0
   ObjectStructureDefinition os =   os = objectStructures.get (className);
 139  0
   String simpleName = calcSimpleName (className);
 140  0
   if (os == null)
 141  
   {
 142  
 
 143  0
    out.println ("h1. " + simpleName);
 144  0
    out.println ("{anchor:" + simpleName + "}");
 145  0
    out.println ("h2. Error could not find a corresponding dictionary definition");
 146  0
    return;
 147  
   }
 148  0
   DictionaryFormatter formatter =
 149  
                       new DictionaryFormatter (className,
 150  
                                                className,
 151  
                                                os,
 152  
                                                new HashSet (),
 153  
                                                1, // header level to start at
 154  
                                                this.processSubstructures);
 155  0
   out.println (formatter.formatForWiki ());
 156  0
  }
 157  
 
 158  
  private String calcSimpleName (String name)
 159  
  {
 160  0
   if (name.lastIndexOf (".") != -1)
 161  
   {
 162  0
    name = name.substring (name.lastIndexOf (".") + 1);
 163  
   }
 164  0
   return name;
 165  
  }
 166  
 
 167  
 }