package frame.object.data;
|
|
import java.util.ArrayList;
|
import java.util.Iterator;
|
import java.util.List;
|
|
import chat.server.call.IJSONWriter;
|
import chat.server.call.IJsonProvider;
|
import frame.object.meta.EntityMeta;
|
|
|
public class EntitySet implements Iterable<Entity>, IJsonProvider {
|
|
protected EntityMeta entityMeta;
|
protected List<Entity> entityList;
|
protected int maxSize;
|
protected Indexes indexes;
|
|
|
public EntitySet(EntityMeta tableMeta) {
|
this(tableMeta, -1);
|
}
|
|
public EntitySet(EntityMeta entityMeta, int maxSize) {
|
this.entityMeta = entityMeta;
|
|
if (maxSize > 0) {
|
this.maxSize = maxSize;
|
entityList = new ArrayList<Entity>(maxSize);
|
}
|
else {
|
entityList = new ArrayList<Entity>(15);
|
}
|
|
indexes = new Indexes(this);
|
}
|
|
public Entity newEntity() {
|
Entity entity = new Entity(entityMeta);
|
return entity;
|
}
|
|
public Entity append() {
|
Entity entity = new Entity(entityMeta);
|
entityList.add(entity);
|
|
return entity;
|
}
|
|
public Entity append(Entity entity) {
|
entityList.add(entity);
|
indexes.setDirty();
|
|
return entity;
|
}
|
|
public Entity getEntity(int idx) {
|
Entity entity = entityList.get(idx);
|
|
if (entity == null || entity.isDeleted()) {
|
return null;
|
}
|
|
return entity;
|
}
|
|
public Entity getEntity(ID id) throws DataException {
|
if (id == null) {
|
return null;
|
}
|
|
Entity entity = indexes.getEntity("id", id.getValue());
|
|
if (entity == null || entity.isDeleted()) {
|
return null;
|
}
|
|
return entity;
|
}
|
|
public Entity getEntity(String field, Object value) throws DataException {
|
if (field == null) {
|
return null;
|
}
|
|
Entity entity = indexes.getEntity(field, value);
|
|
if (entity == null || entity.isDeleted()) {
|
return null;
|
}
|
|
return entity;
|
}
|
|
public void delete(ID id) throws DataException {
|
if (id == null) {
|
return;
|
}
|
|
Entity entity = indexes.getEntity("id", id.getValue());
|
|
if (entity == null) {
|
return;
|
}
|
|
entity.setDeleted();
|
}
|
|
public void clear() {
|
entityList.clear();
|
}
|
|
public boolean isEmpty() {
|
return entityList.isEmpty();
|
}
|
|
public boolean isFull() {
|
return entityList.size() >= maxSize;
|
}
|
|
public String getTableName() {
|
return entityMeta.getTableName();
|
}
|
|
public int getFieldCount() {
|
return entityMeta.getFieldCount();
|
}
|
|
public EntityMeta getEntityMeta() {
|
return entityMeta;
|
}
|
|
public List<Entity> getEntityList() {
|
return entityList;
|
}
|
|
|
|
@Override
|
public Iterator<Entity> iterator() {
|
return new EntitySetIterator(this);
|
}
|
|
public int size() {
|
return entityList.size();
|
}
|
|
public String[] getLowerNames() {
|
return entityMeta.getLowerNames();
|
}
|
|
@Override
|
public void writeJSONObject(IJSONWriter writer) {
|
writer.beginArray();
|
writeJSONData(writer);
|
writer.endArray();
|
}
|
|
@Override
|
public void writeJSONData(IJSONWriter writer) {
|
int lineIndex = 0; int lineNo = 1;
|
|
for (Entity entity : this) {
|
writer.beginObject();
|
|
writer.write("lineIndex", lineIndex++);
|
writer.write("lineNo", lineNo++);
|
|
entity.writeJSONData(writer);
|
|
writer.endObject();
|
}
|
}
|
|
}
|