package net.sf.minuteProject.utils; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import net.sf.minuteProject.configuration.bean.GeneratorBean; import net.sf.minuteProject.configuration.bean.model.data.Column; import net.sf.minuteProject.configuration.bean.model.data.ForeignKey; import net.sf.minuteProject.configuration.bean.model.data.Reference; import net.sf.minuteProject.configuration.bean.model.data.Table; import net.sf.minuteProject.configuration.bean.system.Property; import net.sf.minuteProject.utils.property.PropertyUtils; public class ColumnUtils { public static String CHECK_CONSTRAINT_PROPERTY_TAG = "checkconstraint"; public static boolean hasDefaultValue (Column column) { return (column.getDefaultValue()!=null)?true:false; } public static String getDefaultValue (Column column) { return (ColumnUtils.isNumeric(column))?column.getDefaultValue():"\""+column.getDefaultValue()+"\""; } public static List<String> getColumnNames(Table table) { List<String> columnNames = new ArrayList<String>(); for (Column column : table.getColumns()) { columnNames.add(column.getName()); } return columnNames; } public static Column getColumn(Table table, String columnName) { if (table!=null && columnName!=null) { columnName = columnName.toUpperCase(); int maxColumn = table.getColumns().length; for (int i = 0; i < maxColumn; i++) { Column column = table.getColumns()[i]; if (column.getName().toUpperCase().equals(columnName)) return column; } } return null; } public static String getPrimaryKeyClassName (Table table, String columnName) { Column column = getPrimaryKeyColumn(table, columnName); if (column==null) return "GET PRIMARY KEY COLUMN should not be null"; return FormatUtils.getJavaName(column.getAlias()); } public static Column getPrimaryKeyColumn(Table table, String columnName) { if (table!=null && columnName!=null) { columnName = columnName.toUpperCase(); int maxColumn = table.getPrimaryKeyColumns().length; for (int i = 0; i < maxColumn; i++) { Column column = table.getPrimaryKeyColumns()[i]; if (column.getName().toUpperCase().equals(columnName)) return column; } } return null; } public static boolean isNaturalPk(Column column) { if (column!=null && column.isPrimaryKey() && !( column.getType().equals("INT") || column.getType().equals("BIGINT") || column.getType().equals("INTEGER") || column.getType().equals("NUMBER") || column.getType().equals("DECIMAL") || column.getType().equals("SHORT") || column.getType().equals("SMALLINT") || column.getType().equals("REAL") || column.getType().equals("VARBINARY") || column.getType().equals("DOUBLE") ) ) return true; return false; } public static boolean isNumeric(Column column) { if (column!=null && ( column.getType().equals("INT") || column.getType().equals("BIGINT") || column.getType().equals("INTEGER") || column.getType().equals("NUMBER") || column.getType().equals("DECIMAL") || column.getType().equals("SHORT") || column.getType().equals("SMALLINT") || column.getType().equals("REAL") || // column.getType().equals("VARBINARY") || column.getType().equals("DOUBLE") ) ) return true; return false; } public static boolean isPkUserProvided (Column column) { return isNaturalPk(column); } public static boolean isUnique (Column column) { return TableUtils.isUnique(column.getTable(), column); } public static boolean isForeignKey (Column column) { Table table = column.getTable(); return isForeignKey(column, table); } public static boolean isForeignKey (Column column, Table table) { Reference[] reference = table.getParents(); for (int i = 0; i < reference.length; i++) { if (reference[i].getLocalColumnName().equals(column.getName())) return true; } return false; } public static Table getForeignTable (Column column) { Reference reference = getReference(column); return (reference!=null)? reference.getForeignTable():null; } private static Reference getReference (Column column) { return ReferenceUtils.getReference(column); } public static boolean isLengthPrecisionColumn(Column column) { if (column==null || column.getType()==null) return false; if ( column.getType().equals("CHAR") || column.getType().equals("CHAR2") || column.getType().equals("VARCHAR") || column.getType().equals("VARCHAR2") || column.getType().equals("VARGRAPHIC") || column.getType().equals("VARGRAPHIC2") || column.getType().equals("CLOB") ) return true; return false; } public static String getMethodInputParameters (Column columns[]) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < columns.length; i++) { if (i!=0) sb.append(", "); sb.append(CommonUtils.getFullType2(columns[i])); sb.append(" "); sb.append(CommonUtils.getJavaVariableName(columns[i].getName())); } return sb.toString(); } public static String getDefaultStuffingForColumn (Column column) { if (column.getType().equals("CHAR") || column.getType().equals("CHAR2") || column.getType().equals("VARCHAR") || column.getType().equals("VARCHAR2") || column.getType().equals("VARGRAPHIC") || column.getType().equals("VARGRAPHIC2") || column.getType().equals("CLOB") ) return "\"\""; if (column.getType().equals("INT") || column.getType().equals("INTEGER") ) return "Integer.valueOf(\"-1\")"; if (column.getType().equals("BIGINT") || column.getType().equals("LONG") || column.getType().equals("NUMBER") || column.getType().equals("DECIMAL") ) return "Long.valueOf(\"-1\")"; if (column.getType().equals("FLOAT")) return "java.math.BigDecimal.valueOf(-1)"; return "\"\""; } public static boolean isTimeColumn (Column column) { if (column.getType().equals("DATE") || column.getType().equals("TIME") || column.getType().equals("TIMESTAMP")) return true; return false; } public static Property getCheckConstraintProperty (Column column) { return column.getPropertyByTag(CHECK_CONSTRAINT_PROPERTY_TAG); } public static List<Property> getCheckConstraintValues (Column column) { Property checkConstraint = getCheckConstraintProperty(column); if (checkConstraint!=null) return checkConstraint.getProperties(); return null; } public static boolean hasCheckConstraint (Column column) { if (getCheckConstraintProperty(column)!=null) return true; return false; } public static boolean hasFormulaStereotype (Column column) { if (hasStereotype(column) && column.getStereotype().getFormula()!=null) return true; return false; } public static boolean hasStereotype (Column column) { if (column.getStereotype()!=null) return true; return false; } public static boolean hasTrigger(Column column) { // return (hasTriggerProperty(column) || (column.getTriggers()!=null && column.getTriggers().size()>0)); return ((column.getTriggers()!=null && column.getTriggers().size()>0)); } // private static boolean hasTriggerProperty(Column column) { // for (Property property : column.getProperties()) { // if (isTrigger(property)) // return true; // } // return false; // } // // private static boolean isTrigger(Property property) { // return PropertyUtils.isTriggerTag(property); // } public static boolean belongsToCompositePrimaryKeyNotMany2Many(Column column) { return TableUtils.isCompositePrimaryKeyNotMany2Many(column.getTable()) && isPartOfCompositePrimaryKey(column); } private static boolean isPartOfCompositePrimaryKey(Column column) { for (Column col : column.getTable().getPrimaryKeyColumns()) { if (col.getName().toLowerCase().equals(column.getName().toLowerCase())) return true; } return false; } public static boolean isForeignKeyAndNotPartOfCompositeForeignKey(Column column) { return (isForeignKey(column) && !isPartOfCompositeForeignKey(column)); } private static boolean isPartOfCompositeForeignKey(Column column) { for (ForeignKey fk : column.getTable().getForeignKeys()) { return ForeignKeyUtils.containsLocalColumn(fk, column); } return false; } public static boolean isEnumColumn(Column column) { // TODO implement for string && int column return true; } public static boolean isUsingDefaultAlias(Column column) { // TODO Auto-generated method stub return (column.getName().toLowerCase().equals(column.getAlias().toLowerCase())); } public static String getJavaVariableColumnAlias(Column column) { return (column!=null)?FormatUtils.getJavaNameVariable(column.getAlias()):"ERROR_NULL_COLUMN_CANNOT_FORMAT_ALIAS"; } public static String asNameStringList(List<Column> beans) { StringBuffer sb = new StringBuffer(); int cpt=0; int size = beans.size(); for (GeneratorBean bean : beans) { sb.append(bean.getName()); if (cpt<size) { sb.append(","); cpt++; } } return sb.toString(); } }