/******************************************************************************* * Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com) * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt ******************************************************************************/ package com.opendoorlogistics.core.tables.decorators.listeners; import java.util.HashMap; import com.opendoorlogistics.api.tables.ODLHasListeners; import com.opendoorlogistics.api.tables.ODLListener; import com.opendoorlogistics.api.tables.ODLListener.ODLListenerType; final public class ListenerRedirector implements ODLHasListeners { private final ODLHasListeners eventSource; private final HashMap<ODLListener, RedirectableListener> listeners = new HashMap<>(); private final boolean useRowRange; // private boolean isEnabled=true; public ListenerRedirector(ODLHasListeners eventSource, boolean useRowRange) { this.eventSource = eventSource; this.useRowRange = useRowRange; } protected class RedirectableListener implements ODLListener { protected final ODLListener destination; protected final boolean useRowRange; public RedirectableListener(ODLListener destination, boolean useRowRange) { this.destination = destination; this.useRowRange = useRowRange; } @Override public void tableChanged(int tableId, int firstRow, int lastRow) { // if(isEnabled){ if (useRowRange) { destination.tableChanged(tableId, firstRow, lastRow); } else { destination.tableChanged(tableId, 0, Integer.MAX_VALUE); } // } } @Override public void datastoreStructureChanged() { // if(isEnabled){ destination.datastoreStructureChanged(); // } } @Override public ODLListenerType getType() { return destination.getType(); } } @Override public void addListener(ODLListener tml, int... tableIds) { RedirectableListener redirectable = new RedirectableListener(tml, useRowRange); listeners.put(tml, redirectable); eventSource.addListener(redirectable, tableIds); } @Override public void removeListener(ODLListener tml) { RedirectableListener redirectable = listeners.remove(tml); eventSource.removeListener(redirectable); } @Override public void disableListeners() { eventSource.disableListeners(); } @Override public void enableListeners() { eventSource.enableListeners(); } public void fireTableSetChanged() { for (ODLListener listener : listeners.keySet()) { if (listener.getType() == ODLListenerType.DATASTORE_STRUCTURE_CHANGED) { listener.datastoreStructureChanged(); } } } public void fireTableChanged(int tableId, int firstRow, int lastRow) { for (ODLListener listener : listeners.keySet()) { if (listener.getType() == ODLListenerType.TABLE_CHANGED) { listener.tableChanged(tableId, firstRow, lastRow); } } } }