/*
* 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 .
*/
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 implements DataGetter
{
private final Collection all;
private final Map> allByType;
public DataGetterImpl(Collection all)
{
this.all = Collections.unmodifiableCollection(all);
this.allByType = getAllByType(all);
}
private Map> getAllByType(Collection all)
{
Map> res = new HashMap>();
for (T e : all)
{
Set typeTs = res.get(e.getClass());
if (null == typeTs)
{
typeTs = new HashSet();
res.put(e.getClass(), typeTs);
}
typeTs.add(e);
}
return res;
}
@Override
public Collection getAll()
{
return all;
}
@Override
public Collection getOfType(
Class clazz)
{
return (Collection)CollectionUtils.emptyIfNull(allByType.get(clazz));
}
@Override
public Collection getFiltered(Predicate filter)
{
return CollectionUtils.filter(all, filter);
}
}