package de.jpaw.bonaparte.util.impl;
import java.io.IOException;
import java.nio.charset.Charset;
import de.jpaw.bonaparte.core.BonaPortable;
import de.jpaw.bonaparte.core.CSVComposer2;
import de.jpaw.bonaparte.core.CSVConfiguration;
import de.jpaw.bonaparte.core.MimeTypes;
import de.jpaw.bonaparte.core.StringCSVParser;
import de.jpaw.bonaparte.util.IMarshaller;
import de.jpaw.util.ApplicationException;
import de.jpaw.util.ByteArray;
import de.jpaw.util.ByteBuilder;
public class RecordMarshallerCsv implements IMarshaller {
private final CSVConfiguration cfg;
private final Charset cs;
public RecordMarshallerCsv(CSVConfiguration cfg, Charset cs) {
this.cfg = cfg;
this.cs = cs == null ? ByteArray.CHARSET_UTF8 : cs;
}
@Override
public String getContentType() {
return MimeTypes.MIME_TYPE_CSV;
}
@Override
public ByteArray marshal(BonaPortable request) throws IOException {
StringBuilder sb = new StringBuilder(1000);
CSVComposer2 cc = new CSVComposer2(sb, cfg);
cc.writeRecord(request);
return ByteArray.fromString(sb.toString(), cs);
}
@Override
public BonaPortable unmarshal(ByteBuilder buffer) throws ApplicationException {
StringCSVParser cp = new StringCSVParser(cfg, new String(buffer.getCurrentBuffer(), 0, buffer.length(), cs));
return cp.readRecord();
}
}