
net.apexes.commons.lang.EnumeRegistry Maven / Gradle / Ivy
/*
* Copyright (c) 2018, apexes.net. All rights reserved.
*
* http://www.apexes.net
*
*/
package net.apexes.commons.lang;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author HeDYn
*/
public class EnumeRegistry {
private final Map>, EnumeInfo extends Enume>>> infos;
public EnumeRegistry(EnumeConfigure configure) {
infos = new HashMap<>();
EnumeConfigurator configurator = new EnumeConfigurator() {
@Override
public , E extends Enume> TableColumnRegister enume(Class enumeClass) {
Enume.verifyEnumeClass(enumeClass);
if (infos.containsKey(enumeClass)) {
throw new RuntimeException("The enume already registered! " + enumeClass);
}
EnumeInfo extends Enume>> info = new EnumeInfo<>(enumeClass);
infos.put(enumeClass, info);
return new TableColumnRegisterImpl(info);
}
};
configure.configure(configurator);
}
public Collection>> getEnumeClasses() {
return infos.keySet();
}
public Collection>> getEnumeInfos() {
return infos.values();
}
/**
*
*/
public interface EnumeConfigure {
void configure(EnumeConfigurator conf);
}
/**
*
*/
public interface EnumeConfigurator {
, E extends Enume> TableColumnRegister enume(Class enumeClass);
}
/**
*
*/
public interface ColumnRegister {
TableRegister column(String... columns);
}
/**
*
*/
public interface TableRegister {
ColumnRegister table(String table);
}
/**
*
*/
public interface TableColumnRegister extends ColumnRegister, TableRegister {
}
/**
*
*/
private static class TableColumnRegisterImpl implements TableColumnRegister {
private final EnumeInfo info;
private String table;
private TableColumnRegisterImpl(EnumeInfo info) {
this.info = info;
}
@Override
public ColumnRegister table(String table) {
this.table = table;
return this;
}
@Override
public TableRegister column(String... columns) {
info.tableColumns.add(new TableColumn(table, columns));
return this;
}
}
/**
*
*/
public static final class TableColumn {
private final String table;
private final List columns;
private TableColumn(String table, String... columns) {
this.table = table;
this.columns = Arrays.asList(columns);
}
public String getTable() {
return table;
}
public List getColumns() {
return columns;
}
}
/**
*
* @param
*/
public static final class EnumeInfo>> {
private final Class enumeClass;
private final List tableColumns;
private EnumeInfo(Class enumeClass) {
this.enumeClass = enumeClass;
this.tableColumns = new ArrayList<>();
}
public Class getEnumeClass() {
return enumeClass;
}
public List getTableColumns() {
return Collections.unmodifiableList(tableColumns);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy