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

org.metafacture.flowcontrol.ObjectBatchResetter Maven / Gradle / Ivy

There is a newer version: 6.2.0
Show newest version
/*
 * Copyright 2018 Deutsche Nationalbibliothek
 *
 * Licensed 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 org.metafacture.flowcontrol;

import org.metafacture.framework.FluxCommand;
import org.metafacture.framework.ObjectReceiver;
import org.metafacture.framework.annotations.Description;
import org.metafacture.framework.annotations.In;
import org.metafacture.framework.annotations.Out;
import org.metafacture.framework.helpers.DefaultObjectPipe;

/**
 * Resets the downstream modules every {@link #setBatchSize(int) batch-size} objects.
 *
 * @param  object type
 * @author Christoph Böhme
 */
@Description("Resets the downstream modules every batch-size objects")
@FluxCommand("reset-object-batch")
@In(Object.class)
@Out(Object.class)
public class ObjectBatchResetter extends DefaultObjectPipe> {

    public static final int DEFAULT_BATCH_SIZE = 1000;

    private int batchSize = DEFAULT_BATCH_SIZE;

    private long batchCount;
    private int objectCount;

    /**
     * Creates an instance of {@link ObjectBatchResetter}.
     */
    public ObjectBatchResetter() {
    }

    /**
     * Number of objects after which a reset-stream event is triggered.
     * 

* The default value is {@value #DEFAULT_BATCH_SIZE}. *

* This parameter can be changed anytime during processing. If the new value is * less than the number of received objects a reset-stream event is * emitted when the next object is received. * * @param batchSize number of objects before a reset-stream event is * triggered */ public void setBatchSize(final int batchSize) { this.batchSize = batchSize; } /** * Gets the size of the batch. * * @return the size of the batch */ public int getBatchSize() { return batchSize; } /** * Returns the number of batches that were processed. *

* This counter is reset when this module receives a reset-stream event. * * @return number of batches */ public long getBatchCount() { return batchCount; } /** * Returns the number of objects in the current batch. *

* This counter is reset after each batch and also when the module receives a reset-stream event. * * @return number of objects in the current batch */ public int getObjectCount() { return objectCount; } @Override public void process(final T obj) { getReceiver().process(obj); objectCount += 1; if (objectCount >= batchSize) { batchCount += 1; objectCount = 0; getReceiver().resetStream(); } } @Override protected void onResetStream() { batchCount = 0; objectCount = 0; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy