package pluginbase.config.properties; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.Map; public class PropertyAliases { @NotNull private static final Map<Class, PropertyAliases> classAliasMap = new HashMap<Class, PropertyAliases>(); private final Map<String, String[]> aliasMap = new HashMap<String, String[]>(); private static PropertyAliases getAliases(@NotNull Class clazz) { return classAliasMap.get(clazz); } private static PropertyAliases createAliases(@NotNull Class clazz) { PropertyAliases aliases = getAliases(clazz); if (aliases == null) { aliases = new PropertyAliases(); classAliasMap.put(clazz, aliases); } return aliases; } public static void createAlias(@NotNull Class clazz, @NotNull String alias, @NotNull String... propertyName) { PropertyAliases aliases = createAliases(clazz); aliases.createAlias(alias, propertyName); } @Nullable public static String[] getPropertyName(@NotNull Class clazz, @NotNull String alias) { PropertyAliases aliases = getAliases(clazz); if (aliases == null) { return null; } return aliases.getPropertyName(alias); } private PropertyAliases() { } private void createAlias(@NotNull String alias, @NotNull String... propertyName) { if (propertyName.length == 0) { throw new IllegalArgumentException("propertyName cannot be 0 length array."); } aliasMap.put(alias.toLowerCase(), propertyName); } private String[] getPropertyName(@NotNull String alias) { return aliasMap.get(alias.toLowerCase()); } }