package org.gbif.tabular;
import org.gbif.dwc.terms.Term;
import org.gbif.dwca.io.ArchiveFile;
import org.gbif.utils.file.tabular.TabularDataFileReader;
import org.gbif.utils.file.tabular.TabularFiles;
import java.io.InputStream;
import java.util.List;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
/**
* Static utility methods related to {@link TermTabularDataFileReader} instances.
*/
public class TermTabularFiles {
/**
* Get a new TermTabularDataFileReader for {@link Term}.
*
* @param in
* @param delimiterChar
* @param headerLine
* @param columnMapping
* @return
*/
public static TermTabularDataFileReader newTermMappedTabularFileReader(InputStream in, char delimiterChar,
boolean headerLine,
Term[] columnMapping){
Preconditions.checkNotNull(columnMapping, "columnMapping must be provided");
TabularDataFileReader<List<String>> tabularFileReader = TabularFiles
.newTabularFileReader(in, delimiterChar, headerLine);
return new TermTabularDataFileReader(tabularFileReader, columnMapping);
}
/**
* Get a new TermTabularDataFileReader from a {@link ArchiveFile} definition for content as {@link InputStream}.
*
* @param in the content to read
* @param archiveFile the "definition" of the archive
* @param headerLine is the header line included in the content to read ?
*
* @return
*/
public static TermTabularDataFileReader newDwcTabularFileReader(InputStream in, ArchiveFile archiveFile,
boolean headerLine) {
Preconditions.checkNotNull(archiveFile, "DarwinCore archive fields must be provided");
Preconditions.checkArgument(archiveFile.getFieldsTerminatedBy().length() == 1,
"DarwinCore archive getFieldsTerminatedBy must be 1 char");
TabularDataFileReader<List<String>> tabularFileReader = TabularFiles
.newTabularFileReader(in, archiveFile.getFieldsTerminatedBy().charAt(0), headerLine);
return new DwcTabularDataFileReader(tabularFileReader, archiveFile.getId(),
Lists.newArrayList(archiveFile.getFields().values()));
}
}