/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.db.sql;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import org.ralasafe.ObjectNewer;
import org.ralasafe.util.StringUtil;
public class Select implements SQLElement {
private ArrayList columns = new ArrayList();
private boolean isDistinct;
private String mappingClass;
private ObjectNewer objectNewer;
public String toSQL() {
StringBuffer buf = new StringBuffer();
buf.append(" SELECT ");
if (isDistinct) {
buf.append(" DISTINCT ");
}
if (columns.size() > 0) {
Iterator itr = columns.iterator();
Column column = (Column) itr.next();
buf.append(column.toSQL()).append(" AS " + column.getAlias() + " ");
while (itr.hasNext()) {
column = (Column) itr.next();
buf.append(",").append(column.toSQL()).append(
" AS " + column.getAlias() + " ");
}
}
buf.append(" ");
return buf.toString();
}
public ArrayList getColumns() {
return columns;
}
public void setColumns(ArrayList columns) {
this.columns = columns;
}
public boolean isDistinct() {
return isDistinct;
}
public void setDistinct(boolean isDistinct) {
this.isDistinct = isDistinct;
}
public String getMappingClass() {
return mappingClass;
}
public void setMappingClass(String mappingClass) {
this.mappingClass = mappingClass;
}
public ObjectNewer getObjectNewer() {
return objectNewer;
}
public void setObjectNewer(ObjectNewer objectNewer) {
this.objectNewer = objectNewer;
}
public Column findColumnByProperty(String property) {
int size = columns.size();
for (int i = 0; i < size; i++) {
Column column = (Column) columns.get(i);
if (property.equals(column.getProperty())) {
return column;
}
}
return null;
}
public Collection getFields() {
int size = columns.size();
ArrayList fields = new ArrayList(size);
for (int i = 0; i < size; i++) {
Column column = (Column) columns.get(i);
if (StringUtil.isEmpty(column.getProperty())) {
fields.add(column.getName());
} else {
fields.add(column.getProperty());
}
}
return fields;
}
public Collection getReadOnlyFields() {
int size = columns.size();
ArrayList readOnlyFields = new ArrayList(size);
for (int i = 0; i < size; i++) {
Column column = (Column) columns.get(i);
if (column.isReadOnly()) {
if (StringUtil.isEmpty(column.getProperty())) {
readOnlyFields.add(column.getName());
} else {
readOnlyFields.add(column.getProperty());
}
}
}
return readOnlyFields;
}
}