001/*
002 *   Copyright 2020 Vonage
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 */
016package com.vonage.client.voice.ncco;
017
018import com.fasterxml.jackson.annotation.JsonInclude;
019
020/**
021 * Represents a phone endpoint used in a {@link ConnectAction}
022 */
023@JsonInclude(value = JsonInclude.Include.NON_NULL)
024public class PhoneEndpoint implements Endpoint {
025    private static final String TYPE = "phone";
026
027    private String number;
028    private String dtmfAnswer;
029    private OnAnswer onAnswer;
030
031    private PhoneEndpoint(Builder builder) {
032        this.number = builder.number;
033        this.dtmfAnswer = builder.dtmfAnswer;
034        this.onAnswer = (builder.onAnswerUrl != null) ? new OnAnswer(builder.onAnswerUrl, builder.onAnswerRingback) : null;
035    }
036
037    public String getType() {
038        return TYPE;
039    }
040
041    public String getNumber() {
042        return number;
043    }
044
045    public String getDtmfAnswer() {
046        return dtmfAnswer;
047    }
048
049    public OnAnswer getOnAnswer() {
050        return onAnswer;
051    }
052
053    public static Builder builder(String number) {
054        return new Builder(number);
055    }
056
057    public static class Builder {
058        private String number;
059        private String dtmfAnswer = null;
060        private String onAnswerUrl = null;
061        private String onAnswerRingback = null;
062
063        public Builder(String number) {
064            this.number = number;
065        }
066
067        public Builder number(String number) {
068            this.number = number;
069            return this;
070        }
071
072        public Builder dtmfAnswer(String dtmfAnswer) {
073            this.dtmfAnswer = dtmfAnswer;
074            return this;
075        }
076
077        public Builder onAnswer(String url) {
078            this.onAnswerUrl = url;
079            return this;
080        }
081
082        public Builder onAnswer(String url, String ringback) {
083            this.onAnswerUrl = url;
084            this.onAnswerRingback = ringback;
085            return this;
086        }
087
088        public PhoneEndpoint build() {
089            return new PhoneEndpoint(this);
090        }
091    }
092
093    @JsonInclude(value = JsonInclude.Include.NON_NULL)
094    private class OnAnswer {
095        private String url;
096        private String ringback;
097
098        private OnAnswer(String url) {
099            this.url = url;
100        }
101
102        private OnAnswer(String url, String ringback) {
103            this(url);
104            this.ringback = ringback;
105        }
106
107        public String getUrl() {
108            return this.url;
109        }
110
111        public String getRingback() {
112            return ringback;
113        }
114    }
115}