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

org.kuali.student.contract.model.util.HtmlContractMessageStructureWriter 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.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;

import org.kuali.student.contract.model.MessageStructure;
import org.kuali.student.contract.model.ServiceContractModel;
import org.kuali.student.contract.model.ServiceMethod;
import org.kuali.student.contract.model.ServiceMethodParameter;
import org.kuali.student.contract.model.XmlType;
import org.kuali.student.contract.writer.HtmlWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * @author nwright
 */
public class HtmlContractMessageStructureWriter {

	private static final Logger log = LoggerFactory.getLogger(HtmlContractMessageStructureWriter.class);
	
    private XmlType xmlType;
    private HtmlWriter writer;
    private ServiceContractModel model;
    private ModelFinder finder;

    public HtmlContractMessageStructureWriter(XmlType xmlType, String directory,
            ServiceContractModel model) {
        this.xmlType = xmlType;
        this.writer = new HtmlWriter(directory, xmlType.getName() + ".html",
                xmlType.getName());
        this.model = model;
        this.finder = new ModelFinder(this.model);
    }

    private String initUpper(String str) {
        if (str == null) {
            return null;
        }
        if (str.length() == 0) {
            return str;
        }
        if (str.length() == 1) {
            return str.toUpperCase();
        }
        return str.substring(0, 1).toUpperCase() + str.substring(1);
    }

    private boolean isMainMessageStructure(XmlType xmlType) {
        if (!HtmlContractMessageStructureWriter.calcOtherXmlTypeUsages(model,
                xmlType).isEmpty()) {
            return false;
        }
        return true;
    }

