001/*
002 * Copyright (C) 2012 Facebook, Inc.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may
005 * not use this file except in compliance with the License. You may obtain
006 * 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, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations
014 * under the License.
015 */
016package com.facebook.swift.codec.metadata;
017
018import com.facebook.swift.codec.ThriftEnum;
019
020import javax.annotation.concurrent.NotThreadSafe;
021
022@NotThreadSafe
023public class ThriftEnumMetadataBuilder<T extends Enum<T>>
024{
025    private final Class<T> enumClass;
026    private final String enumName;
027
028    public ThriftEnumMetadataBuilder(Class<T> enumClass)
029    {
030        this.enumClass = enumClass;
031        this.enumName = extractEnumName(enumClass);
032    }
033
034    public ThriftEnumMetadata<T> build()
035    {
036        return new ThriftEnumMetadata<>(enumName, enumClass);
037    }
038
039    private String extractEnumName(Class<T> enumClass)
040    {
041        ThriftEnum annotation = enumClass.getAnnotation(ThriftEnum.class);
042        if (annotation == null) {
043            return enumClass.getSimpleName();
044        }
045        else if (!annotation.value().isEmpty()) {
046            return annotation.value();
047        }
048        else {
049            return enumClass.getSimpleName();
050        }
051    }
052}