package frame.data.reader; import java.util.Collection; import frame.data.convert.Convertor; import frame.util.ContentBuilder; public class CollectionReader extends EntityReader { protected IEntityReader valueReader; protected Convertor translator; public CollectionReader(Class clazz) throws Exception { super(clazz); } @Override protected void initValueReader(Class dataType) throws Exception { if (translator == null && valueReader == null) { if (Convertor.containsType(dataType)) { translator = Convertor.getInstance(dataType); } else { valueReader = EntityReader.getInstance(dataType); } } } @SuppressWarnings("unchecked") @Override public String getString(Object entity) { Collection collection = (Collection) entity; if (collection.isEmpty()) { return "[]"; } ContentBuilder result = new ContentBuilder(); result.append("["); try { initValueReader(collection.iterator().next().getClass()); } catch (Exception e) { return e.getMessage(); } for (Object value: collection) { try { if (translator != null) { result.append(translator.toString(value), ", "); } else { result.append(valueReader.getString(value), ", "); } } catch (Exception e) { result.append("error", ","); } } result.append("]"); return result.toString(); } @SuppressWarnings("unchecked") @Override public String getJSONString(Object entity) throws Exception { Collection collection = (Collection) entity; if (collection.isEmpty()) { return "[]"; } ContentBuilder result = new ContentBuilder(); result.append("["); try { Class clazz = collection.iterator().next().getClass(); initValueReader(clazz); } catch (Exception e) { return e.getMessage(); } for (Object value: collection) { try { if (translator != null) { result.append(translator.toJSONString(value), ", "); } else { result.append(valueReader.getJSONString(value), ", "); } } catch (Exception e) { result.append("error", ","); } } result.append("]"); return result.toString(); } }