package org.lightadmin.demo.config; import org.lightadmin.api.config.AdministrationConfiguration; import org.lightadmin.api.config.builder.*; import org.lightadmin.api.config.unit.EntityMetadataConfigurationUnit; import org.lightadmin.api.config.unit.FieldSetConfigurationUnit; import org.lightadmin.api.config.unit.FiltersConfigurationUnit; import org.lightadmin.api.config.unit.ScreenContextConfigurationUnit; import org.lightadmin.api.config.utils.EntityNameExtractor; import org.lightadmin.api.config.utils.FieldValueRenderer; import org.lightadmin.demo.model.LineItem; import org.lightadmin.demo.model.Order; import java.util.Set; import static com.google.common.collect.Sets.newLinkedHashSet; import static java.lang.String.format; import static org.springframework.util.StringUtils.collectionToDelimitedString; @SuppressWarnings("unused") public class OrderAdministration extends AdministrationConfiguration<Order> { public EntityMetadataConfigurationUnit configuration(EntityMetadataConfigurationUnitBuilder configurationBuilder) { return configurationBuilder .nameExtractor(orderNameExtractor()) .singularName("Order") .pluralName("Orders").build(); } public ScreenContextConfigurationUnit screenContext(ScreenContextConfigurationUnitBuilder screenContextBuilder) { return screenContextBuilder.screenName("Orders Administration").build(); } public FieldSetConfigurationUnit listView(FieldSetConfigurationUnitBuilder fragmentBuilder) { return fragmentBuilder .dynamic("customer.firstname").caption("Customer First Name") .dynamic("customer.lastname").caption("Customer Last Name") .field("billingAddress").caption("Billing Address") .field("shippingAddress").caption("Shipping Address") .renderable(lineItemsFieldValueRenderer()).caption("Order Items").build(); } public FieldSetConfigurationUnit showView(final FieldSetConfigurationUnitBuilder fragmentBuilder) { return fragmentBuilder .field("customer").caption("Customer") .field("billingAddress").caption("Billing Address") .field("shippingAddress").caption("Shipping Address") .renderable(lineItemsFieldValueRenderer()).caption("Order Items").build(); } public FieldSetConfigurationUnit quickView(final FieldSetConfigurationUnitBuilder fragmentBuilder) { return fragmentBuilder .field("customer").caption("Customer") .field("shippingAddress").caption("Shipping Address") .renderable(lineItemsFieldValueRenderer()).caption("Order Items").build(); } public FieldSetConfigurationUnit formView(final PersistentFieldSetConfigurationUnitBuilder fragmentBuilder) { return fragmentBuilder .field("customer").caption("Customer") .field("billingAddress").caption("Billing Address") .field("shippingAddress").caption("Shipping Address") .field("lineItems").caption("Order Items").build(); } public FiltersConfigurationUnit filters(final FiltersConfigurationUnitBuilder filterBuilder) { return filterBuilder .filter("Customer", "customer") .filter("Billing Address", "billingAddress") .filter("Shipping Address", "shippingAddress") .filter("Order items", "lineItems").build(); } private static EntityNameExtractor<Order> orderNameExtractor() { return new EntityNameExtractor<Order>() { @Override public String apply(final Order order) { return format("Order %s for $%d", order.getCustomer().getFirstname(), order.getTotal().intValue()); } }; } private static FieldValueRenderer<Order> lineItemsFieldValueRenderer() { return new FieldValueRenderer<Order>() { @Override public String apply(final Order order) { Set<String> lineItems = newLinkedHashSet(); for (LineItem lineItem : order.getLineItems()) { lineItems.add(format("Product %s in amount of %d", lineItem.getProduct().getName(), lineItem.getAmount())); } return collectionToDelimitedString(lineItems, ", "); } }; } }