All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.apexes.commons.lang.EnumeRegistry Maven / Gradle / Ivy

There is a newer version: 2.1.6
Show newest version
/*
 * 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>> 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> 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