001 /* 002 * Copyright 2011 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 1.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl1.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.student.datadictionary.util; 017 018 import java.util.ArrayList; 019 import java.util.HashSet; 020 import java.util.List; 021 import java.util.Map; 022 import java.util.Set; 023 import org.kuali.rice.krad.datadictionary.DataObjectEntry; 024 import org.springframework.context.ApplicationContext; 025 import org.springframework.context.support.ClassPathXmlApplicationContext; 026 027 public class DictionaryTesterHelper { 028 029 private String outputDir; 030 private Set<String> configFiles; 031 private ApplicationContext ac = null; 032 033 public DictionaryTesterHelper(String outputDir, 034 Set<String> configFiles) { 035 this.outputDir = outputDir; 036 this.configFiles = configFiles; 037 } 038 039 public void loadApplicationContext() { 040 System.out.println ("DictionaryTesterHelper: begin loading application context"); 041 List<String> configLocations = new ArrayList(configFiles); 042 // System.out.println ("DictionaryTesterHelper: adding " + supportFiles.size() + " support files"); 043 // configLocations.add("classpath:" + dictFileName); 044 String[] configLocs = configLocations.toArray(new String[0]); 045 ac = new ClassPathXmlApplicationContext(configLocs); 046 System.out.println ("DictionaryTesterHelper: end loading application context"); 047 } 048 049 public Map<String, DataObjectEntry> getDataObjectEntryBeans () { 050 return (Map<String, DataObjectEntry>) ac.getBeansOfType(DataObjectEntry.class); 051 } 052 053 public List<String> doTest() { 054 List<String> outputFileNames = new ArrayList(); 055 if (ac == null) { 056 loadApplicationContext (); 057 } 058 Map<String, DataObjectEntry> beansOfType = this.getDataObjectEntryBeans(); 059 060 for (String beanId : beansOfType.keySet()) { 061 DataObjectEntry doe = beansOfType.get(beanId); 062 if ("org.kuali.rice.krad.bo.AttributeReferenceDummy".equals(doe.getFullClassName())) { 063 continue; 064 } 065 System.out.println("Processing data object entry: " + doe.getDataObjectClass().getName()); 066 DictionaryValidator validator = new DictionaryValidator(doe, new HashSet()); 067 List<String> errors = validator.validate(); 068 if (errors != null) { 069 if (!errors.isEmpty()) { 070 throw new IllegalArgumentException("Errors validating bean " 071 + beanId + "\n" + this.formatAsString(errors)); 072 } 073 } 074 String outputFileName = beanId + ".html"; 075 outputFileNames.add(outputFileName); 076 String fullOutputFileName = this.outputDir + "/" + outputFileName; 077 DictionaryFormatter formatter = new DictionaryFormatter(doe, beansOfType, beanId, fullOutputFileName); 078 formatter.formatForHtml(); 079 } 080 return outputFileNames; 081 } 082 083 private String formatAsString(List<String> errors) { 084 int i = 0; 085 StringBuilder builder = new StringBuilder(); 086 for (String error : errors) { 087 i++; 088 builder.append(i).append(". ").append(error).append("\n"); 089 } 090 return builder.toString(); 091 } 092 }