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    SALLI("Salli"),
036    JOEY("Joey"),
037    MATTHEW("Matthew"),
038    NAJA("Naja"),
039    MADS("Mads"),
040    MARLENE("Marlene"),
041    HANS("Hans"),
042    NICOLE("Nicole"),
043    RUSSELL("Russell"),
044    AMY("Amy"),
045    BRIAN("Brian"),
046    EMMA("Emma"),
047    GWYNETH("Gwyneth"),
048    GERAINT("Geraint"),
049    RAVEENA("Raveena"),
050    CHIPMUNK("Chipmunk"),
051    ERIC("Eric"),
052    IVY("Ivy"),
053    JENNIFER("Jennifer"),
054    JUSTIN("Justin"),
055    KENDRA("Kendra"),
056    KIMBERLY("Kimberly"),
057    CONCHITA("Conchita"),
058    ENRIQUE("Enrique"),
059    PENELOPE("Penelope"),
060    MIGUEL("Miguel"),
061    CHANTAL("Chantal"),
062    CELINE("Celine"),
063    MATHIEU("Mathieu"),
064    DORA("Dora"),
065    KARL("Karl"),
066    CARLA("Carla"),
067    GIORGIO("Giorgio"),
068    LIV("Liv"),
069    LOTTE("Lotte"),
070    RUBEN("Ruben"),
071    AGNIESZKA("Agnieszka"),
072    JACEK("Jacek"),
073    EWA("Ewa"),
074    JAN("Jan"),
075    MAJA("Maja"),
076    VITORIA("Vitoria"),
077    RICARDO("Ricardo"),
078    CRISTIANO("Cristiano"),
079    INES("Ines"),
080    CARMEN("Carmen"),
081    MAXIM("Maxim"),
082    TATYANA("Tatyana"),
083    ASTRID("Astrid"),
084    FILIZ("Filiz"),
085    MIZUKI("Mizuki"),
086    SEOYEON("Seoyeon"),
087    LAILA("Laila"),
088    MAGED("Maged"),
089    TARIK("Tarik"),
090    DAMAYANTI("Damayanti"),
091    MIREN("Miren"),
092    SIN_JI("Sin-Ji"),
093    JORDI("Jordi"),
094    MONTSERRAT("Montserrat"),
095    IVETA("Iveta"),
096    ZUZANA("Zuzana"),
097    TESSA("Tessa"),
098    SATU("Satu"),
099    MELINA("Melina"),
100    NIKOS("Nikos"),
101    CARMIT("Carmit"),
102    LEKHA("Lekha"),
103    MARISKA("Mariska"),
104    SORA("Sora"),
105    TIAN_TIAN("Tian-Tian"),
106    MEI_JIA("Mei-Jia"),
107    NORA("Nora"),
108    HENRIK("Henrik"),
109    LUCIANA("Luciana"),
110    FELIPE("Felipe"),
111    CATARINA("Catarina"),
112    JOANA("Joana"),
113    IOANA("Ioana"),
114    LAURA("Laura"),
115    ALVA("Alva"),
116    OSKAR("Oskar"),
117    KANYA("Kanya"),
118    CEM("Cem"),
119    YELDA("Yelda"),
120    EMPAR("Empar"),
121    UNKNOWN("Unknown");
122
123    private static final Map<String, VoiceName> voiceNameIndex = new HashMap<>();
124
125    static {
126        for (VoiceName voiceName : VoiceName.values()) {
127            voiceNameIndex.put(voiceName.name(), voiceName);
128        }
129    }
130
131    private String displayName;
132
133    VoiceName(String displayName) {
134        this.displayName = displayName;
135    }
136
137    @Override
138    public String toString() {
139        return displayName;
140    }
141
142    @JsonCreator
143    public static VoiceName fromString(String name) {
144        VoiceName foundVoiceName = voiceNameIndex.get(name.toUpperCase());
145        return (foundVoiceName != null) ? foundVoiceName : UNKNOWN;
146    }
147
148    @JsonValue
149    public String getDisplayName() {
150        return displayName;
151    }
152}