/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved
* (c) 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.wms.eo.web;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.link.AbstractLink;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.web.GeoServerApplication;
import org.geoserver.web.data.ConfirmRemovalPanel;
import org.geoserver.web.wicket.GeoServerDialog;
import org.geoserver.web.wicket.ParamResourceModel;
import org.geoserver.wms.eo.EoCatalogBuilder;
import org.geotools.util.logging.Logging;
/**
* Wicket link to delete an EO layer group.
*
* @author Davide Savazzi - geo-solutions.it
*/
class DeleteEoGroupLink extends AjaxLink {
private LayerGroupTablePanel groupTable;
private GeoServerDialog dialog;
private static final Logger LOGGER = Logging.getLogger(DeleteEoGroupLink.class);
public DeleteEoGroupLink(String id, LayerGroupTablePanel groupTable, GeoServerDialog dialog) {
super(id);
this.groupTable = groupTable;
this.dialog = dialog;
}
@Override
public void onClick(AjaxRequestTarget target) {
// see if the user selected anything
final List<LayerGroupInfo> selection = groupTable.getSelection();
if (selection.size() == 0) {
return;
}
dialog.setTitle(new ParamResourceModel("confirmRemoval", this));
// if there is something to cancel, let's warn the user about what
// could go wrong, and if the user accepts, let's delete what's needed
dialog.showOkCancel(target, new GeoServerDialog.DialogDelegate() {
@Override
protected Component getContents(String id) {
// show a confirmation panel for all the objects we have to remove
return new ConfirmRemovalPanel(id, selection);
}
@Override
protected boolean onSubmit(AjaxRequestTarget target, Component contents) {
// cascade delete the whole selection
EoCatalogBuilder builder = new EoCatalogBuilder(GeoServerApplication.get().getCatalog());
for (LayerGroupInfo group : selection) {
delete(builder, group);
}
// the deletion will have changed what we see in the page
// so better clear out the selection
groupTable.clearSelection();
return true;
}
@Override
public void onClose(AjaxRequestTarget target) {
// if the selection has been cleared out it's sign a deletion
// occurred, so refresh the table
if (groupTable.getSelection().size() == 0) {
setEnabled(false);
target.add(groupTable);
for (AbstractLink link : groupTable.getSelectionLinks()) {
target.add(link);
}
}
}
});
}
private void delete(EoCatalogBuilder builder, LayerGroupInfo group) {
try {
builder.delete(group);
} catch (RuntimeException e) {
if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.log(Level.INFO, e.getMessage(), e);
}
// TODO how to notify?
}
}
}