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

com.xcase.rest.generator.WritableDefinition Maven / Gradle / Ivy

package com.xcase.rest.generator;

import java.util.Arrays;

/**
 *
 * @author martinpg
 */
public abstract class WritableDefinition {
    public int textPadding = 0;
    
    public String defaultReturnValue(String returnType) {
        if (returnType == "int") {
            return "-1";
        }

        return "null";
    }

    public String getDefaultType(Parameter parameter) {
        if (parameter.Type != null) {
            String typeName = parameter.Type.TypeName;
            if (typeName == "file") {
                return "Map";
            }
            if (parameter.Type.IsNullableType) {
                //typeName += "?";
            }

            /* Ugly hack to manage parameters of Array type */
            String output = ((parameter.CollectionFormat == "multi") && !typeName.endsWith("[]")) ? typeName + "[]" : typeName;
            /* Ugly hack and will not work if type is both array and contains [ or ] */
            if (!output.contains("[]")) {
                output = RESTParser.fixTypeName(output);
            } else {
//              LOGGER.debug("output contains [] " + output);
            }
            
            if (output == "bool") {
                output = "boolean";
            }
            
            if (output == "DateTime") {
                output = "Date";
            }
            
            if (output == "int[][]") {
                output = "int[]";
            }
            
            if (output == "long?") {
                output = "long";
            }
            
            if (output == "string") {
                output = "String";
            }
            
            if (output.equals("string[]")) {
                output = "String[]";
            }
            
            if (output == "string[][]") {
                output = "String[]";
            }
            
            return output;
        } else {
            return "String";
        }
    }

    public String getDefaultTypeName(Parameter x) {
        if (x.Type.TypeName.endsWith("Data") || x.Type.TypeName.endsWith("Data[]")) {
            /* TODO: do we need to do this?
            return "body";
             */
        }
        
        return x.Type.getCleanJavaTypeName();
    }
    
    public String getElementType(Parameter parameter) {
        return trimArray(getDefaultType(parameter));
    }
    
    public boolean isIntrinsicType(String typeName) {
        switch (typeName.toLowerCase()) {
            case "bool":
            case "boolean":
            case "byte":
            case "enum":
            case "int":
            case "long":
            case "DateTime":
            case "float":
            case "double":
                return true;
            default:
                return false;
        }
    }
    
    public String reformat(String description) {
        if (description == null) {
            return "";
        } else {
            return description.replace("\n", " ").replace("\r", " ").replaceAll(" +", " ");
        }
    }
    
    public boolean toStringIsValid(Parameter parameter) {
        if (parameter.Type.EnumValues != null) {
            return false;
        }
        
        String type = parameter.Type.getCleanJavaTypename();
        if (type != null) {
            if (type == "boolean") {
                return false;
            }
            
            if (type == "int") {
                return false;
            }
            
            if (type == "int[]") {
                return false;
            }
            
            if (type == "long") {
                return false;
            }
        }
        
        return true;
    }
    
    public String trimArray(String type) {
        if (type.endsWith("[]")) {
            return type.substring(0, type.length() - 2);
        }
        
        return type;
    }
    
    public void writeHeaders(StringBuilder stringBuilder, String packageString) {
        writeLine(stringBuilder, "package " + packageString + ";");
        writeLine(stringBuilder);
        writeImportLine(stringBuilder, "java.io.*");
        writeImportLine(stringBuilder, "java.net.*");
        writeImportLine(stringBuilder, "java.util.*");
        writeImportLine(stringBuilder, "org.apache.commons.lang3.*");
        writeImportLine(stringBuilder, "org.apache.http.*");
        writeImportLine(stringBuilder, "org.apache.http.message.*");
        writeImportLine(stringBuilder, "org.apache.logging.log4j.*");
        writeImportLine(stringBuilder, "com.google.gson.*");
        writeImportLine(stringBuilder, "com.xcase.common.impl.simple.core.CommonHTTPManager");
        writeImportLine(stringBuilder, "com.xcase.common.utils.URLUtils");
        writeImportLine(stringBuilder, "com.xcase.rest.generator.*");
        writeImportLine(stringBuilder, "com.xcase.rest.generator.swagger.*");
        writeLine(stringBuilder);
    }
    
    public void writeIfNotNullStatementClosing(StringBuilder stringBuilder, String parameterName, String typeName) {
        writeLine(stringBuilder, "}");
    }

    public void writeIfNotNullStatementOpening(StringBuilder stringBuilder, String parameterName, String typeName) {
        if (isIntrinsicType(typeName)) {
            writeLine(stringBuilder, "if (true) {");
        } else {
            writeLine(stringBuilder, "if (" + parameterName + " != null) {");
        }
    }
    
    public void writeImportLine(StringBuilder stringBuilder, String importString) {
        writeLine(stringBuilder, "import " + importString + ";");
    }
    
    public void writeLine(StringBuilder stringBuilder) {
        stringBuilder.append("\n");
    }

    public void writeLine(StringBuilder stringBuilder, String text) {
        if (text.trim().endsWith("}") && textPadding != 0) {
            textPadding--;
        }

        char[] c = new char[textPadding * 4];
        Arrays.fill(c, ' ');
        String indent = new String(c);
        stringBuilder.append(indent + text + "\n");
        if (text.trim().endsWith("{")) {
            textPadding++;
        }
    }  
    
    public void writeLogger(StringBuilder stringBuilder) {
        writeLine(stringBuilder);
        writeLine(stringBuilder, "protected static final Logger LOGGER = LogManager.getLogger();");
        writeLine(stringBuilder);
    }

    public void writeLogger(StringBuilder stringBuilder, String className) {
        writeLine(stringBuilder);
        writeLine(stringBuilder, "protected static final Logger LOGGER = LogManager.getLogger(" + className + ".class);");
        writeLine(stringBuilder);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy