UNPKG

lib-utils-ts

Version:

<img src="https://img.shields.io/npm/v/lib-utils-ts"/> <img src="https://img.shields.io/snyk/vulnerabilities/npm/lib-utils-ts"/> <img src="https://img.shields.io/npm/l/lib-utils-ts"/> <img src="https://img.shields.io/github/languages/top/devGnode/lib-util

77 lines (73 loc) 2.4 kB
import {ClassNotFoundException} from "./Exception"; import {Objects} from "./type/Objects"; import {Optional} from "./utils/Optional"; import {Comparators} from "./Comparators"; import {AnnotationTarget} from "./annotation/Interfaces"; import {EnumBuilder} from "./annotation/EnumBuilder"; import {Field} from "./Reflect/Field"; /*** * @AbstractClassEnum */ export abstract class Enum{ /*** * */ private enum:string; /***/ private ordinalValue:number; /*** * @Enum<T> : create a new object */ public static set<T extends Enum>(annotation: AnnotationTarget<Field>, args:Object[]):T{ let o:Object = annotation.getReflector().getDeclaringConstructor().newInstance(...args); (<Enum>o).enum = annotation.getProperty(); (<Enum>o).ordinalValue = annotation.getReflector().getDeclaringConstructor().getEnumConstants().length; return <T>o; } /*** * @valueOf * @throws ClassNotFoundException */ public static valueOf<T extends Enum>(value:string):T{ let enumF:T[]; if( ( enumF = this.class<T>() .getEnumConstants() .filter(v=>v.name().equals(value)) ).length === 0 ) throw new ClassNotFoundException(`Enum.ValueOf : Unknown Enumeration '${value}', not definition.`); return enumF[0]; } /*** * */ public static values<T>():T[]{return this.class<T>().getEnumConstants();} /*** * */ public ordinal():number{return this.ordinalValue;} /*** * */ public name():string{ return this.enum; } /***/ public compareTo(enumeration:Enum):number{ return Comparators.naturalOrder.compare(this.ordinalValue,enumeration.ordinal()); } /*** * @override */ public equals(o:Object):boolean{ if(typeof o === "string") return this.enum.equals(String(o)); if(!( o instanceof Enum))return false; if(this==o) return true; return Objects.deepEquals(this,o) && this.enum === (<Enum>o).enum; } /*** * @override */ public toString():string{ return Optional.ofNullable(this.enum).orElse(Objects.toString(this)); } /*** * @decorationHandler * @args ... args: Object[] */ public static args<T extends Enum>( ...args:Object[] ):any{return EnumBuilder.enums(...args);} } Object.package(this);