
org.kuali.student.contract.model.util.HtmlContractServiceWriter Maven / Gradle / Ivy
/*
* Copyright 2011 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.model.util;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
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.writer.HtmlWriter;
/**
*
* @author nwright
*/
public class HtmlContractServiceWriter {
private Service service;
private HtmlWriter writer;
private ServiceContractModel model;
private ModelFinder finder;
public HtmlContractServiceWriter(Service service, String directory,
ServiceContractModel model) {
this.service = service;
this.writer = new HtmlWriter(directory, service.getName() + ".html",
service.getName());
this.model = model;
this.finder = new ModelFinder(this.model);
}
public void write(String projectVersion, String formattedDate) {
this.writeStyleSheet();
VersionLinesUtility.writeVersionTag(writer, "home", "", projectVersion, formattedDate);
writer.writeTag("h1", service.getName());
writer.indentPrintln("");
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Name");
writer.writeTag("td", "id=serviceName colspan=2", service.getKey());
writer.indentPrintln(" ");
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Version");
writer.writeTag("td", "id=serviceVersion colspan=2", service.getVersion());
writer.indentPrintln(" ");
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Included Services");
writer.writeTag("td", "id=serviceVersion colspan=2", calcIncludedServices(
service.getIncludedServices()));
writer.indentPrintln(" ");
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Java Package");
writer.writeTag("td", "id=serviceVersion colspan=2", service.getImplProject());
writer.indentPrintln(" ");
writer.indentPrintln("
");
// writer.indentPrintln ("");
// writer.indentPrintln ("");
writer.indentPrintln("");
// writer.indentPrintln("
");
// writer.indentPrintln("");
// writer.indentPrintln("");
writer.indentPrintln(
"");
writer.indentPrintln(
"");
writer.indentPrintln(this.addHTMLBreaks(service.getComments()));
writer.indentPrintln("");
writer.indentPrintln("");
// writer.indentPrintln(" ");
// writer.indentPrintln(" ");
// writer.indentPrintln("
");
// writer.indentPrintln ("");
// writer.indentPrintln ("");
writer.indentPrintln("");
writer.indentPrintln(
"
");
writer.indentPrintln(
"");
writer.indentPrintln("");
for (ServiceMethod method : finder.getServiceMethodsInService(
service.getKey())) {
writer.indentPrint("- ");
writer.print("" + method.getName() + "");
writer.print("
");
}
writer.indentPrintln("
");
writer.indentPrintln("");
writer.indentPrintln("");
// now write out the root message structures
writer.indentPrintln(
"");
writer.indentPrintln(
"");
writer.indentPrintln("");
for (XmlType type : this.calcMainMessageStructures()) {
writer.indentPrint("- ");
writer.print("" + type.getName() + "");
writer.print("
");
}
writer.indentPrintln("
");
for (ServiceMethod method : finder.getServiceMethodsInService(
service.getKey())) {
this.writeMethod(method);
}
writer.writeHeaderBodyAndFooterOutToFile();
writer.getOut().close();
}
private String calcIncludedServices(List includedServices) {
if (includedServices == null) {
return " ";
}
if (includedServices.isEmpty()) {
return " ";
}
StringBuilder bldr = new StringBuilder();
String comma = "";
for (String includedService : includedServices) {
bldr.append(comma);
comma = ", ";
bldr.append("" + includedService + "");
}
return bldr.toString();
}
private Set calcMainMessageStructures() {
return calcMainMessageStructures(model, service.getKey());
}
public static Set calcMainMessageStructures(ServiceContractModel mdl,
String serviceOptionaFilter) {
ModelFinder fndr = new ModelFinder(mdl);
Set types = new LinkedHashSet();
for (ServiceMethod method : mdl.getServiceMethods()) {
if (serviceOptionaFilter != null) {
if (!method.getService().equalsIgnoreCase(serviceOptionaFilter)) {
continue;
}
}
XmlType type = fndr.findXmlType(stripListFromType(method.getReturnValue().getType()));
if (type != null) {
if (type.getPrimitive().equalsIgnoreCase(XmlType.COMPLEX)) {
types.add(type);
}
}
for (ServiceMethodParameter param : method.getParameters()) {
type = fndr.findXmlType(stripListFromType(param.getType()));
if (type != null) {
if (type.getPrimitive().equalsIgnoreCase(XmlType.COMPLEX)) {
types.add(type);
}
}
break;
}
}
return types;
}
private String addHTMLBreaks(String str) {
if (str == null) {
return " ";
}
return str.replaceAll("(\r\n|\r|\n|\n\r)", "
");
}
public void writeMethod(ServiceMethod method) {
writer.indentPrintln("");
writer.indentPrintln("");
writer.indentPrintln("
");
writer.indentPrintln("
");
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Method");
writer.writeTag("th", "class=h colspan=3 class=\"methodName\"",
method.getName());
writer.indentPrintln(" ");
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Description");
writer.writeTag("td", "colspan=3 class=\"methodDesc\"",
this.addHTMLBreaks(calcDescription(method)));
writer.indentPrintln(" ");
if (method.getImplNotes() != null && !method.getImplNotes().isEmpty()) {
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Implementation Notes");
writer.writeTag("td", "colspan=3 class=\"methodDesc\"",
this.addHTMLBreaks(method.getImplNotes()));
writer.indentPrintln(" ");
}
if (method.getParameters().isEmpty()) {
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Parameters");
writer.writeTag("td", "class=\"methodParamType\"", "None");
writer.writeTag("td", "class=\"methodParamName\"", "None");
writer.writeTag("td", "class=\"methodParamDesc\"", "No Parameters");
writer.indentPrintln(" ");
} else {
boolean firstTime = true;
for (ServiceMethodParameter param : method.getParameters()) {
writer.indentPrintln("");
if (firstTime) {
writer.writeTag("th", "class=h rowspan=" + method.getParameters().size(),
"Parameters");
firstTime = false;
}
writer.indentPrint("");
writer.indentPrintln(""
+ param.getType() + "");
writer.indentPrint(" ");
writer.writeTag("td", "class=\"methodParamName\"", param.getName());
writer.writeTag("td", "class=\"methodParamDesc\"", this.addHTMLBreaks(
param.getDescription()));
writer.indentPrintln(" ");
}
}
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Return");
writer.indentPrint("");
writer.indentPrintln(""
+ method.getReturnValue().getType() + "");
writer.indentPrint(" ");
writer.writeTag("td", "class=\"methodReturnDesc\"",
this.addHTMLBreaks(
method.getReturnValue().getDescription()));
writer.indentPrintln(" ");
writer.indentPrintln("");
if (method.getErrors().isEmpty()) {
writer.indentPrintln("");
writer.writeTag("th", "class=h", "Errors");
writer.writeTag("td", "class=\"methodErrorType\" colspan=2", "NONE");
writer.writeTag("td", "class=\"methodErrorDesc\"", "No Errors");
writer.indentPrintln(" ");
} else {
boolean firstTime = true;
for (ServiceMethodError error : method.getErrors()) {
writer.indentPrintln("");
if (firstTime) {
writer.writeTag("th", "class=h rowspan=" + method.getErrors().size(),
"Errors");
firstTime = false;
}
writer.writeTag("td", "class=\"methodErrorType\" colspan=2",
error.getType()); // TODO wrap in link to type
writer.writeTag("td", "class=\"methodErrorDesc\"", this.addHTMLBreaks(
error.getDescription()));
writer.indentPrintln(" ");
}
}
writer.indentPrintln("
");
writer.indentPrintln("");
writer.indentPrintln("Back to Operations");
writer.indentPrintln("
");
}
private String calcDescription(ServiceMethod method) {
StringBuilder sb = new StringBuilder();
String newLine = "";
if (method.getDescription() != null && !method.getDescription().trim().isEmpty()) {
sb.append(newLine);
newLine = "\n";
sb.append(method.getDescription());
}
if (method.isDeprecated()) {
sb.append(newLine);
newLine = "\n";
sb.append("============== Deprecated ===============");
}
return sb.toString();
}
private static String stripListFromType(String type) {
if (type.endsWith("List")) {
return type.substring(0, type.length() - "List".length());
}
return type;
}
public void writeStyleSheet() {
writer.indentPrintln("");
writer.indentPrintln("");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy