/* * Copyright (C) 2012 Tirasa * * 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 net.tirasa.hct.editor.forms; import java.util.List; import javax.jcr.RepositoryException; import org.apache.wicket.Session; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.extensions.breadcrumb.IBreadCrumbModel; import org.apache.wicket.extensions.breadcrumb.IBreadCrumbParticipant; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.panel.FeedbackPanel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.validation.validator.StringValidator; import org.hippoecm.frontend.session.UserSession; import net.tirasa.hct.editor.Properties; import net.tirasa.hct.editor.beans.SiteBean; import net.tirasa.hct.editor.validators.NodeNameValidator; import net.tirasa.hct.editor.validators.SiteNameValidator; import net.tirasa.hct.editor.wicket.markup.html.AjaxTextFieldPanel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SiteForm extends Form { private static final Logger LOG = LoggerFactory.getLogger(SiteForm.class); private static final long serialVersionUID = 712357636277243353L; private SiteBean site; private String operationType; private final transient IModel model; public SiteForm(final String id, final IModel model, final IBreadCrumbModel breadCrumbModel, final FeedbackPanel feedmsg) { super(id); this.model = model; setOperationType(model); if (model == null) { site = new SiteBean(); setModel(new CompoundPropertyModel<SiteBean>(site)); } else { site = (SiteBean) model.getObject(); } final AjaxTextFieldPanel name = new AjaxTextFieldPanel( "siteName", "siteName", new PropertyModel<String>(site, "siteName"), false); name.setEnabled(Properties.OP_CREATE.equals(operationType)); name.setRequired(Properties.OP_CREATE.equals(operationType)); name.addValidator(StringValidator.minimumLength(2)); name.addValidator(new SiteNameValidator()); name.addValidator(new NodeNameValidator()); name.setRequired(Properties.OP_CREATE.equals(operationType)); add(name); final AjaxTextFieldPanel description = new AjaxTextFieldPanel( "description", "description", new PropertyModel<String>(site, "description"), false); add(description); add(new AjaxButton("create-button", this) { private static final long serialVersionUID = -5783994974426198290L; @Override protected void onSubmit(final AjaxRequestTarget target, final Form form) { try { if (Properties.OP_CREATE.equals(operationType)) { site.create(); } else { site.save(); } LOG.info("Site '" + site.getSiteName() + "' created by " + ((UserSession) Session.get()).getJcrSession(). getUserID()); Session.get().info(getString("site-created") + ": " + site.getSiteName()); // one up final List<IBreadCrumbParticipant> l = breadCrumbModel.allBreadCrumbParticipants(); breadCrumbModel.setActive(l.get(l.size() - 2)); } catch (RepositoryException e) { Session.get().warn(getString( "site-create-failed") + ": " + site.getSiteName()); LOG.error("Unable to create site '" + site.getSiteName() + "' : ", e); } } @Override protected void onError(final AjaxRequestTarget target, final Form form) { // make sure the feedback panel is shown target.addComponent(feedmsg); } }); // add a button that can be used to submit the form via ajax add(new AjaxButton("cancel-button") { private static final long serialVersionUID = 5166479650578194076L; @Override protected void onSubmit(final AjaxRequestTarget target, final Form form) { // one up final List<IBreadCrumbParticipant> l = breadCrumbModel.allBreadCrumbParticipants(); breadCrumbModel.setActive(l.get(l.size() - 2)); } }.setDefaultFormProcessing(false)); } private void setOperationType(final IModel model) { operationType = model == null ? Properties.OP_CREATE : Properties.OP_UPDATE; } }