/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.web; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox; import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.PropertyModel; import org.geoserver.config.GeoServerLoader; /** * Small utility panel showed only in dev mode that allows developers to control * some Wicket behavior */ @SuppressWarnings("serial") public class DeveloperToolbar extends Panel { private AjaxCheckBox wicketIds; private AjaxCheckBox xhtml; public DeveloperToolbar(String id) { super(id); // Clears the resource caches add(new IndicatingAjaxLink("clearCache") { @Override public void onClick(AjaxRequestTarget target) { GeoServerApplication.get().clearWicketCaches(); } }); // Reloads the whole catalog and config from the file system add(new IndicatingAjaxLink("reload") { @Override public void onClick(AjaxRequestTarget target) { try { GeoServerLoader loader = (GeoServerLoader) GeoServerApplication.get().getBean("geoServerLoader"); synchronized (org.geoserver.config.GeoServer.CONFIGURATION_LOCK) { loader.reload(); } info("Catalog and configuration reloaded"); } catch(Exception e) { error(e); } } }); IModel gsApp = new GeoServerApplicationModel(); // controls whether wicket paths are being generated final AjaxCheckBox wicketPaths = new AjaxCheckBox("wicketPaths", new PropertyModel(gsApp, "debugSettings.outputComponentPath")) { @Override protected void onUpdate(AjaxRequestTarget target) { } }; wicketPaths.setOutputMarkupId(true); add(wicketPaths); // controls whether wicket ids are being generated wicketIds = new AjaxCheckBox("wicketIds", new PropertyModel(gsApp, "markupSettings.stripWicketTags")) { @Override protected void onUpdate(AjaxRequestTarget target) { wicketPaths.setModelObject(Boolean.FALSE); target.add(wicketPaths); } }; wicketIds.setOutputMarkupId(true); add(wicketIds); // controls whether the ajax debug is enabled or not add(new AjaxCheckBox("ajaxDebug", new PropertyModel(gsApp, "debugSettings.ajaxDebugModeEnabled")) { @Override protected void onUpdate(AjaxRequestTarget target) { // nothing to do, the property binding does the work for us } }); } static class GeoServerApplicationModel extends LoadableDetachableModel { GeoServerApplicationModel() { super(GeoServerApplication.get()); } @Override protected Object load() { return GeoServerApplication.get(); } } }