/** * 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.picture.web; 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.markup.html.WebResource; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.markup.html.image.Image; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.apache.wicket.util.resource.FileResourceStream; import org.apache.wicket.util.resource.IResourceStream; import org.bricket.plugin.picture.domain.Picture; import org.bricket.plugin.picture.service.PictureModificationService; import org.bricket.plugin.picture.service.PictureService; import org.bricket.web.BricketPanel; /** * @author Ingo Renner * @author Henning Teek * */ public class EditPicturePanel extends BricketPanel { private Form<Picture> form; @SpringBean private PictureService pictureService; @SpringBean private PictureModificationService pictureModificationService; private Picture image; public EditPicturePanel(String id, Picture image) { super(id); this.image = image; } @Override protected void initGui() { form = new Form<Picture>("picture.form", new CompoundPropertyModel<Picture>(image)); StringResourceModel ltitle = new StringResourceModel("title.label", EditPicturePanel.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", EditPicturePanel.this, null); form.add(new Label("description.label", ldescription)); form.add(new TextField<String>("description", String.class).setRequired(true).setLabel(ldescription)); add(form); form.add(createPreviewPicture("pic", image)); 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) { doSave(form); returnToManagement(target); } @Override protected void onError(AjaxRequestTarget target, Form<?> form) { target.addComponent(getFeedback()); } }); } protected Image createPreviewPicture(String id, Picture image) { final FileResourceStream resource = new FileResourceStream(pictureModificationService.getLayoutImage(image .getDigest())); final WebResource wr = new PictureWebResource(resource); return new Image(id, wr); } protected void returnToManagement(AjaxRequestTarget target) { final Panel p = new ManagePicturesPanel(EditPicturePanel.this.getId()); p.setOutputMarkupId(true); EditPicturePanel.this.getParent().addOrReplace(p); target.addComponent(p); target.addComponent(getFeedback()); } protected void doSave(Form<?> form) { pictureService.savePicture((Picture) form.getModelObject()); form.info(new StringResourceModel("feedback.success", EditPicturePanel.this, null).getString()); } private static final class PictureWebResource extends WebResource { private final FileResourceStream resource; private PictureWebResource(FileResourceStream resource) { this.resource = resource; } @Override public IResourceStream getResourceStream() { return resource; } } }