001/* 002 * Copyright 2017-2022 Product Mog LLC, 2022-2026 Revetware LLC. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package com.lokalized; 018 019import org.jspecify.annotations.NonNull; 020 021import java.util.Arrays; 022import java.util.Collections; 023import java.util.Map; 024import java.util.stream.Collectors; 025 026/** 027 * Generic classifier categories for languages that require measure words or counters. 028 * <p> 029 * This enum is intentionally non-exhaustive. It captures common cross-language semantic buckets used by classifier 030 * systems while remaining small enough to be practical in application code. 031 * 032 * @author <a href="https://revetkn.com">Mark Allen</a> 033 * @since 2.1.0 034 */ 035public enum Classifier implements LanguageForm { 036 /** 037 * General-purpose classifier. 038 */ 039 GENERAL, 040 /** 041 * People or human referents. 042 */ 043 PERSON, 044 /** 045 * Animals or living creatures. 046 */ 047 ANIMAL, 048 /** 049 * Long, thin, or cylindrical objects. 050 */ 051 LONG_THIN, 052 /** 053 * Flat, thin, or sheet-like objects. 054 */ 055 FLAT, 056 /** 057 * Bound volumes such as books or magazines. 058 */ 059 BOUND, 060 /** 061 * Machines, devices, or large pieces of equipment. 062 */ 063 MACHINE, 064 /** 065 * Vehicles. 066 */ 067 VEHICLE; 068 069 @NonNull 070 private static final Map<@NonNull String, @NonNull Classifier> CLASSIFIERS_BY_NAME; 071 072 static { 073 CLASSIFIERS_BY_NAME = Collections.unmodifiableMap(Arrays.stream( 074 Classifier.values()).collect(Collectors.toMap(classifier -> classifier.name(), classifier -> classifier))); 075 } 076 077 /** 078 * Gets the mapping of classifier names to classifier values. 079 * 080 * @return the mapping of classifier names to classifier values, not null 081 */ 082 @NonNull 083 static Map<@NonNull String, @NonNull Classifier> getClassifiersByName() { 084 return CLASSIFIERS_BY_NAME; 085 } 086}