Package com.dotmarketing.portlets.workflows.ajax

Source Code of com.dotmarketing.portlets.workflows.ajax.WfRoleStoreAjax

package com.dotmarketing.portlets.workflows.ajax;

import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.Role;
import com.dotmarketing.business.RoleAPI;
import com.dotmarketing.cms.factories.PublicCompanyFactory;
import com.dotmarketing.exception.DotDataException;
import com.dotmarketing.portlets.workflows.model.WorkflowAction;
import com.dotmarketing.util.Logger;
import com.dotmarketing.util.UtilMethods;
import com.liferay.portal.language.LanguageException;
import com.liferay.portal.language.LanguageUtil;
import com.liferay.portal.model.User;
import com.dotcms.repackage.org.codehaus.jackson.map.DeserializationConfig.Feature;
import com.dotcms.repackage.org.codehaus.jackson.map.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;

public class WfRoleStoreAjax extends WfBaseAction {

    public void action ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        String searchName = request.getParameter( "searchName" );

        if ( searchName == null ) searchName = "";
        String roleId = request.getParameter( "roleId" );
        RoleAPI rapi = APILocator.getRoleAPI();

        int start = 0;
        int count = 20;
        try {
            start = Integer.parseInt( request.getParameter( "start" ) );
        } catch ( Exception e ) {

        }
        try {
            count = Integer.parseInt( request.getParameter( "count" ) );
        } catch ( Exception e ) {

        }

        boolean includeFake = UtilMethods.isSet(request.getParameter( "includeFake" ))&&request.getParameter( "includeFake" ).equals("true");

