Generando el generador de codigo

master
Christian Paul 2 years ago
commit 7a686ea46d

@ -0,0 +1 @@
Dominio del nuevo flujo para el sincoar

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.qsoft.sincoarv2.rs.domain</groupId>
<artifactId>sincoarv2-rs-domain</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.5.Final</version>
</dependency>
<dependency>
<groupId>com.qsoft.util</groupId>
<artifactId>qsoft-util</artifactId>
<version>1.1.1-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.qsoft</groupId>
<artifactId>otp-util</artifactId>
<version>1.0.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.13.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.15.2</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.6.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.16.0</version>
</dependency>
<dependency>
<groupId>commons-discovery</groupId>
<artifactId>commons-discovery</artifactId>
<version>0.5</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<exec.mainClass>com.qsoft.sincoarv2.rs.domain.Sincoarv2RsDomain</exec.mainClass>
</properties>
</project>

@ -0,0 +1,15 @@
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Project/Maven2/JavaApp/src/main/java/${packagePath}/${mainClassName}.java to edit this template
*/
package com.qsoft.sincoarv2.rs.domain;
/**
*
* @author developer2
*/
public class Sincoarv2RsDomain {
}

@ -0,0 +1,260 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.math3.random.RandomDataGenerator;
import org.reflections.Reflections;
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
/**
*
* @author developer2
*/
public class GeneradorCodigo {
private static final String TAB = " ";
private static final String GETTER = TAB
+ TAB + "public %s get%s() {\n" + TAB + "return %s;\n" + TAB + "}";
private static final String SETTER = TAB
+ TAB + "public void set%s(%s %s) {\n" + TAB + "this.%s = %s;\n" + TAB + "}";
public static void main(String[] args) {
String packOrigen = "com.qsoft.sincoarv2.rs.model";
String packDestino = "com.qsoft.sincoarv2.rs.";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //Ya tenemos el "lector"
Path path = Paths.get(".");
String destino = path.toAbsolutePath().toString();
System.out.println("Folder detectado: "+destino);
try {
System.out.println(String.format("Paquete del modelo [%s]:", packOrigen));
packOrigen = br.readLine() == null || br.readLine().trim().equals("") ? packOrigen : br.readLine().trim();
System.out.println(String.format("Paquete de destino [%s]:", packDestino));
packDestino = br.readLine() == null || br.readLine().trim().equals("") ? packDestino : br.readLine().trim();
System.out.println(String.format("Carpeta de proyecto [%s]:", destino));
destino = br.readLine() == null || br.readLine().trim().equals("") ? destino : br.readLine().trim();
destino = destino.endsWith("/") ? destino : destino.concat("/"); /** para linux*/
generarCodigo(packOrigen, packDestino, destino, false);
System.err.println("COPIAR EL CODIGO A CONTINUACION Y ADJUNTAR A ENTIDADENUM");
System.out.println("" + generarEntidadEnum(packOrigen));
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static String generarEntidadEnum(String packOrigen){
Reflections reflections = new Reflections(packOrigen);
Set<Class<? extends Serializable>> clases = reflections.getSubTypesOf(Serializable.class);
System.out.println("ENTIDAD ENUM");
String salto = System.getProperty("line.separator");
StringBuilder buil = new StringBuilder();
String entidades = "*";
for (Class t : clases) {
//if(t.getSimpleName().equals("Tgenemenusubleveltran")
//|| t.getSimpleName().equals("Tgenemenusublevel")
/**|| t.getSimpleName().equals("Tarmtipoarmaexplosivo")
|| t.getSimpleName().equals("Tarmtramite")
|| t.getSimpleName().equals("Tarmunidadtipo")
|| t.getSimpleName().equals("TarmunidadtipoPK")
|| t.getSimpleName().equals("Tcustpersondetail")
|| t.getSimpleName().equals("TcustpersondetailPK")
|| t.getSimpleName().equals("TcustpersondetailPK")
|| t.getSimpleName().equals("Tgeneactivity")
|| t.getSimpleName().equals("Tgeneparroquia")
|| t.getSimpleName().equals("TgeneparroquiaPK")*/
//){
buil.append(TAB).append(t.getSimpleName()).append("(").append(t.getSimpleName()).append(".class, ").
append(t.getSimpleName()).append("DTO.class, ").append(t.getSimpleName()).append("Mapper.class),").append(salto);
// }
}
return buil.toString();
}
/**
*
* @param packOrigen
* @param packDestino
* @param urlDestino
* @param override
*/
public static void generarCodigo(String packOrigen, String packDestino, String urlDestino, boolean override) {
Reflections reflections = new Reflections(packOrigen);
Set<Class<? extends Serializable>> clases = reflections.getSubTypesOf(Serializable.class);
System.out.println("BUSCAR CLASES ");
for (Class t : clases) {
//if(t.getSimpleName().equals("Tgenemenusubleveltran")
//|| t.getSimpleName().equals("Tgenemenusublevel")
/**
|| t.getSimpleName().equals("Tarmcentrocontrol")
|| t.getSimpleName().equals("Tarmregistroarmas")
|| t.getSimpleName().equals("Tarmtipoarmaexplosivo")
|| t.getSimpleName().equals("Tarmtramite")
|| t.getSimpleName().equals("Tarmunidadtipo")
|| t.getSimpleName().equals("TarmunidadtipoPK")
|| t.getSimpleName().equals("Tcustpersondetail")
|| t.getSimpleName().equals("TcustpersondetailPK")
|| t.getSimpleName().equals("TcustpersondetailPK")
|| t.getSimpleName().equals("Tgeneactivity")
|| t.getSimpleName().equals("Tgeneparroquia")
|| t.getSimpleName().equals("TgeneparroquiaPK")
*/
//){
String data = crearMapper(t, packOrigen,packDestino);
String name = urlDestino.replace("/dto/", "/dominio/mapper/") + t.getSimpleName().replace(".java", "") + "Mapper.java";
escribirData(name, data, false);
data = crearDTO(t,packOrigen, packDestino);
name = urlDestino + t.getSimpleName().replace(".java", "") + "DTO.java";
escribirData(name, data, false);
//}
}
}
/**
*
* @param clase
* @param paquete
* @return
*/
public static String crearMapper(Class clase, String packOrigen,String paquete) {
StringBuilder build = new StringBuilder();
String nombre = clase.getSimpleName().concat("Mapper");
String salto = System.getProperty("line.separator");
build.append("package ").append(paquete).append("dominio.mapper").append(";").append(salto).append(salto);
build.append("import ").append(clase.getName()).append(";").append(salto);
build.append("import ").append(clase.getName().replace(".model", ".dto")).append("DTO;").append(salto);
build.append("import org.mapstruct.Mapper;").append(salto);
build.append("import org.mapstruct.factory.Mappers;").append(salto);
build.append(salto).append("@Mapper").append(salto);
build.append("public interface ").append(nombre).append(" {").append(salto).append(salto);
build.append(TAB).append(nombre).append(" INSTANCE = Mappers.getMapper(").append(nombre).append(".class);").append(salto).append(salto);
//build.append(obtenerMapping("source,target", packOrigen, clase));
build.append(TAB).append(clase.getSimpleName()).append(" getEntidad(").append(clase.getSimpleName()).
append("DTO ").append(StringUtils.uncapitalize(clase.getSimpleName())).append(");").append(salto).append(salto);
//build.append(obtenerMapping("target,source", packOrigen, clase));
build.append(TAB).append(clase.getSimpleName()).append("DTO getDto(").append(clase.getSimpleName()).append(" ").
append(StringUtils.uncapitalize(clase.getSimpleName())).append(");").append(salto).append(salto);
build.append("}");
return build.toString();
}
/**
* Obtener codigo de @mapping
* @param sourceTarget source,target o al revez
* @param packOrigen com.qsoft.model
* @param clase clase
* @return
*/
public static String obtenerMapping(String sourceTarget,String packOrigen,Class clase){
String []splitSource = sourceTarget.split(",");
String formato = "@Mapping(%s = \"%s\", %s = \"%s\")";
String salto = System.getProperty("line.separator");
StringBuilder mappings = new StringBuilder("");
for (Field f : clase.getDeclaredFields()) {
String tipo = f.getType().getName();
if (f.getName().endsWith("PK") && tipo.equals(packOrigen)) {
mappings.append(TAB).append(String.format(formato, splitSource[0],f.getName(),splitSource[1],f.getName())).
append(salto);
}
}
return mappings.toString();
}
/**
*
* @param clase
* @param paquete
* @return
*/
public static String crearDTO(Class clase, String packOrigen,String paquete) {
StringBuilder build = new StringBuilder();
String salto = System.getProperty("line.separator");
build.append("package ").append(paquete).append("dto").append(";").append(salto);
build.append(salto).append("import java.io.Serializable;").append(salto);
build.append(salto).append("public class ").append(clase.getSimpleName()).append("DTO implements Serializable {").append(salto);
Long serial = new RandomDataGenerator().nextLong(1000000000L, 999999999999999L);
build.append(salto).append(TAB).append("private static final long serialVersionUID = ").
append(serial).append("L;").append(salto).append(salto);
Map<String, String> variables = new LinkedHashMap<>();
String []tipoSplit;
for (Field f : clase.getDeclaredFields()) {
String tipo = f.getType().getName();
if (!f.getName().equalsIgnoreCase("serialVersionUID") && !tipo.equals("java.util.Collection")) {
if (tipo.contains("java.lang") || tipo.contains("java.util")) {
tipo = tipo.replace("java.lang.", "");
}else if(f.getName().endsWith("PK") || tipo.equals(packOrigen)){
tipoSplit = tipo.split("\\.");
tipo = tipoSplit[tipoSplit.length-1];
}
else {
tipo = "Integer";
}
build.append("/**").append(salto);
build.append("* f.getName()" ).append(salto);
build.append("*/").append(salto);
build.append(TAB).append("private ").append(tipo).append(" ").append(f.getName()).append(";").append(salto).append(salto);
variables.put(f.getName(), tipo);
}
}
for (Map.Entry<String, String> entry : variables.entrySet()) {
String tipo = entry.getValue();
String val = entry.getKey();
String valC = StringUtils.capitalize(val);
build.append("/**").append(salto);
build.append("* Metodo get para " ).append(valC).append(salto);
build.append("*/").append(salto);
build.append(String.format(GETTER, tipo, valC, val)).append(salto).append(salto);
build.append("/**").append(salto);
build.append("* Metodo set para " ).append(valC).append(salto);
build.append("*/").append(salto);
build.append(String.format(SETTER, valC, tipo, val, val, val)).append(salto).append(salto);
}
build.append("}");
return build.toString();
}
private static void escribirData(String file, String data, boolean override) {
File salida = new File(file);
if (!override && salida.exists()) {
return;
}
try ( FileOutputStream os = new FileOutputStream(salida)) {
os.write(data.getBytes());
} catch (IOException ex) {
ex.printStackTrace(System.out);
}
}
}

@ -0,0 +1,5 @@
#Generated by Maven
#Mon Jul 31 13:08:01 ECT 2023
groupId=com.qsoft.sincoarv2.rs.domain
artifactId=sincoarv2-rs-domain
version=1.0-SNAPSHOT

@ -0,0 +1,2 @@
.netbeans_automatic_build
com/qsoft/sincoarv2/rs/domain/Sincoarv2RsDomain.class

@ -0,0 +1 @@
/home/developer2/NetBeansProjects/sincoarv2-rs-domain/src/main/java/com/qsoft/sincoarv2/rs/domain/Sincoarv2RsDomain.java

@ -0,0 +1 @@
/home/developer2/NetBeansProjects/sincoarv2-rs-domain/src/test/java/GeneradorCodigo.java
Loading…
Cancel
Save