001package com.plivo.api.models.node;
002
003import com.fasterxml.jackson.annotation.JsonIgnore;
004import com.plivo.api.Plivo;
005import com.plivo.api.PlivoClient;
006import com.plivo.api.models.base.Updater;
007import retrofit2.Call;
008
009public class MultiPartyCallUpdater extends Updater<MultiPartyCallUpdateResponse> {
010
011  private String phloId;
012  private String triggerSource;
013  private String to;
014  private String role;
015  private MultiPartyCallActionType action;
016  private NodeType nodeType;
017  private MultiPartyCallUpdatePayload multiPartyCallUpdatePayload;
018  private String member = null;
019
020
021  public MultiPartyCallUpdater(String phloId, String id) {
022    super(id);
023    this.phloId = phloId;
024    this.nodeType = NodeType.MULTI_PARTY_CALL;
025  }
026
027  @JsonIgnore
028  protected PlivoClient plivoClient = Plivo.getPhloClient();
029
030  @Override
031  public PlivoClient client() {
032    return this.plivoClient;
033  }
034
035  public String triggerSource() {
036    return this.triggerSource;
037  }
038
039  public String to() {
040    return this.to;
041  }
042
043  public String role() {
044    return this.role;
045  }
046
047  public MultiPartyCallActionType action() {
048    return this.action;
049  }
050
051  public String member() {
052    return this.member;
053  }
054
055  public MultiPartyCallUpdater triggerSource(final String triggerSource) {
056    this.triggerSource = triggerSource;
057    return this;
058  }
059
060  public MultiPartyCallUpdater to(final String to) {
061    this.to = to;
062    return this;
063  }
064
065  public MultiPartyCallUpdater role(final String role) {
066    this.role = role;
067    return this;
068  }
069
070  public MultiPartyCallUpdater action(final MultiPartyCallActionType action) {
071    this.action = action;
072    return this;
073  }
074
075  public MultiPartyCallUpdater call() {
076    this.action = MultiPartyCallActionType.CALL;
077    return this;
078  }
079
080  public MultiPartyCallUpdater hold() {
081    this.action = MultiPartyCallActionType.HOLD;
082    return this;
083  }
084
085  public MultiPartyCallUpdater unhold() {
086    this.action = MultiPartyCallActionType.UNHOLD;
087    return this;
088  }
089
090  public MultiPartyCallUpdater cold_transfer() {
091    this.action = MultiPartyCallActionType.COLD_TRANSFER;
092    return this;
093  }
094
095  public MultiPartyCallUpdater warm_transfer() {
096    this.action = MultiPartyCallActionType.WARM_TRANSFER;
097    return this;
098  }
099
100  public MultiPartyCallUpdater hangup() {
101    this.action = MultiPartyCallActionType.HANGUP;
102    return this;
103  }
104
105  public MultiPartyCallUpdater resume_call() {
106    this.action = MultiPartyCallActionType.RESUME_CALL;
107    return this;
108  }
109
110  public MultiPartyCallUpdater abort_transfer() {
111    this.action = MultiPartyCallActionType.ABORT_TRANSFER;
112    return this;
113  }
114
115  public MultiPartyCallUpdater abort_warm_transfer() {
116    this.action = MultiPartyCallActionType.ABORT_TRANSFER;
117    return this;
118  }
119
120  public MultiPartyCallUpdater abort_cold_transfer() {
121    this.action = MultiPartyCallActionType.ABORT_TRANSFER;
122    return this;
123  }
124
125  public MultiPartyCallUpdater voicemail_drop() {
126    this.action = MultiPartyCallActionType.VOICEMAIL_DROP;
127    return this;
128  }
129
130  public MultiPartyCallUpdater member(final String member) {
131    this.member = member;
132    return this;
133  }
134
135  @Override
136  protected Call<MultiPartyCallUpdateResponse> obtainCall() {
137    this.multiPartyCallUpdatePayload = new MultiPartyCallUpdatePayload(this.triggerSource,
138      this.to, this.role, this.action);
139    if (this.member == null){
140      return client().getApiService()
141        .nodeAction(phloId, this.nodeType, this.id, this.multiPartyCallUpdatePayload);
142    }
143    else{
144      return client().getApiService()
145        .memberAction(phloId, this.nodeType, this.id, this.member, this.multiPartyCallUpdatePayload);
146    }
147
148  }
149}