/*
* Copyright 2009-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.jdal.vaadin.ui.form;
import java.io.Serializable;
import org.jdal.dao.Dao;
import org.jdal.vaadin.ui.FormUtils;
import org.jdal.vaadin.ui.table.ButtonListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import com.vaadin.data.util.BeanItem;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.Form;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Window;
/**
* Window that hold a form for use as Dialog
*
* @author Jose Luis Martin - (jlm@joseluismartin.info)
* @since 1.1
*/
public class FormDialog extends Window {
@Autowired
private Dao<Object, Serializable> persistentService;
private Form form;
private ButtonListener acceptButtonListener;
private ButtonListener cancelButtonListener;
@Autowired
private MessageSource messageSource;
private boolean dirty = false;
public FormDialog() {
super();
}
public FormDialog(Form form) {
this.form = form;
}
public FormDialog(Form form, String caption) {
super(caption);
this.form = form;
}
/**
* @param caption
* @param content
*/
public FormDialog(String caption, ComponentContainer content) {
super(caption, content);
}
/**
* @param caption
*/
public FormDialog(String caption) {
super(caption);
}
public void init() {
setContent(form);
getContent().setSizeUndefined();
center();
acceptButtonListener = new AcceptButtonListener();
cancelButtonListener = new CancelButtonListener();
HorizontalLayout buttonLayout = new HorizontalLayout();
Button acceptButton = FormUtils.newButton(acceptButtonListener);
Button cancelButton = FormUtils.newButton(cancelButtonListener);
buttonLayout.setSpacing(true);
buttonLayout.addComponent(acceptButton);
buttonLayout.addComponent(cancelButton);
HorizontalLayout footer = new HorizontalLayout();
footer.addComponent(buttonLayout);
footer.setSizeFull();
footer.setComponentAlignment(buttonLayout, Alignment.TOP_CENTER);
form.setFooter(footer);
form.setSizeFull();
form.getLayout().setSizeFull();
}
/**
* @return the form
*/
public Form getForm() {
return form;
}
/**
* @param form the form to set
*/
public void setForm(Form form) {
this.form = form;
}
/**
* @return the persistentService
*/
public Dao<Object, Serializable> getPersistentService() {
return persistentService;
}
/**
* @param persistentService the persistentService to set
*/
public void setPersistentService(Dao<Object, Serializable> persistentService) {
this.persistentService = persistentService;
}
/**
* @return the acceptButtonListener
*/
public ButtonListener getAcceptButtonListener() {
return acceptButtonListener;
}
/**
* @param acceptButtonListener the acceptButtonListener to set
*/
public void setAcceptButtonListener(ButtonListener acceptButtonListener) {
this.acceptButtonListener = acceptButtonListener;
}
/**
* @return the cancelButtonListener
*/
public ButtonListener getCancelButtonListener() {
return cancelButtonListener;
}
/**
* @param cancelButtonListener the cancelButtonListener to set
*/
public void setCancelButtonListener(ButtonListener cancelButtonListener) {
this.cancelButtonListener = cancelButtonListener;
}
private class AcceptButtonListener extends ButtonListener {
public AcceptButtonListener() {
String caption = messageSource == null ? "Accept" : messageSource.getMessage("accept", null, null);
setCaption(caption);
}
/**
* {@inheritDoc}
*/
@Override
public void buttonClick(ClickEvent event) {
form.commit();
BeanItem<?> item = (BeanItem<?>) form.getItemDataSource();
persistentService.save(item.getBean());
setDirty(true);
close();
}
}
private class CancelButtonListener extends ButtonListener {
public CancelButtonListener() {
String caption = messageSource == null ? "Cancel" : messageSource.getMessage("cancel", null, null);
setCaption(caption);
}
/**
* {@inheritDoc}
*/
@Override
public void buttonClick(ClickEvent event) {
form.discard();
close();
}
}
/**
* @return the messageSource
*/
public MessageSource getMessageSource() {
return messageSource;
}
/**
* @param messageSource the messageSource to set
*/
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
/**
* @return true if dirty
*/
public boolean isDirty() {
return dirty;
}
/**
* @param dirty
*/
public void setDirty(boolean dirty) {
this.dirty = dirty;
}
}