/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wms.web.data; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.logging.Logger; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.geoserver.catalog.CoverageDimensionInfo; import org.geoserver.catalog.CoverageInfo; import org.geoserver.web.wicket.GeoServerDataProvider; import org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.geoserver.web.wicket.GeoServerTablePanel; import org.geoserver.web.wicket.ParamResourceModel; import org.geotools.util.logging.Logging; import org.opengis.coverage.SampleDimensionType; /** * Panel for listing band data of a CoverageInfo resource. */ @SuppressWarnings("serial") public class BandsPanel extends Panel { static final Logger LOGGER = Logging.getLogger(BandsPanel.class); private GeoServerTablePanel<CoverageDimensionInfo> bands; public BandsPanel(String id, CoverageInfo coverage) { super(id, new Model<CoverageInfo>(coverage)); // the parameters table bands = new GeoServerTablePanel<CoverageDimensionInfo>("bands", new CoverageDimensionsProvider(), true) { @Override protected GeoServerTablePanel<CoverageDimensionInfo> getComponentForProperty(String id, IModel<CoverageDimensionInfo> itemModel, Property<CoverageDimensionInfo> property) { return null; } }; bands.setFilterVisible(false); bands.setSortable(false); bands.getTopPager().setVisible(false); bands.getBottomPager().setVisible(false); bands.setOutputMarkupId(true); bands.setItemReuseStrategy(ReuseIfModelsEqualStrategy.getInstance()); bands.setFilterable(false); bands.setSelectable(false); add(bands); } class CoverageDimensionsProvider extends GeoServerDataProvider<CoverageDimensionInfo> { @Override protected List<Property<CoverageDimensionInfo>> getProperties() { List<Property<CoverageDimensionInfo>> result = new ArrayList<Property<CoverageDimensionInfo>>(); result.add(new BeanProperty<CoverageDimensionInfo>("band", "name")); result.add(new AbstractProperty<CoverageDimensionInfo>("dimensionType") { @Override public Object getPropertyValue(CoverageDimensionInfo item) { SampleDimensionType type = item.getDimensionType(); if (type == null) { return "-"; } else { String name = type.name(); try { String key = BandsPanel.class.getSimpleName() + "." + name; ParamResourceModel rm = new ParamResourceModel(key, null); return rm.getString(); } catch(Exception e) { return name; } } } }); result.add(new AbstractProperty<CoverageDimensionInfo>("nullValues") { @Override public Object getPropertyValue(CoverageDimensionInfo item) { List<Double> values = item.getNullValues(); if (values == null || values.isEmpty()) { return "-"; } else { StringBuilder sb = new StringBuilder(); final int size = values.size(); for (int i = 0; i < size; i++) { sb.append(values.get(i)); if (i < size - 1) { sb.append(", "); } } return sb.toString(); } } }); result.add(new BeanProperty<CoverageDimensionInfo>("unit", "unit")); return result; } @Override protected List<CoverageDimensionInfo> getItems() { CoverageInfo ci = (CoverageInfo) BandsPanel.this .getDefaultModelObject(); if (ci.getDimensions() != null) { return ci.getDimensions(); } else { return Collections.emptyList(); } } } }