001/* 002 * The contents of this file are subject to the terms of the Common Development and 003 * Distribution License (the License). You may not use this file except in compliance with the 004 * License. 005 * 006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the 007 * specific language governing permission and limitations under the License. 008 * 009 * When distributing Covered Software, include this CDDL Header Notice in each file and include 010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL 011 * Header, with the fields enclosed by brackets [] replaced by your own identifying 012 * information: "Portions copyright [year] [name of copyright owner]". 013 * 014 * Copyright 2014 ForgeRock AS. 015 */ 016 017package org.forgerock.openig.jwt.dirty; 018 019import java.util.Iterator; 020 021/** 022 * An {@link Iterator} decorator that notifies the provided {@link DirtyListener} when one element is removed. 023 * @param <E> type of the iterator 024 */ 025public class DirtyIterator<E> implements Iterator<E> { 026 027 private final Iterator<E> delegate; 028 private final DirtyListener listener; 029 030 /** 031 * Builds a new DirtyIterator delegating to the given {@literal Iterator} and notifying the provided observer. 032 * 033 * @param delegate 034 * Iterator delegate 035 * @param listener 036 * change observer 037 */ 038 public DirtyIterator(final Iterator<E> delegate, final DirtyListener listener) { 039 this.delegate = delegate; 040 this.listener = listener; 041 } 042 043 @Override 044 public boolean hasNext() { 045 return delegate.hasNext(); 046 } 047 048 @Override 049 public E next() { 050 return delegate.next(); 051 } 052 053 @Override 054 public void remove() { 055 delegate.remove(); 056 listener.onElementsRemoved(); 057 } 058}