Nel post precedente abbiamo visto come attivare i web service su Liferay 5.2.3.
Ora vediamo un po' di codice per popolare, da remoto, gli utenti.
Prima di tutto il classpath! :)
Per far funzionare l'esempio, dovete importare nel vostro progetto i seguenti jar:
- axis.jar
- commons-discovery.jar
- commons-io.jar
- commons-logging.jar
- jaxrpc.jar
- portal-client.jar
- wsdl4j.jar
che sono tutti disponibili nella distribuzione di Liferay, dentro a
<liferay source dir>/lib/portal
Il jar che ho evidenziato, portal-client.jar, è il jar che contiene tutti i client dei web service già confezionati e pronti all'uso, quindi è fondamentale per il nostro esempio.
Una volta importate le lib nel nostro il progetto possiamo procedere all'importazione massiva degli utenti su Liferay.
Supponiamo che il cliente ci fornisca, in formato excel, un elenco di utenti così strutturato:
Cognome, Nome, Data di Nascita, Username, Password, Email
E la data di nascita, campo obbligatorio per Liferay, ce la fornisca nel formato
dd-mm-yy
Come sempre, esportiamo il nostro Excel in un più pratico CSV e, a questo punto abbiamo tutto ciò che ci serve per cominciare!
Questo il codice per creare su Liferay 5.2.3 gli utenti sulla macchina remota:
package it.dvel.liferay.ws.users;
import java.io.*;
import java.net.*;
import java.util.*;
import org.apache.commons.io.*;
import com.liferay.client.soap.portal.model.*;
import com.liferay.client.soap.portal.service.*;
import com.liferay.client.soap.portal.service.http.*;
public class CreateAllUsers {
public static void main(String[] args) throws Exception {
List<String> righe = FileUtils.readLines(new File("/tmp", "lista.csv"));
Iterator<String> iterator = righe.iterator();
while (iterator.hasNext()) {
String riga = iterator.next();
// Excel usa il ; come separatore di campi.. Maledetto! :)
String[] valori = riga.split(";");
// Ci premuriamo di verificare che ci siano tutti i nostri campi e
// la data contenga il carattere '-'
// Uso la notazione ad array perchè è più pratico per il nostro esempio:
// voi modellate correttamente gli oggetti, mi raccomando! :D
if (valori != null && valori.length == 5 && valori[2].indexOf("-") > 0) {
String cognome = valori[0];
String nome = valori[1];
String dataNascita = valori[2];
String username = valori[3];
String password = valori[4];
String email = valori[5];
createUser(nome, cognome, username, password, dataNascita, email);
}
}
}
public static void createUser(String nome, String cognome, String screenName, String password,
String dataNascita, String email) throws Exception {
// Dichiariamo quale dev'essere la company di riferimento
long companyId = 1;
String referenceSite = "http://test:test@www.miosito.it";
// Recupero i ruoli che voglio che ogni mio utente abbia assegnati
RoleServiceSoapServiceLocator roleLocator =
new RoleServiceSoapServiceLocator();
RoleServiceSoap roleService =
roleLocator.getPortal_RoleService(
new URL(referenceSite + "/tunnel-web/secure/axis/Portal_RoleService"));
RoleSoap aRole = roleService.getRole(companyId, "Ruolo Particolare");
RoleSoap anotherRole = roleService.getRole(companyId, "Altro Ruolo");
// A questo punto sono pronto per creare l'utente
UserServiceSoapServiceLocator locator =
new UserServiceSoapServiceLocator();
UserServiceSoap service =
locator.getPortal_UserService(
new URL(referenceSite + "/tunnel-web/secure/axis/Portal_UserService"));
boolean autoPassword = false;
String password1 = password;
String password2 = password;
boolean autoScreenName = false;
String emailAddress = email;
String openId = "";
String locale = "it_IT"; // OCCHIOalla notazione del locale!!
String firstName = nome;
String middleName = "";
String lastName = cognome;
int prefixId = 0;
int suffixId = prefixId;
boolean male = true;
// Prendo i campi della data e li setto correttamente
String[] fields = dataNascita.split("-");
int birthdayMonth = Integer.parseInt(fields[1]) -1;
int birthdayDay = Integer.parseInt(fields[0]);
int birthdayYear = Integer.parseInt(fields[2]) + 1900;
String jobTitle = "";
long[] groupIds = {};
long[] organizationIds = {};
long[] roleIds = {aRole.getRoleId(), anotherRole.getRoleId()};
long[] userGroupIds = {};
boolean sendEmail = false;
ServiceContext serviceContext = new ServiceContext();
// Creo l'utente sul Liferay remoto
service.addUser(companyId, autoPassword, password1, password2, autoScreenName,
screenName, emailAddress, openId, locale, firstName, middleName, lastName,
prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, jobTitle,
groupIds, organizationIds, roleIds, userGroupIds, sendEmail, serviceContext);
System.out.println("Creato user -->" + screenName + "<--");
}
}
Se tutto va come deve, l'utente sarà creato sul Liferay remoto.
Ora non vi resta che prendere un utente a campione e verificare che tutto sia andato come previsto! :)