Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package br.com.gumga.maven.plugins.gumgag; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.net.URL; import java.net.URLClassLoader; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import javax.persistence.GeneratedValue; import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; /** * * @author munif */ public class Util { public final static String IDENTACAO04 = " "; public final static String IDENTACAO08 = " "; public final static String IDENTACAO12 = " "; public final static String IDENTACAO16 = " "; public final static String IDENTACAO20 = " "; public final static String IDENTACAO24 = " "; public final static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); public static String primeiraMaiuscula(String s) { return s.substring(0, 1).toUpperCase().concat(s.substring(1)); } public static String primeiraMinuscula(String s) { return s.substring(0, 1).toLowerCase().concat(s.substring(1)); } public static List<Field> getTodosAtributosMenosIdAutomatico(Class classe) { List<Field> todosAtributos = getTodosAtributosNaoEstaticos(classe); Field aRemover = null; Field aRemoverOi = null; Field aRemoverVersion = null; Field aRemoverGumgaCustomFields = null; for (Field f : todosAtributos) { if (f.isAnnotationPresent(GeneratedValue.class)) { aRemover = f; } if ("oi".equals(f.getName())) { aRemoverOi = f; } if ("version".equals(f.getName())) { aRemoverVersion = f; } if ("gumgaCustomFields".equals(f.getName())) { aRemoverGumgaCustomFields = f; } } if (aRemover != null) { todosAtributos.remove(aRemover); } if (aRemoverOi != null) { todosAtributos.remove(aRemoverOi); } if (aRemoverVersion != null) { todosAtributos.remove(aRemoverVersion); } if (aRemoverGumgaCustomFields != null) { todosAtributos.remove(aRemoverGumgaCustomFields); todosAtributos.add(aRemoverGumgaCustomFields); System.out.println(todosAtributos); } return todosAtributos; } public static List<Field> getTodosAtributosNaoEstaticos(Class classe) throws SecurityException { List<Field> aRetornar = new ArrayList<Field>(); List<Field> aRemover = new ArrayList<Field>(); if (!classe.getSuperclass().equals(Object.class)) { aRetornar.addAll(getTodosAtributosNaoEstaticos(classe.getSuperclass())); } aRetornar.addAll(Arrays.asList(classe.getDeclaredFields())); for (Field f : aRetornar) { if (Modifier.isStatic(f.getModifiers())) { aRemover.add(f); } if (f.getName().equals("version")) { aRemover.add(f); } if (f.getName().equals("oi")) { aRemover.add(f); } } aRetornar.removeAll(aRemover); return aRetornar; } public static ClassLoader getClassLoader(MavenProject project) { ClassLoader aRetornar = null; try { List elementos = new ArrayList(); elementos.addAll(project.getRuntimeClasspathElements()); elementos.addAll(project.getTestClasspathElements()); URL[] runtimeUrls = new URL[elementos.size()]; for (int i = 0; i < elementos.size(); i++) { String element = (String) elementos.get(i); runtimeUrls[i] = new File(element).toURI().toURL(); } aRetornar = new URLClassLoader(runtimeUrls, Thread.currentThread().getContextClassLoader()); } catch (Exception ex) { ex.printStackTrace(); } return aRetornar; } public static Field primeiroAtributo(Class classe) { return getTodosAtributosMenosIdAutomatico(classe).get(0); } public static Class getTipoGenerico(Field atributo) { Class tipoGenerico; if (atributo.getGenericType() instanceof ParameterizedType) { ParameterizedType type = (ParameterizedType) atributo.getGenericType(); Type[] typeArguments = type.getActualTypeArguments(); tipoGenerico = (Class) typeArguments[atributo.getType().equals(Map.class) ? 1 : 0]; } else { tipoGenerico = atributo.getType(); } return tipoGenerico; } public static void geraGumga(Log log) { log.info("\n" + "\n" + " _____ _ _ __ __ _____ \n" + " / ____| | | | \\/ |/ ____| /\\ \n" + " | | __| | | | \\ / | | __ / \\ \n" + " | | |_ | | | | |\\/| | | |_ | / /\\ \\ \n" + " | |__| | |__| | | | | |__| |/ ____ \\ \n" + " \\_____|\\____/|_| |_|\\_____/_/ \\_\\\n" + " \n" + " \n" + ""); } public static String etiqueta(Field atributo) { return primeiraMaiuscula(atributo.getName()); } public static String windowsSafe(String s) { return s.replaceAll("\\\\", "/"); } public static void adicionaLinha(String nomeArquivo, String linhaMarcador, String linhaNova) throws IOException { String arquivo = nomeArquivo; String arquivoTmp = nomeArquivo + "-tmp"; BufferedWriter writer = new BufferedWriter(new FileWriter(arquivoTmp)); BufferedReader reader = new BufferedReader(new FileReader(arquivo)); String linha; boolean colocou = false; while ((linha = reader.readLine()) != null) { if (linha.contains(linhaMarcador) && !colocou) { writer.write(linhaNova + "\n"); colocou = true; } writer.write(linha + "\n"); } writer.close(); reader.close(); new File(arquivo).delete(); new File(arquivoTmp).renameTo(new File(arquivo)); } public static String todosAtributosSeparadosPorVirgula(Class classeEntidade) { StringBuilder sb = new StringBuilder(); for (Field f : getTodosAtributosMenosIdAutomatico(classeEntidade)) { sb.append(f.getName() + ","); } sb.setLength(sb.length() - 1); return sb.toString().replace("oi,", ""); } public static String hoje() { return sdf.format(new Date()); } public static void escreveCabecario(FileWriter fw) throws IOException { fw.write("/*\n" + "* Gerado automaticamente por GUMGAGenerator em " + hoje() + "\n" + "*/\n" + "\n"); } public static String dependenciasSeparadasPorVirgula(Set<Class> dependencias, String sufixo, boolean apostrofe) { StringBuilder sb = new StringBuilder(); for (Class clazz : dependencias) { sb.append(", " + (apostrofe ? "'" : "") + clazz.getSimpleName() + sufixo + (apostrofe ? "'" : "")); } return sb.toString(); } } /* mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=ex.empresa -DarchetypeArtifactId=sistema-archetype -DgroupId=br.com.gumga -DartifactId=exemplodominios -Dversion=0.1 cd exemplodominios mvn clean install cd exemplodominios-domain mvn br.com.gumga:gumgag:entidade -Dentidade=br.com.gumga.exemplodominios.domain.model.Teste -Datributos="nome:String,logico:gumga.framework.domain.domains.GumgaBoolean,cep:gumga.framework.domain.domains.GumgaCEP,cnpj:gumga.framework.domain.domains.GumgaCNPJ,cpf:gumga.framework.domain.domains.GumgaCPF,email:gumga.framework.domain.domains.GumgaEMail,ip4:gumga.framework.domain.domains.GumgaIP4,ip6:gumga.framework.domain.domains.GumgaIP6,money:gumga.framework.domain.domains.GumgaMoney,multiLine:gumga.framework.domain.domains.GumgaMultiLineString,telefone:gumga.framework.domain.domains.GumgaPhoneNumber,url:gumga.framework.domain.domains.GumgaURL" mvn br.com.gumga:gumgag:entidade -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteAddress -Datributos="residencial:gumga.framework.domain.domains.GumgaAddress,comercial:gumga.framework.domain.domains.GumgaAddress" mvn br.com.gumga:gumgag:entidade -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteGeo -Datributos="location:gumga.framework.domain.domains.GumgaGeoLocation" mvn br.com.gumga:gumgag:entidade -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteFile -Datributos="file:gumga.framework.domain.domains.GumgaFile" mvn br.com.gumga:gumgag:entidade -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteImage -Datributos="image:gumga.framework.domain.domains.GumgaImage" mvn br.com.gumga:gumgag:entidade -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteTime -Datributos="horario:gumga.framework.domain.domains.GumgaTime" mvn br.com.gumga:gumgag:entidade -Dentidade=br.com.gumga.exemplodominios.domain.model.Usuario -Datributos="nome:String" mvn br.com.gumga:gumgag:entidade -Dentidade=br.com.gumga.exemplodominios.domain.model.GrupoUsuario -Datributos="nome:String,usuarios:List<Usuario>:@ManyToMany" mvn clean install cd .. cd exemplodominios-application mvn br.com.gumga:gumgag:aplicacao -Dentidade=br.com.gumga.exemplodominios.domain.model.Teste mvn br.com.gumga:gumgag:aplicacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteAddress mvn br.com.gumga:gumgag:aplicacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteGeo mvn br.com.gumga:gumgag:aplicacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteFile mvn br.com.gumga:gumgag:aplicacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteImage mvn br.com.gumga:gumgag:aplicacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteTime mvn br.com.gumga:gumgag:aplicacao -Dentidade=br.com.gumga.exemplodominios.domain.model.Usuario mvn br.com.gumga:gumgag:aplicacao -Dentidade=br.com.gumga.exemplodominios.domain.model.GrupoUsuario cd .. cd exemplodominios-presentation mvn br.com.gumga:gumgag:apresentacao -Dentidade=br.com.gumga.exemplodominios.domain.model.Teste mvn br.com.gumga:gumgag:apresentacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteAddress mvn br.com.gumga:gumgag:apresentacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteGeo mvn br.com.gumga:gumgag:apresentacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteFile mvn br.com.gumga:gumgag:apresentacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteImage mvn br.com.gumga:gumgag:apresentacao -Dentidade=br.com.gumga.exemplodominios.domain.model.TesteTime mvn br.com.gumga:gumgag:apresentacao -Dentidade=br.com.gumga.exemplodominios.domain.model.Usuario mvn br.com.gumga:gumgag:apresentacao -Dentidade=br.com.gumga.exemplodominios.domain.model.GrupoUsuario cd .. mvn clean install */