001 /*
002 * Copyright 2009 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.writer.service;
017
018 import java.util.List;
019
020 import org.kuali.student.contract.model.ServiceContractModel;
021 import org.kuali.student.contract.model.ServiceMethod;
022 import org.kuali.student.contract.model.ServiceMethodError;
023 import org.kuali.student.contract.model.ServiceMethodParameter;
024 import org.kuali.student.contract.model.XmlType;
025 import org.kuali.student.contract.model.util.ModelFinder;
026 import org.kuali.student.contract.writer.JavaClassWriter;
027
028 /**
029 *
030 * @author nwright
031 */
032 public class PureJavaInfcServiceWriter extends JavaClassWriter {
033
034 private ServiceContractModel model;
035 private ModelFinder finder;
036 private String directory;
037 private String rootPackage;
038 private String servKey;
039 private List<ServiceMethod> methods;
040
041 public PureJavaInfcServiceWriter(ServiceContractModel model,
042 String directory,
043 String rootPackage,
044 String servKey,
045 List<ServiceMethod> methods) {
046 super(directory, calcPackage(servKey, rootPackage), calcClassName(servKey));
047 this.model = model;
048 this.finder = new ModelFinder(model);
049 this.directory = directory;
050 this.rootPackage = rootPackage;
051 this.servKey = servKey;
052 this.methods = methods;
053 }
054
055 public static String calcPackage(String servKey, String rootPackage) {
056 String pack = rootPackage + "." + servKey.toLowerCase() + ".";
057 // StringBuffer buf = new StringBuffer (service.getVersion ().length ());
058 // for (int i = 0; i < service.getVersion ().length (); i ++)
059 // {
060 // char c = service.getVersion ().charAt (i);
061 // c = Character.toLowerCase (c);
062 // if (Character.isLetter (c))
063 // {
064 // buf.append (c);
065 // continue;
066 // }
067 // if (Character.isDigit (c))
068 // {
069 // buf.append (c);
070 // }
071 // }
072 // pack = pack + buf.toString ();
073 pack = pack + "api";
074 return pack;
075 }
076
077 public static String calcClassName(String servKey) {
078 return GetterSetterNameCalculator.calcInitUpper(servKey + "ServiceInfc");
079 }
080
081 /**
082 * Write out the entire file
083 * @param out
084 */
085 public void write() {
086 indentPrintln("public interface " + calcClassName(servKey));
087 openBrace();
088
089 for (ServiceMethod method : methods) {
090 indentPrintln("");
091 indentPrintln("/**");
092 indentPrintWrappedComment(method.getDescription());
093 indentPrintln("* ");
094 for (ServiceMethodParameter param : method.getParameters()) {
095 indentPrintWrappedComment("@param " + param.getName() + " - "
096 + param.getType() + " - "
097 + param.getDescription());
098 }
099 indentPrintWrappedComment("@return " + method.getReturnValue().
100 getDescription());
101 indentPrintln("*/");
102 String type = method.getReturnValue().getType();
103 String realType = stripList(PureJavaInfcInfcWriter.calcClassName(type));
104 indentPrint("public " + calcType(type, realType) + " " + method.getName()
105 + "(");
106 // now do parameters
107 String comma = "";
108 for (ServiceMethodParameter param : method.getParameters()) {
109 type = param.getType();
110 realType = stripList(PureJavaInfcInfcWriter.calcClassName(type));
111 print(comma);
112 print(calcType(type, realType));
113 print(" ");
114 print(param.getName());
115 comma = ", ";
116 }
117 println(")");
118 // now do exceptions
119 comma = "throws ";
120 incrementIndent();
121 for (ServiceMethodError error : method.getErrors()) {
122 indentPrint(comma);
123 String exceptionClassName = calcExceptionClassName(error);
124 String exceptionPackageName = this.calcExceptionPackageName(error);
125 println(exceptionClassName);
126 this.importsAdd(exceptionPackageName + "." + exceptionClassName);
127 comma = " ,";
128 }
129 decrementIndent();
130 indentPrintln(";");
131
132 }
133
134 closeBrace();
135
136 this.writeJavaClassAndImportsOutToFile();
137 this.getOut().close();
138 }
139
140 private String stripList(String str) {
141 return GetterSetterNameCalculator.stripList(str);
142 }
143
144 private String calcExceptionClassName(ServiceMethodError error) {
145 if (error.getClassName() == null) {
146 return ServiceExceptionWriter.calcClassName(error.getType());
147 }
148 return error.getClassName();
149 }
150
151 private String calcExceptionPackageName(ServiceMethodError error) {
152 if (error.getClassName() == null) {
153 return ServiceExceptionWriter.calcPackage(rootPackage);
154 }
155 return error.getPackageName();
156 }
157
158 private String calcType(String type, String realType) {
159 XmlType t = finder.findXmlType(this.stripList(type));
160 String pckName = PureJavaInfcInfcWriter.calcPackage(t.getService(), rootPackage);
161 return MessageStructureTypeCalculator.calculate(this, model, type, realType,
162 pckName);
163 }
164 }