package org.github.etcd.viewer.html.pages; import java.util.List; import javax.inject.Inject; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.ChainingModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.github.etcd.service.ClusterManager; import org.github.etcd.service.EtcdCluster; public class SelectRegistryPanel extends Panel { private static final long serialVersionUID = 1L; @Inject private ClusterManager clusterManager; public SelectRegistryPanel(String id) { super(id); add(AttributeAppender.append("class", new LoadableDetachableModel<String>() { private static final long serialVersionUID = 1L; @Override protected String load() { return getPage().getPageClass().equals(NavigationPage.class) || getPage().getPageClass().equals(RegistriesPage.class) ? "active" : ""; } })); add(new Label("currentRegistry", new LoadableDetachableModel<String>() { private static final long serialVersionUID = 1L; @Override protected String load() { if (getPage().getPageClass().equals(RegistriesPage.class)) { return "Manage registries"; } else { return getPage().getPageParameters().get("cluster").toString("Select registry"); } } })); IModel<List<EtcdCluster>> clusterList = new LoadableDetachableModel<List<EtcdCluster>>() { private static final long serialVersionUID = 1L; @Override protected List<EtcdCluster> load() { return clusterManager.getClusters(); } }; add(new Label("count", new LoadableDetachableModel<Integer>() { private static final long serialVersionUID = 1L; @Override protected Integer load() { return clusterManager.getClusters().size(); } })); add(new BookmarkablePageLink<>("registries", RegistriesPage.class)); add(new ListView<EtcdCluster>("clusters", clusterList) { private static final long serialVersionUID = 1L; @Override protected void populateItem(ListItem<EtcdCluster> item) { NavigationPageLink link; IModel<String> nameModel = new PropertyModel<String>(item.getModel(), "name"); item.add(link = new NavigationPageLink("link", nameModel, Model.of("/"))); link.add(new Label("name", nameModel)); link.add(new Label("address", new PropertyModel<>(item.getModel(), "address"))); item.add(new AttributeAppender("class", new ChainingModel<String>(nameModel) { private static final long serialVersionUID = 1L; @Override public String getObject() { String clusterName = super.getObject(); if (NavigationPage.class.equals(getPage().getPageClass()) && clusterName.equals(getPage().getPageParameters().get("cluster").toString(""))) { return "selected"; } else { return ""; } } })); } }); } }