/* (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.gwc.web.gridset; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.model.IModel; import org.geoserver.gwc.GWC; import org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.geoserver.web.wicket.GeoServerTablePanel; import org.geowebcache.diskquota.storage.Quota; import org.geowebcache.grid.GridSet; /** * Panel listing the configured GridSet object on a table * * @author groldan * @see GridSetTableProvider */ public abstract class GridSetListTablePanel extends GeoServerTablePanel<GridSet> { private static final long serialVersionUID = 5957961031378924960L; public GridSetListTablePanel(final String id, final GridSetTableProvider provider, final boolean selectable) { super(id, provider, selectable); } @Override protected Component getComponentForProperty(final String id, final IModel<GridSet> itemModel, final Property<GridSet> property) { if (property == GridSetTableProvider.NAME) { GridSet gridSet = itemModel.getObject(); return nameLink(id, gridSet); } else if (property == GridSetTableProvider.EPSG_CODE) { String epsgCode = (String) property.getModel(itemModel).getObject(); return new Label(id, epsgCode); } else if (property == GridSetTableProvider.TILE_DIMENSION) { String tileDimension = (String) property.getModel(itemModel).getObject(); return new Label(id, tileDimension); } else if (property == GridSetTableProvider.ZOOM_LEVELS) { Integer zoomLevels = (Integer) property.getModel(itemModel).getObject(); return new Label(id, zoomLevels.toString()); } else if (property == GridSetTableProvider.QUOTA_USED) { Quota usedQuota = (Quota) property.getModel(itemModel).getObject(); String quotaStr = usedQuota == null ? "N/A" : usedQuota.toNiceString(); return new Label(id, quotaStr); } else if (property == GridSetTableProvider.ACTION_LINK) { String gridSetName = (String) property.getModel(itemModel).getObject(); Component actionLink = actionLink(id, gridSetName); return actionLink; } throw new IllegalArgumentException("Unknown property: " + property.getName()); } protected abstract Component nameLink(final String id, final GridSet gridSet); protected abstract Component actionLink(final String id, String gridSetName); /** * Overrides to return a disabled and non selectable checkbox if the GridSet for the item is an * internally defined one * * @see org.geoserver.web.wicket.GeoServerTablePanel#selectOneCheckbox */ @Override protected CheckBox selectOneCheckbox(Item<GridSet> item) { CheckBox cb = super.selectOneCheckbox(item); GridSet gs = (GridSet) item.getModelObject(); String name = gs.getName(); final boolean internal = GWC.get().isInternalGridSet(name); if (internal) { cb.setEnabled(false); cb.setModelObject(Boolean.FALSE); } return cb; } /** * Overrides to remove any internal gridset from the list * * @see org.geoserver.web.wicket.GeoServerTablePanel#getSelection() */ @Override public List<GridSet> getSelection() { List<GridSet> selection = new ArrayList<GridSet>(super.getSelection()); for (Iterator<GridSet> it = selection.iterator(); it.hasNext();) { GridSet g = it.next(); if (GWC.get().isInternalGridSet(g.getName())) { it.remove(); } } return selection; } }