/** * Copyright 2011 the original author or authors. * * 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.bricket.plugin.gallery.web; import java.io.Serializable; import java.util.Collection; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.form.AjaxButton; import org.apache.wicket.extensions.markup.html.form.palette.Palette; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.request.target.basic.RedirectRequestTarget; import org.apache.wicket.spring.injection.annot.SpringBean; import org.bricket.plugin.gallery.domain.Gallery; import org.bricket.plugin.gallery.service.GalleryService; import org.bricket.plugin.picture.domain.Picture; import org.bricket.web.common.link.GenericLinkConfig; import org.bricket.web.event.BricketAbstractEvent; import org.bricket.web.master.AIModelMasterComponent; import org.bricket.web.master.IModelMasterUpdateEvent; import org.bricket.web.master.SimpleIModelMaster; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; import brix.jcr.wrapper.BrixNode; import brix.web.nodepage.BrixPageParameters; /** * @author Ingo Renner * @author Henning Teek * */ public class EditOrCreateGalleryPanel extends AIModelMasterComponent<Gallery> { private final Logger log = LoggerFactory.getLogger(EditOrCreateGalleryPanel.class); @SpringBean private GalleryService galleryService; private final GenericLinkConfig config; private boolean initializeFromPageParameters = true; public EditOrCreateGalleryPanel(String id, IModel<BrixNode> tileNode) { super(id); config = new GenericLinkConfig(); config.load(tileNode.getObject()); } public EditOrCreateGalleryPanel(String id, Gallery gallery) { super(id); config = null; initializeFromPageParameters = false; setModelMaster(new SimpleIModelMaster<Gallery>(new Model<Gallery>(gallery), Gallery.class)); } @Override protected void initGui() { final Form<Gallery> form = createForm(); add(form); } private Form<Gallery> createForm() { Form<Gallery> form = new Form<Gallery>("form", new CompoundPropertyModel<Gallery>(getModelMaster().getIModel())); StringResourceModel ltitle = new StringResourceModel("title.label", EditOrCreateGalleryPanel.this, null); form.add(new Label("title.label", ltitle)); form.add(new TextField<String>("title", String.class).setRequired(true).setLabel(ltitle)); StringResourceModel ldescription = new StringResourceModel("description.label", EditOrCreateGalleryPanel.this, null); form.add(new Label("description.label", ldescription)); form.add(new TextField<String>("description", String.class).setRequired(true).setLabel(ldescription)); // Select pictures IChoiceRenderer<Picture> renderer = new ChoiceRenderer<Picture>("title", "id"); IModel<? extends Collection<? extends Picture>> choices = new Model( (Serializable) galleryService.loadAvailablePictures()); Palette<Picture> p = new Palette<Picture>("pictures", choices, renderer, 15, true); p.setVisible(!((Gallery) getDefaultModelObject()).isNew()); form.add(p); // TODO Untergallerien zuweisen bzw erstellen form.add(new AjaxLink<Void>("cancel") { @Override public void onClick(AjaxRequestTarget target) { getSession().cleanupFeedbackMessages(); returnToManagement(target); } }); form.add(new AjaxButton("submit", form) { @Override protected void onSubmit(AjaxRequestTarget target, Form<?> form) { log.info("onSubmit obj=" + form.getModelObject()); doSave(form, target); doSlaveUpdate(target); target.addComponent(getFeedback()); returnToManagement(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(getFeedback()); } }); form.setOutputMarkupId(true); return form; } protected void returnToManagement(AjaxRequestTarget target) { if (config != null && config.getUrl() != null && !"".equals(config.getUrl())) { // Redirect to other Page getRequestCycle().setRequestTarget(new RedirectRequestTarget(config.getUrl())); } else { // Panel refresh final Form<Gallery> form = createForm(); addOrReplace(form); target.addComponent(getFeedback()); target.addComponent(form); } } /** * @param form * @param target */ protected void doSave(Form<?> form, AjaxRequestTarget target) { try { log.info("doSave " + form.getModelObject()); galleryService.saveGallery((Gallery) form.getModelObject()); info(new StringResourceModel("feedback.success", EditOrCreateGalleryPanel.this, null).getString()); } catch (Exception e) { error("Speichern ist fehlgeschlagen, Fehler " + e.getMessage()); } } protected void doSlaveUpdate(AjaxRequestTarget target) { IModelMasterUpdateEvent event = new IModelMasterUpdateEvent(this, target); event.fire(); } public void contributeToPageParameters(BrixPageParameters arg0) { } @Override public void onInitializeFromPageParameters(BrixPageParameters params) { if (initializeFromPageParameters) { if (!params.getQueryParam(GalleryPageParameterDefinition.GALLERIE_PAGE_PARAMETER).isEmpty()) { try { long galleryId = params.getQueryParam(GalleryPageParameterDefinition.GALLERIE_PAGE_PARAMETER) .toLong(); Gallery gallery = galleryService.loadGallery(galleryId); setModelMaster(new SimpleIModelMaster<Gallery>(new Model<Gallery>(gallery), Gallery.class)); } catch (Exception e) { log.error("Could not get gallery from pageparameter. Error: " + e.getMessage(), e); setModelMasterWithNewObject(); } } else { setModelMasterWithNewObject(); } } else { setModelMasterWithNewObject(); } Assert.notNull(getModelMaster()); Assert.notNull(getModelMaster().getIModel()); setDefaultModel(new CompoundPropertyModel<Gallery>(getModelMaster().getIModel())); log.info("onInitializeFromPageParameters obj=" + getDefaultModelObject()); } private void setModelMasterWithNewObject() { setModelMaster(new SimpleIModelMaster<Gallery>(new Model<Gallery>(galleryService.createDomainObject()), Gallery.class)); } @Override public void notifyEvent(BricketAbstractEvent event) { // im Moment nix zu Tun. } public GalleryService getGalleryService() { return galleryService; } public void setGalleryService(GalleryService galleryService) { this.galleryService = galleryService; } public boolean isInitializeFromPageParameters() { return initializeFromPageParameters; } public void setInitializeFromPageParameters(boolean initializeFromPageParameters) { this.initializeFromPageParameters = initializeFromPageParameters; } public Logger getLog() { return log; } public GenericLinkConfig getConfig() { return config; } }