// Path: berserker-commons/src/main/java/io/smartcat/berserker/api/DataSource.java
// public interface DataSource<T> {
// 
//     /**
//      * Returns true if data source can provide next value, otherwise false.
//      *
//      * @param time Relative time in nanoseconds from starting load generator. Time can be used for implementing time
//      *            dependent data source which can then return data with time stamps and/or data influenced by time in
//      *            any other way.
//      * @return True if data source can provide next value, otherwise false.
//      */
//     boolean hasNext(long time);
// 
//     /**
//      * Returns next value from this data source.
//      *
//      * @param time Relative time in nanoseconds from starting load generator. Time can be used for implementing time
//      *            dependent data source which can then return data with time stamps and/or data influenced by time in
//      *            any other way.
//      * @return Next value from this data source.
//      */
//     T getNext(long time);
// }
// 
// Path: berserker-commons/src/main/java/io/smartcat/berserker/configuration/ConfigurationParseException.java
// public class ConfigurationParseException extends ConfigurationException {
// 
//     private static final long serialVersionUID = -7101805420460054579L;
// 
//     /**
//      * Default constructor.
//      */
//     public ConfigurationParseException() {
//     }
// 
//     /**
//      * Constructor.
//      *
//      * @param message Error message.
//      * @param cause Exception cause.
//      * @param enableSuppression controls exception suppression.
//      * @param writableStackTrace stack trace.
//      */
//     public ConfigurationParseException(String message, Throwable cause, boolean enableSuppression,
//             boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
// 
//     /**
//      * Constructor.
//      *
//      * @param message Error message.
//      * @param cause Exception cause.
//      */
//     public ConfigurationParseException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     /**
//      * Constructor.
//      *
//      * @param message Error message.
//      */
//     public ConfigurationParseException(String message) {
//         super(message);
//     }
// 
//     /**
//      * Constructor.
//      *
//      * @param cause Exception cause.
//      */
//     public ConfigurationParseException(Throwable cause) {
//         super(cause);
//     }
// }
// 
// Path: berserker-commons/src/main/java/io/smartcat/berserker/configuration/DataSourceConfiguration.java
// public interface DataSourceConfiguration extends BaseConfiguration {
// 
//     /**
//      * Returns data source based on configuration parameters.
//      *
//      * @param configuration Configuration specific to data source it should construct.
//      * @return Instance of {@link DataSource}, never null.
//      *
//      * @throws ConfigurationParseException If there is an error during configuration parsing.
//      */
//     DataSource<?> getDataSource(Map<String, Object> configuration) throws ConfigurationParseException;
// }
// 
// Path: berserker-ranger/src/main/java/io/smartcat/berserker/ranger/datasource/RangerDataSource.java
// public class RangerDataSource implements DataSource<Map<String, Object>> {
// 
//     private final ObjectGenerator<Map<String, Object>> objectGenerator;
// 
//     /**
//      * Constructs ranger data source with specified <code>aggregatedObjectGenerator</code>.
//      *
//      * @param objectGenerator Generator which will be used to generate objects.
//      */
//     public RangerDataSource(ObjectGenerator<Map<String, Object>> objectGenerator) {
//         this.objectGenerator = objectGenerator;
//     }
// 
//     @Override
//     public boolean hasNext(long time) {
//         return true;
//     }
// 
//     @Override
//     public Map<String, Object> getNext(long time) {
//         return (Map<String, Object>) objectGenerator.next();
//     }
// }


import java.util.Map;
import io.smartcat.berserker.api.DataSource;
import io.smartcat.berserker.configuration.ConfigurationParseException;
import io.smartcat.berserker.configuration.DataSourceConfiguration;
import io.smartcat.berserker.ranger.datasource.RangerDataSource;
import io.smartcat.ranger.ObjectGenerator;
import io.smartcat.ranger.parser.ConfigurationParser;
package io.smartcat.berserker.ranger.configuration;



/**
 * Configuration to construct {@link RangerDataSource}.
 */
public class RangerConfiguration implements DataSourceConfiguration {

    @Override
    public String getName() {
        return "Ranger";
    }

    @Override
// Path: berserker-commons/src/main/java/io/smartcat/berserker/api/DataSource.java
// public interface DataSource<T> {
// 
//     /**
//      * Returns true if data source can provide next value, otherwise false.
//      *
//      * @param time Relative time in nanoseconds from starting load generator. Time can be used for implementing time
//      *            dependent data source which can then return data with time stamps and/or data influenced by time in
//      *            any other way.
//      * @return True if data source can provide next value, otherwise false.
//      */
//     boolean hasNext(long time);
// 
//     /**
//      * Returns next value from this data source.
//      *
//      * @param time Relative time in nanoseconds from starting load generator. Time can be used for implementing time
//      *            dependent data source which can then return data with time stamps and/or data influenced by time in
//      *            any other way.
//      * @return Next value from this data source.
//      */
//     T getNext(long time);
// }
// 
// Path: berserker-commons/src/main/java/io/smartcat/berserker/configuration/ConfigurationParseException.java
// public class ConfigurationParseException extends ConfigurationException {
// 
//     private static final long serialVersionUID = -7101805420460054579L;
// 
//     /**
//      * Default constructor.
//      */
//     public ConfigurationParseException() {
//     }
// 
//     /**
//      * Constructor.
//      *
//      * @param message Error message.
//      * @param cause Exception cause.
//      * @param enableSuppression controls exception suppression.
//      * @param writableStackTrace stack trace.
//      */
//     public ConfigurationParseException(String message, Throwable cause, boolean enableSuppression,
//             boolean writableStackTrace) {
//         super(message, cause, enableSuppression, writableStackTrace);
//     }
// 
//     /**
//      * Constructor.
//      *
//      * @param message Error message.
//      * @param cause Exception cause.
//      */
//     public ConfigurationParseException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     /**
//      * Constructor.
//      *
//      * @param message Error message.
//      */
//     public ConfigurationParseException(String message) {
//         super(message);
//     }
// 
//     /**
//      * Constructor.
//      *
//      * @param cause Exception cause.
//      */
//     public ConfigurationParseException(Throwable cause) {
//         super(cause);
//     }
// }
// 
// Path: berserker-commons/src/main/java/io/smartcat/berserker/configuration/DataSourceConfiguration.java
// public interface DataSourceConfiguration extends BaseConfiguration {
// 
//     /**
//      * Returns data source based on configuration parameters.
//      *
//      * @param configuration Configuration specific to data source it should construct.
//      * @return Instance of {@link DataSource}, never null.
//      *
//      * @throws ConfigurationParseException If there is an error during configuration parsing.
//      */
//     DataSource<?> getDataSource(Map<String, Object> configuration) throws ConfigurationParseException;
// }
// 
// Path: berserker-ranger/src/main/java/io/smartcat/berserker/ranger/datasource/RangerDataSource.java
// public class RangerDataSource implements DataSource<Map<String, Object>> {
// 
//     private final ObjectGenerator<Map<String, Object>> objectGenerator;
// 
//     /**
//      * Constructs ranger data source with specified <code>aggregatedObjectGenerator</code>.
//      *
//      * @param objectGenerator Generator which will be used to generate objects.
//      */
//     public RangerDataSource(ObjectGenerator<Map<String, Object>> objectGenerator) {
//         this.objectGenerator = objectGenerator;
//     }
// 
//     @Override
//     public boolean hasNext(long time) {
//         return true;
//     }
// 
//     @Override
//     public Map<String, Object> getNext(long time) {
//         return (Map<String, Object>) objectGenerator.next();
//     }
// }


// Path: berserker-ranger/src/main/java/io/smartcat/berserker/ranger/configuration/RangerConfiguration.java
import java.util.Map;
import io.smartcat.berserker.api.DataSource;
import io.smartcat.berserker.configuration.ConfigurationParseException;
import io.smartcat.berserker.configuration.DataSourceConfiguration;
import io.smartcat.berserker.ranger.datasource.RangerDataSource;
import io.smartcat.ranger.ObjectGenerator;
import io.smartcat.ranger.parser.ConfigurationParser;

package io.smartcat.berserker.ranger.configuration;



/**
 * Configuration to construct {@link RangerDataSource}.
 */
public class RangerConfiguration implements DataSourceConfiguration {

    @Override
    public String getName() {
        return "Ranger";
    }

    @Override
    public DataSource<?> getDataSource(Map<String, Object> configuration) throws ConfigurationParseException {