package com.github.nyrkovalex.ironadmin.core.pages; import com.github.nyrkovalex.ironadmin.core.utils.IronContracts; import com.github.nyrkovalex.ironadmin.core.utils.IronStrings; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; public class EntityMeta { public static final String DEFAULT_ID_PROPERTY_NAME = "id"; private final String title; private final Collection<PropertyDefinition> overrides; private final Collection<String> skippedProperties; private final String idPropertyName; private EntityMeta(String title, Collection<PropertyDefinition> overrides, Collection<String> skippedProperties, String idPropertyName) { this.title = title; this.overrides = overrides; this.skippedProperties = skippedProperties; this.idPropertyName = idPropertyName; } public Collection<PropertyDefinition> getOverrides() { return overrides; } public Collection<String> getSkippedProperties() { return skippedProperties; } public String getTitle() { return title; } public String getIdPropertyName() { return idPropertyName; } public static Builder of(@NotNull Class<?> entityClass) { return new Builder(entityClass); } public static final class Builder { private String title; private Collection<PropertyDefinition> overrides; private Collection<String> skippedProperties; private String idPropertyName; public Builder(@NotNull Class<?> entityClass) { IronContracts.notNull(entityClass, "entity class"); this.title = IronStrings.camelCaseToSentence(entityClass.getSimpleName()); overrides = Collections.emptyList(); skippedProperties = Collections.emptyList(); idPropertyName = DEFAULT_ID_PROPERTY_NAME; } public Builder overrides(@NotNull Collection<PropertyDefinition> overrides) { IronContracts.notNull(overrides, "overrides"); this.overrides = new ArrayList<>(overrides); return this; } public Builder overrides(PropertyDefinition... overrides) { return overrides(Arrays.asList(overrides)); } public Builder skips(@NotNull Collection<String> skips) { IronContracts.notNull(skips, "skips"); this.skippedProperties = new ArrayList<>(skips); return this; } public Builder skips(String... skips) { return skips(Arrays.asList(skips)); } public Builder idPropertyName(String idPropertyName) { IronContracts.notNullOrEmpty(idPropertyName, "id property name"); this.idPropertyName = idPropertyName; return this; } public Builder title(String title) { IronContracts.notNullOrEmpty(title, "title"); this.title = title; return this; } public EntityMeta build() { return new EntityMeta(title, overrides, skippedProperties, idPropertyName); } } }