package org.geoserver.web.admin; import java.util.List; import java.util.ListIterator; import java.util.stream.Collectors; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.basic.MultiLineLabel; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Fragment; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.Model; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.request.resource.PackageResourceReference; import org.geoserver.catalog.LayerInfo; import org.geoserver.platform.GeoServerExtensions; import org.geoserver.platform.ModuleStatus; import org.geoserver.platform.ModuleStatusImpl; import org.geoserver.web.CatalogIconFactory; import org.geoserver.web.data.layer.LayerPage; import org.geoserver.web.wicket.GeoServerAjaxFormLink; import org.opengis.referencing.operation.MathTransform; public class ModuleStatusPanel extends Panel { private static final long serialVersionUID = 3892224318224575781L; final CatalogIconFactory icons = CatalogIconFactory.get(); ModalWindow popup; AjaxLink msgLink; public ModuleStatusPanel(String id, AbstractStatusPage parent) { super(id); initUI(); } public void initUI() { final WebMarkupContainer wmc = new WebMarkupContainer("listViewContainer"); wmc.setOutputMarkupId(true); this.add(wmc); popup = new ModalWindow("popup"); add(popup); //get the list of ModuleStatuses GeoServerExtensions gse = new GeoServerExtensions(); List<ModuleStatus> applicationStatus = gse.extensions(ModuleStatus.class).stream() .map(ModuleStatusImpl::new).collect(Collectors.toList()); ListIterator<ModuleStatus> iter = applicationStatus.listIterator(); while(iter.hasNext()) { if ( iter.next().getModule().toString().matches("\\A[system-](.*)")) { iter.remove(); } } final ListView<ModuleStatus> moduleView = new ListView<ModuleStatus>("modules", applicationStatus) { private static final long serialVersionUID = 235576083712961710L; @Override protected void populateItem(ListItem<ModuleStatus> item) { item.add(new Label("module", new PropertyModel(item.getModel(), "module"))); item.add(getIcons("available",item.getModelObject().isAvailable())); item.add(getIcons("enabled",item.getModelObject().isEnabled())); item.add(new Label("component", new Model(item.getModelObject().getComponent().orElse("")))); item.add(new Label("version", new Model(item.getModelObject().getVersion().orElse("")))); msgLink = new AjaxLink("msg") { @Override public void onClick(AjaxRequestTarget target) { popup.setInitialHeight(325); popup.setInitialWidth(525); popup.setContent(new MessagePanel(popup.getContentId(), item)); popup.setTitle("Module Info"); popup.show(target); } }; msgLink.setEnabled(true); msgLink.add(new Label("nameLink", new PropertyModel(item.getModel(), "name"))); item.add(msgLink); } }; wmc.add(moduleView); } final Fragment getIcons(String id, boolean status) { PackageResourceReference icon = status? icons.getEnabledIcon() : icons.getDisabledIcon(); Fragment f = new Fragment(id, "iconFragment", ModuleStatusPanel.this); f.add(new Image("statusIcon", icon)); return f; }; class MessagePanel extends Panel { private static final long serialVersionUID = -3200098674603724915L; public MessagePanel(String id, ListItem<ModuleStatus> item) { super(id); Label name = new Label("name", new PropertyModel(item.getModel(), "name")); Label module = new Label("module", new PropertyModel(item.getModel(),"module")); Label component = new Label("component", new Model(item.getModelObject().getComponent().orElse(""))); Label version = new Label("version", new Model(item.getModelObject().getVersion().orElse(""))); MultiLineLabel msgLabel = new MultiLineLabel("msg", item.getModelObject().getMessage().orElse("")); add(name); add(module); add(component); add(version); add(msgLabel); } } }