org.jdal.vaadin.ui.form.ViewSaveAction.java Source code

Java tutorial

Introduction

Here is the source code for org.jdal.vaadin.ui.form.ViewSaveAction.java

Source

/*
 * Copyright 2009-2012 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 org.jdal.dao.Dao;
import org.jdal.ui.Editor;
import org.jdal.ui.View;
import org.jdal.vaadin.VaadinUtils;
import org.jdal.vaadin.ui.VaadinView;

import com.vaadin.server.ThemeResource;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Notification;

/**
 * Save Action for Views
 * 
 * @author Jose Luis Martin 
 * @since 2.0
 */
@SuppressWarnings("rawtypes")
public class ViewSaveAction extends ViewAction {

    private static final String DEFAULT_ICON = "images/ok.png";

    private boolean showError = true;
    private Dao persistentService;
    private boolean closeWindow = true;

    public ViewSaveAction() {
        this(null, null);
    }

    public ViewSaveAction(VaadinView view) {
        this(view, null);
    }

    /**
     * @param persistentService
     * @param view
     */
    public ViewSaveAction(VaadinView view, Dao persistentService) {
        this.persistentService = persistentService;
        setView(view);
        setIcon(new ThemeResource(DEFAULT_ICON));
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void buttonClick(ClickEvent event) {
        beforeSave();
        boolean valid = save();
        afterSave(valid);

        if (valid && closeWindow) {
            VaadinUtils.closeWindow(getView().getPanel());
        }
    }

    /** 
     * Save the view model, show a message to user if there are
     * validation errors.
     */
    @SuppressWarnings("unchecked")
    private boolean save() {
        View<?> view = getView();
        view.update();
        boolean valid = view.validateView();

        if (valid) {
            if (view instanceof Editor) {
                ((Editor) view).save();
            } else {
                // save using persistent service by default
                persistentService.save(view.getModel());
            }
        } else {
            if (onError()) {
                String errorMessage = view.getErrorMessage();
                Notification.show(errorMessage, Notification.Type.ERROR_MESSAGE);
            }
        }

        return valid;
    }

    /**
     * Hook method to let subclases to do something on validation errors.
     * @return true to show message error, false otherwise
     */
    protected boolean onError() {
        return true;
    }

    /**
     * Hook method to let subclases to do something before save 
     * the model 
     * @param valid true if validation success
     */
    protected void afterSave(boolean valid) {

    }

    /**
     * Hook method to let subclases to do something after save 
     * the model
     */
    protected void beforeSave() {

    }

    public Dao getPersistentService() {
        return persistentService;
    }

    public void setPersistentService(Dao persistentService) {
        this.persistentService = persistentService;
    }

    public boolean isShowError() {
        return showError;
    }

    public void setShowError(boolean showError) {
        this.showError = showError;
    }

    public boolean isCloseWindow() {
        return closeWindow;
    }

    public void setCloseWindow(boolean closeWindow) {
        this.closeWindow = closeWindow;
    }

}