/* * Copyright (c) 2013 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.common.instance.model.ext.impl; import java.util.ArrayList; import java.util.Map; import com.google.common.collect.ImmutableMap; import eu.esdihumboldt.hale.common.instance.model.Filter; import eu.esdihumboldt.hale.common.instance.model.InstanceCollection; import eu.esdihumboldt.hale.common.instance.model.ext.InstanceCollection2; import eu.esdihumboldt.hale.common.instance.model.impl.FilteredInstanceCollection; import eu.esdihumboldt.hale.common.instance.model.impl.MultiInstanceCollection; import eu.esdihumboldt.hale.common.schema.model.TypeDefinition; /** * Multi instance collection that consists of one instance collection per type. * * @author Simon Templer */ public class PerTypeInstanceCollection extends MultiInstanceCollection implements InstanceCollection2 { private final Map<TypeDefinition, InstanceCollection> collections; /** * Create an instance collection consisting of the given instance * collections. * * @param collections the instance collections mapped to the type associated * to the instances they contain */ public PerTypeInstanceCollection(Map<TypeDefinition, InstanceCollection> collections) { super(new ArrayList<>(collections.values())); this.collections = ImmutableMap.copyOf(collections); } @Override public boolean supportsFanout() { return true; } @Override public Map<TypeDefinition, InstanceCollection> fanout() { return collections; } @Override public InstanceCollection select(Filter filter) { // apply filter to this collection, as it supports fan-out an probably // the filter can be optimized return FilteredInstanceCollection.applyFilter(this, filter); } }