package foundation.data.object;
|
|
import java.util.Date;
|
import java.util.Iterator;
|
|
import foundation.data.meta.field.FieldsRuntime;
|
import foundation.util.ContentBuilder;
|
import foundation.util.MapList;
|
import foundation.util.Util;
|
|
public class DataJoins implements Iterable<DataJoin> {
|
|
private MapList<String, DataJoin> items;
|
private String commaSeparator;
|
private String joinSelectFields;
|
private String joinSQL;
|
private String[] joinTables;
|
private boolean builded;
|
private Date lastUpdateTime;
|
|
|
public DataJoins() {
|
items = new MapList<String, DataJoin>();
|
builded = false;
|
lastUpdateTime = new Date(0);
|
joinTables = null;
|
}
|
|
public void loadOne(DataJoin dataJoin) {
|
//1.
|
items.add(dataJoin.getJoinDataName(), dataJoin);
|
|
//2.
|
Date time = dataJoin.getUpdateTime();
|
lastUpdateTime = lastUpdateTime.after(time) ? lastUpdateTime : time;
|
}
|
|
public void build() throws Exception {
|
if (builded) {
|
return;
|
}
|
|
//1.
|
for (DataJoin dataJoin: items) {
|
dataJoin.build();
|
}
|
|
//2. build join select fields
|
ContentBuilder joinFieldsBuilder = new ContentBuilder(", ");
|
|
for (DataJoin dataJoin: items) {
|
dataJoin.getJoinFields(joinFieldsBuilder);
|
}
|
|
joinSelectFields = joinFieldsBuilder.toString();
|
|
//3. build join SQL
|
ContentBuilder joinSQLBuilder = new ContentBuilder(Util.String_Return);
|
|
for (DataJoin dataJoin: items) {
|
joinSQLBuilder.append(dataJoin.getJoinSQL());
|
}
|
|
joinSQL = joinSQLBuilder.toString();
|
|
//4. build commaSeparator
|
commaSeparator = !Util.isEmpty(joinSelectFields) ? ", " : "";
|
|
//5.
|
int max = items.size();
|
joinTables = new String[max];
|
|
for (int i = 0; i < max; i++) {
|
DataJoin dataJoin = items.get(i);
|
joinTables[i] = dataJoin.getJoinDataName();
|
}
|
|
//6.
|
builded = true;
|
}
|
|
public FieldsRuntime getJoinFieldsMeta(String tableName) {
|
DataJoin dataJoin = items.get(tableName);
|
|
if (dataJoin == null) {
|
return null;
|
}
|
|
return dataJoin.getJoinFieldsMeta();
|
}
|
|
@Override
|
public Iterator<DataJoin> iterator() {
|
return items.iterator();
|
}
|
|
public String getCommaSeparator() {
|
return commaSeparator;
|
}
|
|
public String getJoinSelectFields() {
|
return joinSelectFields;
|
}
|
|
public String getJoinSQL() {
|
return joinSQL;
|
}
|
|
public boolean isEmpty() {
|
return items.isEmpty();
|
}
|
|
public String[] getJoinTables() {
|
return joinTables;
|
}
|
|
public Date getLastUpdateTime() {
|
return lastUpdateTime;
|
}
|
|
public int size() {
|
return items.size();
|
}
|
|
|
}
|