Configuración del entorno de desarrollo

Para configurar el entorno de desarrollo, debe crear un proyecto Java, como un proyecto Eclipse. La versión de Eclipse compatible es 3.2.1 o posterior.

La SPI del Rights Management requiere que el archivo edc-server-spi.jar se establezca en la ruta de clase del proyecto. Si no hace referencia a este archivo JAR, no puede utilizar el SPI de Rights Management en su proyecto Java. Este archivo JAR se instala con el SDK de AEM Forms en la carpeta [install directory]\Adobe\Adobe_Experience_Manager_forms\sdk\spi.

Además de agregar el archivo edc-server-spi.jar a la ruta de clase del proyecto, también debe agregar los archivos JAR necesarios para utilizar la API del servicio de Rights Management. Estos archivos son necesarios para utilizar la API del servicio de Rights Management dentro del controlador de usuarios externos de invitación.

Definición de la implementación del controlador de usuarios externos de invitación

Para desarrollar un controlador de usuarios externos de invitación, debe crear una clase Java que implemente la interfaz com.adobe.edc.server.spi.ersp.InvitedUserProvider. Esta clase contiene un método denominado invitedUser, que el servicio de Rights Management invoca cuando se envían direcciones de correo electrónico utilizando la página Agregar usuarios invitados a la que se puede acceder mediante la consola de administración.

El método invitedUser acepta una instancia de java.util.List, que contiene direcciones de correo electrónico con tipo de cadena enviadas desde la página Agregar usuarios invitados. El método invitedUser devuelve una matriz de objetos InvitedUserProviderResult, que generalmente es una asignación de direcciones de correo electrónico a objetos User (no devuelven null).

NOTA
Además de mostrar cómo crear un controlador de usuarios externos de invitación, esta sección también utiliza la API de AEM Forms.

La implementación del controlador de usuarios externos de invitación contiene un método definido por el usuario denominado createLocalPrincipalAccount. Este método acepta un valor de cadena que especifica una dirección de correo electrónico como valor de parámetro. El método createLocalPrincipalAccount supone la preexistencia de un dominio local denominado EDC_EXTERNAL_REGISTERED. Puede configurar este nombre de dominio para que sea lo que desee; sin embargo, para una aplicación de producción, puede que desee integrarlo con un dominio de empresa.

El método createUsers recorre en iteración todas las direcciones de correo electrónico y crea el objeto User correspondiente (un usuario local del dominio EDC_EXTERNAL_REGISTERED). Finalmente, se llama al método doEmails. Este método se deja intencionalmente como un código auxiliar en la muestra. En una implementación de producción, contendría la lógica de la aplicación para enviar mensajes de correo electrónico de invitación a los usuarios recién creados. Se deja en el ejemplo para mostrar el flujo lógico de una aplicación real.

Definición de la implementación del controlador de usuarios externos de invitación

La siguiente implementación del controlador de usuarios externos de invitación acepta direcciones de correo electrónico que se envían desde la página Agregar usuarios invitados a la que se puede acceder mediante la consola de administración.

package com.adobe.livecycle.samples.inviteexternalusers.provider;

import com.adobe.edc.server.spi.ersp.*;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;
import com.adobe.idp.um.api.*;
import com.adobe.idp.um.api.infomodel.*;
import com.adobe.idp.um.api.impl.UMBaseLibrary;
import com.adobe.livecycle.usermanager.client.DirectoryManagerServiceClient;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class InviteExternalUsersSample implements InvitedUserProvider
{
       private ServiceClientFactory _factory = null;

       private User createLocalPrincipalAccount(String email_address) throws Exception
       {
    String ret = null;

    //  Assume the local domain already exists!
    String domain = "EDC_EXTERNAL_REGISTERED";

    List aliases = new ArrayList();
    aliases.add( email_address );

    User local_user = UMBaseLibrary.createUser( email_address, domain, email_address );
    local_user.setCommonName( email_address );
    local_user.setEmail( email_address );
    local_user.setEmailAliases( aliases );

    //  You may wish to disable the local user until, for example, his registration is processed by a confirmation link
    //local_user.setDisabled( true );

    DirectoryManager directory_manager = new DirectoryManagerServiceClient( _factory );
    String ret_oid = directory_manager.createLocalUser( local_user, null );

    if( ret_oid == null )
    {
        throw new Exception( "FAILED TO CREATE PRINCIPAL FOR EMAIL ADDRESS: " + email_address );
    }

    return local_user;
       }

       protected User[] createUsers( List emails ) throws Exception
       {
    ArrayList ret_users = new ArrayList();

    _factory = ServiceClientFactory.createInstance();

    Iterator iter = emails.iterator();

    while( iter.hasNext() )
    {
        String current_email = (String)iter.next();

        ret_users.add( createLocalPrincipalAccount( current_email ) );
    }

    return (User[])ret_users.toArray( new User[0] );
       }

       protected void doInvitations(List emails)
       {
    //  Here you may choose to send the users who were created an invitation email
    //  This step is completely optional, depending on your requirements.
       }

       public InvitedUserProviderResult[] invitedUser(List emails)
       {
    //  This sample demonstrates the workflow for inviting a user via email

    try
    {

        User[] principals = createUsers(emails);

        InvitedUserProviderResult[] result = new InvitedUserProviderResult[principals.length];
        for( int i = 0; i < principals.length; i++ )
        {
        result[i] = new InvitedUserProviderResult();

        result[i].setEmail( (String)emails.get( i ) );
        result[i].setUser( principals[i] );
        }

        doInvitations(emails);

        System.out.println( "SUCCESSFULLY INVITED " + result.length + " USERS" );

        return result;

    }
    catch( Exception e )
    {
        System.out.println( "FAILED TO INVITE USERS FOR INVITE USERS SAMPLE" );
        e.printStackTrace();

        return new InvitedUserProviderResult[0];
    }
       }
}
NOTA
Esta clase Java se guarda como un archivo JAVA denominado InviteExternalUsersSample.java.