All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.broadleafcommerce.openadmin.client.service.AbstractCallback Maven / Gradle / Ivy

There is a newer version: 3.1.15-GA
Show newest version
/*
 * Copyright 2008-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.broadleafcommerce.openadmin.client.service;

import java.util.HashMap;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.logging.Level;

import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.UrlBuilder;
import com.google.gwt.user.client.Window;
import com.gwtincubator.security.client.SecuredAsyncCallback;
import com.gwtincubator.security.exception.ApplicationSecurityException;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.rpc.RPCResponse;
import com.smartgwt.client.util.SC;
import org.broadleafcommerce.openadmin.client.BLCMain;
import org.broadleafcommerce.openadmin.client.dto.Entity;
import org.broadleafcommerce.openadmin.client.security.AdminUser;

/**
 * @author jfischer
 * 
 * @param 
 */
public abstract class AbstractCallback extends SecuredAsyncCallback {

    public void onSuccess(T result) {
        if (BLCMain.DEBUG && result != null) {
            GWT.log("Service call success:\n" + result.toString());
        }
        if (BLCMain.NON_MODAL_PROGRESS.isActive()) {
        	BLCMain.NON_MODAL_PROGRESS.stopProgress();
        }     
    }
    
    protected boolean processResult(Entity result, String requestId, DSResponse response, DataSource dataSource) {
        if (result.isValidationFailure()) {
            Map errors = new HashMap();
            if (result.getValidationErrors() != null) {
                for (String[] error : result.getValidationErrors()) {
                    String message = null;
                    try {
                        message = BLCMain.getMessageManager().getString(error[1]);
                    } catch (MissingResourceException e) {
                        //do nothing
                    }
                    errors.put(error[0], message==null?error[1]:message);
                }
            }
            response.setErrors(errors);
            response.setStatus(RPCResponse.STATUS_VALIDATION_ERROR);
            dataSource.processResponse(requestId, response);
        }

        return !result.isValidationFailure();
    }

    @Override
    protected void onOtherException(final Throwable exception) {
        final String msg = "Service Exception";
        if (
            "com.google.gwt.user.client.rpc.InvocationException".equals(exception.getClass().getName()) ||
            exception.getMessage().contains("XSRF token mismatch")
        ) {
            SC.logWarn("Retrieving admin user (AbstractCallback.onOtherException)...");
        	java.util.logging.Logger.getLogger(getClass().toString()).log(Level.SEVERE,"Retrieving admin user (AbstractCallback.onOtherException)...",exception);
            AppServices.SECURITY.getAdminUser(new AbstractCallback() {
                @Override
                public void onSuccess(AdminUser result) {
                    if (result == null) {
                        logout(msg, exception);
                    } else {
                        if (exception.getMessage().contains("XSRF token mismatch")) {
                            //user must have remember me enabled - just refresh the app in order to update the token
                            UrlBuilder builder = Window.Location.createUrlBuilder();
                            builder.setParameter("time", String.valueOf(System.currentTimeMillis()));
                            Window.open(builder.buildString(), "_self", null);
                        } else {
                            SC.logWarn("Admin user found. Reporting calback exception (AbstractCallback.onOtherException)...");
                            java.util.logging.Logger.getLogger(getClass().toString()).warning("Admin user found. Reporting calback exception (AbstractCallback.onOtherException)...");;
                            reportException(msg, exception);
                            String errorMsg = exception.getMessage();
                            SC.warn(errorMsg);
                            java.util.logging.Logger.getLogger(getClass().toString()).warning(errorMsg);;
                        }
                    }
                }
            });
        } else {
            reportException(msg, exception);
            String errorMsg = exception.getMessage();
            SC.warn(errorMsg);
            java.util.logging.Logger.getLogger(getClass().toString()).log(Level.SEVERE,errorMsg,exception);
        }
    }

    @Override
    protected void onSecurityException(final ApplicationSecurityException exception) {
        final String msg = "Security Exception";
        SC.logWarn("Retrieving admin user (AbstractCallback.onSecurityException)...");
        java.util.logging.Logger.getLogger(getClass().toString()).warning("Retrieving admin user (AbstractCallback.onSecurityException)...");;
        AppServices.SECURITY.getAdminUser(new AbstractCallback() {
            @Override
            public void onSuccess(AdminUser result) {
                if (result == null) {
                    logout(msg, exception);
                } else {
                    SC.logWarn("Admin user found. Reporting calback exception (AbstractCallback.onSecurityException)...");
                    java.util.logging.Logger.getLogger(getClass().toString()).warning("Admin user found. Reporting calback exception (AbstractCallback.onSecurityException)...");;
                    reportException(msg, exception);
                    //SC.warn("Your Profile doesn't have the Capability necessary to perform this task.");
                    java.util.logging.Logger.getLogger(getClass().toString()).warning("Your Profile doesn't have the Capability necessary to perform this task.");;
                    String errorMsg = exception.getMessage();
                    SC.warn(errorMsg);
                    java.util.logging.Logger.getLogger(getClass().toString()).warning(errorMsg);;
                }
            }
        });
    }

    protected void logout(String msg, Throwable exception) {
        SC.logWarn("Admin user not found. Logging out (AbstractCallback.onSecurityException)...");
        java.util.logging.Logger.getLogger(getClass().toString()).warning("Admin user not found. Logging out (AbstractCallback.onSecurityException)...");;
        reportException(msg, exception);
        UrlBuilder builder = Window.Location.createUrlBuilder();
        builder.setPath(BLCMain.webAppContext + "/adminLogout.htm");
        builder.setParameter("time", String.valueOf(System.currentTimeMillis()));
        Window.open(builder.buildString(), "_self", null);
    }

    private void reportException(String msg, Throwable exception) {
        //if (BLCMain.DEBUG) MessageBox.alert(msg, exception.getMessage(), null);
        GWT.log(msg, exception);
        if (BLCMain.MODAL_PROGRESS.isActive()) {
        	BLCMain.MODAL_PROGRESS.stopProgress();
        }
        if (BLCMain.NON_MODAL_PROGRESS.isActive()) {
        	BLCMain.NON_MODAL_PROGRESS.stopProgress();
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy