protected final static String MAPSTART = "@";
public String toCsv() { return toCsv(0);}
private final String toCsv(int versionIncrement) {
Buffer buf = new Buffer();
buf.add(getId()); // id
buf.add(CSVDELIMITER);
buf.add(""+(version+versionIncrement)); // version
buf.add(CSVDELIMITER);
buf.add(_modified==null?"-":_modified.toString(TSFORMAT)); // modified time
List<Field> flds = flds();
flds.addAll(cn1s());
for (Field f : flds) {
buf.add(CSVDELIMITER);
Object o = null;
try { o = f.get(this); } catch (Exception e) { fail(e); }
if (o == null) buf.add(NULLCHAR);
else if (o instanceof String) {
if (((String)o).length() == 0) buf.add(NULLCHAR);
else if (((String)o).equals(""+NULLCHAR)) {
buf.add(""+NULLCHAR+NULLCHAR);
}
else {
String str = Jugile.replaceControls((String)o);
str = escape(str,CSVDELIMITER);
buf.add(str);
}
}
else if (o instanceof Bo) buf.add(((Bo)o).getId());
else if (o instanceof Time) buf.add(((Time)o).toString(TSFORMAT));
else if (o instanceof EnumType) buf.add(""+((EnumType)o).getValue());
else buf.add(escape(o.toString(),CSVDELIMITER));
}
return buf.toString();
}