001/* 002 * Copyright (c) 2013 Nu Echo Inc. All rights reserved. 003 */ 004package com.nuecho.rivr.voicexml.turn.input; 005 006import static java.util.Collections.*; 007 008import java.util.*; 009 010import javax.json.*; 011 012import com.nuecho.rivr.core.channel.*; 013import com.nuecho.rivr.core.util.*; 014import com.nuecho.rivr.voicexml.servlet.*; 015import com.nuecho.rivr.voicexml.util.json.*; 016 017/** 018 * The result of an interaction with the platform, it may contains one or many 019 * of the following: a recognition result, a recording, VoiceXml events, a 020 * transfer status, a script result, uploaded files. 021 * 022 * @author Nu Echo Inc. 023 * @see RecognitionInfo 024 * @see RecordingInfo 025 * @see TransferStatusInfo 026 * @see VoiceXmlEvent 027 * @see FileUpload 028 */ 029public final class VoiceXmlInputTurn implements InputTurn, JsonSerializable { 030 031 private static final String TRANSFER_RESULT_PROPERTY = "transferResult"; 032 private static final String RECORDING_INFO_PROPERTY = "recordingInfo"; 033 private static final String RECOGNITION_INFO_PROPERTY = "recognitionInfo"; 034 private static final String EVENTS_PROPERTY = "events"; 035 private static final String VALUE_PROPERTY = "value"; 036 037 private List<VoiceXmlEvent> mEvents = emptyList(); 038 private JsonValue mJsonValue; 039 private RecognitionInfo mRecognitionInfo; 040 private RecordingInfo mRecordingInfo; 041 private TransferStatusInfo mTransferResult; 042 private Map<String, FileUpload> mFiles; 043 044 public List<VoiceXmlEvent> getEvents() { 045 return Collections.unmodifiableList(mEvents); 046 } 047 048 public JsonValue getJsonValue() { 049 return mJsonValue; 050 } 051 052 public RecognitionInfo getRecognitionInfo() { 053 return mRecognitionInfo; 054 } 055 056 public RecordingInfo getRecordingInfo() { 057 return mRecordingInfo; 058 } 059 060 public TransferStatusInfo getTransferResult() { 061 return mTransferResult; 062 } 063 064 public void setEvents(List<VoiceXmlEvent> events) { 065 Assert.notNull(events, "events"); 066 mEvents = new ArrayList<VoiceXmlEvent>(events); 067 } 068 069 public void setJsonValue(JsonValue jsonValue) { 070 mJsonValue = jsonValue; 071 } 072 073 public void setRecognitionInfo(RecognitionInfo recognitionInfo) { 074 mRecognitionInfo = recognitionInfo; 075 } 076 077 public void setRecordingInfo(RecordingInfo recordingInfo) { 078 mRecordingInfo = recordingInfo; 079 } 080 081 public void setTransferResult(TransferStatusInfo transferResult) { 082 mTransferResult = transferResult; 083 } 084 085 public void setFiles(Map<String, FileUpload> files) { 086 mFiles = new HashMap<String, FileUpload>(files); 087 } 088 089 public Map<String, FileUpload> getFiles() { 090 return unmodifiableMap(mFiles); 091 } 092 093 @Override 094 public String toString() { 095 return asJson().toString(); 096 } 097 098 @Override 099 public JsonValue asJson() { 100 JsonObjectBuilder builder = JsonUtils.createObjectBuilder(); 101 JsonUtils.add(builder, VALUE_PROPERTY, mJsonValue); 102 JsonUtils.add(builder, EVENTS_PROPERTY, JsonUtils.toJson(mEvents)); 103 JsonUtils.add(builder, RECOGNITION_INFO_PROPERTY, mRecognitionInfo); 104 JsonUtils.add(builder, RECORDING_INFO_PROPERTY, mRecordingInfo); 105 JsonUtils.add(builder, TRANSFER_RESULT_PROPERTY, mTransferResult); 106 return builder.build(); 107 } 108 109 @Override 110 public int hashCode() { 111 final int prime = 31; 112 int result = 1; 113 result = prime * result + ((mEvents == null) ? 0 : mEvents.hashCode()); 114 result = prime * result + ((mFiles == null) ? 0 : mFiles.hashCode()); 115 result = prime * result + ((mJsonValue == null) ? 0 : mJsonValue.hashCode()); 116 result = prime * result + ((mRecognitionInfo == null) ? 0 : mRecognitionInfo.hashCode()); 117 result = prime * result + ((mRecordingInfo == null) ? 0 : mRecordingInfo.hashCode()); 118 result = prime * result + ((mTransferResult == null) ? 0 : mTransferResult.hashCode()); 119 return result; 120 } 121 122 @Override 123 public boolean equals(Object obj) { 124 if (this == obj) return true; 125 if (obj == null) return false; 126 if (getClass() != obj.getClass()) return false; 127 VoiceXmlInputTurn other = (VoiceXmlInputTurn) obj; 128 if (mEvents == null) { 129 if (other.mEvents != null) return false; 130 } else if (!mEvents.equals(other.mEvents)) return false; 131 if (mFiles == null) { 132 if (other.mFiles != null) return false; 133 } else if (!mFiles.equals(other.mFiles)) return false; 134 if (mJsonValue == null) { 135 if (other.mJsonValue != null) return false; 136 } else if (!mJsonValue.equals(other.mJsonValue)) return false; 137 if (mRecognitionInfo == null) { 138 if (other.mRecognitionInfo != null) return false; 139 } else if (!mRecognitionInfo.equals(other.mRecognitionInfo)) return false; 140 if (mRecordingInfo == null) { 141 if (other.mRecordingInfo != null) return false; 142 } else if (!mRecordingInfo.equals(other.mRecordingInfo)) return false; 143 if (mTransferResult == null) { 144 if (other.mTransferResult != null) return false; 145 } else if (!mTransferResult.equals(other.mTransferResult)) return false; 146 return true; 147 } 148 149}