/* (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.store.panel; import java.io.File; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.validation.IValidator; import org.geoserver.web.wicket.GeoServerDialog; import org.geoserver.web.wicket.browser.GeoServerFileChooser; /** * A label, a text field, a directory chooser. * * @author Andrea Aime */ public class DirectoryParamPanel extends FileParamPanel { private static final long serialVersionUID = -8317791966175845831L; GeoServerDialog gsDialog; /** * * @param id * @param paramsMap * @param paramName * @param paramLabelModel * @param required * @param validators * any extra validator that should be added to the input field, or {@code null} */ @SafeVarargs public DirectoryParamPanel(final String id, final IModel<String> paramValue, final IModel<String> paramLabelModel, final boolean required, IValidator<? super String>... validators) { super(id, paramValue, paramLabelModel, required, validators); // override the dialog component remove(dialog); add(gsDialog = new GeoServerDialog("dialog")); } @Override protected Component chooserButton(final String windowTitle) { AjaxSubmitLink link = new AjaxSubmitLink("chooser") { private static final long serialVersionUID = -2860146532287292092L; @Override public boolean getDefaultFormProcessing() { return false; } @Override public void onSubmit(AjaxRequestTarget target, Form<?> form) { gsDialog.setTitle(new Model<String>(windowTitle)); gsDialog.showOkCancel(target, new GeoServerDialog.DialogDelegate() { /** * */ private static final long serialVersionUID = 1576266249751904398L; @Override protected boolean onSubmit(AjaxRequestTarget target, Component contents) { GeoServerFileChooser chooser = (GeoServerFileChooser) contents; String path = ((File) chooser.getDefaultModelObject()).getAbsolutePath(); // clear the raw input of the field won't show the new model value textField.clearInput(); textField.setModelValue(new String[] { path }); target.add(textField); return true; } @Override public void onClose(AjaxRequestTarget target) { // update the field with the user chosen value target.add(textField); } @Override protected Component getContents(String id) { File file = null; textField.processInput(); String input = (String) textField.getConvertedInput(); if (input != null && !input.equals("")) { file = new File(input); } GeoServerFileChooser chooser = new GeoServerFileChooser(id, new Model<File>(file)); chooser.setFilter(fileFilter); return chooser; } }); } }; return link; } }