edu.cornell.mannlib.vitro.webapp.auth.permissions.PermissionSetsSmokeTest.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.auth.permissions.PermissionSetsSmokeTest.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.auth.permissions;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import edu.cornell.mannlib.vitro.webapp.beans.PermissionSet;
import edu.cornell.mannlib.vitro.webapp.beans.UserAccount;
import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelAccess;
import edu.cornell.mannlib.vitro.webapp.dao.UserAccountsDao;
import edu.cornell.mannlib.vitro.webapp.startup.StartupStatus;

/**
 * Load the initial configuration of PermissionSets and Permissions.
 * 
 * The UserAccounts model must be created before this runs.
 * 
 * The PermissionRegistry must be created before this runs.
 */
public class PermissionSetsSmokeTest implements ServletContextListener {
    @SuppressWarnings("unused")
    private static final Log log = LogFactory.getLog(PermissionSetsSmokeTest.class);

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext ctx = sce.getServletContext();
        StartupStatus ss = StartupStatus.getBean(ctx);

        try {
            new SmokeTester(this, ctx, ss).test();
        } catch (Exception e) {
            ss.fatal(this, "Found a problem while testing the PermissionSets", e);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        // Nothing to tear down.
    }

    // ----------------------------------------------------------------------
    // SmokeTester class
    // ----------------------------------------------------------------------

    private static class SmokeTester {
        private ServletContextListener listener;
        private final ServletContext ctx;
        private final StartupStatus ss;

        private final UserAccountsDao uaDao;

        public SmokeTester(ServletContextListener listener, ServletContext ctx, StartupStatus ss) {
            this.listener = listener;
            this.ctx = ctx;
            this.ss = ss;

            this.uaDao = ModelAccess.on(ctx).getWebappDaoFactory().getUserAccountsDao();
        }

        public void test() {
            checkForPermissionSetsWithoutLabels();
            checkForReferencesToNonexistentPermissionSets();
            checkForReferencesToNonexistentPermissions();
            warnIfNoPermissionSetsForNewUsers();
        }

        private void checkForPermissionSetsWithoutLabels() {
            for (PermissionSet ps : uaDao.getAllPermissionSets()) {
                if (ps.getLabel().isEmpty()) {
                    ss.warning(listener, "This PermissionSet has no label: " + ps.getUri());
                }
            }
        }

        private void checkForReferencesToNonexistentPermissionSets() {
            for (UserAccount user : uaDao.getAllUserAccounts()) {
                for (String psUri : user.getPermissionSetUris()) {
                    if (uaDao.getPermissionSetByUri(psUri) == null) {
                        ss.warning(listener, "The user '" + user.getFirstName() + " " + user.getLastName()
                                + "' has the PermissionSet '" + psUri + "', but the PermissionSet doesn't exist.");
                    }
                }
            }
        }

        private void checkForReferencesToNonexistentPermissions() {
            PermissionRegistry registry = PermissionRegistry.getRegistry(ctx);
            for (PermissionSet ps : uaDao.getAllPermissionSets()) {
                for (String pUri : ps.getPermissionUris()) {
                    if (!registry.isPermission(pUri)) {
                        ss.warning(listener, "The PermissionSet '" + ps.getLabel() + "' has the Permission '" + pUri
                                + "', but the Permission " + "is not found in the registry.");
                    }
                }
            }
        }

        private void warnIfNoPermissionSetsForNewUsers() {
            for (PermissionSet ps : uaDao.getAllPermissionSets()) {
                if (ps.isForNewUsers()) {
                    return;
                }
            }
            ss.warning(listener, "No PermissionSet has been declared to be a " + "PermissionSet for new users.");
        }

    }
}