/* * Copyright 2014 Grow Bit * * 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 org.turbogwt.net.http.client; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.turbogwt.core.util.shared.Registration; /** * A manager for {@link RequestFilter} and {@link ResponseFilter}. * * @author Danilo Reinert */ class FilterManager { private final List<RequestFilter> requestFilters = new ArrayList<>(); private final List<ResponseFilter> responseFilters = new ArrayList<>(); @SuppressWarnings("unchecked") private List<RequestFilter> requestFiltersCopy = Collections.EMPTY_LIST; @SuppressWarnings("unchecked") private List<ResponseFilter> responseFiltersCopy = Collections.EMPTY_LIST; /** * Register a request filter. * * @param requestFilter The request filter to be registered. * * @return The {@link org.turbogwt.core.util.shared.Registration} object, capable of cancelling this registration * to the {@link FilterManager}. */ public Registration registerRequestFilter(final RequestFilter requestFilter) { addRequestFilter(requestFilter); return new Registration() { @Override public void removeHandler() { removeRequestFilter(requestFilter); } }; } /** * Register a response filter. * * @param responseFilter The response filter to be registered. * * @return The {@link Registration} object, capable of cancelling this registration * to the {@link FilterManager}. */ public Registration registerResponseFilter(final ResponseFilter responseFilter) { addResponseFilter(responseFilter); return new Registration() { @Override public void removeHandler() { removeResponseFilter(responseFilter); } }; } /** * Returns an immutable copy of the filters. * * @return The request filters. */ public List<RequestFilter> getRequestFilters() { return requestFiltersCopy; } /** * Returns an immutable copy of the filters. * * @return The response filters. */ public List<ResponseFilter> getResponseFilters() { return responseFiltersCopy; } private void addRequestFilter(RequestFilter requestFilter) { requestFilters.add(requestFilter); updateRequestFiltersCopy(); } private void addResponseFilter(ResponseFilter responseFilter) { responseFilters.add(responseFilter); updateResponseFiltersCopy(); } private void removeRequestFilter(RequestFilter requestFilter) { requestFilters.remove(requestFilter); updateRequestFiltersCopy(); } private void removeResponseFilter(ResponseFilter responseFilter) { responseFilters.remove(responseFilter); updateResponseFiltersCopy(); } private void updateRequestFiltersCopy() { requestFiltersCopy = Collections.unmodifiableList(requestFilters); } private void updateResponseFiltersCopy() { responseFiltersCopy = Collections.unmodifiableList(responseFilters); } }