/*
* ====================
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License("CDDL") (the "License"). You may not use this file
* except in compliance with the License.
*
* You can obtain a copy of the License at
* http://opensource.org/licenses/cddl1.php
* See the License for the specific language governing permissions and limitations
* under the License.
*
* When distributing the Covered Code, include this CDDL Header Notice in each file
* and include the License file at http://opensource.org/licenses/cddl1.php.
* If applicable, add the following below this CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
* ====================
* Portions Copyrighted 2010-2014 ForgeRock AS.
*/
package org.identityconnectors.framework.impl.api.local.operations;
import org.identityconnectors.framework.common.objects.ConnectorObject;
import org.identityconnectors.framework.common.objects.ResultsHandler;
import org.identityconnectors.framework.common.objects.filter.Filter;
import org.identityconnectors.framework.common.objects.filter.FilterVisitor;
public final class FilteredResultsHandler implements ResultsHandler {
// =======================================================================
// Fields
// =======================================================================
final ResultsHandler handler;
final Filter filter;
// =======================================================================
// Constructors
// =======================================================================
/**
* Filter chain for producers.
*
* @param handler
* Producer to filter.
* @param filter
* Filter to use to accept objects.
*/
public FilteredResultsHandler(ResultsHandler handler, Filter filter) {
// there must be a producer..
if (handler == null) {
throw new IllegalArgumentException("Handler must not be null!");
}
this.handler = handler;
// use a default pass through filter..
this.filter = filter == null ? new PassThroughFilter() : filter;
}
public boolean handle(ConnectorObject object) {
if (filter.accept(object)) {
return handler.handle(object);
} else {
return true;
}
}
/**
* Use a pass through filter to use if a null filter is provided.
*/
public static class PassThroughFilter implements Filter {
public boolean accept(ConnectorObject obj) {
return true;
}
public <R, P> R accept(FilterVisitor<R, P> v, P p) {
return v.visitExtendedFilter(p, this);
}
}
}