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.io.Serializable; 019import java.util.List; 020 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.model.validation.DictionaryValidationException; 026import org.kuali.student.contract.writer.JavaClassWriter; 027 028/** 029 * 030 * @author nwright 031 */ 032public class PureJavaInfcBeanWriter extends JavaClassWriter { 033 034 private ServiceContractModel model; 035 private String directory; 036 private String rootPackage; 037 private String service; 038 private XmlType type; 039 private ModelFinder finder; 040 041 public PureJavaInfcBeanWriter(ServiceContractModel model, 042 String directory, 043 String rootPackage, 044 String service, 045 XmlType type) { 046 super(directory, calcPackage(service, rootPackage), calcClassName(type.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.type = type; 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 } 066 name = name + "Bean"; 067 return GetterSetterNameCalculator.calcInitUpper(name); 068 069 } 070 071 /** 072 * Write out the entire file 073 * @param out 074 */ 075 public void write() { 076 indentPrintln("public class " + calcClassName(type.getName())); 077 incrementIndent(); 078 indentPrint(" implements " 079 + PureJavaInfcInfcWriter.calcClassName(type.getName())); 080 importsAdd(PureJavaInfcInfcWriter.calcPackage(service, rootPackage) 081 + "." + PureJavaInfcInfcWriter.calcClassName(type.getName())); 082 this.importsAdd(Serializable.class.getName()); 083 indentPrintln(", Serializable"); 084 openBrace(); 085 086 indentPrintln(""); 087 indentPrintln("private static final long serialVersionUID = 1L;"); 088 089 List<MessageStructure> list = 090 finder.findMessageStructures(type.getName()); 091// if (list.size() == 0) { 092// throw new DictionaryExecutionException("xmlType " + type.getName() 093// + " has no fields defined in the message structure tab"); 094// } 095 for (MessageStructure ms : list) { 096 String realType = stripList(PureJavaInfcInfcWriter.calcClassName(ms.getType())); 097 String fieldType = null; 098 if (ms.getId().equals("RegistrationGroupTemplateInfo.activityOfferingCombinations")) { 099 continue; 100 } 101 try { 102 fieldType = this.calcFieldTypeToUse(ms.getType(), realType); 103 } catch (DictionaryValidationException ex) { 104 throw new DictionaryValidationException (ms.getId(), ex); 105 } 106 String name = initLower(ms.getShortName()); 107 indentPrintln(""); 108 indentPrintln("private " + fieldType + " " + name + ";"); 109 indentPrintln(""); 110 indentPrintln("/**"); 111 indentPrintWrappedComment("Set " + ms.getName()); 112 indentPrintln("*"); 113 indentPrintln("* Type: " + ms.getType()); 114 indentPrintln("*"); 115 indentPrintWrappedComment(ms.getDescription()); 116 indentPrintln("*/"); 117 indentPrintln("@Override"); 118 indentPrintln("public void " + calcSetter(ms) + "(" + fieldType + " " 119 + name + ")"); 120 openBrace(); 121 indentPrintln("this." + name + " = " + name + ";"); 122 closeBrace(); 123 124 indentPrintln(""); 125 indentPrintln("/**"); 126 indentPrintWrappedComment("Get " + ms.getName()); 127 indentPrintln("*"); 128 indentPrintln("* Type: " + ms.getType()); 129 indentPrintln("*"); 130 indentPrintWrappedComment(ms.getDescription()); 131 indentPrintln("*/"); 132 indentPrintln("@Override"); 133 indentPrintln("public " + fieldType + " " + calcGetter(ms) + "()"); 134 openBrace(); 135 indentPrintln("return this." + name + ";"); 136 closeBrace(); 137 indentPrint(""); 138 139 indentPrint(""); 140 } 141 indentPrintln(""); 142 closeBrace(); 143 144 this.writeJavaClassAndImportsOutToFile(); 145 this.getOut().close(); 146 } 147 148 private String stripList(String str) { 149 return GetterSetterNameCalculator.stripList(str); 150 } 151 152 private String initLower(String str) { 153 if (str == null) { 154 return null; 155 } 156 if (str.isEmpty()) { 157 return str; 158 } 159 if (str.length() == 1) { 160 return str.toLowerCase(); 161 } 162 return str.substring(0, 1).toLowerCase() + str.substring(1); 163 } 164 165 private String calcGetter(MessageStructure ms) { 166 return new GetterSetterNameCalculator(ms, this, model).calcGetter(); 167 } 168 169 private String calcSetter(MessageStructure ms) { 170 return new GetterSetterNameCalculator(ms, this, model).calcSetter(); 171 } 172 173 private String calcFieldTypeToUse(String type, String realType) { 174 XmlType t = finder.findXmlType(this.stripList(type)); 175 String pckName = calcPackage(t.getService(), rootPackage); 176 return MessageStructureTypeCalculator.calculate(this, model, type, realType, 177 pckName); 178 } 179}