/* (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.workspace; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.form.CheckBox; 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.apache.wicket.model.PropertyModel; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.ValidationError; import org.apache.wicket.validation.validator.StringValidator; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.NamespaceInfo; import org.geoserver.catalog.WorkspaceInfo; import org.geoserver.catalog.impl.CatalogImpl; import org.geoserver.web.GeoServerSecuredPage; import org.geoserver.web.wicket.URIValidator; import org.geoserver.web.wicket.XMLNameValidator; /** * Allows creation of a new workspace */ public class WorkspaceNewPage extends GeoServerSecuredPage { private static final long serialVersionUID = -4355978268880701910L; Form<WorkspaceInfo> form; TextField<String> nsUriTextField; boolean defaultWs; public WorkspaceNewPage() { WorkspaceInfo ws = getCatalog().getFactory().createWorkspace(); form = new Form<WorkspaceInfo>( "form", new CompoundPropertyModel<WorkspaceInfo>(ws) ) { private static final long serialVersionUID = 6088042051374665053L; @Override protected void onSubmit() { Catalog catalog = getCatalog(); WorkspaceInfo ws = (WorkspaceInfo) form.getModelObject(); NamespaceInfo ns = catalog.getFactory().createNamespace(); ns.setPrefix ( ws.getName() ); ns.setURI(nsUriTextField.getDefaultModelObjectAsString()); catalog.add( ws ); catalog.add( ns ); if(defaultWs) catalog.setDefaultWorkspace(ws); //TODO: set the response page to be the edit doReturn(WorkspacePage.class); } }; add(form); TextField<String> nameTextField = new TextField<String>("name"); nameTextField.setRequired(true); nameTextField.add(new XMLNameValidator()); nameTextField.add(new StringValidator() { private static final long serialVersionUID = -5475431734680134780L; @Override public void validate(IValidatable<String> validatable) { if(CatalogImpl.DEFAULT.equals(validatable.getValue())) { validatable.error(new ValidationError("defaultWsError").addKey("defaultWsError")); } } }); form.add( nameTextField.setRequired(true) ); nsUriTextField = new TextField<String>( "uri", new Model<String>() ); // maybe a bit too restrictive, but better than not validation at all nsUriTextField.setRequired(true); nsUriTextField.add(new URIValidator()); form.add( nsUriTextField ); CheckBox defaultChk = new CheckBox("default", new PropertyModel<Boolean>(this, "defaultWs")); form.add(defaultChk); SubmitLink submitLink = new SubmitLink( "submit", form ); form.add( submitLink ); form.setDefaultButton(submitLink); AjaxLink<Void> cancelLink = new AjaxLink<Void>( "cancel" ) { private static final long serialVersionUID = -1731475076965108576L; @Override public void onClick(AjaxRequestTarget target) { doReturn(WorkspacePage.class); } }; form.add( cancelLink ); } }