/* (c) 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.geogig.geoserver.web.repository;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.geogig.geoserver.config.RepositoryInfo;
import org.geogig.geoserver.config.RepositoryManager;
/**
* The main Wicket panel for importing an existing GeoGig repository. This panel is very similar to
* {@link RepositoryEditFormPanel}, but it is not concerned with repository remotes. Remotes of an
* imported GeoGig repository will be included with the repository import. Once imported, users can
* navigate to the Edit page to edit remotes.
*/
public abstract class RepositoryImportFormPanel extends Panel {
private static final long serialVersionUID = 1L;
private Form<RepositoryInfo> form;
public RepositoryImportFormPanel(String id) {
this(id, null);
}
public RepositoryImportFormPanel(String id, IModel<RepositoryInfo> repoInfo) {
super(id);
if (repoInfo == null) {
repoInfo = new Model<>(new RepositoryInfo());
}
setDefaultModel(repoInfo);
form = new Form<>("repoForm", repoInfo);
form.add(new RepositoryImportPanel("repo", repoInfo));
add(form);
FeedbackPanel feedback = new FeedbackPanel("feedback");
form.add(feedback);
form.add(new AjaxLink<Void>("cancel") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
cancelled(target);
}
});
form.add(new AjaxSubmitLink("import", form) {
private static final long serialVersionUID = 1L;
@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
super.onError(target, form);
target.add(form);
}
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
try {
RepositoryInfo repoInfo = (RepositoryInfo) form.getModelObject();
onSave(repoInfo, target);
} catch (IllegalArgumentException e) {
form.error(e.getMessage());
target.add(form);
}
}
});
}
private void onSave(RepositoryInfo repoInfo, AjaxRequestTarget target) {
RepositoryManager manager = RepositoryManager.get();
repoInfo = manager.save(repoInfo);
saved(repoInfo, target);
}
protected abstract void saved(RepositoryInfo info, AjaxRequestTarget target);
protected abstract void cancelled(AjaxRequestTarget target);
}