/*
* XAdES4j - A Java library for generation and verification of XAdES signatures.
* Copyright (C) 2010 Luis Goncalves.
*
* XAdES4j is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 3 of the License, or any later version.
*
* XAdES4j is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with XAdES4j. If not, see <http://www.gnu.org/licenses/>.
*/
package xades4j.utils;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import xades4j.utils.CollectionUtils.Predicate;
/**
*
* @author Luís
*/
public class DataGetterImpl<T> implements DataGetter<T>
{
private final Collection<T> all;
private final Map<Class, Set<T>> allByType;
public DataGetterImpl(Collection<T> all)
{
this.all = Collections.unmodifiableCollection(all);
this.allByType = getAllByType(all);
}
private Map<Class, Set<T>> getAllByType(Collection<T> all)
{
Map<Class, Set<T>> res = new HashMap<Class, Set<T>>();
for (T e : all)
{
Set<T> typeTs = res.get(e.getClass());
if (null == typeTs)
{
typeTs = new HashSet<T>();
res.put(e.getClass(), typeTs);
}
typeTs.add(e);
}
return res;
}
@Override
public Collection<T> getAll()
{
return all;
}
@Override
public <TP extends T> Collection<TP> getOfType(
Class<TP> clazz)
{
return (Collection<TP>)CollectionUtils.emptyIfNull(allByType.get(clazz));
}
@Override
public Collection<T> getFiltered(Predicate<T> filter)
{
return CollectionUtils.filter(all, filter);
}
}