001/** 002 * Copyright 2004-2014 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.opensource.org/licenses/ecl2.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 */ 016package org.kuali.student.contract.writer.service; 017 018import java.util.List; 019 020import org.kuali.student.contract.exception.DictionaryExecutionException; 021import org.kuali.student.contract.model.MessageStructure; 022import org.kuali.student.contract.model.ServiceContractModel; 023import org.kuali.student.contract.model.XmlType; 024import org.kuali.student.contract.model.util.ModelFinder; 025import org.kuali.student.contract.writer.JavaClassWriter; 026 027/** 028 * 029 * @author nwright 030 */ 031public class PureJavaInfcInfcWriter extends JavaClassWriter { 032 033 private ServiceContractModel model; 034 private ModelFinder finder; 035 private String directory; 036 private String rootPackage; 037 private String service; 038 private XmlType xmlType; 039 040 public PureJavaInfcInfcWriter(ServiceContractModel model, 041 String directory, 042 String rootPackage, 043 String service, 044 XmlType xmlType) { 045 super(directory, calcPackage(service, rootPackage), calcClassName( 046 xmlType.getName())); 047 this.model = model; 048 this.finder = new ModelFinder(model); 049 this.directory = directory; 050 this.rootPackage = rootPackage; 051 this.service = service; 052 this.xmlType = xmlType; 053 } 054 055 public static String calcPackage(String service, String rootPackage) { 056 if (service.contains(",")) { 057 service = "common"; 058 } 059 return PureJavaInfcServiceWriter.calcPackage(service, rootPackage); 060 } 061 062 public static String calcClassName(String name) { 063 if (name.endsWith("Info")) { 064 name = name.substring(0, name.length() - "Info".length()); 065 name = name + "Infc"; 066 } else if (name.endsWith("InfoList")) { 067 name = name.substring(0, name.length() - "InfoList".length()); 068 name = name + "InfcList"; 069 } 070 return GetterSetterNameCalculator.calcInitUpper(name); 071 } 072 073 /** 074 * Write out the entire file 075 * @param out 076 */ 077 public void write() { 078 indentPrintln("public interface " + calcClassName(xmlType.getName())); 079 openBrace(); 080 081 List<MessageStructure> list = finder.findMessageStructures(xmlType.getName()); 082// if (list.size() == 0) { 083// throw new DictionaryExecutionException( 084// "xmlType " + xmlType.getName() 085// + " has no fields defined in the message structure tab"); 086// } 087 for (MessageStructure ms : list) { 088 if (ms.getId().equals ("RegistrationGroupTemplateInfo.activityOfferingCombinations")) { 089 continue; 090 } 091 String realType = stripList(calcClassName(ms.getType())); 092 String type = this.calcFieldTypeToUse(ms.getType(), realType); 093 indentPrintln(""); 094 indentPrintln("/**"); 095 indentPrintWrappedComment("Set " + ms.getName()); 096 indentPrintln("*"); 097 indentPrintln("* Type: " + ms.getType()); 098 indentPrintln("*"); 099 indentPrintWrappedComment(ms.getDescription()); 100 indentPrintln("*/"); 101 indentPrintln("public void " + calcSetter(ms) + "(" + type + " " + initLower( 102 ms.getShortName()) + ");"); 103 104 105 indentPrintln(""); 106 indentPrintln("/**"); 107 indentPrintWrappedComment("Get " + ms.getName()); 108 indentPrintln("*"); 109 indentPrintln("* Type: " + ms.getType()); 110 indentPrintln("*"); 111 indentPrintWrappedComment(ms.getDescription()); 112 indentPrintln("*/"); 113 indentPrintln("public " + type + " " + calcGetter(ms) + "();"); 114 indentPrintln(""); 115 116 indentPrintln(""); 117 } 118 indentPrintln(""); 119 closeBrace(); 120 121 this.writeJavaClassAndImportsOutToFile(); 122 this.getOut().close(); 123 } 124 125 private String stripList(String str) { 126 return GetterSetterNameCalculator.stripList(str); 127 } 128 129 private String initLower(String str) { 130 return GetterSetterNameCalculator.calcInitLower(str); 131 } 132 133 private String calcGetter(MessageStructure ms) { 134 return new GetterSetterNameCalculator(ms, this, model).calcGetter(); 135 } 136 137 private String calcSetter(MessageStructure ms) { 138 return new GetterSetterNameCalculator(ms, this, model).calcSetter(); 139 } 140 141 private String calcFieldTypeToUse(String type, String realType) { 142 XmlType t = finder.findXmlType(this.stripList(type)); 143 String pckName = calcPackage(t.getService(), rootPackage); 144 return MessageStructureTypeCalculator.calculate(this, model, type, realType, 145 pckName); 146 } 147}