/* (c) 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geogig.geoserver.web.repository; import java.util.Arrays; import java.util.Comparator; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.markup.repeater.DefaultItemReuseStrategy; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.geoserver.web.wicket.GeoServerDataProvider; import org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.geoserver.web.wicket.GeoServerTablePanel; import org.locationtech.geogig.repository.IndexInfo; import org.locationtech.geogig.repository.IndexInfo.IndexType; public class IndexListPanel extends GeoServerTablePanel<IndexInfoEntry> { private static final long serialVersionUID = -8379525803311741485L; private final IndexInfoProvider provider; private final FeedbackPanel pingFeedbackPanel; public IndexListPanel(final String id, final List<IndexInfo> indexes) { super(id, new IndexInfoProvider(indexes), false); super.setFilterable(false); this.provider = (IndexInfoProvider) super.getDataProvider(); this.setOutputMarkupId(true); // set the reuse strategy this.setItemReuseStrategy(DefaultItemReuseStrategy.getInstance()); add(pingFeedbackPanel = new FeedbackPanel("feedback")); pingFeedbackPanel.setOutputMarkupId(true); } public void add(IndexInfoEntry indexInfo) { this.provider.getItems().add(indexInfo); } public Iterable<IndexInfoEntry> getIndexInfoEntries() { return provider.getItems(); } @Override protected Component getComponentForProperty(String id, IModel<IndexInfoEntry> itemModel, Property<IndexInfoEntry> property) { if (property == IndexInfoProvider.LAYER) { String value = (String) IndexInfoProvider.LAYER.getModel(itemModel).getObject(); Label label = new Label(id, value); return label; } else if (property == IndexInfoProvider.INDEXED_ATTRIBUTE) { String value = (String) IndexInfoProvider.INDEXED_ATTRIBUTE.getModel(itemModel).getObject(); Label label = new Label(id, value); return label; } else if (property == IndexInfoProvider.INDEX_TYPE) { IndexType value = (IndexType) IndexInfoProvider.INDEX_TYPE.getModel(itemModel).getObject(); Label label = new Label(id, value.toString()); return label; } else if (property == IndexInfoProvider.EXTRA_ATTRIBUTES) { @SuppressWarnings("unchecked") List<String> value = (List<String>) IndexInfoProvider.EXTRA_ATTRIBUTES.getModel(itemModel).getObject(); Label label = new Label(id, value.toString()); return label; } return null; } static class IndexInfoProvider extends GeoServerDataProvider<IndexInfoEntry> { private static final long serialVersionUID = -3628151089545613032L; static final Property<IndexInfoEntry> LAYER = new BeanProperty<>("layer", "layer"); static final Property<IndexInfoEntry> INDEXED_ATTRIBUTE = new BeanProperty<>("indexedAttribute", "indexedAttribute"); static final Property<IndexInfoEntry> INDEX_TYPE = new BeanProperty<>("indexType", "indexType"); static final Property<IndexInfoEntry> EXTRA_ATTRIBUTES = new BeanProperty<>("extraAttributes", "extraAttributes"); final List<Property<IndexInfoEntry>> PROPERTIES = Arrays .asList(LAYER, INDEXED_ATTRIBUTE, INDEX_TYPE, EXTRA_ATTRIBUTES); private final List<IndexInfoEntry> indexInfoEntries; public IndexInfoProvider(final List<IndexInfo> indexInfos) { this.indexInfoEntries = IndexInfoEntry.fromIndexInfos(indexInfos); } @Override protected List<IndexInfoEntry> getItems() { return indexInfoEntries; } @Override protected List<Property<IndexInfoEntry>> getProperties() { return PROPERTIES; } @Override protected Comparator<IndexInfoEntry> getComparator(SortParam sort) { return super.getComparator(sort); } @Override public IModel<IndexInfoEntry> newModel(IndexInfoEntry object) { return new Model<>(object); } } }