/* (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.data.layergroup; import java.util.ArrayList; import java.util.List; 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.form.DropDownChoice; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.util.convert.IConverter; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.StyleInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.web.GeoServerApplication; import org.geoserver.web.wicket.ParamResourceModel; /** * Allows to edit the root layer of a layer group */ public class RootLayerEntryPanel extends Panel { private static final long serialVersionUID = 3471204885852128002L; public RootLayerEntryPanel(String id,WorkspaceInfo workspace, final IModel<LayerGroupInfo> model) { super(id); setOutputMarkupId(true); final TextField<LayerInfo> rootLayerField = new TextField<LayerInfo>("rootLayer") { private static final long serialVersionUID = -8033503312874828019L; @SuppressWarnings("unchecked") @Override public <C> IConverter<C> getConverter(Class<C> type) { if (LayerInfo.class.isAssignableFrom(type)) { return (IConverter<C>) new LayerInfoConverter(); } else { return super.getConverter(type); } } }; rootLayerField.setOutputMarkupId(true); rootLayerField.setRequired(true); add(rootLayerField); // global styles List<StyleInfo> globalStyles = new ArrayList<StyleInfo>(); List<StyleInfo> allStyles = GeoServerApplication.get().getCatalog().getStyles(); for (StyleInfo s : allStyles) { if (s.getWorkspace() == null) { globalStyles.add(s); } } // available styles List<StyleInfo> styles = new ArrayList<StyleInfo>(); styles.addAll(globalStyles); if (workspace != null) { styles.addAll(GeoServerApplication.get().getCatalog().getStylesByWorkspace(workspace)); } DropDownChoice<StyleInfo> styleField = new DropDownChoice<StyleInfo>("rootLayerStyle", styles) { private static final long serialVersionUID = 1190134258726393181L; @SuppressWarnings("unchecked") @Override public <C> IConverter<C> getConverter(Class<C> type) { if (StyleInfo.class.isAssignableFrom(type)) { return (IConverter<C>) new StyleInfoConverter(); } else { return super.getConverter(type); } } }; styleField.setNullValid(true); add(styleField); final ModalWindow popupWindow = new ModalWindow("popup"); add(popupWindow); add(new AjaxLink<Object>("add") { private static final long serialVersionUID = 723787950130153037L; @Override public void onClick(AjaxRequestTarget target) { popupWindow.setInitialHeight(375); popupWindow.setInitialWidth(525); popupWindow.setTitle(new ParamResourceModel("chooseLayer", this)); popupWindow.setContent(new LayerListPanel(popupWindow.getContentId(), workspace) { private static final long serialVersionUID = -650599334132713975L; @Override protected void handleLayer(LayerInfo layer, AjaxRequestTarget target) { popupWindow.close(target); model.getObject().setRootLayer(layer); target.add(rootLayerField); } }); popupWindow.show(target); } }); } }