com.servoy.j2db.server.headlessclient.dataui.AbstractServoyLastVersionAjaxBehavior.java Source code

Java tutorial

Introduction

Here is the source code for com.servoy.j2db.server.headlessclient.dataui.AbstractServoyLastVersionAjaxBehavior.java

Source

/*
 This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2012 Servoy BV
    
 This program is free software; you can redistribute it and/or modify it under
 the terms of the GNU Affero General Public License as published by the Free
 Software Foundation; either version 3 of the License, or (at your option) any
 later version.
    
 This program is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
    
 You should have received a copy of the GNU Affero General Public License along
 with this program; if not, see http://www.gnu.org/licenses or write to the Free
 Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
 */

package com.servoy.j2db.server.headlessclient.dataui;

import org.apache.wicket.RequestCycle;
import org.apache.wicket.ajax.AjaxRequestTarget;

import com.servoy.j2db.server.headlessclient.AlwaysLastPageVersionRequestListenerInterface;

/**
 * A base {@link AbstractServoyDefaultAjaxBehavior} that will only call {@link #execute(AjaxRequestTarget)} if it was triggered
 * by the active version of the page. If it was triggered before the page version switch, respond() will make sure the behavior is ignored.<br><br>
 * This avoids unintended page version switches (which can result in unresponsive browser pages) or
 * unintended behavior executions (for example after a form switch, an old action executing stuff too fast, before onDomReady of the whole page switch happens
 * in the browser - there was such a situation in Firefox).   
 * 
 * @author acostescu
 * 
 */
public abstract class AbstractServoyLastVersionAjaxBehavior extends AbstractServoyDefaultAjaxBehavior {

    protected static final String PVS = "pvs"; // parameter used for ignoring requests on older versions of the page //$NON-NLS-1$
    protected static final String PVS_PARAM = "&" + PVS + "="; //$NON-NLS-1$//$NON-NLS-2$

    /**
     * Equivalent to AbstractServoyDefaultAjaxBehavior's respond(AjaxRequestTarget). But it will be ignored sometime. See class description.
     */
    protected abstract void execute(AjaxRequestTarget target);

    @Override
    protected final void respond(AjaxRequestTarget target) {
        if (String.valueOf(target.getPage().getCurrentVersionNumber())
                .equals(RequestCycle.get().getRequest().getParameter(PVS))) {
            execute(target);
        }
    }

    @Override
    public CharSequence getCallbackUrl(boolean onlyTargetActivePage) {
        if (getComponent() == null) {
            throw new IllegalArgumentException("Behavior must be bound to a component to create the URL"); //$NON-NLS-1$
        }
        return getComponent().urlFor(this, AlwaysLastPageVersionRequestListenerInterface.INTERFACE) + PVS_PARAM
                + getComponent().getPage().getCurrentVersionNumber();
    }

}