001/*
002 * Copyright (c) 2011-2017 Nexmo Inc
003 *
004 * Permission is hereby granted, free of charge, to any person obtaining a copy
005 * of this software and associated documentation files (the "Software"), to deal
006 * in the Software without restriction, including without limitation the rights
007 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
008 * copies of the Software, and to permit persons to whom the Software is
009 * furnished to do so, subject to the following conditions:
010 *
011 * The above copyright notice and this permission notice shall be included in
012 * all copies or substantial portions of the Software.
013 *
014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
015 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
016 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
017 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
018 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
019 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
020 * THE SOFTWARE.
021 */
022package com.nexmo.client.voice;
023
024import com.fasterxml.jackson.annotation.JsonCreator;
025import com.fasterxml.jackson.annotation.JsonValue;
026
027import java.util.HashMap;
028import java.util.Map;
029
030/**
031 * Voice used to deliver text to a {@link Call} in a {@link TalkRequest}.
032 */
033
034public enum VoiceName {
035    ADITI("Aditi"),
036    AGNIESZKA("Agnieszka"),
037    ALVA("Alva"),
038    AMY("Amy"),
039    ASTRID("Astrid"),
040    BIANCA("Bianca"),
041    BRIAN("Brian"),
042    CARLA("Carla"),
043    CARMEN("Carmen"),
044    CARMIT("Carmit"),
045    CATARINA("Catarina"),
046    CELINE("Celine"),
047    CEM("Cem"),
048    CHANTAL("Chantal"),
049    CHIPMUNK("Chipmunk"),
050    CONCHITA("Conchita"),
051    CRISTIANO("Cristiano"),
052    DAMAYANTI("Damayanti"),
053    EMPAR("Empar"),
054    DORA("Dora"),
055    EMMA("Emma"),
056    ENRIQUE("Enrique"),
057    ERIC("Eric"),
058    EWA("Ewa"),
059    FELIPE("Felipe"),
060    FILIZ("Filiz"),
061    GERAINT("Geraint"),
062    GIORGIO("Giorgio"),
063    GWYNETH("Gwyneth"),
064    HANS("Hans"),
065    HENRIK("Henrik"),
066    INES("Ines"),
067    IOANA("Ioana"),
068    IVETA("Iveta"),
069    IVY("Ivy"),
070    JACEK("Jacek"),
071    JAN("Jan"),
072    JENNIFER("Jennifer"),
073    JOANA("Joana"),
074    JOEY("Joey"),
075    JORDI("Jordi"),
076    JUSTIN("Justin"),
077    KANYA("Kanya"),
078    KARL("Karl"),
079    KENDRA("Kendra"),
080    KIMBERLY("Kimberly"),
081    LAILA("Laila"),
082    LAURA("Laura"),
083    LEA("Lea"),
084    LEKHA("Lekha"),
085    LIV("Liv"),
086    LOTTE("Lotte"),
087    LUCIA("Lucia"),
088    LUCIANA("Luciana"),
089    MADS("Mads"),
090    MAGED("Maged"),
091    MAJA("Maja"),
092    MARISKA("Mariska"),
093    MARLENE("Marlene"),
094    MATHIEU("Mathieu"),
095    MATTHEW("Matthew"),
096    MAXIM("Maxim"),
097    MEI_JIA("Mei-Jia"),
098    MELINA("Melina"),
099    MIA("Mia"),
100    MIGUEL("Miguel"),
101    MIREN("Miren"),
102    MIZUKI("Mizuki"),
103    MONTSERRAT("Montserrat"),
104    NAJA("Naja"),
105    NICOLE("Nicole"),
106    NIKOS("Nikos"),
107    NORA("Nora"),
108    OSKAR("Oskar"),
109    PENELOPE("Penelope"),
110    RAVEENA("Raveena"),
111    RICARDO("Ricardo"),
112    RUBEN("Ruben"),
113    RUSSELL("Russell"),
114    SALLI("Salli"),
115    SATU("Satu"),
116    SEOYEON("Seoyeon"),
117    SIN_JI("Sin-Ji"),
118    SORA("Sora"),
119    TAKUMI("Takumi"),
120    TARIK("Tarik"),
121    TATYANA("Tatyana"),
122    TESSA("Tessa"),
123    TIAN_TIAN("Tian-Tian"),
124    VICKI("Vicki"),
125    VITORIA("Vitoria"),
126    YELDA("Yelda"),
127    ZEINA("Zeina"),
128    ZHIYU("Zhiyu"),
129    ZUZANA("Zuzana"),
130    UNKNOWN("Unknown");
131
132    private static final Map<String, VoiceName> voiceNameIndex = new HashMap<>();
133
134    static {
135        for (VoiceName voiceName : VoiceName.values()) {
136            voiceNameIndex.put(voiceName.name(), voiceName);
137        }
138    }
139
140    private String displayName;
141
142    VoiceName(String displayName) {
143        this.displayName = displayName;
144    }
145
146    @Override
147    public String toString() {
148        return displayName;
149    }
150
151    @JsonCreator
152    public static VoiceName fromString(String name) {
153        VoiceName foundVoiceName = voiceNameIndex.get(name.toUpperCase());
154        return (foundVoiceName != null) ? foundVoiceName : UNKNOWN;
155    }
156
157    @JsonValue
158    public String getDisplayName() {
159        return displayName;
160    }
161}