package net.sf.minuteProject.configuration.bean.model.statement; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import net.sf.minuteProject.configuration.bean.AbstractConfiguration; import net.sf.minuteProject.configuration.bean.Package; import net.sf.minuteProject.configuration.bean.Template; import net.sf.minuteProject.configuration.bean.model.data.Table; import net.sf.minuteProject.configuration.bean.model.data.constant.Direction; import net.sf.minuteProject.configuration.bean.model.data.impl.DDLUtils.TableDDLUtils; import net.sf.minuteProject.exception.MinuteProjectException; import net.sf.minuteProject.utils.ConvertUtils; import net.sf.minuteProject.utils.sql.QueryUtils; public class Query extends AbstractConfiguration { private Queries queries; private QueryBody queryBody; private QueryWhat queryWhat; private QueryWhere queryWhere; private QueryParams queryParams; private QueryParams outputParams; private boolean isSet = false; private Package pack; private String type, category; public QueryParams getInputParams () { return QueryUtils.getInputParams(this); } public QueryParams getOutputParams (){ if (outputParams==null && !isSet) { try { outputParams = QueryUtils.getOutputParams(this); } catch (MinuteProjectException e) { isSet=true; //TODO log error } isSet = true; } return outputParams; } public Queries getQueries() { return queries; } public void setQueries(Queries queries) { this.queries = queries; } public QueryBody getQueryBody() { return queryBody; } public void setQueryBody(QueryBody queryBody) { this.queryBody = queryBody; } public void setQueryBody(String s) { queryBody = new QueryBody(); queryBody.setValue(s); } public QueryWhat getQueryWhat() { return queryWhat; } public void setQueryWhat(QueryWhat queryWhat) { this.queryWhat = queryWhat; } public void setQueryWhat(String s) { queryWhat = new QueryWhat(); queryWhat.setValue(s); } public QueryWhere getQueryWhere() { return queryWhere; } public void setQueryWhere(QueryWhere queryWhere) { this.queryWhere = queryWhere; } public void setQueryWhere(String s) { queryWhere = new QueryWhere(); queryWhere.setValue(s); } public QueryParams getQueryParams() { if (queryParams==null) queryParams=new QueryParams(); return queryParams; } public void setQueryParams(QueryParams queryParams) { this.queryParams = queryParams; this.queryParams.setQuery(this); } // // public String getTechnicalPackage(Template template) { // return getModel().getTechnicalPackage(template); // } // private Model getModel() { // return getQueries().getStatementModel().getModel(); // } public Table getInputBean () { return getEntity(Direction.IN); } public Table getOutputBean () { return getEntity(Direction.OUT); } public Table getEntity(Direction dir) { org.apache.ddlutils.model.Table table = new org.apache.ddlutils.model.Table(); setTableName(table, dir); // table.setName(getName()); // table.setCatalog(catalog); table.setType(Table.TABLE); addColumns(table, dir); Table entity = new TableDDLUtils(table); entity.setPackage(getPackage()); // entity.getTechnicalPackage(template) entity.setDatabase(getQueries().getStatementModel().getModel().getDataModel().getDatabase()); return entity; } private void setTableName(org.apache.ddlutils.model.Table table, Direction dir) { String queryparamName = getQueryParams().getName(); if (dir.equals(Direction.IN) && !StringUtils.isEmpty(queryparamName)) table.setName(queryparamName); else table.setName(getName()); } public Package getPackage() { return pack; } public void setPackage(Package pack) { this.pack = pack; } // public net.sf.minuteProject.configuration.bean.Package getPackage() { // return getModel().getConfiguration().getPackage(); // } // // private Package getPackage (Table table) { // Package pack = new Package(); // pack.setName(getPackageName()); // return pack; // } // // private String getPackageName() { // StringBuffer sb = new StringBuffer(); // String packageRoot = getModel().getPackageRoot(); // if (packageRoot!=null) // sb.append(packageRoot+"."); // sb.append(getModel().getConfiguration().getName()); // String queriesName = getQueries().getName(); // if (queriesName!=null) // sb.append("."+getQueries().getName()); // return sb.toString(); // } public String getTechnicalPackage(Template template) { net.sf.minuteProject.configuration.bean.Package p = getPackage(); if (p == null) return "ERROR_PACKAGE_IS_NULL"; return p.getTechnicalPackage(template); } private void addColumns(org.apache.ddlutils.model.Table table, Direction direction) { List<QueryParam> list = getColumns(direction); for (QueryParam queryParam : list) { table.addColumn(getColumn(queryParam)); } } private List<QueryParam> getColumns(Direction direction) { if (Direction.IN.equals(direction)) return getInputParams().getQueryParams(); if (getOutputParams()!=null) return getOutputParams().getQueryParams(); return new ArrayList<QueryParam>(); } private org.apache.ddlutils.model.Column getColumn(QueryParam queryParam) { org.apache.ddlutils.model.Column column = new org.apache.ddlutils.model.Column(); column.setName(queryParam.getName()); String type = queryParam.getType(); column.setType(convertType(type)); column.setSize(queryParam.getSize()+""); column.setScale(queryParam.getScale()); column.setDefaultValue(queryParam.getDefaultValue()); if (ConvertUtils.DB_DECIMAL_TYPE.equals(type) && queryParam.getScale()>0) { column.setType(ConvertUtils.DB_DOUBLE_TYPE); } // column.setPrecisionRadix(queryParam.getPrecisionRadix()); // column.setTypeCode(fc.getTypeCode()); column.setRequired(queryParam.isMandatory()); return column; } private String convertType(String type) { return ConvertUtils.getDDLUtilsTypeFromDBType(type); } public String getType() { return type; } public void setType(String type) { this.type = type; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } }