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

com.hazelcast.config.EntryListenerConfig Maven / Gradle / Ivy

/*
 * Copyright (c) 2008-2016, Hazelcast, Inc. All Rights Reserved.
 *
 * 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 com.hazelcast.config;

import com.hazelcast.core.EntryEvent;
import com.hazelcast.core.EntryListener;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.HazelcastInstanceAware;
import com.hazelcast.core.MapEvent;
import com.hazelcast.map.listener.EntryAddedListener;
import com.hazelcast.map.listener.EntryEvictedListener;
import com.hazelcast.map.listener.EntryRemovedListener;
import com.hazelcast.map.listener.EntryUpdatedListener;
import com.hazelcast.map.listener.MapClearedListener;
import com.hazelcast.map.listener.MapEvictedListener;
import com.hazelcast.map.listener.MapListener;

import java.util.EventListener;

import static com.hazelcast.util.Preconditions.isNotNull;

/**
 * Configuration for EntryListener
 */
public class EntryListenerConfig extends ListenerConfig {

    private boolean local;

    private boolean includeValue = true;

    private EntryListenerConfigReadOnly readOnly;

    public EntryListenerConfig() {
    }

    public EntryListenerConfig(String className, boolean local, boolean includeValue) {
        super(className);
        this.local = local;
        this.includeValue = includeValue;
    }

    public EntryListenerConfig(EntryListener implementation, boolean local, boolean includeValue) {
        super(implementation);
        this.local = local;
        this.includeValue = includeValue;
    }

    public EntryListenerConfig(MapListener implementation, boolean local, boolean includeValue) {
        super(toEntryListener(implementation));
        this.local = local;
        this.includeValue = includeValue;
    }

    public EntryListenerConfig(EntryListenerConfig config) {
        includeValue = config.isIncludeValue();
        local = config.isLocal();
        implementation = config.getImplementation();
        className = config.getClassName();
    }

    public EntryListenerConfigReadOnly getAsReadOnly() {
        if (readOnly == null) {
            readOnly = new EntryListenerConfigReadOnly(this);
        }
        return readOnly;
    }

    @Override
    public ListenerConfig setImplementation(EventListener implementation) {
        isNotNull(implementation, "implementation");
        this.implementation = toEntryListener(implementation);
        this.className = null;
        return this;
    }

    public EntryListener getImplementation() {
        return (EntryListener) implementation;
    }

    /**
     * This method provides a workaround by converting a MapListener to EntryListener
     * when it is added via EntryListenerConfig object.
     * 

* With this method, we are trying to fix two problems : * First, if we do not introduce the conversion in this method, {@link EntryListenerConfig#getImplementation} * will give {@link ClassCastException} with a MapListener implementation. *

* Second goal of the conversion is to preserve backward compatibility. */ private static EventListener toEntryListener(Object implementation) { if (implementation instanceof EntryListener) { return (EventListener) implementation; } if (implementation instanceof MapListener) { return new MapListenerToEntryListenerAdapter((MapListener) implementation); } throw new IllegalArgumentException(implementation + " is not an expected EventListener implementation." + " A valid one has to be an implementation of EntryListener or MapListener"); } /** * Wraps a MapListener into an EntryListener. */ public static class MapListenerToEntryListenerAdapter implements EntryListener, HazelcastInstanceAware { private final MapListener mapListener; public MapListenerToEntryListenerAdapter(MapListener mapListener) { this.mapListener = mapListener; } @Override public void entryAdded(EntryEvent event) { if (mapListener instanceof EntryAddedListener) { ((EntryAddedListener) mapListener).entryAdded(event); } } @Override public void entryEvicted(EntryEvent event) { if (mapListener instanceof EntryEvictedListener) { ((EntryEvictedListener) mapListener).entryEvicted(event); } } @Override public void entryRemoved(EntryEvent event) { if (mapListener instanceof EntryRemovedListener) { ((EntryRemovedListener) mapListener).entryRemoved(event); } } @Override public void entryUpdated(EntryEvent event) { if (mapListener instanceof EntryUpdatedListener) { ((EntryUpdatedListener) mapListener).entryUpdated(event); } } @Override public void mapCleared(MapEvent event) { if (mapListener instanceof MapClearedListener) { ((MapClearedListener) mapListener).mapCleared(event); } } @Override public void mapEvicted(MapEvent event) { if (mapListener instanceof MapEvictedListener) { ((MapEvictedListener) mapListener).mapEvicted(event); } } @Override public void setHazelcastInstance(HazelcastInstance hazelcastInstance) { if (mapListener instanceof HazelcastInstanceAware) { ((HazelcastInstanceAware) mapListener).setHazelcastInstance(hazelcastInstance); } } public MapListener getMapListener() { return mapListener; } } public EntryListenerConfig setImplementation(final EntryListener implementation) { super.setImplementation(implementation); return this; } public boolean isLocal() { return local; } public EntryListenerConfig setLocal(boolean local) { this.local = local; return this; } public boolean isIncludeValue() { return includeValue; } public EntryListenerConfig setIncludeValue(boolean includeValue) { this.includeValue = includeValue; return this; } @Override public String toString() { return "EntryListenerConfig{local=" + local + ", includeValue=" + includeValue + '}'; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } if (!super.equals(o)) { return false; } EntryListenerConfig that = (EntryListenerConfig) o; if (includeValue != that.includeValue) { return false; } if (local != that.local) { return false; } return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (local ? 1 : 0); result = 31 * result + (includeValue ? 1 : 0); return result; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy