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

org.fluentlenium.core.events.ComponentsEventsRegistry Maven / Gradle / Ivy

package org.fluentlenium.core.events;

import org.fluentlenium.core.components.ComponentsAccessor;
import org.fluentlenium.core.components.ComponentsListener;
import org.openqa.selenium.WebElement;

import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * Listen to components registration to register their events annotations couterparts.
 */
public class ComponentsEventsRegistry implements ComponentsListener {
    private final EventsRegistry registry;
    private final ComponentsAccessor componentsAccessor;
    private final Map allRegistries = new IdentityHashMap<>();

    /**
     * Constructor
     */
    public static class RegistryKey {
        WebElement element;
        Object component;

        public RegistryKey(WebElement element, Object component) {
            this.element = element;
            this.component = component;
        }
    }

    /**
     * Constructor
     *
     * @param registry           events registry
     * @param componentsAccessor components accessor
     */
    public ComponentsEventsRegistry(EventsRegistry registry, ComponentsAccessor componentsAccessor) {
        this.registry = registry;
        this.componentsAccessor = componentsAccessor;
        this.componentsAccessor.addComponentsListener(this);
    }

    @Override
    public void componentRegistered(WebElement element, Object component) {
        ContainerAnnotationsEventsRegistry containerRegistry = new ContainerAnnotationsEventsRegistry(registry, component,
                element);

        if (containerRegistry.getListenerCount() > 0) {
            allRegistries.put(new RegistryKey(element, component), containerRegistry);
        }
    }

    @Override
    public void componentReleased(WebElement element, Object component) {
        ContainerAnnotationsEventsRegistry remove = allRegistries.remove(new RegistryKey(element, component));
        if (remove != null) {
            remove.close();
        }
    }

    /**
     * Close all registries.
     */
    public void close() {
        Iterator> entries = allRegistries.entrySet().iterator();

        while (entries.hasNext()) {
            Map.Entry entry = entries.next();
            entry.getValue().close();
            entries.remove();
        }

        componentsAccessor.removeComponentsListener(this);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy