If you’re using Liferay, and not using LDAP, you will probably face into the same problem I did – how to import a large amount of users without manually adding them to the system.
So, loving automation, I’ve decided to create a simple Portlet that does just that.
- Create a new Dynamic Web App in Eclipse.
- Configure all necessary deployment files (liferay-portlet.xml, portlet.xml, web.xml etc)
- Create a new User class:
package com.tona.liferay.web;public class User { private String firstName; private String lastName; private String email; private String phoneNo; private String screenName; private String password; public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhoneNo() { return phoneNo; } public void setPhoneNo(String phoneNo) { this.phoneNo = phoneNo; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getScreenName() { return screenName; } public void setScreenName(String screenName) { this.screenName = screenName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User(String line) { String[] tokens = line.split(","); setFirstName(tokens[1]); setLastName(tokens[2]); setEmail(tokens[3]); setPhoneNo(tokens[4]); String screenName = getFirstName() + getLastName().substring(0, 3); setScreenName(screenName.toLowerCase()); setPassword(getScreenName() + "123"); } public User() { } }
- Create the portlet itself:
package com.tona.liferay.web;import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.logging.Level; import java.util.logging.Logger; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletException; import com.liferay.portal.model.Company; import com.liferay.portal.service.CompanyLocalServiceUtil; import com.liferay.portal.service.UserLocalServiceUtil; import com.liferay.util.bridges.mvc.MVCPortlet; public class ImportUsersPortlet extends MVCPortlet { public void importUsers(ActionRequest actionRequest, ActionResponse actionResponse) throws IOException, PortletException { String fileName = actionRequest.getParameter("fileName"); BufferedReader fr = new BufferedReader(new FileReader(fileName)); Listusers = new ArrayList(); String line; while ((line = fr.readLine()) != null) { users.add(new User(line)); } // We now have the user list com.liferay.portal.service.ServiceContext context = new com.liferay.portal.service.ServiceContext(); long companyId = 0; try { Company company = CompanyLocalServiceUtil.getCompanies().get(0); companyId = company.getCompanyId(); for (User user : users) { try { UserLocalServiceUtil.addUser(0, companyId, false, user.getPassword(), user.getPassword(), false, user.getScreenName(), user.getEmail(), 0, "", Locale.getDefault(), user.getFirstName(), "", user.getLastName(), 0, 0, true, 1, 1, 1970, null, null, null, null, null, false, context); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } } }
- Create a WAR file and deploy it in Liferay
- Note that the portlet does not upload the CSV file – and expects it to exist on the Liferay server itself
You can of course change the algorithm of the screen-name and password creation, by changing the User constructor method.