org.efaps.ui.wicket.components.gridx.behaviors.SubmitBehavior.java Source code

Java tutorial

Introduction

Here is the source code for org.efaps.ui.wicket.components.gridx.behaviors.SubmitBehavior.java

Source

/*
 * Copyright 2003 - 2016 The eFaps Team
 *
 * 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.efaps.ui.wicket.components.gridx.behaviors;

import java.io.File;
import java.util.List;

import org.apache.wicket.Page;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.IAjaxIndicatorAware;
import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.IRequestParameters;
import org.apache.wicket.util.string.StringValue;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import org.efaps.admin.event.EventType;
import org.efaps.admin.event.Parameter.ParameterValues;
import org.efaps.admin.event.Return;
import org.efaps.admin.event.Return.ReturnValues;
import org.efaps.admin.ui.Command;
import org.efaps.ui.wicket.EFapsSession;
import org.efaps.ui.wicket.components.modalwindow.ModalWindowContainer;
import org.efaps.ui.wicket.models.objects.UICmdObject;
import org.efaps.ui.wicket.models.objects.UIGrid;
import org.efaps.ui.wicket.pages.AbstractMergePage;
import org.efaps.ui.wicket.pages.content.grid.GridPage;
import org.efaps.ui.wicket.pages.dialog.DialogPage;
import org.efaps.ui.wicket.pages.error.ErrorPage;
import org.efaps.ui.wicket.util.ParameterUtil;
import org.efaps.util.EFapsException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * The Class SubmitBehavior.
 *
 * @author The eFaps Team
 */
public class SubmitBehavior extends AjaxFormSubmitBehavior implements IAjaxIndicatorAware {

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 1L;

    /**
     * Logger for this class.
     */
    private static final Logger LOG = LoggerFactory.getLogger(SubmitBehavior.class);

    /**
     * Instantiates a new menu item submit ajax behavior.
     */
    public SubmitBehavior() {
        super("click");
    }

    @Override
    protected void onSubmit(final AjaxRequestTarget _target) {
        super.onSubmit(_target);

        final IRequestParameters para = getComponent().getRequest().getRequestParameters();
        final StringValue rid = para.getParameterValue("rid");
        final UIGrid uiGrid = (UIGrid) getComponent().getPage().getDefaultModelObject();
        final Long cmdId = uiGrid.getID4Random(rid.toString());

        try {
            final Command cmd = Command.get(cmdId);
            final List<StringValue> oidValues = para.getParameterValues("selectedRow");
            final String[] oids = ParameterUtil.parameter2Array(para, "selectedRow");
            boolean check = false;
            if (cmd.getSubmitSelectedRows() > -1) {
                if (cmd.getSubmitSelectedRows() > 0) {
                    check = oidValues == null ? false : oidValues.size() == cmd.getSubmitSelectedRows();
                } else {
                    check = oidValues == null ? false : !oidValues.isEmpty();
                }
            } else {
                check = true;
            }

            if (check) {
                if (cmd.isAskUser()) {
                    getComponent().getPage().visitChildren(ModalWindowContainer.class,
                            new IVisitor<ModalWindowContainer, Void>() {

                                @Override
                                public void component(final ModalWindowContainer _modal,
                                        final IVisit<Void> _visit) {
                                    _modal.setPageCreator(new ModalWindow.PageCreator() {

                                        private static final long serialVersionUID = 1L;

                                        @Override
                                        public Page createPage() {
                                            Page page = null;
                                            try {
                                                page = new DialogPage(getComponent().getPage().getPageReference(),
                                                        UICmdObject.getModel(cmdId), oids);
                                            } catch (final EFapsException e) {
                                                page = new ErrorPage(e);
                                            }
                                            return page;
                                        }
                                    });
                                    _modal.setInitialHeight(150);
                                    _modal.setInitialWidth(350);
                                    _modal.show(_target);
                                    _visit.stop();
                                }
                            });
                } else {
                    boolean updatePage = true;
                    if (cmd.hasEvents(EventType.UI_COMMAND_EXECUTE)) {
                        try {
                            final List<Return> rets;
                            if (oidValues != null) {
                                rets = cmd.executeEvents(EventType.UI_COMMAND_EXECUTE, ParameterValues.OTHERS,
                                        oids);
                            } else {
                                rets = cmd.executeEvents(EventType.UI_COMMAND_EXECUTE);
                            }
                            if (cmd.isTargetShowFile() && rets != null && !rets.isEmpty()) {
                                final Object object = rets.get(0).get(ReturnValues.VALUES);
                                if (object instanceof File) {
                                    ((EFapsSession) getComponent().getSession()).setFile((File) object);
                                    ((AbstractMergePage) getComponent().getPage()).getDownloadBehavior()
                                            .initiate(_target);
                                    updatePage = false;
                                }
                            }
                        } catch (final EFapsException e) {
                            throw new RestartResponseException(new ErrorPage(e));
                        }
                    }
                    if (updatePage) {
                        uiGrid.reload();
                        getComponent().setResponsePage(new GridPage(Model.of(uiGrid)));
                    }
                }
            } else {
                getComponent().getPage().visitChildren(ModalWindowContainer.class,
                        new IVisitor<ModalWindowContainer, Void>() {

                            @Override
                            public void component(final ModalWindowContainer _modal, final IVisit<Void> _visit) {
                                _modal.setPageCreator(new ModalWindow.PageCreator() {

                                    private static final long serialVersionUID = 1L;

                                    @Override
                                    public Page createPage() {
                                        return new DialogPage(getComponent().getPage().getPageReference(),
                                                "SubmitSelectedRows.fail" + cmd.getSubmitSelectedRows(), false,
                                                false);
                                    }
                                });
                                _modal.setInitialHeight(150);
                                _modal.setInitialWidth(350);
                                _modal.show(_target);
                                _visit.stop();
                            }
                        });
            }
        } catch (final EFapsException e) {
            SubmitBehavior.LOG.error("Catched", e);
        }
    }

    @Override
    public String getAjaxIndicatorMarkupId() {
        return "eFapsVeil";
    }
}