package com.github.nyrkovalex.ironadmin.core.pages; import com.github.nyrkovalex.ironadmin.core.EntityProvider; import java.util.Arrays; public abstract class AbstractPageBuilder<T> implements PageBuilder<T> { private final Class<T> entityClass; private final EntityMeta.Builder entityMetaBuilder; private PageMapping url; private EntityProvider<T> entityProvider; protected AbstractPageBuilder(Class<T> entityClass) { this.entityClass = entityClass; this.entityMetaBuilder = EntityMeta.of(entityClass); this.url = PageMapping.of(entityClass); } @Override public AbstractPageBuilder<T> titled(String title) { entityMetaBuilder.title(title); return this; } @Override public AbstractPageBuilder<T> putAt(String url) { this.url = PageMapping.of(url); return this; } @Override public AbstractPageBuilder<T> override(PropertyDefinition... overrides) { entityMetaBuilder.overrides(Arrays.asList(overrides)); return this; } @Override public AbstractPageBuilder<T> backedBy(EntityProvider<T> entityProvider) { this.entityProvider = entityProvider; return this; } @Override public PageBuilder<T> skip(String... propertyNames) { entityMetaBuilder.skips(Arrays.asList(propertyNames)); return this; } protected Class<T> entityClass() { return entityClass; } protected EntityMeta entityMeta() { return entityMetaBuilder.build(); } protected PageMapping url() { return url; } protected EntityProvider<T> entityProvider() { return entityProvider; } }