/** * */ package com.fp.hbm.bgenerator.xml; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.ResourceBundle; import com.fp.hbm.bgenerator.AbstractColumn; import com.fp.hbm.bgenerator.AbstractMapper; import com.fp.hbm.bgenerator.Reference; import com.fp.common.exception.APPException; /** * @author German Fiallos * */ public class Mapper extends AbstractMapper { public static ResourceBundle paramResource = null; private String versioncontrol = null; private String transportBean = null; private String transportId = null; public Mapper() { if (paramResource == null) { paramResource = ResourceBundle.getBundle("cfg"); } this.packageName = packageBase + "."; this.versioncontrol = paramResource.getString("vesion.control.field").toUpperCase(); this.transportBean = paramResource.getString("transport.bean.single.class"); this.transportId = paramResource.getString("transport.bean.id.single.class"); } public String getXMLMapping() throws APPException { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.println(""); pw .println(""); pw.println(""); // + "dynamic-update='true' >"); pw.println(""); this.formatKey(pw); if (this.optimistic) { pw.println(""); pw.println(""); } this.formatColumns(pw); this.formatXMLReferences(pw); /* if (this.ent.getInsertdml() != null) { pw.print(""); pw.print(this.ent.getInsertdml()); pw.print(""); } if (this.ent.getUpdatedml() != null) { pw.print(""); pw.print(this.ent.getUpdatedml()); pw.print(""); } */ pw.println(""); pw.println(""); String data = sw.toString(); pw.close(); return data; } public String getKeyClassData() throws APPException { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.println("package " + this.packageName + ";"); this.formatKeyImports(pw); pw.println("/**Clase que hace referencia a la Clave Primaria de " + this.table + "*/"); pw.println("public class " + this.entity + "Key " + " extends com.fp.dto.AbstractDataTransport" + " implements Serializable,Cloneable," + transportId + ((this.history) ? ",History" : "") + "{"); this.formatBasicsJava(pw); this.formatKeyJava(pw); this.createKeyConstructor(pw); this.formatKeyJavaGS(pw); this.formatKeyEquals(pw); this.formatKeyHash(pw); formatKeyClone(pw); this.formatToString(pw, "pk"); if (this.history) { this.formatKeyHistoryNeededMethods(pw); } pw.println("}"); String data = sw.toString(); pw.close(); return data; } private void formatClassPKData(PrintWriter pw) throws APPException { pw.println("/**"); pw.println("* Clave primaria de la Entidad " + this.entity); pw.println("*/"); if (this.isKeyClassNeeded()) { pw.println("private " + this.getKeyClasss() + " pk;"); } else { pw.println("private " + this.primary.get(0).getJavaSimple() + " pk;"); } } private void formatClassPKDataGS(PrintWriter pw) throws APPException { String className = ""; if (this.isKeyClassNeeded()) { className = this.getKeyClasss(); } else { className = this.primary.get(0).getJavaSimple(); } pw.println("/**Entrega la Clave primaria de " + this.entity); pw.println("@return El objeto que referencia a la Clave primaria de " + this.entity); pw.println("*/"); pw.println("public " + className + " getPk(){"); pw.println(" return pk;"); pw.println("}"); pw.println("/**Fija un nuevo valor a la Clave primaria de " + this.entity); pw.println("@param pPk El objeto que referencia a la nueva Clave primaria de " + this.entity); pw.println("*/"); pw.println("public void setPk(" + className + " pPk){"); pw.println(" pk=pPk;"); pw.println("}"); } public String getClassData() throws APPException { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); pw.println("package " + this.packageName + ";"); this.formatClassImports(pw); String ext = ""; if (this.history) { // ext = " extends AbstractExpire "; } pw.println("/**Clase que implementa la entidad de Hibernate que hace referencia a la tabla " + this.table + "*/"); pw.println("public class " + this.entity + ((this.sExtends == null) ? ext : " extends " + this.sExtends) + " implements Serializable," + this.transportBean + ",Cloneable" + ((this.sImplements == null) ? "" : "," + this.sImplements) + "{"); this.formatBasicsJava(pw); this.formatClassPKData(pw); this.formatColumnsJava(pw); this.createClassConstructor(pw); this.formatClassPKDataGS(pw); this.formatColumnsJavaGS(pw); this.formatClassCompare(pw); this.formatClassHash(pw); this.formatToString(pw, ""); this.formatJavaReferences(pw); this.formatCreateInstance(pw); formatClassCloneable(pw); if (this.history) { this.formatHistoryNeededMethods(pw); } pw.println("}"); String data = sw.toString(); pw.close(); return data; } protected void formatJavaReferences(PrintWriter pw) { if (this.references != null) { for (Reference ref : this.references) { pw.println(ref.getJava()); } } } private void formatColumnsJava(PrintWriter pw) throws APPException { for (AbstractColumn col : this.columns) { pw.println(col.formatJava()); } } private void formatClassImports(PrintWriter pw) throws APPException { Map m = new HashMap(); m.put("import java.io.Serializable;", ""); m.put("import java.lang.reflect.Field;", ""); if (this.references != null && this.references.size() > 0) { for (Reference imp : this.references) { List lImp = imp.getImport(); for (String string : lImp) { m.put(string, ""); } } } String cTransportBean = paramResource.getString("transport.bean.class"); m.put("import " + cTransportBean + ";", ""); if (this.history) { //m.put("import com.fp.dto.hb.AbstractExpire;", ""); } for (AbstractColumn col : this.columns) { List im = col.getImportData(); for (String dt : im) { m.put("import " + dt + ";", ""); } } for (AbstractColumn col : this.primary) { List im = col.getImportData(); for (String dt : im) { m.put("import " + dt + ";", ""); } } pw.println(); for (String imp : m.keySet()) { pw.println(imp); } pw.println(); } private void formatKeyImports(PrintWriter pw) throws APPException { Map m = new HashMap(); m.put("import java.io.Serializable;", ""); m.put("import java.lang.reflect.Field;", ""); String cTransportBean = paramResource.getString("transport.bean.id.class"); m.put("import " + cTransportBean + ";", ""); if (this.history) { //m.put("import com.fp.dto.hb.AbstractExpire;", ""); m.put("import com.fp.dto.hb.History;", ""); } for (AbstractColumn col : this.primary) { List im = col.getImportData(); for (String dt : im) { m.put("import " + dt + ";", ""); } } pw.println(); for (String imp : m.keySet()) { pw.println(imp); } pw.println(); } private void formatColumnsJavaGS(PrintWriter pw) throws APPException { for (AbstractColumn col : this.columns) { pw.println(col.formatJavaGetSet(false)); } } private void formatKeyJava(PrintWriter pw) throws APPException { for (AbstractColumn col : this.primary) { pw.println(col.formatJava()); } } private void formatKeyJavaGS(PrintWriter pw) throws APPException { for (AbstractColumn col : this.primary) { pw.println(col.formatJavaGetSet(true)); } } private void formatKey(PrintWriter pw) throws APPException { if (this.isKeyClassNeeded()) { pw.println(""); for (AbstractColumn mc : this.primary) { pw.println("\t" + mc.formatComposeKey()); } pw.println(""); } else { if (this.primary.size() < 1) { throw new APPException("HM001", "Tabla " + this.table + " no tiene clave primaria"); } this.primary.get(0).formatSinglePK(pw); } } private void formatColumns(PrintWriter pw) throws APPException { for (AbstractColumn col : this.columns) { if (this.optimistic) { if (col.getName().toUpperCase().compareTo(versioncontrol) == 0) { continue; } } pw.println("\t" + col.formatProperty()); } } private void formatXMLReferences(PrintWriter pw) throws APPException { if (references != null) { for (Reference ref : this.references) { pw.println("\t" + ref.getXML()); } } } @Override public void safeEntity() throws IOException, APPException { String sPath = this.parent.getPath() + "/" + this.ent.getProject() + "/src/main" + this.parent.getXmlPath() + getPackageName().replaceAll("\\.", "/"); this.safe(getXMLMapping(), sPath, getEntity() + ".hbm.xml"); sPath = this.parent.getPath() + "/" + this.ent.getProject() + "/src/main" + this.parent.getSoucePath() + getPackageName().replaceAll("\\.", "/"); if (isKeyClassNeeded()) { this.safe(getKeyClassData(), sPath, getEntity() + "Key.java"); } this.safe(getClassData(), sPath, getEntity() + ".java"); } }