        try {
            Role cmsAnon = APILocator.getRoleAPI().loadCMSAnonymousRole();

            String cmsAnonName = LanguageUtil.get( getUser(), "current-user" );
            cmsAnon.setName( cmsAnonName );
            boolean addSystemUser = false;
            if ( searchName.length() > 0 && cmsAnonName.startsWith( searchName ) ) {
                addSystemUser = true;
            }

            List<Role> roleList = new ArrayList<Role>();
            if ( UtilMethods.isSet( roleId ) ) {
                try {
                    Role r = rapi.loadRoleById( roleId );
                    if ( r != null ) {
                        if ( r.getId().equals( cmsAnon.getId() ) )
                            roleList.add( cmsAnon );
                        else
                            roleList.add( r );
                        response.getWriter().write( rolesToJson( roleList, includeFake ) );
                        return;
                    }
                } catch ( Exception e ) {

                }

            }

            while ( roleList.size() < count ) {
                List<Role> roles = rapi.findRolesByFilterLeftWildcard( searchName, start, count );
                if ( roles.size() == 0 ) {
                    break;
                }
                for ( Role role : roles ) {
                    if ( role.isUser() ) {
                        try {
                            APILocator.getUserAPI().loadUserById( role.getRoleKey(), APILocator.getUserAPI().getSystemUser(), false );
                        } catch ( Exception e ) {
                            //Logger.error(WfRoleStoreAjax.class,e.getMessage(),e);
                            continue;
                        }
                    }
                    if ( role.getId().equals( cmsAnon.getId() ) ) {
                        role = cmsAnon;
                        addSystemUser = false;
                    }
                    if ( role.isSystem() && !role.isUser() && !role.getId().equals( cmsAnon.getId() ) && !role.getId().equals( APILocator.getRoleAPI().loadCMSAdminRole().getId() ) ) {
                        continue;
                    }
                    if ( role.getName().equals( searchName ) ) {
                        roleList.add( 0, role );
                    } else {
                        roleList.add( role );
                    }
                }
                start = start + count;
            }
            if ( addSystemUser ) {
                cmsAnon.setName( cmsAnonName );
                roleList.add( 0, cmsAnon );
            }

            //x = x.replaceAll("identifier", "x");
            response.setContentType("application/json");
            response.getWriter().write( rolesToJson( roleList, includeFake ) );

        } catch ( Exception e ) {
            Logger.error( WfRoleStoreAjax.class, e.getMessage(), e );
        }

    }

    public void assignable ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

        String name = request.getParameter( "name" );

        boolean includeFake = UtilMethods.isSet(request.getParameter( "includeFake" ))&&request.getParameter( "includeFake" ).equals("true");

        try {
            String actionId = request.getParameter( "actionId" );
            WorkflowAction action = APILocator.getWorkflowAPI().findAction( actionId, getUser() );
            Role role = APILocator.getRoleAPI().loadRoleById( action.getNextAssign() );
            List<Role> roleList = new ArrayList<Role>();
            List<User> userList = new ArrayList<User>();
            if ( !role.isUser() ) {
                if ( action.isRoleHierarchyForAssign() ) {
                    userList = APILocator.getRoleAPI().findUsersForRole( role, true );
                    roleList.addAll( APILocator.getRoleAPI().findRoleHierarchy( role ) );
                } else {
                    userList = APILocator.getRoleAPI().findUsersForRole( role, false );
                    roleList.add( role );
                }
            } else {
                userList.add( APILocator.getUserAPI().loadUserById( role.getRoleKey(), APILocator.getUserAPI().getSystemUser(), false ) );
            }

            for ( User user : userList ) {
                Role r = APILocator.getRoleAPI().getUserRole( user );
                if ( r != null && UtilMethods.isSet( r.getId() ) ) {
                    roleList.add( r );
                }
            }
            if ( name != null ) {

                name = name.toLowerCase().replaceAll( "\\*", "" );
                if ( UtilMethods.isSet( name ) ) {
                    List<Role> newRoleList = new ArrayList<Role>();
                    for ( Role r : roleList ) {
                        if ( r.getName().toLowerCase().startsWith( name ) ) {
                            newRoleList.add( r );
                        }
                    }
                    roleList = newRoleList;
                }

            }

            response.setContentType("application/json");
            response.getWriter().write( rolesToJson( roleList, includeFake ) );
        } catch ( Exception e ) {
            Logger.error( WfRoleStoreAjax.class, e.getMessage(), e );
        }


    }

    private String rolesToJson ( List<Role> roles, boolean includeFake ) throws IOException, DotDataException, LanguageException {

        ObjectMapper mapper = new ObjectMapper();
        mapper.configure( Feature.FAIL_ON_UNKNOWN_PROPERTIES, false );
        Map<String, Object> m = new LinkedHashMap<String, Object>();

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        Map<String, Object> map = null;

        if(includeFake) {
          map = new HashMap<String, Object>();
          map.put( "name", "" );
          map.put( "id", 0 );
          list.add( map );
        }

        User defaultUser = APILocator.getUserAPI().getDefaultUser();
        Role defaultUserRole = null;
        if ( defaultUser != null ) {
            defaultUserRole = APILocator.getRoleAPI().getUserRole( defaultUser );
        }

        for ( Role role : roles ) {

            map = new HashMap<String, Object>();

            //Exclude default user
            if ( defaultUserRole != null && role.getId().equals( defaultUserRole.getId() ) ) {
                continue;
            }

            //We just want to add roles that can have permissions assigned to them
            if ( !role.isEditPermissions() ) {
                continue;
            }

            //We need to exclude also the anonymous user
            if ( role.getName().equalsIgnoreCase( "anonymous user" ) ) {
                continue;
            }

            map.put( "name",  role.getName() + ((role.isUser()) ? " (" + LanguageUtil.get( PublicCompanyFactory.getDefaultCompany(), "User" ) + ")" : ""));
            map.put( "id", role.getId() );

            list.add( map );
        }

        m.put( "identifier", "id" );
        m.put( "label", "name" );
        m.put( "items", list );

        return mapper.defaultPrettyPrintingWriter().writeValueAsString( m );
    }

}
TOP

Related Classes of com.dotmarketing.portlets.workflows.ajax.WfRoleStoreAjax

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.