/* (c) 2015 - 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.csw.web; import org.apache.wicket.markup.html.form.CheckBox; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.validation.validator.RangeValidator; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.MetadataMap; import org.geoserver.config.GeoServer; import org.geoserver.csw.CSWInfo; import org.geoserver.csw.DirectDownloadSettings; import org.geoserver.platform.GeoServerExtensions; import org.geoserver.web.publish.PublishedConfigurationPanel; import org.geoserver.web.util.MetadataMapModel; /** * A configuration panel for CoverageInfo properties that related to CSW publication */ public class CSWLayerConfig extends PublishedConfigurationPanel<LayerInfo> { private static final long serialVersionUID = 6204512572932860227L; protected final CheckBox directDownloadEnabled; protected final TextField<Long> maxDownloadSize; public CSWLayerConfig(String id, IModel<LayerInfo> model) { super(id, model); PropertyModel<MetadataMap> settingsMap = new PropertyModel<MetadataMap>(model, "resource.metadata"); MetadataMap map = settingsMap.getObject(); DirectDownloadSettings settings = DirectDownloadSettings.getSettingsFromMetadata(map, null); if (settings == null) { map.getMap().put(DirectDownloadSettings.DIRECTDOWNLOAD_KEY, setDefaultSettings( GeoServerExtensions.bean(GeoServer.class).getService(CSWInfo.class))); } IModel<DirectDownloadSettings> directDownloadModel = new MetadataMapModel<DirectDownloadSettings>(map, DirectDownloadSettings.DIRECTDOWNLOAD_KEY, DirectDownloadSettings.class); directDownloadEnabled = new CheckBox("directDownloadEnabled", new PropertyModel<Boolean>( directDownloadModel, "directDownloadEnabled")); add(directDownloadEnabled); maxDownloadSize = new TextField<Long>("maxDownloadSize", new PropertyModel<Long>( directDownloadModel, "maxDownloadSize")); maxDownloadSize.add(RangeValidator.minimum(0l)); add(maxDownloadSize); } /** * Get DefaultSettings from {@link CSWInfo} config or default value. * * @param cswInfo * */ private DirectDownloadSettings setDefaultSettings(CSWInfo info) { if (info != null) { MetadataMap serviceInfoMetadata = info.getMetadata(); DirectDownloadSettings infoSettings = DirectDownloadSettings.getSettingsFromMetadata( serviceInfoMetadata, null); // create a copy of the CSWInfo settings if (infoSettings != null) { return new DirectDownloadSettings(infoSettings); } } return new DirectDownloadSettings(); } }