001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2011 SonarSource
004     * mailto:contact AT sonarsource DOT com
005     *
006     * Sonar is free software; you can redistribute it and/or
007     * modify it under the terms of the GNU Lesser General Public
008     * License as published by the Free Software Foundation; either
009     * version 3 of the License, or (at your option) any later version.
010     *
011     * Sonar is distributed in the hope that it will be useful,
012     * but WITHOUT ANY WARRANTY; without even the implied warranty of
013     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014     * Lesser General Public License for more details.
015     *
016     * You should have received a copy of the GNU Lesser General Public
017     * License along with Sonar; if not, write to the Free Software
018     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019     */
020    
021    package net.sourceforge.pmd.util.filter;
022    
023    /**
024     * A base class for Filters which implements behavior using delegation
025     * to an underlying filter.
026     * 
027     * @param <T>
028     *            The underlying type on which the filter applies.
029     */
030    public abstract class AbstractDelegateFilter<T> implements Filter<T> {
031            protected Filter<T> filter;
032    
033            public AbstractDelegateFilter() {
034            }
035    
036            public AbstractDelegateFilter(Filter<T> filter) {
037                    this.filter = filter;
038            }
039    
040            public Filter<T> getFilter() {
041                    return filter;
042            }
043    
044            public void setFilter(Filter<T> filter) {
045                    this.filter = filter;
046            }
047    
048            // Subclass should override to do something other the simply delegate.
049            public boolean filter(T obj) {
050                    return filter.filter(obj);
051            }
052    
053            // Subclass should override to do something other the simply delegate.
054            public String toString() {
055                    return filter.toString();
056            }
057    }