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

io.floodplain.replication.factory.ReplicationFactory Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package io.floodplain.replication.factory;

import io.floodplain.immutable.api.ImmutableMessage;
import io.floodplain.immutable.api.ImmutableMessage.ValueType;
import io.floodplain.replication.api.ReplicationMessage;
import io.floodplain.replication.api.ReplicationMessageParser;
import io.floodplain.replication.impl.ReplicationImmutableMessageImpl;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;

public class ReplicationFactory {
    private static ReplicationMessageParser instance;
    private static final Runnable noopCommit = () -> {
    };


    public static ReplicationMessageParser getInstance() {
        return ReplicationFactory.instance;
    }

    public static void setInstance(ReplicationMessageParser parser) {
        ReplicationFactory.instance = parser;
    }

    public static ReplicationMessage createReplicationMessage(Optional source, Optional partition, Optional offset, final String transactionId, final long timestamp,
                                                              final ReplicationMessage.Operation operation, final List primaryKeys, Map types,
                                                              Map values, Map subMessageMap,
                                                              Map> subMessageListMap, Optional commitAction, Optional paramMessage) {
        return new ReplicationImmutableMessageImpl(source, partition, offset, transactionId, operation, timestamp, values, types, subMessageMap, subMessageListMap, primaryKeys, commitAction, paramMessage);
    }

    public static ReplicationMessage createReplicationMessage(Optional source, Optional partition, Optional offset, final String transactionId, final long timestamp,
                                                              final ReplicationMessage.Operation operation, final List primaryKeys, ImmutableMessage message, Optional commitAction, Optional paramMessage) {
        return new ReplicationImmutableMessageImpl(source, partition, offset, transactionId, operation, timestamp, message, primaryKeys, commitAction, paramMessage);
    }

    public static ReplicationMessage fromMap(String key, Map values, Map types) {
        List keys = key == null ? Collections.emptyList() : Collections.singletonList(key);
        return ReplicationFactory.createReplicationMessage(Optional.empty(), Optional.empty(), Optional.empty(), null, System.currentTimeMillis(), ReplicationMessage.Operation.NONE, keys, types, values, Collections.emptyMap(), Collections.emptyMap(), Optional.of(noopCommit), Optional.empty());
    }

    public static ReplicationMessage create(Map values, Map types) {
        return ReplicationFactory.createReplicationMessage(Optional.empty(), Optional.empty(), Optional.empty(), null, System.currentTimeMillis(), ReplicationMessage.Operation.NONE, Collections.emptyList(), types, values, Collections.emptyMap(), Collections.emptyMap(), Optional.of(noopCommit), Optional.empty());
    }


    public static ReplicationMessage create(Map dataMap) {
        return new ReplicationImmutableMessageImpl(dataMap);
    }

    public static ReplicationMessage empty() {
        return ReplicationFactory.createReplicationMessage(Optional.empty(), Optional.empty(), Optional.empty(), null, System.currentTimeMillis(), ReplicationMessage.Operation.NONE, Collections.emptyList(), Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap(), Optional.of(noopCommit), Optional.empty());
    }

    public static ReplicationMessage createErrorReplicationMessage(Throwable t) {
        return new ReplicationImmutableMessageImpl(t);
    }

    public static ReplicationMessage standardMessage(ImmutableMessage msg) {
        return new ReplicationImmutableMessageImpl(Optional.empty(), Optional.empty(), Optional.empty(), null, ReplicationMessage.Operation.NONE, -1L, msg, Collections.emptyList(), Optional.empty(), Optional.empty());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy