001/**
002 * Copyright (C) 2006-2024 Talend Inc. - www.talend.com
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.talend.sdk.component.api.service.source;
017
018import java.io.Serializable;
019import java.util.Iterator;
020import java.util.Map;
021import java.util.function.Function;
022
023import org.talend.sdk.component.api.record.Record;
024
025/**
026 * This service aims to retrieve a record iterator based on a configured dataset of a connector.
027 * It's expected that Producer has no extra-configuration on dataset and is a finite producer (not a queue for example).
028 */
029public interface ProducerFinder extends Serializable {
030
031    /**
032     * Initialize the ProducerFinder
033     *
034     * @param plugin plugin id
035     * @param builder component instantiate builder
036     * @param converter function to convert to Record
037     *
038     * @return initialized ProducerFinder
039     */
040    ProducerFinder init(final String plugin, final Object builder, final Function<Object, Record> converter);
041
042    /**
043     * Retrieve iterator.
044     *
045     * @param familyName : connector family name.
046     * @param inputName : dataset name.
047     * @param version : version of configuration.
048     * @param configuration : dataset configuration.
049     *
050     * @return the Record iterator
051     */
052    Iterator<Record> find(final String familyName, //
053            final String inputName, //
054            final int version, //
055            final Map<String, String> configuration);
056}