/**
*
*/
package org.github.etcd.viewer.html.pages;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.github.etcd.viewer.ConvertUtils;
import org.github.etcd.viewer.html.cluster.ClusterSelectionPanel;
import org.github.etcd.viewer.html.node.EtcdNodePanel;
public class NavigationPage extends TemplatePage {
private static final long serialVersionUID = 1L;
private IModel<String> registry;
private IModel<String> key;
private EtcdNodePanel node;
private FeedbackPanel feedback;
private IModel<String> jumpToKey = Model.of();
public NavigationPage(PageParameters parameters) {
super(parameters);
add(feedback = new FeedbackPanel("feedback") {
private static final long serialVersionUID = 1L;
@Override
protected void onConfigure() {
super.onConfigure();
setOutputMarkupPlaceholderTag(true);
setVisible(anyMessage());
add(new AttributeModifier("class", new LoadableDetachableModel<String>() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
if (anyMessage(FeedbackMessage.ERROR)) {
return "alert alert-danger";
} else if (anyMessage(FeedbackMessage.WARNING)) {
return "alert alert-warning";
} else if (anyMessage(FeedbackMessage.SUCCESS)) {
return "alert alert-success";
} else if (anyMessage(FeedbackMessage.INFO)) {
return "alert alert-info";
} else {
return "alert";
}
}
}));
}
});
// get cluster name from the page parameters
registry = new LoadableDetachableModel<String>() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
return getPageParameters().get("cluster").toString(null);
}
};
setDefaultModel(registry);
// get initial key from the page parameters
key = new LoadableDetachableModel<String>() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
return ConvertUtils.getEtcdKey(getPageParameters());
}
};
Form<Void> jumpToForm;
add(jumpToForm = new Form<Void>("jumpToForm") {
private static final long serialVersionUID = 1L;
@Override
protected void onSubmit() {
super.onSubmit();
setResponsePage(NavigationPage.class, ConvertUtils.getPageParameters(jumpToKey.getObject()).add("cluster", registry.getObject()));
}
});
jumpToForm.add(new TextField<>("key", jumpToKey));
add(new ClusterSelectionPanel("clusterSelection") {
private static final long serialVersionUID = 1L;
@Override
protected void onSelectedClusterChanged(AjaxRequestTarget target) {
super.onSelectedClusterChanged(target);
key.setObject(EtcdNodePanel.ROOT_KEY);
target.add(node, feedback);
NavigationPage.this.updatePageTitle(target);
setResponsePage(NavigationPage.class, new PageParameters().add("cluster", registry.getObject()));
}
@Override
protected void onSelectedClusterRefresh(AjaxRequestTarget target) {
super.onSelectedClusterRefresh(target);
target.add(feedback);
}
@Override
protected void onSelectedClusterDeleted(AjaxRequestTarget target) {
super.onSelectedClusterDeleted(target);
setResponsePage(NavigationPage.class);
}
});
add(node = new EtcdNodePanel("node", registry, key) {
private static final long serialVersionUID = 1L;
@Override
protected void onNodedSaved(AjaxRequestTarget target) {
super.onNodedSaved(target);
target.add(feedback);
}
@Override
protected void onNodedDeleted(AjaxRequestTarget target) {
super.onNodedDeleted(target);
target.add(feedback);
}
@Override
protected void onNodeKeyUpdated(AjaxRequestTarget target) {
super.onNodeKeyUpdated(target);
NavigationPage.this.updatePageTitle(target);
}
});
}
@Override
protected void onConfigure() {
super.onConfigure();
// if (selectedCluster.getObject() == null) {
// info("Please select an etcd registry to view its contents");
// } else {
//
// if (etcdProxy.get().isAuthEnabled() && !AuthenticatedWebSession.get().isSignedIn()) {
// ((AuthenticatedWebApplication) getApplication()).restartResponseAtSignInPage();
// }
// }
}
@Override
protected IModel<?> getPageTitleModel() {
return new StringResourceModel("navigation.title", NavigationPage.this, getDefaultModel(), registry, key);
}
}