package org.github.etcd.viewer.html.node; import javax.inject.Inject; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.github.etcd.service.EtcdProxyFactory; import org.github.etcd.service.rest.EtcdException; import org.github.etcd.service.rest.EtcdNode; import org.github.etcd.service.rest.EtcdProxy; import org.github.etcd.viewer.html.modal.GenericModalPanel; public class DeleteNodeModalPanel extends GenericModalPanel<EtcdNode> { private static final long serialVersionUID = 1L; @Inject private EtcdProxyFactory proxyFactory; private final IModel<String> registry; private WebMarkupContainer body; public DeleteNodeModalPanel(String id, IModel<EtcdNode> model, IModel<String> registryName) { super(id, model); this.registry = registryName; add(body = new WebMarkupContainer("body")); body.setOutputMarkupId(true); body.add(new Label("directory", new PropertyModel<>(getModel(), "key")) { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); setVisible(DeleteNodeModalPanel.this.getModelObject().isDir()); } }); body.add(new Label("key", new PropertyModel<>(getModel(), "key")) { private static final long serialVersionUID = 1L; protected void onConfigure() { super.onConfigure(); setVisible(!DeleteNodeModalPanel.this.getModelObject().isDir()); } }); add(new AjaxLink<Void>("delete") { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { EtcdNode node = DeleteNodeModalPanel.this.getModelObject(); try (EtcdProxy p = proxyFactory.getEtcdProxy(registry.getObject())) { // TODO: support both recursive and non recursive delete p.deleteNode(node, node.isDir()); warn("Deleted: " + node); } catch (EtcdException e) { error("Failed to delete: " + node); } onNodeDeleted(target); modalHide(target); } }); } @Override public void beforeModalShow(AjaxRequestTarget target) { target.add(body); } protected void onNodeDeleted(AjaxRequestTarget target) { } }