All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.numaproj.numaflow.mapstreamer.MapStreamer Maven / Gradle / Ivy

There is a newer version: 0.9.0
Show newest version
package io.numaproj.numaflow.mapstreamer;

import com.google.protobuf.ByteString;
import io.grpc.stub.StreamObserver;
import io.numaproj.numaflow.mapstream.v1.Mapstream;

import java.util.ArrayList;
import java.util.List;

/**
 * MapStreamer exposes method for performing map streaming operation.
 * Implementations should override the processMessage method
 * which will be used for processing the input messages
 */

public abstract class MapStreamer {
    /**
     *
     * method which will be used for processing streaming messages.
     * stream observer need to be invoked on each message processed.
     *
     * @param keys message keys
     * @param datum current message to be processed
     * @param streamObserver stream observer of the response
     */
    public abstract void processMessage(String[] keys, Datum datum, StreamObserver streamObserver);

    /**
     * method will be utilized inside custom processMessage to invoke next on StreamObserver.
     *
     * @param message message
     * @return DatumResponse will be passed on to StreamObserver.
     */
    private Mapstream.MapStreamResponse buildDatumResponse(Message message) {
        return Mapstream.MapStreamResponse.newBuilder()
                .setResult(Mapstream.MapStreamResponse.Result.newBuilder()
                        .setValue(message.getValue() == null ? ByteString.EMPTY : ByteString.copyFrom(
                        message.getValue()))
                .addAllKeys(message.getKeys()
                        == null ? new ArrayList<>() : List.of(message.getKeys()))
                .addAllTags(message.getTags()
                        == null ? new ArrayList<>() : List.of(message.getTags()))
                .build()).build();

    }

    /**
     * method will be utilized inside custom processMessage to invoke next on StreamObserver.
     *
     * @param message message
     * @param streamObserver stream observer of the response
     */
    protected void onNext(Message message, StreamObserver streamObserver) {
        streamObserver.onNext(buildDatumResponse(message));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy