Package com.dotmarketing.startup.runalways

Source Code of com.dotmarketing.startup.runalways.Task00003CreateSystemRoles

package com.dotmarketing.startup.runalways;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import com.dotmarketing.business.RoleAPI;
import com.dotmarketing.common.db.DotConnect;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.exception.DotRuntimeException;
import com.dotmarketing.startup.StartupTask;
import com.dotmarketing.util.Logger;
import com.dotmarketing.util.UUIDGenerator;
import com.liferay.portal.util.PropsUtil;

public class Task00003CreateSystemRoles implements StartupTask {

  private final String getSystemRole = "select id, role_name, description, role_key, db_fqn, parent, edit_permissions, edit_users, edit_layouts, " +
    "locked, system from cms_role where role_key = 'System' and id = parent";

  private final String getUsersRole = "select id, role_name, description, role_key, db_fqn, parent, edit_permissions, edit_users, edit_layouts, " +
    "locked, system from cms_role where role_name = 'Users' and id = parent";

  private final String selectSystemRoles = "select id, role_name, description, role_key, db_fqn, parent, edit_permissions, edit_users, edit_layouts, " +
    "locked, system from cms_role where parent = ? and parent <> id";

  private final String insertRole = "insert into cms_role (id, role_name, description, role_key, db_fqn, parent, edit_permissions, " +
    "edit_users, edit_layouts, locked, system) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
 
  private final String[] rolesWithUsersLocked = { "LDAP User", "CMS Owner", "CMS Anonymous", "LoggedIn Site User" };

  public void executeUpgrade() throws DotDataException, DotRuntimeException {
   
    DotConnect dc = new DotConnect();

    dc.setSQL(getSystemRole);
    ArrayList<Map<String, String>> results;
    try {
      results = dc.loadResults();
    } catch (DotDataException e) {
      Logger.info(this, "Task not executing seems the roles has not been upgraded yet");
      return;
    }
    String systemRootRoleId = null;
    if(results.size() == 0) {
      systemRootRoleId = UUIDGenerator.generateUuid();
      dc.setSQL(insertRole);
      dc.addParam(systemRootRoleId);
      dc.addParam("System");
      dc.addParam("System roles root");
      dc.addParam(RoleAPI.SYSTEM_ROOT_ROLE_KEY);
      dc.addParam(systemRootRoleId);
      dc.addParam(systemRootRoleId);
      dc.addParam(false);
      dc.addParam(false);
      dc.addParam(false);
      dc.addParam(false);
      dc.addParam(true);
      dc.loadResult();
    } else {
      systemRootRoleId = results.get(0).get("id");
    }
   
    dc.setSQL(getUsersRole);
    results = dc.loadResults();
    String usersRootRoleId = null;
    if(results.size() == 0) {
      usersRootRoleId = UUIDGenerator.generateUuid();
      dc.setSQL(insertRole);
      dc.addParam(usersRootRoleId);
      dc.addParam("Users");
      dc.addParam("User Roles root");
      dc.addParam(RoleAPI.USERS_ROOT_ROLE_KEY);
      dc.addParam(usersRootRoleId);
      dc.addParam(usersRootRoleId);
      dc.addParam(false);
      dc.addParam(false);
      dc.addParam(false);
      dc.addParam(false);
      dc.addParam(true);
      dc.loadResult();
    } else {
      usersRootRoleId = results.get(0).get("id");
    }
   
    String[] systemRoles = PropsUtil.getArray(PropsUtil.SYSTEM_ROLES);
    dc.setSQL(selectSystemRoles);
    dc.addParam(systemRootRoleId);
    List<Map<String, String>> currentSystemRoles = dc.loadResults();

    Arrays.sort(rolesWithUsersLocked);
   
    for(String roleName : systemRoles) {
      if(!containsRole(roleName, currentSystemRoles)) {
       
        String newRoleId = UUIDGenerator.generateUuid();
        dc.setSQL(insertRole);
        dc.addParam(newRoleId);                 //id
        dc.addParam(roleName.trim());               //role_name
        dc.addParam(roleName.trim());                     //description
        dc.addParam(roleName.trim());              //key
        dc.addParam(systemRootRoleId + " --> " + newRoleId)//db_fqn
        dc.addParam(systemRootRoleId);              //parent
        if(roleName.equals("CMS Administrator"))        //edit_permission
          dc.addParam(false);                 
        else
          dc.addParam(true);                 
        dc.addParam(Arrays.binarySearch(rolesWithUsersLocked, roleName.trim()) > -1?false: true);                    //edit users
        dc.addParam(true);                    //edit layouts
        dc.addParam(true);                    //locked
        dc.addParam(true);                    //system
        dc.loadResult();
      }
    }
   
  }

  private boolean containsRole (String roleName, List<Map<String, String>> systemRoles) {
    for(Map<String, String> systemRole : systemRoles) {
      if(systemRole.get("role_name").equals(roleName.trim()))
        return true;
    }
    return false;
  }
 
  public boolean forceRun() {

    return true;
  }

}
TOP

Related Classes of com.dotmarketing.startup.runalways.Task00003CreateSystemRoles

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.