/* AWE - Amanzi Wireless Explorer * http://awe.amanzi.org * (C) 2008-2009, AmanziTel AB * * This library is provided under the terms of the Eclipse Public License * as described at http://www.eclipse.org/legal/epl-v10.html. Any use, * reproduction or distribution of the library constitutes recipient's * acceptance of this agreement. * * This library is distributed WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ package org.amanzi.awe.distribution.ui.widgets; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collection; import org.amanzi.awe.distribution.ui.DistributionView; import org.amanzi.awe.distribution.ui.widgets.DistributionDatasetWidget.DistributionDataset; import org.amanzi.awe.distribution.ui.widgets.DistributionDatasetWidget.IDistributionDatasetSelectionListener; import org.amanzi.awe.ui.events.IEvent; import org.amanzi.awe.ui.view.widgets.internal.AbstractComboWidget; import org.amanzi.neo.models.drive.IDriveModel; import org.amanzi.neo.models.exceptions.ModelException; import org.amanzi.neo.models.network.INetworkModel; import org.amanzi.neo.models.project.IProjectModel; import org.amanzi.neo.models.statistics.IPropertyStatisticalModel; import org.amanzi.neo.nodetypes.INodeType; import org.amanzi.neo.providers.IDriveModelProvider; import org.amanzi.neo.providers.INetworkModelProvider; import org.amanzi.neo.providers.IProjectModelProvider; import org.apache.log4j.Logger; import org.eclipse.swt.widgets.Composite; /** * TODO Purpose of * <p> * </p> * * @author Nikolay Lagutko (nikolay.lagutko@amanzitel.com) * @since 1.0.0 */ public class DistributionDatasetWidget extends AbstractComboWidget<DistributionDataset, IDistributionDatasetSelectionListener> { private static final Logger LOGGER = Logger.getLogger(DistributionDatasetWidget.class); private static final String DISTRIBUTION_DATASET_NAME_PATTERN = "{0} - {1}"; public interface IDistributionDatasetSelectionListener extends AbstractComboWidget.IComboSelectionListener { void onDistributionDatasetSelected(DistributionDataset distributionDataset); } public class DistributionDataset { private final IPropertyStatisticalModel model; private final INodeType nodeType; public DistributionDataset(final IPropertyStatisticalModel model, final INodeType nodeType) { this.model = model; this.nodeType = nodeType; } public IPropertyStatisticalModel getModel() { return model; } public INodeType getNodeType() { return nodeType; } } private final IProjectModelProvider projectModelProvider; private final INetworkModelProvider networkModelProvider; private final IDriveModelProvider driveModelProvider; /** * @param parent * @param listener * @param label * @param minimalLabelWidth */ public DistributionDatasetWidget(final Composite parent, final IDistributionDatasetSelectionListener listener, final String label, final int minimalLabelWidth, final IProjectModelProvider projectModelProvider, final INetworkModelProvider networkModelProvider, final IDriveModelProvider driveModelProvider) { super(parent, listener, label, minimalLabelWidth); this.driveModelProvider = driveModelProvider; this.networkModelProvider = networkModelProvider; this.projectModelProvider = projectModelProvider; } @Override protected Collection<DistributionDataset> getItems() { Collection<DistributionDataset> result = null; try { IProjectModel activeProject = projectModelProvider.getActiveProjectModel(); if (activeProject != null) { result = new ArrayList<DistributionDatasetWidget.DistributionDataset>(); for (IDriveModel driveModel : driveModelProvider.findAll(activeProject)) { addDistributionDatasetsForModel(driveModel, result); } for (INetworkModel networkModel : networkModelProvider.findAll(activeProject)) { addDistributionDatasetsForModel(networkModel, result); } } } catch (ModelException e) { LOGGER.error("An error occured on getting all Distribution Datasets", e); result = null; } return result == null ? null : result.isEmpty() ? null : result; } private void addDistributionDatasetsForModel(final IPropertyStatisticalModel propertyStatisticalModel, final Collection<DistributionDataset> distributionDatasets) { for (INodeType nodeType : propertyStatisticalModel.getPropertyStatistics().getNodeTypes()) { distributionDatasets.add(new DistributionDataset(propertyStatisticalModel, nodeType)); } } @Override protected String getItemName(final DistributionDataset item) { return MessageFormat.format(DISTRIBUTION_DATASET_NAME_PATTERN, item.getModel().getName(), item.getNodeType().getId()); } @Override protected void fireListener(final IDistributionDatasetSelectionListener listener, final DistributionDataset selectedItem) { listener.onDistributionDatasetSelected(selectedItem); } @Override protected int getDefaultSelectedItemIndex() { return -1; } @Override public void onEvent(final IEvent event) { if (!(event.getSource() instanceof DistributionView)) { super.onEvent(event); } } }