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

org.carrot2.core.SimpleProcessingComponentManager Maven / Gradle / Ivy

Go to download

Carrot2 search results clustering framework. Minimal functional subset (core algorithms and infrastructure, no document sources).

There is a newer version: 3.16.3
Show newest version

/*
 * Carrot2 project.
 *
 * Copyright (C) 2002-2016, Dawid Weiss, Stanisław Osiński.
 * All rights reserved.
 *
 * Refer to the full license file "carrot2.LICENSE"
 * in the root folder of the repository checkout or at:
 * http://www.carrot2.org/carrot2.LICENSE
 */

package org.carrot2.core;

import java.util.Map;

import org.carrot2.core.attribute.Processing;
import org.carrot2.util.attribute.AttributeBinder;
import org.carrot2.util.attribute.Input;

/**
 * An {@link IProcessingComponentManager} that creates a new component for each processing
 * request.
 */
public class SimpleProcessingComponentManager implements IProcessingComponentManager
{
    /** Controller context */
    private IControllerContext context;

    @Override
    public synchronized void init(IControllerContext context,
        Map attributes,
        ProcessingComponentConfiguration... configurations)
    {
        assert context != null;

        // This will ensure that one manager is used with only one controller
        if (this.context != null)
        {
            throw new IllegalStateException("This manager has already been initialized.");
        }

        this.context = context;
    }

    @Override
    public IProcessingComponent prepare(Class clazz,
        String id, Map inputAttributes,
        Map outputAttributes)
    {
        IProcessingComponent component = null;
        try
        {
            component = clazz.newInstance();
            ControllerUtils.init(component, inputAttributes, outputAttributes, true,
                context);

            // To support a scenario where processing input attributes are provided
            // at init-time, we need to bind them here as well.
            AttributeBinder.set(component, inputAttributes, false, Input.class,
                Processing.class);

            return component;
        }
        catch (final InstantiationException e)
        {
            throw new ComponentInitializationException(
                "Could not instantiate component class: " + clazz.getName(), e);
        }
        catch (final IllegalAccessException e)
        {
            throw new ComponentInitializationException(
                "Could not instantiate component class: " + clazz.getName(), e);
        }
        catch (final ComponentInitializationException e)
        {
            // Dispose of the component we failed to initialize
            component.dispose();
            throw e;
        }
    }

    @Override
    public void recycle(IProcessingComponent component, String id)
    {
        // Dispose of the component right after it's been used.
        component.dispose();
    }

    @Override
    public void dispose()
    {
        // Do nothing
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy