package com.sissi.field.impl; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import com.sissi.field.Field; import com.sissi.field.Fields; /** * @author kim 2013年12月11日 */ public class BeanFields implements Fields { private final static ArrayList<Field<?>> EMPTY = new ArrayList<Field<?>>(); private boolean isEmbed; private List<Field<?>> fields; public BeanFields(boolean isEmbed) { super(); this.isEmbed = isEmbed; } public BeanFields(boolean isEmbed, List<Field<?>> field) { super(); this.isEmbed = isEmbed; this.fields = field; } public BeanFields reset() { if (this.fields != null) { this.fields.clear(); } return this; } public BeanFields add(Field<?> field) { if (this.fields == null) { this.fields = new ArrayList<Field<?>>(); } this.fields.add(field); return this; } public BeanFields add(Fields fields) { for (Field<?> each : fields) { this.add(each); } return this; } public BeanFields add(Collection<Field<?>> fields) { for (Field<?> each : fields) { this.add(each); } return this; } public List<Field<?>> getFields() { return this.fields; } @Override public Iterator<Field<?>> iterator() { return this.fields != null ? this.fields.iterator() : EMPTY.iterator(); } @Override public boolean isEmbed() { return this.isEmbed; } public boolean isEmpty() { return this.fields != null ? this.fields.isEmpty() : true; } /* * TODO: 优化 * * @see com.sissi.field.Fields#findFields(java.lang.String) */ public Fields findFields(String name) { BeanFields fields = new BeanFields(false); for (Field<?> each : this) { if (each.getName().equals(name)) { fields.add(each); } } return fields; } /* * Name.equals(this.name), Class.isAssignableFrom(this.class)</p>TODO: 优化 * * @see com.sissi.field.Fields#findField(java.lang.String, java.lang.Class) */ @Override public <T extends Field<?>> T findField(String name, Class<T> clazz) { for (Field<?> each : this) { if (name.equals(each.getName()) && clazz.isAssignableFrom(each.getClass())) { return clazz.cast(each); } } return null; } }