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, IJsonProvider { protected EntityMeta entityMeta; protected List 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(maxSize); } else { entityList = new ArrayList(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 getEntityList() { return entityList; } @Override public Iterator 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(); } } }