
org.kuali.student.contract.writer.service.MockImplServiceWriter Maven / Gradle / Ivy
/*
* Copyright 2009 The Kuali Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.osedu.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kuali.student.contract.writer.service;
import org.kuali.student.contract.model.Service;
import org.kuali.student.contract.model.ServiceContractModel;
import org.kuali.student.contract.model.ServiceMethod;
import org.kuali.student.contract.model.ServiceMethodError;
import org.kuali.student.contract.model.ServiceMethodParameter;
import org.kuali.student.contract.model.XmlType;
import org.kuali.student.contract.model.util.ModelFinder;
import org.kuali.student.contract.writer.JavaClassWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
*
* @author nwright
*/
public class MockImplServiceWriter extends JavaClassWriter {
private ServiceContractModel model;
private ModelFinder finder;
private String directory;
private String rootPackage;
private String servKey;
private List methods;
private boolean isR1;
public MockImplServiceWriter(ServiceContractModel model,
String directory,
String rootPackage,
String servKey,
List methods,
boolean isR1) {
super(directory, calcPackage(servKey, rootPackage), calcClassName(servKey));
this.model = model;
this.finder = new ModelFinder(model);
this.directory = directory;
this.rootPackage = rootPackage;
this.servKey = servKey;
this.methods = methods;
this.isR1 = isR1;
}
public static String calcPackage(String servKey, String rootPackage) {
String pack = rootPackage + ".";
// String pack = rootPackage + "." + servKey.toLowerCase() + ".";
// StringBuffer buf = new StringBuffer (service.getVersion ().length ());
// for (int i = 0; i < service.getVersion ().length (); i ++)
// {
// char c = service.getVersion ().charAt (i);
// c = Character.toLowerCase (c);
// if (Character.isLetter (c))
// {
// buf.append (c);
// continue;
// }
// if (Character.isDigit (c))
// {
// buf.append (c);
// }
// }
// pack = pack + buf.toString ();
pack = pack + "service.impl.mock";
return pack;
}
public static String calcClassName(String servKey) {
return GetterSetterNameCalculator.calcInitUpper(servKey + "ServiceMockImpl");
}
public static String calcServiceInterfaceClassName(String servKey) {
return GetterSetterNameCalculator.calcInitUpper(servKey + "Service");
}
private static enum MethodType {
VALIDATE,
CREATE,
CREATE_BULK,
ADD,
UPDATE,
UPDATE_OTHER,
DELETE,
REMOVE,
DELETE_OTHER,
GET_CREATE,
GET_BY_ID,
GET_BY_IDS,
GET_IDS_BY_TYPE,
GET_IDS_BY_OTHER,
GET_INFOS_BY_OTHER,
GET_TYPE,
GET_TYPES,
UNKNOWN
};
private MethodType calcMethodType(ServiceMethod method) {
if (method.getName().startsWith("validate")) {
return MethodType.VALIDATE;
}
if (method.getName().startsWith("create")) {
if (this.findInfoParameter(method) != null) {
return MethodType.CREATE;
}
return MethodType.CREATE_BULK;
}
if (method.getName().startsWith("add")) {
return MethodType.ADD;
}
if (method.getName().startsWith("update")) {
if (this.findInfoParameter(method) != null) {
return MethodType.UPDATE;
}
return MethodType.UPDATE_OTHER;
}
if (method.getName().startsWith("delete")) {
if (method.getName().contains("By")) {
if (!method.getName().startsWith("deleteBy")) {
return MethodType.DELETE_OTHER;
}
}
if (method.getName().contains("For")) {
if (!method.getName().startsWith("deleteFor")) {
return MethodType.DELETE_OTHER;
}
}
return MethodType.DELETE;
}
if (method.getName().startsWith("remove")) {
return MethodType.REMOVE;
}
if (method.getName().startsWith("getCreate")) {
return MethodType.GET_CREATE;
}
if (method.getName().startsWith("get")) {
if (method.getName().endsWith("ByIds")) {
return MethodType.GET_BY_IDS;
}
if (method.getName().endsWith("ByType")) {
return MethodType.GET_IDS_BY_TYPE;
}
if (method.getReturnValue().getType().endsWith("TypeInfo")) {
return MethodType.GET_TYPE;
}
if (method.getReturnValue().getType().endsWith("TypeInfoList")) {
return MethodType.GET_TYPES;
}
if (method.getName().endsWith("ByType")) {
return MethodType.GET_IDS_BY_TYPE;
}
if (method.getParameters().size() >= 1 && method.getParameters().size() <= 2) {
if (!method.getReturnValue().getType().endsWith("List")) {
if (method.getParameters().get(0).getName().endsWith("Id")) {
return MethodType.GET_BY_ID;
}
}
}
if (method.getName().contains("By")) {
if (method.getReturnValue().getType().equals("StringList")) {
return MethodType.GET_IDS_BY_OTHER;
}
if (method.getReturnValue().getType().endsWith("InfoList")) {
return MethodType.GET_INFOS_BY_OTHER;
}
}
}
return MethodType.UNKNOWN;
}
/**
* Write out the entire file
*/
public void write() {
indentPrint("public class " + calcClassName(servKey));
println(" implements MockService, " + calcServiceInterfaceClassName(servKey));
Service serv = finder.findService(servKey);
importsAdd(serv.getImplProject() + "." + serv.getName());
openBrace();
for (ServiceMethod method : methods) {
MethodType methodType = calcMethodType(method);
switch (methodType) {
case CREATE:
case ADD:
case GET_TYPE:
writeCacheVariable(method);
}
indentPrintln("");
// indentPrintln("/**");
// indentPrintWrappedComment(method.getDescription());
// indentPrintln("* ");
// for (ServiceMethodParameter param : method.getParameters()) {
// indentPrintWrappedComment("@param " + param.getName() + " - "
// + param.getType() + " - "
// + param.getDescription());
// }
// indentPrintWrappedComment("@return " + method.getReturnValue().
// getDescription());
// indentPrintln("*/");
indentPrintln("@Override");
String type = method.getReturnValue().getType();
String realType = stripList(type);
indentPrint("public " + calcType(type, realType) + " " + method.getName()
+ "(");
// now do parameters
String comma = "";
for (ServiceMethodParameter param : method.getParameters()) {
type = param.getType();
realType = stripList(type);
print(comma);
print(calcType(type, realType));
print(" ");
print(param.getName());
comma = ", ";
}
println(")");
// now do exceptions
comma = "throws ";
incrementIndent();
for (ServiceMethodError error : method.getErrors()) {
indentPrint(comma);
String exceptionClassName = calcExceptionClassName(error);
String exceptionPackageName = this.calcExceptionPackageName(error);
println(exceptionClassName);
this.importsAdd(exceptionPackageName + "." + exceptionClassName);
comma = " ,";
}
decrementIndent();
openBrace();
switch (methodType) {
case VALIDATE:
writeValidate(method);
break;
case CREATE:
writeCreate(method);
break;
case ADD:
writeAdd(method);
break;
case UPDATE:
writeUpdate(method);
break;
case DELETE:
writeDelete(method);
break;
case REMOVE:
writeRemove(method);
break;
case GET_BY_ID:
writeGetById(method);
break;
case GET_BY_IDS:
writeGetByIds(method);
break;
case GET_IDS_BY_TYPE:
writeGetIdsByType(method);
break;
case GET_IDS_BY_OTHER:
writeGetIdsByOther(method);
break;
case GET_INFOS_BY_OTHER:
writeGetInfosByOther(method);
break;
case GET_TYPE:
writeGetType(method);
break;
case GET_TYPES:
writeGetTypes(method);
break;
default:
writeThrowsNotImplemented(method);
}
closeBrace();
}
writeBoilerPlate();
closeBrace();
this.writeJavaClassAndImportsOutToFile();
this.getOut().close();
}
private void writeThrowsNotImplemented(ServiceMethod method) {
indentPrintln("throw new OperationFailedException (\"" + method.getName() + " has not been implemented\");");
}
private String initLower(String str) {
return str.substring(0, 1).toLowerCase() + str.substring(1);
}
private void writeBoilerPlate() {
indentPrintln("");
indentPrintln("private StatusInfo newStatus() {");
indentPrintln(" StatusInfo status = new StatusInfo();");
indentPrintln(" status.setSuccess(Boolean.TRUE);");
indentPrintln(" return status;");
indentPrintln("}");
if (isR1) {
this.writeBoilerPlateR1();
} else {
this.writeBoilerPlateR2();
}
}
private void writeBoilerPlateR1() {
importsAdd("org.kuali.student.common.dto.MetaInfo");
indentPrintln("");
indentPrintln("private MetaInfo newMeta() {");
indentPrintln(" MetaInfo meta = new MetaInfo();");
indentPrintln(" meta.setCreateId(\"MOCKUSER\");");
importsAdd(Date.class.getName());
indentPrintln(" meta.setCreateTime(new Date());");
indentPrintln(" meta.setUpdateId(\"MOCKUSER\");");
indentPrintln(" meta.setUpdateTime(meta.getCreateTime());");
indentPrintln(" meta.setVersionInd(\"0\");");
indentPrintln(" return meta;");
indentPrintln("}");
indentPrintln("");
indentPrintln("private MetaInfo updateMeta(MetaInfo meta) {");
indentPrintln(" meta.setUpdateId(\"MOCKUSER\");");
indentPrintln(" meta.setUpdateTime(new Date());");
indentPrintln(" meta.setVersionInd((Integer.parseInt(meta.getVersionInd()) + 1) + \"\");");
indentPrintln(" return meta;");
indentPrintln("}");
indentPrintln("");
}
private void writeBoilerPlateR2() {
importsAdd("org.kuali.student.r2.common.dto.MetaInfo");
indentPrintln("");
indentPrintln("private MetaInfo newMeta(ContextInfo context) {");
indentPrintln(" MetaInfo meta = new MetaInfo();");
indentPrintln(" meta.setCreateId(context.getPrincipalId());");
importsAdd(Date.class.getName());
indentPrintln(" meta.setCreateTime(new Date());");
indentPrintln(" meta.setUpdateId(context.getPrincipalId());");
indentPrintln(" meta.setUpdateTime(meta.getCreateTime());");
indentPrintln(" meta.setVersionInd(\"0\");");
indentPrintln(" return meta;");
indentPrintln("}");
indentPrintln("");
indentPrintln("private MetaInfo updateMeta(MetaInfo old, ContextInfo context) {");
indentPrintln(" MetaInfo meta = new MetaInfo(old);");
indentPrintln(" meta.setUpdateId(context.getPrincipalId());");
indentPrintln(" meta.setUpdateTime(new Date());");
indentPrintln(" meta.setVersionInd((Integer.parseInt(meta.getVersionInd()) + 1) + \"\");");
indentPrintln(" return meta;");
indentPrintln("}");
indentPrintln("");
}
private void writeValidate(ServiceMethod method) {
indentPrintln("// validate");
indentPrintln("return new ArrayList ();");
this.importsAdd(ArrayList.class.getName());
}
private void writeCacheVariable(ServiceMethod method) {
indentPrintln("// cache variable ");
String objectName = calcObjectName(method);
String mapName = calcMapName(method);
indentPrintln("// The LinkedHashMap is just so the values come back in a predictable order");
indentPrintln("private Map " + mapName + " = new LinkedHashMap();");
importsAdd(Map.class.getName());
importsAdd(LinkedHashMap.class.getName());
}
private void writeCreate(ServiceMethod method) {
indentPrintln("// create ");
ServiceMethodParameter typeParam = this.findTypeParameter(method);
ServiceMethodParameter infoParam = this.findInfoParameter(method);
ServiceMethodParameter contextParam = this.findContextParameter(method);
String objectName = calcObjectName(method);
String infoName = objectName + "Info";
String mapName = calcMapName(method);
if (typeParam != null) {
indentPrintln("if (!" + typeParam.getName() + ".equals (" + infoParam.getName() + ".getTypeKey())) {");
indentPrintln(" throw new InvalidParameterException (\"The type parameter does not match the type on the info object\");");
indentPrintln("}");
}
if (method.getParameters().size() > 3) {
indentPrintln("// TODO: check the rest of the readonly fields that are specified on the create to make sure they match the info object");
}
if (isR1) {
indentPrintln("// don't have deep copy in R1 contracts so just use the object");
indentPrintln(infoName + " copy = " + infoParam.getName() + ";");
} else {
indentPrintln(infoName + " copy = new " + infoName + "(" + infoParam.getName() + ");");
}
indentPrintln("if (copy.getId() == null) {");
// indentPrintln(" copy.setId(" + mapName + ".size() + \"\");");
indentPrintln(" copy.setId(UUIDHelper.genStringUUID());");
indentPrintln("}");
if (contextParam != null) {
indentPrintln("copy.setMeta(newMeta(" + contextParam.getName() + "));");
}
indentPrintln(mapName + ".put(copy.getId(), copy);");
if (isR1) {
indentPrintln("return copy;");
} else {
indentPrintln("return new " + infoName + "(copy);");
}
}
private void writeAdd(ServiceMethod method) {
indentPrintln("// Add ");
ServiceMethodParameter typeParam = this.findTypeParameter(method);
ServiceMethodParameter infoParam = this.findInfoParameter(method);
ServiceMethodParameter contextParam = this.findContextParameter(method);
String objectName = calcObjectName(method);
String infoName = objectName + "Info";
String mapName = calcMapName(method);
if (typeParam != null) {
indentPrintln("if (!" + typeParam.getName() + ".equals (" + infoParam.getName() + ".getTypeKey())) {");
indentPrintln(" throw new InvalidParameterException (\"The type parameter does not match the type on the info object\");");
indentPrintln("}");
}
if (method.getParameters().size() > 3) {
indentPrintln("// TODO: check the rest of the readonly fields that are specified on the create to make sure they match the info object");
}
if (isR1) {
indentPrintln("// don't have deep copy in R1 contracts so just use the object");
indentPrintln(infoName + " copy = " + infoParam.getName() + ";");
} else {
indentPrintln(infoName + " copy = new " + infoName + "(" + infoParam.getName() + ");");
}
indentPrintln("if (copy.getId() == null) {");
// indentPrintln(" copy.setId(" + mapName + ".size() + \"\");");
indentPrintln(" copy.setId(UUIDHelper.genStringUUID());");
indentPrintln("}");
if (contextParam != null) {
indentPrintln("copy.setMeta(newMeta(" + contextParam.getName() + "));");
}
indentPrintln(mapName + ".put(copy.getId(), copy);");
if (isR1) {
indentPrintln("return copy;");
} else {
indentPrintln("return new " + infoName + "(copy);");
}
}
private ServiceMethodParameter findIdParameter(ServiceMethod method) {
String idFieldName = calcObjectName(method) + "Id";
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("String")) {
if (parameter.getName().equals(idFieldName)) {
return parameter;
}
}
}
// if only one parameter and it is a string then grab that
if (method.getParameters().size() == 1) {
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("String")) {
return parameter;
}
}
}
// can't find name exactly
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("String")) {
if (parameter.getName().endsWith("Id")) {
return parameter;
}
}
}
// can't find name exactly try key
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("String")) {
if (!parameter.getName().endsWith("TypeKey")) {
if (parameter.getName().endsWith("Key")) {
return parameter;
}
}
}
}
System.out.println ("Could not find the Id paramter for " + method.getService() + "." + method.getName() + " so returning the first one");
return method.getParameters().get(0);
}
private ServiceMethodParameter findContextParameter(ServiceMethod method) {
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("ContextInfo")) {
return parameter;
}
}
return null;
}
private ServiceMethodParameter findInfoParameter(ServiceMethod method) {
String objectName = calcObjectName(method) + "Info";
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals(objectName)) {
return parameter;
}
}
if (method.getParameters().size() >= 1) {
return method.getParameters().get(0);
}
return null;
}
private ServiceMethodParameter findTypeParameter(ServiceMethod method) {
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("String")) {
if (parameter.getName().endsWith("TypeKey")) {
return parameter;
}
if (parameter.getName().endsWith("Type")) {
return parameter;
}
}
}
return null;
}
private String calcMapName(ServiceMethod method) {
String mapName = this.calcObjectName(method);
mapName = this.initLower(mapName) + "Map";
return mapName;
}
private String calcObjectName(ServiceMethod method) {
if (method.getName().startsWith("create")) {
return method.getName().substring("create".length());
}
if (method.getName().startsWith("update")) {
return method.getName().substring("update".length());
}
if (method.getName().startsWith("validate")) {
return method.getName().substring("validate".length());
}
if (method.getName().startsWith("delete")) {
return method.getName().substring("delete".length());
}
if (method.getName().startsWith("get")) {
if (method.getReturnValue().getType().equals("StringList")) {
if (method.getName().contains("IdsBy")) {
return method.getName().substring("get".length(),
method.getName().indexOf("IdsBy"));
}
if (method.getName().contains("IdsFor")) {
return method.getName().substring("get".length(),
method.getName().indexOf("IdsFor"));
}
return method.getName().substring("get".length());
}
String name = method.getReturnValue().getType();
if (name.endsWith("List")) {
name = name.substring(0, name.length() - "List".length());
}
if (name.endsWith("Info")) {
name = name.substring(0, name.length() - "Info".length());
}
return name;
}
if (method.getName().startsWith("add")) {
return method.getName().substring("add".length());
}
if (method.getName().startsWith("remove")) {
return method.getName().substring("remove".length());
}
throw new IllegalArgumentException(method.getName());
}
private void writeUpdate(ServiceMethod method) {
indentPrintln("// update");
ServiceMethodParameter idParam = this.findIdParameter(method);
ServiceMethodParameter infoParam = this.findInfoParameter(method);
ServiceMethodParameter contextParam = this.findContextParameter(method);
if (infoParam == null) {
throw new NullPointerException(method.getName());
}
String objectName = calcObjectName(method);
String infoName = objectName + "Info";
String mapName = calcMapName(method);
if (idParam != null) {
indentPrintln("if (!" + idParam.getName() + ".equals (" + infoParam.getName() + ".getId())) {");
indentPrintln(" throw new InvalidParameterException (\"The id parameter does not match the id on the info object\");");
indentPrintln("}");
}
if (isR1) {
indentPrintln("// don't have deep copy in R1 contracts so just use the object");
indentPrintln(infoName + " copy = " + infoParam.getName() + ";");
} else {
indentPrintln(infoName + " copy = new " + infoName + "(" + infoParam.getName() + ");");
}
if (contextParam != null) {
indentPrintln(infoName + " old = this.get" + objectName + "(" + infoParam.getName() + ".getId(), " + contextParam.getName() + ");");
} else {
indentPrintln(infoName + " old = this.get" + objectName + "(" + infoParam.getName() + ".getId());");
}
if (isR1) {
indentPrintln("if (!old.getMetaInfo().getVersionInd().equals(copy.getMetaInfo().getVersionInd())) {");
indentPrintln(" throw new VersionMismatchException(old.getMetaInfo().getVersionInd());");
indentPrintln("}");
if (contextParam != null) {
indentPrintln("copy.setMeta(updateMeta(copy.getMetaInfo()));");
}
} else {
indentPrintln("if (!old.getMeta().getVersionInd().equals(copy.getMeta().getVersionInd())) {");
indentPrintln(" throw new VersionMismatchException(old.getMeta().getVersionInd());");
indentPrintln("}");
if (contextParam != null) {
indentPrintln("copy.setMeta(updateMeta(copy.getMeta(), " + contextParam.getName() + "));");
}
}
indentPrintln("this." + mapName + " .put(" + infoParam.getName() + ".getId(), copy);");
if (isR1) {
indentPrintln("return copy;");
} else {
indentPrintln("return new " + infoName + "(copy);");
}
}
private void writeDelete(ServiceMethod method) {
ServiceMethodParameter idParam = this.findIdParameter(method);
String mapName = calcMapName(method);
indentPrintln("if (this." + mapName + ".remove(" + idParam.getName() + ") == null) {");
indentPrintln(" throw new DoesNotExistException(" + idParam.getName() + ");");
indentPrintln("}");
indentPrintln("return newStatus();");
}
private void writeRemove(ServiceMethod method) {
ServiceMethodParameter idParam = this.findIdParameter(method);
String mapName = calcMapName(method);
indentPrintln("if (this." + mapName + ".remove(" + idParam.getName() + ") == null) {");
indentPrintln(" throw new DoesNotExistException(" + idParam.getName() + ");");
indentPrintln("}");
indentPrintln("return newStatus();");
}
private void writeGetById(ServiceMethod method) {
ServiceMethodParameter idParam = this.findIdParameter(method);
String mapName = calcMapName(method);
indentPrintln("if (!this." + mapName + ".containsKey(" + idParam.getName() + ")) {");
indentPrintln(" throw new DoesNotExistException(" + idParam.getName() + ");");
indentPrintln("}");
String objectName = calcObjectName(method);
String infoName = objectName + "Info";
if (isR1) {
indentPrintln("return this." + mapName + ".get (" + idParam.getName() + ");");
} else {
indentPrintln("return new " + infoName + "(this." + mapName + ".get (" + idParam.getName() + "));");
}
}
private void writeGetByIds(ServiceMethod method) {
String objectName = this.calcObjectName(method);
String infoName = objectName + "Info";
ServiceMethodParameter idListParam = this.findIdListParameter(method);
ServiceMethodParameter contextParam = this.findContextParameter(method);
indentPrintln("List<" + infoName + "> list = new ArrayList<" + infoName + "> ();");
indentPrintln("for (String id: " + idListParam.getName() + ") {");
indentPrintln(" list.add (this.get" + objectName + "(id, " + contextParam.getName() + "));");
indentPrintln("}");
indentPrintln("return list;");
}
private void writeGetIdsByOther(ServiceMethod method) {
String objectName = this.calcObjectName(method);
String infoName = objectName + "Info";
String mapName = calcMapName(method);
indentPrintln("List list = new ArrayList ();");
indentPrintln("for (" + infoName + " info: " + mapName + ".values ()) {");
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("ContextInfo")) {
continue;
}
incrementIndent();
indentPrintln("if (" + parameter.getName() + ".equals(info.get" + initUpper(parameter.getName()) + "())) {");
}
indentPrintln(" list.add (info.getId ());");
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("ContextInfo")) {
continue;
}
indentPrintln("}");
decrementIndent();
}
indentPrintln("}");
indentPrintln("return list;");
}
private void writeGetIdsByType(ServiceMethod method) {
String objectName = this.calcObjectName(method);
String infoName = objectName + "Info";
String mapName = calcMapName(method);
indentPrintln("List list = new ArrayList ();");
indentPrintln("for (" + infoName + " info: " + mapName + ".values ()) {");
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("ContextInfo")) {
continue;
}
incrementIndent();
indentPrintln("if (" + parameter.getName() + ".equals(info.getTypeKey())) {");
}
indentPrintln(" list.add (info.getId ());");
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("ContextInfo")) {
continue;
}
indentPrintln("}");
decrementIndent();
}
indentPrintln("}");
indentPrintln("return list;");
}
private void writeGetInfosByOther(ServiceMethod method) {
String objectName = this.calcObjectName(method);
String infoName = objectName + "Info";
String mapName = calcMapName(method);
indentPrintln("List<" + infoName + "> list = new ArrayList<" + infoName + "> ();");
indentPrintln("for (" + infoName + " info: " + mapName + ".values ()) {");
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("ContextInfo")) {
continue;
}
incrementIndent();
indentPrintln("if (" + parameter.getName() + ".equals(info.get" + initUpper(parameter.getName()) + "())) {");
}
indentPrintln(" list.add (info);");
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("ContextInfo")) {
continue;
}
indentPrintln("}");
decrementIndent();
}
indentPrintln("}");
indentPrintln("return list;");
}
private void writeGetType(ServiceMethod method) {
ServiceMethodParameter idParam = this.findIdParameter(method);
String mapName = calcMapName(method);
indentPrintln("if (!this." + mapName + ".containsKey(" + idParam.getName() + ")) {");
indentPrintln(" throw new DoesNotExistException(" + idParam.getName() + ");");
indentPrintln("}");
indentPrintln("return this." + mapName + ".get (" + idParam.getName() + ");");
}
private void writeGetTypes(ServiceMethod method) {
String mapName = calcMapName(method);
String objectName = this.calcObjectName(method);
String infoName = objectName + "Info";
indentPrintln("return new ArrayList<" + infoName + ">(" + mapName + ".values ());");
}
private String initUpper(String str) {
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
private ServiceMethodParameter findIdListParameter(ServiceMethod method) {
String idFieldName = calcObjectName(method) + "Ids";
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("StringList")) {
if (parameter.getName().equals(idFieldName)) {
return parameter;
}
}
}
// can't find name exactly
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("StringList")) {
if (parameter.getName().endsWith("Ids")) {
return parameter;
}
}
}
// can't find name exactly try key
for (ServiceMethodParameter parameter : method.getParameters()) {
if (parameter.getType().equals("StringList")) {
if (parameter.getName().endsWith("Keys")) {
return parameter;
}
}
}
return null;
}
private String stripList(String str) {
return GetterSetterNameCalculator.stripList(str);
}
private String calcExceptionClassName(ServiceMethodError error) {
if (error.getClassName() == null) {
return ServiceExceptionWriter.calcClassName(error.getType());
}
return error.getClassName();
}
private String calcExceptionPackageName(ServiceMethodError error) {
if (error.getClassName() == null) {
return ServiceExceptionWriter.calcPackage(rootPackage);
}
return error.getPackageName();
}
private String calcType(String type, String realType) {
XmlType t = finder.findXmlType(this.stripList(type));
return MessageStructureTypeCalculator.calculate(this, model, type, realType,
t.getJavaPackage());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy