com.jaspersoft.jasperserver.export.modules.auth.AuthorityImporter.java Source code

Java tutorial

Introduction

Here is the source code for com.jaspersoft.jasperserver.export.modules.auth.AuthorityImporter.java

Source

/*
 * Copyright (C) 2005 - 2014 TIBCO Software Inc. All rights reserved.
 * http://www.jaspersoft.com.
 *
 * Unless you have purchased  a commercial license agreement from Jaspersoft,
 * the following license terms  apply:
 *
 * 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/>.
 */

package com.jaspersoft.jasperserver.export.modules.auth;

import com.jaspersoft.jasperserver.api.metadata.user.domain.ProfileAttribute;
import com.jaspersoft.jasperserver.api.metadata.user.domain.Role;
import com.jaspersoft.jasperserver.api.metadata.user.domain.User;
import com.jaspersoft.jasperserver.api.metadata.user.service.ProfileAttributeService;
import com.jaspersoft.jasperserver.export.modules.BaseImporterModule;
import com.jaspersoft.jasperserver.export.modules.ImporterModuleContext;
import com.jaspersoft.jasperserver.export.modules.auth.beans.RoleBean;
import com.jaspersoft.jasperserver.export.modules.auth.beans.UserBean;
import com.jaspersoft.jasperserver.export.modules.common.ProfileAttributeBean;
import com.jaspersoft.jasperserver.export.modules.common.TenantQualifiedName;
import org.dom4j.Element;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * @author Lucian Chirita (lucianc@users.sourceforge.net)
 * @version $Id: AuthorityImporter.java 47331 2014-07-18 09:13:06Z kklein $
 */
public class AuthorityImporter extends BaseImporterModule {

    private AuthorityModuleConfiguration configuration;
    private String updateArg;
    private String updateCoreUsersArg;
    private String skipUpdateArg;
    private boolean update;
    private boolean updateCoreUsers;

    protected static class ImportHandler implements AuthorityImportHandler {

        private final Map roles;

        protected ImportHandler(List roles) {
            this.roles = new HashMap();

            for (Iterator it = roles.iterator(); it.hasNext();) {
                Role role = (Role) it.next();
                TenantQualifiedName roleQName = new TenantQualifiedName(role.getTenantId(), role.getRoleName());
                this.roles.put(roleQName, role);
            }
        }

        public Role resolveRole(TenantQualifiedName rolename) {
            Role role = (Role) roles.get(rolename);
            return role;
        }

    }

    private ImportHandler importHandler;

    public void init(ImporterModuleContext moduleContext) {
        super.init(moduleContext);
        update = getUpdateFlag();
        updateCoreUsers = getUpdateCoreUsersFlag();
    }

    public List<String> process() {
        importRoles();

        // init the import handler after the roles are imported
        initImportHandler();

        importUsers();
        return null;
    }

    protected void importRoles() {
        for (Iterator it = indexElement.elementIterator(configuration.getRoleIndexElementName()); it.hasNext();) {
            Element roleElement = (Element) it.next();
            processRole(roleElement);
        }
    }

    protected void processRole(Element roleElement) {
        String roleName = roleElement.getText();
        String file = getRoleFile(roleName);
        RoleBean roleBean = (RoleBean) deserialize(configuration.getRolesDirName(), file,
                configuration.getSerializer());
        if (alreadyExists(roleBean)) {
            commandOut.warn("Role " + roleBean.getRoleName() + " already exists, skipping.");
        } else {
            Role role = createRole(roleBean);
            saveRole(role);

            commandOut.info("Created role " + role.getRoleName());
        }
    }

    protected boolean alreadyExists(RoleBean roleBean) {
        return configuration.getAuthorityService().getRole(executionContext, roleBean.getRoleName()) != null;
    }

    protected Role createRole(RoleBean roleBean) {
        Role role = configuration.getAuthorityService().newRole(executionContext);
        roleBean.copyTo(role);
        return role;
    }

    protected void saveRole(Role role) {
        configuration.getAuthorityService().putRole(executionContext, role);
    }

    protected void initImportHandler() {
        List allRoles = configuration.getAuthorityService().getRoles(executionContext, null);
        importHandler = new ImportHandler(allRoles);
    }

    protected void importUsers() {
        for (Iterator it = indexElement.elementIterator(configuration.getUserIndexElementName()); it.hasNext();) {
            Element userElement = (Element) it.next();
            processUser(userElement);
        }
    }

    protected void processUser(Element userElement) {
        String username = userElement.getText();
        String file = getUserFile(username);
        UserBean userBean = (UserBean) deserialize(configuration.getUsersDirName(), file,
                configuration.getSerializer());

        if (!alreadyExists(userBean)) {
            User user = createUser(userBean);
            saveUser(user);
            saveUserAttributes(user, userBean.getAttributes());

            commandOut.info("Created user " + userBean.getUsername());
        } else if (update || (updateCoreUsers && isCoreUser(userBean))) {
            User user = createUser(userBean);
            updateUser(userBean.getUsername(), user);
            saveUserAttributes(user, userBean.getAttributes());

            commandOut.info("Updated user " + userBean.getUsername());

        } else {
            commandOut.warn("User " + userBean.getUsername() + " already exists, skipping.");
        }
    }

    protected boolean isCoreUser(UserBean userBean) {
        if (userBean.getUsername().equals("jasperadmin"))
            return true;
        return false;
    }

    protected boolean alreadyExists(UserBean userBean) {
        return configuration.getAuthorityService().getUser(executionContext, userBean.getUsername()) != null;
    }

    protected User createUser(UserBean userBean) {
        User user = configuration.getAuthorityService().newUser(executionContext);
        userBean.copyTo(user, importHandler);
        return user;
    }

    protected void saveUser(User user) {
        configuration.getAuthorityService().putUser(executionContext, user);
    }

    protected void updateUser(String userName, User aUser) {
        configuration.getAuthorityService().updateUser(executionContext, userName, aUser);
    }

    protected void saveUserAttributes(User user, ProfileAttributeBean[] attributes) {
        if (attributes != null && attributes.length > 0) {
            for (int i = 0; i < attributes.length; i++) {
                ProfileAttributeBean profileAttributeBean = attributes[i];
                saveUserAttribute(user, profileAttributeBean);
            }
        }
    }

    protected void saveUserAttribute(User user, ProfileAttributeBean attributeBean) {
        ProfileAttributeService attributeService = configuration.getAttributeService();
        ProfileAttribute attribute = attributeService.newProfileAttribute(executionContext);
        attribute.setPrincipal(user);
        attributeBean.copyTo(attribute);
        attributeService.putProfileAttribute(executionContext, attribute);
    }

    protected boolean getUpdateFlag() {
        return hasParameter(getUpdateArg()) && !hasParameter((getSkipUpdateArg()));
    }

    protected boolean getUpdateCoreUsersFlag() {
        return hasParameter(getUpdateCoreUsersArg());
    }

    protected boolean isUpdate() {
        return update;
    }

    protected boolean isUpdateCoreUsers() {
        return updateCoreUsers;
    }

    protected String getUserFile(String username) {
        return username + ".xml";
    }

    protected String getRoleFile(String roleName) {
        return roleName + ".xml";
    }

    public AuthorityModuleConfiguration getConfiguration() {
        return configuration;
    }

    public void setConfiguration(AuthorityModuleConfiguration configuration) {
        this.configuration = configuration;
    }

    public String getUpdateArg() {
        return updateArg;
    }

    public void setUpdateArg(String updateArg) {
        this.updateArg = updateArg;
    }

    public String getSkipUpdateArg() {
        return skipUpdateArg;
    }

    public void setSkipUpdateArg(String skipUpdateArg) {
        this.skipUpdateArg = skipUpdateArg;
    }

    public String getUpdateCoreUsersArg() {
        return updateCoreUsersArg;
    }

    public void setUpdateCoreUsersArg(String updateCoreUsersArg) {
        this.updateCoreUsersArg = updateCoreUsersArg;
    }
}