/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.brixcms.plugin.site.admin; 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.markup.html.link.Link; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.IValidator; import org.apache.wicket.validation.ValidationError; import org.brixcms.jcr.api.JcrNode; import org.brixcms.jcr.wrapper.BrixNode; import org.brixcms.web.BrixFeedbackPanel; import org.brixcms.web.generic.BrixGenericPanel; public abstract class RenamePanel extends BrixGenericPanel<BrixNode> { // ------------------------------ FIELDS ------------------------------ ; private String newName; public RenamePanel(String id, IModel<BrixNode> model) { super(id, model); Form<?> form = new Form<Void>("form"); newName = model.getObject().getName(); TextField<String> newName = new TextField<String>("newName", new PropertyModel<String>(this, "newName")); newName.setRequired(true); newName.add(new NewNameValidator()); form.add(newName); form.add(new SubmitLink("rename") { @Override public void onSubmit() { JcrNode node = RenamePanel.this.getModelObject(); if (RenamePanel.this.newName.equals(node.getName()) == false) { node.getSession().move(node.getPath(), node.getParent().getPath() + "/" + RenamePanel.this.newName); node.getSession().save(); } onLeave(); } }); form.add(new Link<Void>("cancel") { @Override public void onClick() { onLeave(); } }); form.add(new BrixFeedbackPanel("feedback")); add(form); } protected abstract void onLeave(); private class NewNameValidator implements IValidator { public void validate(IValidatable validatable) { String name = (String) validatable.getValue(); if (getModelObject().getName().equals(name) == false) { JcrNode parent = getModelObject().getParent(); if (parent.hasNode(name)) { validatable.error(new ValidationError().addKey("NewNameValidator").setVariable("name", name)); } } } } }