/* (c) 2014 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.script.web;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.FileUtils;
import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.HiddenField;
import org.apache.wicket.markup.html.form.SubmitLink;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.PropertyModel;
import org.geoserver.platform.GeoServerExtensions;
import org.geoserver.script.ScriptManager;
import org.geoserver.script.ScriptPlugin;
import org.geoserver.script.ScriptType;
import org.geoserver.web.GeoServerSecuredPage;
import org.geoserver.web.wicket.CodeMirrorEditor;
import org.geoserver.web.wicket.GeoServerDialog;
import org.geoserver.web.wicket.ParamResourceModel;
import org.geoserver.web.wicket.XMLNameValidator;
import org.geotools.util.logging.Logging;
import com.google.common.collect.Lists;
/**
* Allows editing a specific Script
*/
@SuppressWarnings("serial")
public class ScriptEditPage extends GeoServerSecuredPage {
private static final Logger LOGGER = Logging.getLogger("org.geoserver.script.web");
IModel scriptModel;
GeoServerDialog dialog;
public ScriptEditPage(PageParameters parameters) {
String fileName = parameters.getString("file");
File file = new File(fileName);
Script script = new Script(file);
if (script == null) {
error(new ParamResourceModel("ScriptEditPage.notFound", this, script).getString());
doReturn(ScriptPage.class);
return;
}
init(script);
}
public ScriptEditPage(Script script) {
init(script);
}
private void init(Script script) {
scriptModel = new ScriptDetachableModel(script);
Form form = new Form("form", new CompoundPropertyModel(scriptModel)) {
protected void onSubmit() {
try {
saveScript();
doReturn(ScriptPage.class);
} catch (RuntimeException e) {
LOGGER.log(Level.WARNING, "Failed to save script", e);
error(e.getMessage() == null ? "Failed to save script, no error message available, see logs for details"
: e.getMessage());
}
}
};
add(form);
// Name
Label nameLabel = new Label("nameLabel", new PropertyModel(scriptModel, "name"));
form.add(nameLabel);
HiddenField name = new HiddenField("name", new PropertyModel(scriptModel, "name"));
form.add(name);
// Type
Label typeLabel = new Label("typeLabel", new PropertyModel(scriptModel, "type"));
form.add(typeLabel);
HiddenField type = new HiddenField("type", new PropertyModel(scriptModel, "type"));
form.add(type);
// Extension
Label extensionLabel = new Label("extensionLabel", new PropertyModel(scriptModel, "extension"));
form.add(extensionLabel);
HiddenField extension = new HiddenField("extension", new PropertyModel(scriptModel, "extension"));
form.add(extension);
// Content
ScriptManager scriptManager = (ScriptManager) GeoServerExtensions.bean("scriptMgr");
String mode = scriptManager.lookupPluginEditorMode(script.getFile());
CodeMirrorEditor content = new CodeMirrorEditor("contents", mode, new PropertyModel(scriptModel, "contents"));
content.setRequired(true);
form.add(content);
// Dialog
add(dialog = new GeoServerDialog("dialog"));
// Submit and Cancel
SubmitLink submit = new SubmitLink("submit");
form.add(submit);
form.setDefaultButton(submit);
form.add(new BookmarkablePageLink("cancel", ScriptPage.class));
}
private void saveScript() {
Script script = (Script) scriptModel.getObject();
File file = script.getFile();
try {
FileUtils.write(file, script.getContents());
} catch (IOException e) {
e.printStackTrace();
}
}
}