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}