package com.github.geequery.codegen.pdm.model; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import jef.database.meta.Column; import org.apache.commons.lang.StringUtils; /** * PDM元数据的列 * @author <a href="mailto:nikola.petkov@gmail.com">Nikola Petkov <nikola.petkov@gmail.com></a> */ public class MetaColumn { protected String code; protected String comment; protected MetaColumn fkColParent = null; protected String type; protected int length; protected boolean mandatory = false; protected String name; protected MetaKey parentKey = null; protected String parentTable; protected int precision; protected String defaultVal; protected LinkedHashMap<String, String> lhmListOfVals = new LinkedHashMap<String, String>(); /** * 将当前PDM元数据转换为JEF元数据返回 * @return */ public Column toJefColumn(){ Column c=new Column(); c.setColumnName(code); c.setColumnSize(length); c.setDataType(StringUtils.upperCase(type)); c.setDataTypeCode(-9999); c.setDecimalDigit(precision); c.setNullable(!mandatory); c.setRemarks(comment); c.setTableName(parentTable); if(StringUtils.isNotEmpty(this.defaultVal)){ if(this.defaultVal.startsWith("~")) { c.setColumnDef(this.defaultVal.substring(1,this.defaultVal.length()-1)); }else { String typeStr=this.getType().toLowerCase(); if(typeStr.startsWith("varchar") || typeStr.startsWith("char")||typeStr.startsWith("text")){ c.setColumnDef("'"+this.defaultVal+"'"); }else{ c.setColumnDef(this.defaultVal); } } } return c; } /** * Creates full initialized instance of MetaColumn * * @param aCode * code * @param aName * name * @param aParentTable * name of the table owner * @param aMandatory * true if this MetaColumn is mandatory * @param aFKParent * Foreign Key parent MetaColumn. It could be null value * @param aJClassName * @param aLength * @param aPrecision * @param aComment */ public MetaColumn(String aCode, String aName, String aParentTable, boolean aMandatory, MetaColumn aFKParent, String aJClassName, int aLength, int aPrecision, String aComment) { super(); code = aCode; name = aName; parentTable = aParentTable; mandatory = aMandatory; fkColParent = aFKParent; type = aJClassName; length = aLength; precision = aPrecision; comment = aComment; } /** * Returns code of this MetaColumn * * @return code. */ public String getCode() { return code; } /** * @return comment. */ public String getComment() { return comment; } /** * Returns foreign key MetaColumn of this MetaColumn * * @return fkColParent. */ public MetaColumn getFkColParent() { return fkColParent; } /** * @return length. */ public int getLength() { return length; } /** * Returns name of this MetaColumn * * @return name of this MetaColumn */ public String getName() { return name; } /** * @return parentKey. */ public MetaKey getParentKey() { return parentKey; } /** * Returns parent MetaTable of this MetaColumn * * @return parent MetaTable of this MetaColumn */ public String getParentTable() { return parentTable; } /** * @return precision. */ public int getPrecision() { return precision; } /** * Returns "parentTableCode" + "." + "thisColumnCode" * * @return "parentTableCode" + "." + "thisColumnCode" */ public String getTableDotColumnCode() { return parentTable + "." + code; } /** * Returns true if this MetaColumn is mandatory * * @return true if this MetaColumn is mandatory */ public boolean isMandatory() { return mandatory; } /** * Returns true if this MetaColumn is part of foreign key * * @return true if this MetaColumn is part of foreign key fkColParent != * null */ public boolean isPartOfFK() { return fkColParent != null; } /** * Returns true if this MetaColumn is part of primary key * * @return true if this MetaColumn is part of primary key */ public boolean isPartOfPK() { return parentKey != null; } /** * @return */ private String recursiveFkHTMLTable() { String retVal = "<TABLE border=\"1\">" + "<CAPTION><B>" + parentTable + "." + code + "</B></CAPTION>"; retVal += "<TBODY>"; retVal += "<TR><TD align=\"right\">" + "<B>name</B>" + "</TD>" + "<TD align=\"left\">" + name + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>code</B>" + "</TD>" + "<TD align=\"left\">" + code + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>fkColParent</B>" + "</TD>"; if (fkColParent != null) { retVal += "<TD>" + fkColParent.recursiveFkHTMLTable() + "</TD>"; } retVal += "</TBODY></TABLE>"; return retVal; } /** * Sets code for this MetaColumn * * @param aCode * the code to set */ public void setCode(String aCode) { code = aCode; } /** * @param aComment * The comment to set. */ public void setComment(String aComment) { comment = aComment; } /** * Sets foreign key parent MetaColumn of this MetaColumn * * @param aFkColParent * foreign key parent MetaColumn */ public void setFkColParent(MetaColumn aFkColParent) { fkColParent = aFkColParent; } public String getType() { return type; } /** * @param aLength * The length to set. */ public void setLength(int aLength) { length = aLength; } /** * Sets mandatory column * * @param aMandatory * The mandatory to set. */ public void setMandatory(boolean aMandatory) { mandatory = aMandatory; } /** * Sets the name for this MetaColumn * * @param aName * the name to set. */ public void setName(String aName) { name = aName; } /** * @param aParentKey * The parentKey to set. */ public void setParentKey(MetaKey aParentKey) { parentKey = aParentKey; } /** * Sets name of parent MetaTable of this MetaColumn * * @param aParentTable * the parent MetaTable to set */ public void setParentTable(String aParentTable) { parentTable = aParentTable; } /** * @param aPrecision * The precision to set. */ public void setPrecision(int aPrecision) { precision = aPrecision; } /** * Returns string representation of this MetaColumn * * @see java.lang.Object#toString() */ public String toString() { return name; } /** * Returns verbose html description of this MetaColumn * * @return verbose html description of this MetaColumn */ public String toStringVerbose() { String retVal = "<HTML><TABLE border=\"1\" >"// + "<CAPTION><STRONG>" + parentTable + "." + code + "</STRONG></CAPTION>"; retVal += "<TBODY>"; retVal += "<TR><TD align=\"right\">" + "<B>name</B>" + "</TD>" + "<TD align=\"left\">" + name + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>code</B>" + "</TD>" + "<TD align=\"left\">" + code + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>parentTable</B>" + "</TD>" + "<TD align=\"left\">" + parentTable + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>partOfPK</B>" + "</TD>" + "<TD align=\"left\">" + isPartOfPK() + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>mandatory</B>" + "</TD>" + "<TD align=\"left\">" + mandatory + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>jClassName</B>" + "</TD>" + "<TD align=\"left\">" + type + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>length</B>" + "</TD>" + "<TD align=\"left\">" + length + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>precision</B>" + "</TD>" + "<TD align=\"left\">" + precision + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>defaultVal</B>" + "</TD>" + "<TD align=\"left\">" + defaultVal + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>value-label map</B>" + "</TD>"; Set<Map.Entry<String, String>> entries = lhmListOfVals.entrySet(); if (!lhmListOfVals.isEmpty()) { retVal += "<TD><TABLE border=\"1\"><TBODY>"; for (Iterator<Map.Entry<String, String>> iter = entries.iterator(); iter .hasNext();) { Map.Entry<String, String> entry = iter.next(); retVal += "<TR><TD align=\"right\">" + "<B>value,label</B>" + "</TD>" + "<TD align=\"left\">" + entry.getKey() + "," + entry.getValue() + "</TD></TR>"; } retVal += "</TBODY></TABLE></TD>"; } retVal += "</TR>"; retVal += "<TR><TD align=\"right\">" + "<B>comment</B>" + "</TD>" + "<TD align=\"left\">" + MetaUtils.insertHTMLBreaks(comment, 50) + "</TD></TR>"; retVal += "<TR><TD align=\"right\">" + "<B>fkColParent</B>" + "</TD>"; if (fkColParent != null) { retVal += "<TD rowspan=\"2\">" + fkColParent.recursiveFkHTMLTable() + "</TD>"; } retVal += "</TBODY></TABLE></HTML>"; return retVal; } /** * @return defaultVal. */ public String getDefaultVal() { return defaultVal; } /** * @param aDefaultVal * The defaultVal to set. */ public void setDefaultVal(String aDefaultVal) { defaultVal = aDefaultVal; } /** * Returns Pair(Value,Label) of an ListValues entry. * * @see java.util.HashMap#entrySet() */ public Set<Map.Entry<String, String>> entrySet_Value_Label() { return lhmListOfVals.entrySet(); } /** * @return true if list of values is not empty, otherwise false * @see java.util.HashMap#isEmpty() */ public boolean hasListOfVals() { return !lhmListOfVals.isEmpty(); } /** * @see java.util.HashMap#put(java.lang.Object, java.lang.Object) */ public Object put(String aValue, String aLabel) { return lhmListOfVals.put(aValue, aLabel); } }