    public void write(String projectVersion, String formattedDate) {
       
        this.writeStyleSheet();
       
        
        if (this.isMainMessageStructure(xmlType)) {
        	VersionLinesUtility.writeVersionTag(writer, "home", "dictionary doc", projectVersion, formattedDate);
        }
        else 
        	VersionLinesUtility.writeVersionTag(writer, "home", "" ,projectVersion, formattedDate);
        

        writer.writeTag("h1", xmlType.getName());
        
        writer.indentPrintln("");
        writer.indentPrintln("");
        writer.writeTag("th", "class=h", "Name");
        writer.writeTag("td", "id=structureName colspan=2", xmlType.getName());
        writer.indentPrintln("");
//  writer.indentPrintln ("");
//  writer.writeTag ("th", "class=h", "Version");
//  writer.writeTag ("td", "id=structureVersion colspan=2", xmlType.getVersion ());
//  writer.indentPrintln ("");
        writer.indentPrintln("");
        writer.writeTag("th", "rowspan=3 class=h", "Usage");
        writer.indentPrint("");

        writer.indentPrintln("");
        writer.indentPrintln("");
        writer.writeTag("th", "class=h", "");
        writer.indentPrint("");
        writer.indentPrintln("");
        writer.indentPrintln("");
        writer.writeTag("th", "class=h", "");
        writer.indentPrint("");
        writer.indentPrintln("");

        writer.writeTag("th", "class=h", "Type");
        writer.writeTag("td", "id=structureVersion colspan=2",
                xmlType.getPrimitive());
        writer.indentPrintln("");
        writer.indentPrintln("
"); for (String servKey : xmlType.getService().split(",")) { writer.indentPrintln("" + servKey + "Service" + ""); } writer.indentPrint("
"); for (ServiceMethod method : this.calcUsageByMethods(xmlType)) { writer.indentPrintln("" + method.getName() + ""); } writer.indentPrint("
"); for (String xmlTypeName : this.calcOtherXmlTypeUsages(xmlType)) { XmlType usageType = finder.findXmlType(xmlTypeName); if (usageType == null) { throw new NullPointerException("Coud not find XmlType with name=" + xmlTypeName); } writer.indentPrintln("" + usageType.getName() + ""); } writer.indentPrint("
"); writer.writeTag("h2", "Description"); writer.indentPrintln(this.addHTMLBreaks(calcDescription (xmlType))); if (!xmlType.getPrimitive().equals(XmlType.COMPLEX)) { return; } writer.indentPrintln( "

Structure Definition

"); 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(""); for (MessageStructure ms : finder.findMessageStructures(xmlType.getName())) { this.writeMessageStructure(ms); } writer.indentPrintln("
ShortNameNameTypeDescriptionRequired?Read only?CardinalityXML Attribute?StatusImplementation Notes
"); writer.writeHeaderBodyAndFooterOutToFile(); } private String calcDescription(XmlType xmlType) { StringBuilder sb = new StringBuilder(); String newLine = ""; if (xmlType.getDesc() != null && !xmlType.getDesc().trim().isEmpty()) { sb.append(newLine); newLine = "\n"; sb.append(xmlType.getDesc ()); } if (xmlType.isDeprecated()) { sb.append(newLine); newLine = "\n"; sb.append("============== Deprecated ==============="); } return sb.toString(); } private String checkForNbsp(String str) { if (str == null) { return " "; } if (str.trim().isEmpty()) { return " "; } return str; } private String addHTMLBreaks(String str) { if (str == null) { return " "; } return str.replaceAll("(\r\n|\r|\n|\n\r)", "
"); } public static Set calcUsageByService(ServiceContractModel mdl, XmlType xmlType) { Set services = new HashSet(); for (ServiceMethod method : calcUsageByMethods(mdl, xmlType)) { services.add(method.getService()); } return services; } private Set calcUsageByMethods(XmlType xmlType) { return calcUsageByMethods(model, xmlType); } public static Set calcUsageByMethods(ServiceContractModel mdl, XmlType xmlType) { Set methods = new LinkedHashSet(); for (ServiceMethod method : mdl.getServiceMethods()) { if (stripListFromType(method.getReturnValue().getType()).equalsIgnoreCase(xmlType.getName())) { methods.add(method); continue; } for (ServiceMethodParameter param : method.getParameters()) { if (stripListFromType(param.getType()).equalsIgnoreCase(xmlType.getName())) { methods.add(method); break; } } } return methods; } private Set calcOtherXmlTypeUsages(XmlType xmlType) { return calcOtherXmlTypeUsages(model, xmlType); } public static Set calcOtherXmlTypeUsages(ServiceContractModel mdl, XmlType xmlType) { Set xmlTypeNames = new LinkedHashSet(); for (MessageStructure ms : mdl.getMessageStructures()) { if (ms.getType() == null) { throw new NullPointerException(ms.getId() + " has no type set"); } if (stripListFromType(ms.getType()).equalsIgnoreCase(xmlType.getName())) { xmlTypeNames.add(ms.getXmlObject()); } } return xmlTypeNames; } private void writeMessageStructure(MessageStructure ms) { writer.indentPrintln(""); writer.writeTag("td", "class=\"structSName\"", ms.getShortName()); writer.writeTag("td", "class=\"structLName\"", ms.getName()); XmlType subType = finder.findXmlType(this.stripListFromType(ms.getType())); if (subType == null) { // for (XmlType xmlt : model.getXmlTypes()) { // System.out.println(this.getClass().getSimpleName() + ": " // + xmlt.getName()); // } // throw new NullPointerException(ms.getXmlObject() + "." + ms.getShortName() // + " has type " + ms.getType() // + " was not found in list of known types"); log.error (ms.getXmlObject() + "." + ms.getShortName() + " has type " + ms.getType() + " was not found in list of known types"); return; } if (subType.getPrimitive().equals(XmlType.COMPLEX)) { writer.indentPrint(""); writer.indentPrintln("" + ms.getType() + ""); writer.indentPrint(""); } else { writer.writeTag("td", "class=\"structType\"", ms.getType()); } writer.writeTag("td", "class=\"structDesc\"", addHTMLBreaks(missingData( calcDescription(ms)))); writer.writeTag("td", "class=\"structOpt\"", checkForNbsp(ms.getRequired())); writer.writeTag("td", "class=\"structOpt\"", checkForNbsp(ms.getReadOnly())); writer.writeTag("td", "class=\"structCard\"", ms.getCardinality()); writer.writeTag("td", "class=\"structAttr\"", ms.getXmlAttribute()); // writer.writeTag ("td", "class=\"structStatus\"", ms.getStatus ()); writer.writeTag("td", "class=\"commentsDesc\"", addHTMLBreaks(this.checkForNbsp(ms.getImplNotes()))); writer.indentPrintln(""); // writer.indentPrintln (""); // writer.indentPrintln ("

"); // writer.indentPrintln ("

"); } private String calcDescription(MessageStructure ms) { StringBuilder sb = new StringBuilder(); String newLine = ""; if (ms.getDescription() != null && !ms.getDescription().trim().isEmpty()) { sb.append(newLine); newLine = "\n"; sb.append(ms.getDescription()); } if (ms.isDeprecated()) { sb.append(newLine); newLine = "\n"; sb.append("============== Deprecated ==============="); } return sb.toString(); } private String missingData(String str) { if (str == null) { return "???"; } if (str.trim().isEmpty()) { return "???"; } return str; } 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