diff --git a/src/org/kar/archidata/dataAccess/DataFactoryTsApi.java b/src/org/kar/archidata/dataAccess/DataFactoryTsApi.java index 83d3012..c93140a 100644 --- a/src/org/kar/archidata/dataAccess/DataFactoryTsApi.java +++ b/src/org/kar/archidata/dataAccess/DataFactoryTsApi.java @@ -269,6 +269,16 @@ public class DataFactoryTsApi { } return out; } + public static String convertInTypeScriptCheckType(final List tmp) { + String out = ""; + for (final ClassElement elem : tmp) { + if (out.length() != 0) { + out += " | "; + } + out += elem.tsCheckType; + } + return out; + } public static APIModel createSingleApi(final Class clazz, final Set> includeModel, final Set> includeCheckerModel, final GeneratedTypes previous) throws Exception { final StringBuilder builder = new StringBuilder(); @@ -297,23 +307,29 @@ public class DataFactoryTsApi { } final boolean needGenerateProgress = apiAnnotationTypeScriptProgress(method); Class[] returnTypeModel = apiAnnotationGetAsyncType(method); - Class returnTypeModelRaw = method.getReturnType(); - if (returnTypeModel == null) { - returnTypeModel = new Class[] { returnTypeModelRaw }; - returnTypeModelRaw = null; - } boolean isUnmanagedReturnType = false; - if (returnTypeModelRaw == Response.class) { - isUnmanagedReturnType = true; - returnTypeModel = new Class[] { Void.class }; - } boolean returnModelIsArray = false; List tmpReturn; - if (returnTypeModelRaw == List.class) { - final ParameterizedType listType = (ParameterizedType) method.getGenericReturnType(); - returnTypeModelRaw = (Class) listType.getActualTypeArguments()[0]; - tmpReturn = List.of(DataFactoryZod.createTable(returnTypeModelRaw, previous)); - returnModelIsArray = true; + if (returnTypeModel == null) { + Class returnTypeModelRaw = method.getReturnType(); + LOGGER.info("Get type: {}", returnTypeModelRaw); + if (returnTypeModelRaw == Response.class) { + LOGGER.info("Get type: {}", returnTypeModelRaw); + } + if (returnTypeModelRaw == Response.class) { + isUnmanagedReturnType = true; + returnTypeModel = new Class[] { Void.class }; + tmpReturn = new ArrayList<>(); + } else if (returnTypeModelRaw == List.class) { + final ParameterizedType listType = (ParameterizedType) method.getGenericReturnType(); + returnTypeModelRaw = (Class) listType.getActualTypeArguments()[0]; + returnModelIsArray = true; + returnTypeModel = new Class[] { returnTypeModelRaw }; + tmpReturn = DataFactoryZod.createTables(returnTypeModel, previous); + } else { + returnTypeModel = new Class[] { returnTypeModelRaw }; + tmpReturn = DataFactoryZod.createTables(returnTypeModel, previous); + } } else { tmpReturn = DataFactoryZod.createTables(returnTypeModel, previous); } @@ -377,12 +393,14 @@ public class DataFactoryTsApi { if (parameterTypeString.length() != 0) { parameterTypeString += " | "; } - parameterTypeString += elem.tsTypeName + "[]"; + parameterTypeString += elem.tsTypeName; } + emptyElement.add(parameterTypeString); } else if (parameterType == List.class) { parameterTypeString = "any[]"; final Class plop = parameterType.arrayType(); LOGGER.info("ArrayType = {}", plop); + emptyElement.add(parameterTypeString); } else { final ClassElement tmp = DataFactoryZod.createTable(parameterType, previous); includeModel.add(tmp.model[0]); @@ -422,7 +440,7 @@ public class DataFactoryTsApi { } builder.append("\n\texport function "); builder.append(methodName); - builder.append("({\t\t\trestConfig,"); + builder.append("({\n\t\t\trestConfig,"); if (!queryParams.isEmpty()) { builder.append("\n\t\t\tqueries,"); } @@ -436,7 +454,7 @@ public class DataFactoryTsApi { builder.append("\n\t\t\tdata,"); } if (needGenerateProgress) { - builder.append(" callback,"); + builder.append("\n\t\t\tcallback,"); } builder.append("\n\t\t}: {"); builder.append("\n\t\trestConfig: RESTConfig,"); @@ -509,9 +527,17 @@ public class DataFactoryTsApi { builder.append("\n\t\tcallback?: RESTCallbacks,"); } builder.append("\n\t}): Promise<"); - builder.append(convertInTypeScriptType(tmpReturn, returnModelIsArray)); + if (tmpReturn.size() == 0 // + || tmpReturn.get(0).tsTypeName == null // + || tmpReturn.get(0).tsTypeName.equals("void")) { + builder.append("void"); + } else { + builder.append(convertInTypeScriptType(tmpReturn, returnModelIsArray)); + } builder.append("> {"); - if (tmpReturn.size() == 0 || tmpReturn.get(0).tsTypeName == null || tmpReturn.get(0).tsTypeName.equals("void")) { + if (tmpReturn.size() == 0 // + || tmpReturn.get(0).tsTypeName == null // + || tmpReturn.get(0).tsTypeName.equals("void")) { builder.append("\n\t\treturn RESTRequestVoid({"); } else if (returnModelIsArray) { builder.append("\n\t\treturn RESTRequestJsonArray({"); @@ -576,7 +602,8 @@ public class DataFactoryTsApi { builder.append("\n\t\t}"); if (tmpReturn.size() != 0 && tmpReturn.get(0).tsTypeName != null && !tmpReturn.get(0).tsTypeName.equals("void")) { builder.append(", "); - builder.append(convertInTypeScriptType(tmpReturn, returnModelIsArray)); + // TODO: correct this it is really bad ... + builder.append(convertInTypeScriptCheckType(tmpReturn)); } builder.append(");"); builder.append("\n\t};"); diff --git a/src/org/kar/archidata/dataAccess/DataFactoryZod.java b/src/org/kar/archidata/dataAccess/DataFactoryZod.java index c5940d0..b673331 100644 --- a/src/org/kar/archidata/dataAccess/DataFactoryZod.java +++ b/src/org/kar/archidata/dataAccess/DataFactoryZod.java @@ -2,6 +2,7 @@ package org.kar.archidata.dataAccess; import java.io.File; import java.io.FileWriter; +import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; @@ -20,6 +21,8 @@ import org.kar.archidata.exception.DataAccessException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import jakarta.ws.rs.core.Response; + public class DataFactoryZod { static final Logger LOGGER = LoggerFactory.getLogger(DataFactoryZod.class); @@ -293,6 +296,9 @@ public class DataFactoryZod { public static List createTables(final Class[] classs, final GeneratedTypes previous) throws Exception { final List out = new ArrayList<>(); for (final Class clazz : classs) { + if (clazz == Response.class) { + throw new IOException("Can not generate a Zod element for an unknow type Response"); + } out.add(createTable(clazz, previous)); } return out; @@ -302,6 +308,9 @@ public class DataFactoryZod { if (clazz == null) { return null; } + if (clazz == Response.class) { + throw new IOException("Can not generate a Zod element for an unknow type Response"); + } final ClassElement alreadyExist = previous.find(clazz); if (previous.find(clazz) != null) { return alreadyExist;