Skip to content

Configuring user defined global entity representation

ikostenko edited this page Apr 18, 2013 · 2 revisions

It is possible to specify how entity items will be displayed in domain views of other entities that have persistent fields associated with this entity.

This is configured in the EntityMetadataConfigurationUnit of the entity administration, and affects all views of other entities where the persistent association field is used implicitly or explicitly.

There are two options to define custom entity representation:

  1. Specifying one of the entity fields:
@Administration( User.class )
public class UserAdministration {

	public static EntityMetadataConfigurationUnit configuration( EntityMetadataConfigurationUnitBuilder configurationBuilder ) {
		return configurationBuilder.nameField( "firstname" ).build();
	}
}

Given the following Discount Program entity administration...

@Administration(DiscountProgram.class)
public class DiscountProgramAdministration {

	public static FieldSetConfigurationUnit listView( FieldSetConfigurationUnitBuilder fragmentBuilder ) {
		return fragmentBuilder
				.field( "name" ).caption( "Name" )
				.field( "users" ).caption( "Customers" ).build();
	}

	public static FieldSetConfigurationUnit quickView( FieldSetConfigurationUnitBuilder fragmentBuilder ) {
		return fragmentBuilder
				.field( "name" ).caption( "Name" )
				.field( "users" ).caption( "Customers" ).build();
	}

	public static FieldSetConfigurationUnit showView( final FieldSetConfigurationUnitBuilder fragmentBuilder ) {
		return fragmentBuilder
				.field( "name" ).caption( "Name" )
				.field( "users" ).caption( "Customers" ).build();
	}

	public static FieldSetConfigurationUnit formView( final PersistentFieldSetConfigurationUnitBuilder fragmentBuilder ) {
		return fragmentBuilder
				.field( "name" ).caption( "Name" )
				.field( "users" ).caption( "Customers" ).build();
	}

	public static FiltersConfigurationUnit filters( final FiltersConfigurationUnitBuilder filterBuilder ) {
		return filterBuilder
				.filter( "Name", "name" )
				.filter( "Customers", "users" ).build();
	}
}

...this will result in the following display of User entity items associated with Discount Program items: NameField

  1. Specifying advanced entity representation using org.lightadmin.core.config.domain.configuration.support.EntityNameExtractor:
@Administration(User.class)
public class UserAdministration {

	public static EntityMetadataConfigurationUnit configuration( EntityMetadataConfigurationUnitBuilder configurationBuilder ) {
		return configurationBuilder.nameExtractor( userNameExtractor() ).build();
	}

	private static EntityNameExtractor<User> userNameExtractor() {
		return new EntityNameExtractor<User>() {
			@Override
			public String apply( final User user ) {
				return String.format("%s %s", user.getFirstname(), user.getLastname());
			}
		};
	}
}

This will produce the following result: EntityNameExtractor