All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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.getKey() + "Service" + ".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", "Key");
        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( "
"); 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("Operations"); 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( "Main Message Structures"); 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.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.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("" + param.getType() + ""); writer.indentPrint("
"); writer.indentPrintln("" + method.getReturnValue().getType() + ""); writer.indentPrint("
"); 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