/*********************************************************************************** * * Copyright (c) 2015 Kamil Baczkowicz * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Eclipse Distribution License v1.0 which accompany this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * * The Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * * Kamil Baczkowicz - initial API and implementation and/or initial documentation * */ package pl.baczkowicz.spy.ui.search; import pl.baczkowicz.spy.messages.FormattedMessage; import pl.baczkowicz.spy.storage.BasicMessageStore; import pl.baczkowicz.spy.storage.MessageList; import pl.baczkowicz.spy.ui.events.queuable.EventQueueManager; import pl.baczkowicz.spy.ui.events.queuable.ui.BrowseRemovedMessageEvent; public class UniqueContentOnlyFilter<T extends FormattedMessage> implements MessageFilter<T> { private boolean uniqueContentOnly; private int deleted = 0; /** Stores events for the UI to be updated. */ protected final EventQueueManager<T> uiEventQueue; private BasicMessageStore<T> store; public UniqueContentOnlyFilter(final BasicMessageStore<T> store, final EventQueueManager<T> uiEventQueue) { this.uiEventQueue = uiEventQueue; this.store = store; } @Override public boolean filter(final T message, final MessageList<T> messageList, final boolean updateUi) { if (!uniqueContentOnly || messageList.getMessages().size() == 0) { return false; } final T lastMessage = messageList.getMessages().get(0); if (message.getFormattedPayload().equals(lastMessage.getFormattedPayload()) && message.getTopic().equals(lastMessage.getTopic())) { final T deletedMessage = messageList.getMessages().remove(0); if (updateUi) { uiEventQueue.add(store, new BrowseRemovedMessageEvent<T>(messageList, deletedMessage, 0)); } deleted++; } return false; } /** * Sets the flag. * * @return the uniqueContentOnly */ public boolean isUniqueContentOnly() { return uniqueContentOnly; } /** * Gets the flag. * * @param uniqueContentOnly the uniqueContentOnly to set */ public void setUniqueContentOnly(boolean uniqueContentOnly) { this.uniqueContentOnly = uniqueContentOnly; if (!uniqueContentOnly) { reset(); } } @Override public void reset() { deleted = 0; } @Override public boolean isActive() { return deleted > 0; } }