Sunday, 31 August 2014

Import Roles in Liferay 6.1


In previous post, we saw how to export Roles in Liferay 6.1 via xml.

Below is the code snippet for importing Roles along with Permissions in your Liferay Portal.
import com.liferay.portal.DuplicateRoleException;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.servlet.SessionMessages;
import com.liferay.portal.kernel.struts.BaseStrutsPortletAction;
import com.liferay.portal.kernel.struts.StrutsPortletAction;
import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.model.Company;
import com.liferay.portal.model.Role;
import com.liferay.portal.service.CompanyLocalServiceUtil;
import com.liferay.portal.service.ResourceActionLocalServiceUtil;
import com.liferay.portal.service.ResourcePermissionLocalServiceUtil;
import com.liferay.portal.service.RoleLocalServiceUtil;
import com.liferay.portal.util.PortalUtil;
import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletConfig;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* This class is responsible for importing roles along-with permissions.
*
*
*/
public class ImportRolesAction extends BaseStrutsPortletAction {
@Override
/**
* This method is called when user clicks on import roles. It extract the file datarequest
* and calls the importRoles function to import roles.
*/
public void processAction(StrutsPortletAction aOriginalStrutsPortletAction,
PortletConfig aPortletConfig, ActionRequest aActionRequest,
ActionResponse aActionResponse) throws Exception {
try {
UploadPortletRequest uploadRequest = PortalUtil
.getUploadPortletRequest(aActionRequest);
if (uploadRequest != null) {
File xmlFile = uploadRequest.getFile("importText", true);
SAXReader reader = new SAXReader();
Document document = reader.read(xmlFile);
Element root = document.getRootElement();
long userId = PortalUtil.getUserId(aActionRequest);
importRoles(userId, root);
}
} catch (Exception e) {
e.getMessage();
}
SessionMessages.add(aActionRequest, "successMessage");
String redirect = ParamUtil.getString(aActionRequest, "redirect");
aActionResponse.sendRedirect(redirect);
}
/**
* This method used liferay roles API to save the roles details of the
* xported ids and transform the information into XML.
*
* @param userId
* @param root
* @throws PortalException
* @throws SystemException
*/
private void importRoles(long userId, Element root) throws PortalException,
SystemException {
ResourceActionLocalServiceUtil.checkResourceActions();
Element rolesElement = root.element("roles");
Map<Long, Long> roleIdMapper = new HashMap<Long, Long>();
// iterate through child elements of rolesElement\
for (Iterator i = rolesElement.elementIterator(); i.hasNext();) {
Element roleElement = (Element) i.next();
long oldRoleId = Long.valueOf(roleElement.attributeValue("roleId"));
String name = roleElement.attributeValue("name");
String title = roleElement.attributeValue("title");
String description = roleElement.attributeValue("description");
String type = roleElement.attributeValue("type");
String subType = roleElement.attributeValue("subType");
String roleCompanyId = roleElement.attributeValue("companyId");
Company company = CompanyLocalServiceUtil.getCompany(Long
.valueOf(roleCompanyId));
if (company == null) {
throw new PortalException("Compnay not found with id :: "
+ roleCompanyId);
}
Map<Locale, String> descMap = new HashMap<Locale, String>();
descMap.put(Locale.getDefault(), description);
Map<Locale, String> titleMap = new HashMap<Locale, String>();
titleMap.put(Locale.getDefault(), title);
try {
// System.out.println("Add Role " + name);
Role role = RoleLocalServiceUtil.addRole(userId,
Long.valueOf(roleCompanyId), name, titleMap, descMap,
Integer.parseInt(type));
roleIdMapper.put(oldRoleId, role.getRoleId());
} catch (DuplicateRoleException e) {
roleIdMapper.put(oldRoleId, oldRoleId);
// System.err.println("Role already in system :: " + name);
}
Element permissionsElement = roleElement.element("permissions");
for (Iterator j = permissionsElement.elementIterator(); j.hasNext();) {
Element resourcePermissionElement = (Element) j.next();
String permissionName = resourcePermissionElement
.attributeValue("name");
long roleId = Long.valueOf(resourcePermissionElement
.attributeValue("roleId"));
roleId = roleIdMapper.get(roleId);
String actionId = resourcePermissionElement
.attributeValue("actionId");
int scope = Integer.parseInt(resourcePermissionElement
.attributeValue("scopeId"));
String primKey = resourcePermissionElement
.attributeValue("primKey");
Long resourceCompId = Long.valueOf(resourcePermissionElement
.attributeValue("companyid"));
ResourcePermissionLocalServiceUtil.addResourcePermission(
resourceCompId, permissionName, scope, primKey, roleId,
actionId);
}
}
}
}

1 comment:

  1. Really cool post, highly informative and professionally written and I am glad to be a visitor of this perfect blog, thank you for this rare info! , Regards , liferay training in hyderabad

    ReplyDelete