/* Copyright (c) 2001 - 2011 TOPP - www.openplans.org. All rights reserved. * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.gwc.web; import static org.geoserver.gwc.web.CachedLayerProvider.ENABLED; import static org.geoserver.gwc.web.CachedLayerProvider.NAME; import static org.geoserver.gwc.web.CachedLayerProvider.QUOTA_LIMIT; import static org.geoserver.gwc.web.CachedLayerProvider.QUOTA_USAGE; import static org.geoserver.gwc.web.CachedLayerProvider.TYPE; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; import org.apache.wicket.ResourceReference; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import org.geoserver.gwc.web.CachedLayerInfo.TYPE; import org.geoserver.web.GeoServerSecuredPage; import org.geoserver.web.data.layer.NewLayerPage; import org.geoserver.web.wicket.GeoServerDataProvider.Property; import org.geoserver.web.wicket.GeoServerDialog; import org.geoserver.web.wicket.GeoServerTablePanel; import org.geowebcache.diskquota.storage.Quota; public class CachedLayersPage extends GeoServerSecuredPage { private CachedLayerProvider provider = new CachedLayerProvider(); private GeoServerTablePanel<CachedLayerInfo> table; private GeoServerDialog dialog; private CachedLayerSelectionRemovalLink removal; public CachedLayersPage() { final GWCIconFactory icons = GWCIconFactory.get(); table = new GeoServerTablePanel<CachedLayerInfo>("table", provider, true) { private static final long serialVersionUID = 1L; @SuppressWarnings({ "unchecked", "rawtypes" }) @Override protected Component getComponentForProperty(String id, IModel itemModel, Property<CachedLayerInfo> property) { if (property == TYPE) { Fragment f = new Fragment(id, "iconFragment", CachedLayersPage.this); CachedLayerInfo layerInfo = (CachedLayerInfo) itemModel.getObject(); TYPE type = layerInfo.getType(); ResourceReference layerIcon = icons.getSpecificLayerIcon(type); f.add(new Image("layerIcon", layerIcon)); return f; } else if (property == NAME) { return cachedLayerLink(id, itemModel); } else if (property == QUOTA_LIMIT) { IModel<Quota> quotaLimitModel = property.getModel(itemModel); return quotaLink(id, quotaLimitModel); } else if (property == QUOTA_USAGE) { IModel<Quota> quotaUsageModel = property.getModel(itemModel); return quotaLink(id, quotaUsageModel); } else if (property == ENABLED) { CachedLayerInfo layerInfo = (CachedLayerInfo) itemModel.getObject(); boolean enabled = layerInfo.isEnabled(); ResourceReference icon; if (enabled) { icon = icons.getEnabledIcon(); } else if (layerInfo.getConfigErrorMessage() != null) { icon = icons.getErrorIcon(); } else { icon = icons.getDisabledIcon(); } Fragment f = new Fragment(id, "iconFragment", CachedLayersPage.this); f.add(new Image("layerIcon", icon)); return f; } throw new IllegalArgumentException("Don't know a property named " + property.getName()); } @Override protected void onSelectionUpdate(AjaxRequestTarget target) { removal.setEnabled(table.getSelection().size() > 0); target.addComponent(removal); } }; table.setOutputMarkupId(true); add(table); // the confirm dialog add(dialog = new GeoServerDialog("dialog")); setHeaderPanel(headerPanel()); } private Component quotaLink(String id, IModel<Quota> quotaModel) { Quota quota = quotaModel.getObject(); String formattedQuota; if (null == quota) { formattedQuota = new ResourceModel("CachedLayersPage.quotaLimitNotSet").getObject(); } else { formattedQuota = quota.toNiceString(); } return new Label(id, formattedQuota); } @SuppressWarnings("unchecked") private Component cachedLayerLink(String id, IModel<CachedLayerInfo> itemModel) { IModel<String> nameModel = NAME.getModel(itemModel); String layerName = nameModel.getObject(); // return new SimpleBookmarkableLink(id, CachedLayerEditPage.class, nameModel, "name", // layerName); Label link = new Label(id, layerName); String configErrorMessage = itemModel.getObject().getConfigErrorMessage(); if (configErrorMessage != null) { link.add(new AttributeModifier("style", true, new Model<String>( "text-decoration: line-through; font-style: italic;"))); link.add(new AttributeModifier("title", true, new Model<String>(configErrorMessage))); } return link; } protected Component headerPanel() { Fragment header = new Fragment(HEADER_PANEL, "header", this); // the add button header.add(new BookmarkablePageLink("addNew", NewLayerPage.class)); // the removal button header.add(removal = new CachedLayerSelectionRemovalLink("removeSelected", table, dialog)); // removal.setOutputMarkupId(true); // removal.setEnabled(false); return header; } private static class CachedLayerSelectionRemovalLink extends AjaxLink<CachedLayerInfo> { private static final long serialVersionUID = 1L; public CachedLayerSelectionRemovalLink(String string, GeoServerTablePanel<CachedLayerInfo> table, GeoServerDialog dialog) { super(string); } @Override public void onClick(final AjaxRequestTarget target) { // TODO Auto-generated method stub } } }