code: @Override
      public Row buildRow(final DefaultDataSet ds) {
          /** loop through each line in the file */
          while (true) {
              String line;
              try {
                  line = fetchNextRecord(br, getQualifier(), getDelimiter());
              } catch (final IOException e) {
                  throw new FPException("Error Fetching Record From File...", e);
              }
  
              if (line == null) {
                  return null;
              }
  
              // check to see if the user has elected to skip the first record
              if (shouldSkipFirstRecord(line, ds)) {
                  continue;
              }
  
              // TODO
              // seems like we may want to try doing something like this. I have my reservations because
              // it is possible that we don't get a "detail" id and this might generate NPE
              // is it going to create too much overhead to do a null check here as well???
              List<String> columns = ParserUtils.splitLine(line, getDelimiter(), getQualifier(), FPConstants.SPLITLINE_SIZE_INIT,
                      isPreserveLeadingWhitespace(), isPreserveTrailingWhitespace());
              final String mdkey = ParserUtils.getCMDKeyForDelimitedFile(getPzMetaData(), columns);
              final List<ColumnMetaData> cmds = ParserUtils.getColumnMetaData(mdkey, getPzMetaData());
              // DEBUG
  
              // Incorrect record length on line log the error. Line
              // will not be included in the dataset
              if (!validateColumns(ds, columns, cmds, line)) {
                  continue;
              }
  
              return createRow(line, columns, mdkey);
          }
      }
docs: Reads in the next record on the file and return a row
  
  @param ds
  @return Row