/**
* 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;
}
}
}