/* (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.importer.web; import java.io.File; import java.io.IOException; 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.markup.html.form.SubmitLink; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.Model; import org.geoserver.web.wicket.GeoServerDialog; import org.geoserver.web.wicket.ParamResourceModel; import org.geoserver.web.wicket.browser.GeoServerFileChooser; import org.geoserver.importer.Directory; import org.geoserver.importer.FileData; import org.geoserver.importer.ImportData; import org.geoserver.importer.SpatialFile; public class SpatialFilePanel extends ImportSourcePanel { String file; TextField fileField; GeoServerDialog dialog; public SpatialFilePanel(String id) { super(id); add(dialog = new GeoServerDialog("dialog")); Form form = new Form("form", new CompoundPropertyModel(this)); add(form); fileField = new TextField("file"); fileField.setRequired(true); fileField.setOutputMarkupId(true); form.add(fileField); form.add(chooserButton(form)); } public ImportData createImportSource() throws IOException { File file = new File(this.file); return FileData.createFromFile(file); }; Component chooserButton(Form form) { AjaxSubmitLink link = new AjaxSubmitLink("chooser") { @Override protected void onSubmit(AjaxRequestTarget target, Form form) { dialog.setTitle(new ParamResourceModel("chooseFile", this)); dialog.showOkCancel(target, new GeoServerDialog.DialogDelegate() { @Override protected Component getContents(String id) { // use what the user currently typed File file = null; if (!fileField.getInput().trim().equals("")) { file = new File(fileField.getInput()); if (!file.exists()) file = null; } GeoServerFileChooser chooser = new GeoServerFileChooser(id, new Model(file)) { @Override protected void fileClicked(File file, AjaxRequestTarget target) { SpatialFilePanel.this.file = file.getAbsolutePath(); fileField.clearInput(); fileField.setModelObject(file.getAbsolutePath()); target.add(fileField); dialog.close(target); } }; initFileChooser(chooser); return chooser; } @Override protected boolean onSubmit(AjaxRequestTarget target, Component contents) { GeoServerFileChooser chooser = (GeoServerFileChooser) contents; file = ((File) chooser.getDefaultModelObject()).getAbsolutePath(); // clear the raw input of the field won't show the new model value fileField.clearInput(); //fileField.setModelObject(file); target.add(fileField); return true; } @Override public void onClose(AjaxRequestTarget target) { // update the field with the user chosen value target.add(fileField); } }); } }; // otherwise the link won't trigger when the form contents are not valid link.setDefaultFormProcessing(false); return link; } SubmitLink submitLink() { return new SubmitLink("submit") { @Override public void onSubmit() { // try { // // check there is not another store with the same name // WorkspaceInfo workspace = generalParams.getWorkpace(); // NamespaceInfo namespace = getCatalog() // .getNamespaceByPrefix(workspace.getName()); // StoreInfo oldStore = getCatalog().getStoreByName(workspace, generalParams.name, // StoreInfo.class); // if (oldStore != null) { // error(new ParamResourceModel("ImporterError.duplicateStore", // DirectoryPage.this, generalParams.name, workspace.getName()).getString()); // return; // } // // // build/reuse the store // String storeType = new ShapefileDataStoreFactory().getDisplayName(); // Map<String, Serializable> params = new HashMap<String, Serializable>(); // params.put(ShapefileDataStoreFactory.URLP.key, new File(directory).toURI() // .toURL().toString()); // params.put(ShapefileDataStoreFactory.NAMESPACEP.key, new URI(namespace.getURI()).toString()); // // DataStoreInfo si; // StoreInfo preExisting = getCatalog().getStoreByName(workspace, generalParams.name, // StoreInfo.class); // boolean storeNew = false; // if (preExisting != null) { // if (!(preExisting instanceof DataStoreInfo)) { // error(new ParamResourceModel("storeExistsNotVector", this, generalParams.name)); // return; // } // si = (DataStoreInfo) preExisting; // if (!si.getType().equals(storeType) // || !si.getConnectionParameters().equals(params)) { // error(new ParamResourceModel("storeExistsNotSame", this, generalParams.name)); // return; // } // // make sure it's enabled, we just verified the directory exists // si.setEnabled(true); // } else { // storeNew = true; // CatalogBuilder builder = new CatalogBuilder(getCatalog()); // builder.setWorkspace(workspace); // si = builder.buildDataStore(generalParams.name); // si.setDescription(generalParams.description); // si.getConnectionParameters().putAll(params); // si.setEnabled(true); // si.setType(storeType); // // getCatalog().add(si); // } // // // redirect to the layer chooser // PageParameters pp = new PageParameters(); // pp.put("store", si.getName()); // pp.put("workspace", workspace.getName()); // pp.put("storeNew", storeNew); // pp.put("workspaceNew", false); // setResponsePage(VectorLayerChooserPage.class, pp); // } catch (Exception e) { // LOGGER.log(Level.SEVERE, "Error while setting up mass import", e); // } } }; } protected void initFileChooser(GeoServerFileChooser fileChooser) { //chooser.setFilter(new Model(new ExtensionFile"(".shp"))); } }