package com.ldbc.driver.workloads.ldbc.snb.bi; import com.google.common.collect.Lists; import com.ldbc.driver.Operation; import com.ldbc.driver.WorkloadException; import com.ldbc.driver.csv.charseeker.CharSeeker; import com.ldbc.driver.csv.charseeker.CharSeekerParams; import com.ldbc.driver.csv.charseeker.Extractors; import com.ldbc.driver.csv.charseeker.Mark; import com.ldbc.driver.generator.CsvEventStreamReaderBasicCharSeeker; import com.ldbc.driver.generator.GeneratorException; import com.ldbc.driver.generator.GeneratorFactory; import java.io.IOException; import java.io.InputStream; import java.util.List; public class Query2EventStreamReader extends BaseEventStreamReader { public Query2EventStreamReader( InputStream parametersInputStream, CharSeekerParams charSeekerParams, GeneratorFactory gf ) throws WorkloadException { super( parametersInputStream, charSeekerParams, gf ); } @Override Operation operationFromParameters( Object[] parameters ) { return new LdbcSnbBiQuery2TopTags( (long) parameters[0], (long) parameters[1], (List<String>) parameters[2], (int) parameters[3], (long) parameters[4], (int) parameters[5] ); } @Override CsvEventStreamReaderBasicCharSeeker.EventDecoder<Object[]> decoder() { return new CsvEventStreamReaderBasicCharSeeker.EventDecoder<Object[]>() { /* Date0|Date1|CountryA|CountryB 1236219|1335225600|countryA|countryB */ @Override public Object[] decodeEvent( CharSeeker charSeeker, Extractors extractors, int[] columnDelimiters, Mark mark ) throws IOException { long date0; if ( charSeeker.seek( mark, columnDelimiters ) ) { date0 = charSeeker.extract( mark, extractors.long_() ).longValue(); } else { // if first column of next row contains nothing it means the file is finished return null; } long date1; if ( charSeeker.seek( mark, columnDelimiters ) ) { date1 = charSeeker.extract( mark, extractors.long_() ).longValue(); } else { throw new GeneratorException( "Error retrieving date" ); } List<String> countries; if ( charSeeker.seek( mark, columnDelimiters ) ) { countries = Lists.newArrayList( charSeeker.extract( mark, extractors.stringArray() ).value() ); } else { throw new GeneratorException( "Error retrieving languages" ); } long endOfSimulationTime; if ( charSeeker.seek( mark, columnDelimiters ) ) { endOfSimulationTime = charSeeker.extract( mark, extractors.long_() ).longValue(); } else { throw new GeneratorException( "Error retrieving end of simulation time" ); } int messageThreshold; if ( charSeeker.seek( mark, columnDelimiters ) ) { messageThreshold = charSeeker.extract( mark, extractors.int_() ).intValue(); } else { throw new GeneratorException( "Error retrieving min message count" ); } return new Object[]{ date0, date1, countries, messageThreshold, endOfSimulationTime, LdbcSnbBiQuery2TopTags.DEFAULT_LIMIT, }; } }; } @Override int columnCount() { return 5; } }