001 /* 002 * Copyright 2011 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.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.osedu.org/licenses/ECL-2.0 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.contract.model.impl; 017 018 import java.io.File; 019 import java.io.FileNotFoundException; 020 import java.io.PrintStream; 021 import java.util.ArrayList; 022 import java.util.Collection; 023 import java.util.List; 024 import java.util.Set; 025 import java.util.Stack; 026 import org.junit.After; 027 import org.junit.AfterClass; 028 import org.junit.Before; 029 import org.junit.BeforeClass; 030 import org.junit.Test; 031 import static org.junit.Assert.*; 032 033 import org.kuali.student.contract.model.MessageStructure; 034 import org.kuali.student.contract.model.Service; 035 import org.kuali.student.contract.model.ServiceContractModel; 036 import org.kuali.student.contract.model.ServiceMethod; 037 import org.kuali.student.contract.model.ServiceMethodParameter; 038 import org.kuali.student.contract.model.XmlType; 039 import org.kuali.student.contract.model.util.HtmlContractServiceWriter; 040 import org.kuali.student.contract.model.util.MessageStructureHierarchyDumper; 041 import org.kuali.student.contract.model.util.ModelFinder; 042 import org.kuali.student.contract.model.validation.ServiceContractModelValidator; 043 044 /** 045 * 046 * @author nwright 047 */ 048 public class ServiceContractModelQDoxLoaderTest { 049 050 public ServiceContractModelQDoxLoaderTest() { 051 } 052 053 @BeforeClass 054 public static void setUpClass() throws Exception { 055 } 056 057 @AfterClass 058 public static void tearDownClass() throws Exception { 059 } 060 061 @Before 062 public void setUp() { 063 } 064 065 @After 066 public void tearDown() { 067 } 068 069 private static final String RESOURCES_DIRECTORY = "src/test/resources"; 070 private static final String TEST_SOURCE_DIRECTORY = 071 "src/test/java/org/kuali/student/contract/model/test/source"; 072 private static final String ENROLL_PROJECT_SRC_MAIN = "C:/svn/ks-1.3/ks-enroll/ks-enroll-api/src/main"; 073 private static final String ENROLL_PROJECT_JAVA_DIRECTORY = ENROLL_PROJECT_SRC_MAIN + "/java"; 074 private static final String RICE_CORE_API_DIRECTORY = "C:/svn/rice/trunk/core/api/src/main/java"; 075 private static final String RICE_KIM_API_DIRECTORY = "C:/svn/rice/trunk/kim/kim-api/src/main/java"; 076 private static final String RICE_LOCATION_API_DIRECTORY = "C:/svn/rice/trunk/location/api/src/main/java"; 077 private static final String RICE_KEW_API_DIRECTORY = "C:/svn/rice/trunk/kew/api/src/main/java"; 078 private static final String RICE_KEN_API_DIRECTORY = "C:/svn/rice/trunk/ken/api/src/main/java"; 079 private static final String RICE_KSB_API_DIRECTORY = "C:/svn/rice/trunk/ksb/api/src/main/java"; 080 private static final String RICE_KRMS_API_DIRECTORY = "C:/svn/rice/trunk/krms/api/src/main/java"; 081 private static ServiceContractModel model = null; 082 private ServiceContractModel getModel() { 083 if (model != null) { 084 return model; 085 } 086 List<String> srcDirs = new ArrayList(); 087 System.out.println("User directory=" + System.getProperty("user.dir")); 088 System.out.println("Current directory=" + new File(".").getAbsolutePath()); 089 // srcDirs.add (ENROLL_PROJECT_JAVA_DIRECTORY); 090 srcDirs.add(TEST_SOURCE_DIRECTORY); 091 // srcDirs.add(RICE_CORE_API_DIRECTORY); 092 // srcDirs.add(RICE_KIM_API_DIRECTORY); 093 // srcDirs.add(RICE_LOCATION_API_DIRECTORY); 094 // srcDirs.add(RICE_KEW_API_DIRECTORY); 095 // srcDirs.add(RICE_KEN_API_DIRECTORY); 096 // srcDirs.add(RICE_KSB_API_DIRECTORY); 097 // srcDirs.add(RICE_KRMS_API_DIRECTORY); 098 boolean validateKualiStudent = false; 099 ServiceContractModel instance = new ServiceContractModelQDoxLoader(srcDirs, validateKualiStudent); 100 101 instance = new ServiceContractModelCache(instance); 102 validate(instance); 103 model = instance; 104 return instance; 105 } 106 107 private String dump(ServiceMethod method) { 108 StringBuilder bldr = new StringBuilder(); 109 bldr.append(method.getName()); 110 String comma = ""; 111 bldr.append("("); 112 for (ServiceMethodParameter param : method.getParameters()) { 113 bldr.append(comma); 114 comma = ", "; 115 bldr.append(param.getType()); 116 bldr.append(" "); 117 bldr.append(param.getName()); 118 } 119 bldr.append(")"); 120 return bldr.toString(); 121 } 122 123 private void validate(ServiceContractModel model) { 124 Collection<String> errors = 125 new ServiceContractModelValidator(model).validate(); 126 if (errors.size() > 0) { 127 StringBuilder buf = new StringBuilder(); 128 buf.append(errors.size()).append(" errors found while validating the data."); 129 int cnt = 0; 130 for (String msg : errors) { 131 cnt++; 132 buf.append("\n"); 133 buf.append("*error*").append(cnt).append(":").append(msg); 134 } 135 136 fail(buf.toString()); 137 } 138 } 139 140 /** 141 * Test of getServiceMethods method, of class ServiceContractModelQDoxLoader. 142 */ 143 @Test 144 public void testGetServiceMethods() { 145 System.out.println("getServiceMethods"); 146 ServiceContractModel model = getModel(); 147 List<ServiceMethod> result = model.getServiceMethods(); 148 System.out.println("Number of methods=" + result.size()); 149 boolean getAtpFound = false; 150 for (ServiceMethod method : result) { 151 System.out.println(dump(method)); 152 if (method.getName().equals("getAtp")) { 153 getAtpFound = true; 154 assertEquals ("this is an implementation note\nthis is another", method.getImplNotes()); 155 } 156 } 157 assertTrue (getAtpFound); 158 if (result.size() < 10) { 159 fail("too few: " + result.size()); 160 } 161 162 } 163 164 165 /** 166 * Test of getSourceNames method, of class ServiceContractModelQDoxLoader. 167 */ 168 // @Test 169 public void testGetSourceNames() { 170 System.out.println("getSourceNames"); 171 ServiceContractModel model = getModel(); 172 List<String> expResult = new ArrayList(); 173 expResult.add(TEST_SOURCE_DIRECTORY); 174 List result = model.getSourceNames(); 175 assertEquals(expResult, result); 176 } 177 178 /** 179 * Test of getServices method, of class ServiceContractModelQDoxLoader. 180 */ 181 // @Test 182 public void testGetServices() { 183 System.out.println("getServices"); 184 ServiceContractModel model = getModel(); 185 List<Service> result = model.getServices(); 186 for (Service service : result) { 187 System.out.println(service.getKey() + " " + service.getName() + " " 188 + service.getVersion() + " " + service.getStatus()); 189 } 190 assertEquals(4, result.size()); 191 } 192 193 /** 194 * Test of getXmlTypes method, of class ServiceContractModelQDoxLoader. 195 */ 196 // @Test 197 public void testGetXmlTypes() { 198 System.out.println("getXmlTypes"); 199 ServiceContractModel model = getModel(); 200 List<XmlType> result = model.getXmlTypes(); 201 for (XmlType xmlType : result) { 202 System.out.println("XmlType=" + xmlType.getName() + " " 203 + xmlType.getPrimitive()); 204 } 205 if (result.size() < 10) { 206 fail("too few: " + result.size()); 207 } 208 } 209 210 /** 211 * Test of getMessageStructures method, of class ServiceContractModelQDoxLoader. 212 */ 213 // @Test 214 public void testGetMessageStructures() throws FileNotFoundException { 215 System.out.println("getMessageStructures"); 216 ServiceContractModel model = getModel(); 217 List<MessageStructure> result = model.getMessageStructures(); 218 for (MessageStructure ms : result) { 219 if (ms.getId().equalsIgnoreCase("academicCalendarInfo.typeKey")) { 220 System.out.println("MessageStructure=" + ms.getId() + " " + ms.getType() + "required=["+ ms.getRequired() + "]"); 221 } 222 } 223 if (result.size() < 10) { 224 fail("too few: " + result.size()); 225 } 226 String outputFileName = "target/messageStructures.txt"; 227 File file = new File(outputFileName); 228 PrintStream out = new PrintStream(file); 229 new MessageStructureHierarchyDumper(out, model).writeTabbedHeader(); 230 Set<XmlType> rootTypes = HtmlContractServiceWriter.calcMainMessageStructures( 231 model, null); 232 ModelFinder finder = new ModelFinder(model); 233 for (XmlType rootType : rootTypes) { 234 Stack<String> stack = new Stack(); 235 stack.push(rootType.getName()); 236 for (MessageStructure ms : finder.findMessageStructures(rootType.getName())) { 237 new MessageStructureHierarchyDumper(out, model).writeTabbedData(ms, stack); 238 } 239 } 240 } 241 }