/* (c) 2017 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.opensearch.eo.web;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.validation.AbstractFormValidator;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.validation.validator.RangeValidator;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.opensearch.eo.OSEOInfo;
import org.geoserver.web.data.store.StoreListChoiceRenderer;
import org.geoserver.web.services.BaseServiceAdminPage;
import org.geoserver.web.wicket.ParamResourceModel;
public class OSEOAdminPage extends BaseServiceAdminPage<OSEOInfo> {
private static final long serialVersionUID = 3056925400600634877L;
DataStoreInfo backend;
public OSEOAdminPage() {
super();
}
public OSEOAdminPage(PageParameters pageParams) {
super(pageParams);
}
public OSEOAdminPage(OSEOInfo service) {
super(service);
}
protected Class<OSEOInfo> getServiceClass() {
return OSEOInfo.class;
}
@SuppressWarnings({ "rawtypes", "unchecked", "serial" })
protected void build(final IModel info, Form form) {
OSEOInfo model = (OSEOInfo) info.getObject();
this.backend = null;
if (model.getOpenSearchAccessStoreId() != null) {
this.backend = getCatalog().getDataStore(model.getOpenSearchAccessStoreId());
}
DropDownChoice<DataStoreInfo> openSearchAccessReference = new DropDownChoice<>(
"openSearchAccessId", new PropertyModel<DataStoreInfo>(this, "backend"),
new OpenSearchAccessListModel(), new StoreListChoiceRenderer());
form.add(openSearchAccessReference);
final TextField<Integer> recordsPerPage = new TextField<>("recordsPerPage", Integer.class);
recordsPerPage.add(RangeValidator.minimum(0));
recordsPerPage.setRequired(true);
form.add(recordsPerPage);
final TextField<Integer> maximumRecordsPerPage = new TextField<>("maximumRecordsPerPage", Integer.class);
maximumRecordsPerPage.add(RangeValidator.minimum(0));
maximumRecordsPerPage.setRequired(true);
form.add(maximumRecordsPerPage);
// check that records is lower or equal than maximum
form.add(new AbstractFormValidator() {
@Override
public void validate(Form<?> form) {
Integer records = recordsPerPage.getConvertedInput();
Integer maximum = maximumRecordsPerPage.getConvertedInput();
if(recordsPerPage != null && maximum != null && records > maximum) {
form.error(new ParamResourceModel("recordsGreaterThanMaximum", form, records, maximum));
}
}
@Override
public FormComponent<?>[] getDependentFormComponents() {
return new FormComponent<?>[] {recordsPerPage, maximumRecordsPerPage};
}
});
}
protected String getServiceName() {
return "OSEO";
}
@Override
protected void handleSubmit(OSEOInfo info) {
if(backend != null) {
info.setOpenSearchAccessStoreId(backend.getId());
} else {
info.setOpenSearchAccessStoreId(null);
}
super.handleSubmit(info);
}
}