/* * 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.ui.service.instance.sample.internal.sampler.first; import java.util.Map; import org.eclipse.swt.widgets.Composite; import com.google.common.base.Function; import com.google.common.collect.Maps; import com.ibm.icu.text.MessageFormat; import eu.esdihumboldt.hale.common.core.io.Value; import eu.esdihumboldt.hale.common.instance.model.InstanceCollection; import eu.esdihumboldt.hale.common.instance.model.ext.InstanceCollection2; import eu.esdihumboldt.hale.common.instance.model.ext.impl.PerTypeInstanceCollection; import eu.esdihumboldt.hale.common.schema.model.TypeDefinition; import eu.esdihumboldt.hale.ui.common.AttributeEditor; import eu.esdihumboldt.hale.ui.common.editors.IntegerEditor; import eu.esdihumboldt.hale.ui.common.editors.value.IntegerValueEditor; import eu.esdihumboldt.hale.ui.service.instance.sample.Sampler; /** * Sampler that returns the first n instances. * * @author Simon Templer */ public class FirstSampler implements Sampler { private static final String DISPLAY_NAME = "First {0} instances per type"; private static final int DEFAULT_MAX = 500; @Override public InstanceCollection sample(InstanceCollection instances, Value settings) { final int max = settings.as(Integer.class, DEFAULT_MAX); if (max >= 1) { if (instances instanceof InstanceCollection2) { InstanceCollection2 fic = (InstanceCollection2) instances; if (fic.supportsFanout()) { /* * The instance collection supports fan-out by type -> so we * apply the sampling on each instance collection * individually */ Map<TypeDefinition, InstanceCollection> collections = Maps.transformValues( fic.fanout(), new Function<InstanceCollection, InstanceCollection>() { @Override public InstanceCollection apply(InstanceCollection org) { return new FirstOverallInstances(org, max); } }); return new PerTypeInstanceCollection(collections); } } return new FirstInstancesPerType(instances, max); } return instances; } @Override public String getDisplayName(Value settings) { Integer n = settings.as(Integer.class); if (n != null) { return MessageFormat.format(DISPLAY_NAME, n); } else { return MessageFormat.format(DISPLAY_NAME, 'n'); } } @Override public AttributeEditor<Value> createEditor(Composite parent) { return new IntegerValueEditor(new IntegerEditor(parent, 100000, 1, 10, 100)); } @Override public Value getDefaultSettings() { return Value.of(DEFAULT_MAX); } }