001package com.box.sdkgen.schemas.event; 002 003import com.box.sdkgen.internal.NullableFieldTracker; 004import com.box.sdkgen.internal.SerializableObject; 005import com.box.sdkgen.internal.utils.DateTimeUtils; 006import com.box.sdkgen.schemas.appitemeventsource.AppItemEventSource; 007import com.box.sdkgen.schemas.eventsource.EventSource; 008import com.box.sdkgen.schemas.eventsourceresource.EventSourceResource; 009import com.box.sdkgen.schemas.file.File; 010import com.box.sdkgen.schemas.folder.Folder; 011import com.box.sdkgen.schemas.user.User; 012import com.box.sdkgen.schemas.usermini.UserMini; 013import com.box.sdkgen.serialization.json.EnumWrapper; 014import com.fasterxml.jackson.annotation.JsonFilter; 015import com.fasterxml.jackson.annotation.JsonProperty; 016import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 017import com.fasterxml.jackson.databind.annotation.JsonSerialize; 018import java.time.OffsetDateTime; 019import java.util.Map; 020import java.util.Objects; 021 022/** The description of an event that happened within Box. */ 023@JsonFilter("nullablePropertyFilter") 024public class Event extends SerializableObject { 025 026 /** The value will always be `event`. */ 027 protected String type; 028 029 /** When the event object was created. */ 030 @JsonProperty("created_at") 031 @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class) 032 @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class) 033 protected OffsetDateTime createdAt; 034 035 /** When the event object was recorded in database. */ 036 @JsonProperty("recorded_at") 037 @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class) 038 @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class) 039 protected OffsetDateTime recordedAt; 040 041 /** The ID of the event object. You can use this to detect duplicate events. */ 042 @JsonProperty("event_id") 043 protected String eventId; 044 045 @JsonProperty("created_by") 046 protected UserMini createdBy; 047 048 @JsonDeserialize(using = EventEventTypeField.EventEventTypeFieldDeserializer.class) 049 @JsonSerialize(using = EventEventTypeField.EventEventTypeFieldSerializer.class) 050 @JsonProperty("event_type") 051 protected EnumWrapper<EventEventTypeField> eventType; 052 053 /** 054 * The session of the user that performed the action. Not all events will populate this attribute. 055 */ 056 @JsonProperty("session_id") 057 protected String sessionId; 058 059 protected EventSourceResource source; 060 061 /** 062 * This object provides additional information about the event if available. 063 * 064 * <p>This can include how a user performed an event as well as additional information to 065 * correlate an event to external KeySafe logs. Not all events have an `additional_details` 066 * object. This object is only available in the Enterprise Events. 067 */ 068 @JsonProperty("additional_details") 069 protected Map<String, Object> additionalDetails; 070 071 public Event() { 072 super(); 073 } 074 075 protected Event(Builder builder) { 076 super(); 077 this.type = builder.type; 078 this.createdAt = builder.createdAt; 079 this.recordedAt = builder.recordedAt; 080 this.eventId = builder.eventId; 081 this.createdBy = builder.createdBy; 082 this.eventType = builder.eventType; 083 this.sessionId = builder.sessionId; 084 this.source = builder.source; 085 this.additionalDetails = builder.additionalDetails; 086 markNullableFieldsAsSet(builder.getExplicitlySetNullableFields()); 087 } 088 089 public String getType() { 090 return type; 091 } 092 093 public OffsetDateTime getCreatedAt() { 094 return createdAt; 095 } 096 097 public OffsetDateTime getRecordedAt() { 098 return recordedAt; 099 } 100 101 public String getEventId() { 102 return eventId; 103 } 104 105 public UserMini getCreatedBy() { 106 return createdBy; 107 } 108 109 public EnumWrapper<EventEventTypeField> getEventType() { 110 return eventType; 111 } 112 113 public String getSessionId() { 114 return sessionId; 115 } 116 117 public EventSourceResource getSource() { 118 return source; 119 } 120 121 public Map<String, Object> getAdditionalDetails() { 122 return additionalDetails; 123 } 124 125 @Override 126 public boolean equals(Object o) { 127 if (this == o) { 128 return true; 129 } 130 if (o == null || getClass() != o.getClass()) { 131 return false; 132 } 133 Event casted = (Event) o; 134 return Objects.equals(type, casted.type) 135 && Objects.equals(createdAt, casted.createdAt) 136 && Objects.equals(recordedAt, casted.recordedAt) 137 && Objects.equals(eventId, casted.eventId) 138 && Objects.equals(createdBy, casted.createdBy) 139 && Objects.equals(eventType, casted.eventType) 140 && Objects.equals(sessionId, casted.sessionId) 141 && Objects.equals(source, casted.source) 142 && Objects.equals(additionalDetails, casted.additionalDetails); 143 } 144 145 @Override 146 public int hashCode() { 147 return Objects.hash( 148 type, 149 createdAt, 150 recordedAt, 151 eventId, 152 createdBy, 153 eventType, 154 sessionId, 155 source, 156 additionalDetails); 157 } 158 159 @Override 160 public String toString() { 161 return "Event{" 162 + "type='" 163 + type 164 + '\'' 165 + ", " 166 + "createdAt='" 167 + createdAt 168 + '\'' 169 + ", " 170 + "recordedAt='" 171 + recordedAt 172 + '\'' 173 + ", " 174 + "eventId='" 175 + eventId 176 + '\'' 177 + ", " 178 + "createdBy='" 179 + createdBy 180 + '\'' 181 + ", " 182 + "eventType='" 183 + eventType 184 + '\'' 185 + ", " 186 + "sessionId='" 187 + sessionId 188 + '\'' 189 + ", " 190 + "source='" 191 + source 192 + '\'' 193 + ", " 194 + "additionalDetails='" 195 + additionalDetails 196 + '\'' 197 + "}"; 198 } 199 200 public static class Builder extends NullableFieldTracker { 201 202 protected String type; 203 204 protected OffsetDateTime createdAt; 205 206 protected OffsetDateTime recordedAt; 207 208 protected String eventId; 209 210 protected UserMini createdBy; 211 212 protected EnumWrapper<EventEventTypeField> eventType; 213 214 protected String sessionId; 215 216 protected EventSourceResource source; 217 218 protected Map<String, Object> additionalDetails; 219 220 public Builder type(String type) { 221 this.type = type; 222 return this; 223 } 224 225 public Builder createdAt(OffsetDateTime createdAt) { 226 this.createdAt = createdAt; 227 return this; 228 } 229 230 public Builder recordedAt(OffsetDateTime recordedAt) { 231 this.recordedAt = recordedAt; 232 return this; 233 } 234 235 public Builder eventId(String eventId) { 236 this.eventId = eventId; 237 return this; 238 } 239 240 public Builder createdBy(UserMini createdBy) { 241 this.createdBy = createdBy; 242 return this; 243 } 244 245 public Builder eventType(EventEventTypeField eventType) { 246 this.eventType = new EnumWrapper<EventEventTypeField>(eventType); 247 return this; 248 } 249 250 public Builder eventType(EnumWrapper<EventEventTypeField> eventType) { 251 this.eventType = eventType; 252 return this; 253 } 254 255 public Builder sessionId(String sessionId) { 256 this.sessionId = sessionId; 257 return this; 258 } 259 260 public Builder source(User source) { 261 this.source = new EventSourceResource(source); 262 return this; 263 } 264 265 public Builder source(EventSource source) { 266 this.source = new EventSourceResource(source); 267 return this; 268 } 269 270 public Builder source(File source) { 271 this.source = new EventSourceResource(source); 272 return this; 273 } 274 275 public Builder source(Folder source) { 276 this.source = new EventSourceResource(source); 277 return this; 278 } 279 280 public Builder source(Map<String, Object> source) { 281 this.source = new EventSourceResource(source); 282 return this; 283 } 284 285 public Builder source(AppItemEventSource source) { 286 this.source = new EventSourceResource(source); 287 return this; 288 } 289 290 public Builder source(EventSourceResource source) { 291 this.source = source; 292 return this; 293 } 294 295 public Builder additionalDetails(Map<String, Object> additionalDetails) { 296 this.additionalDetails = additionalDetails; 297 return this; 298 } 299 300 public Event build() { 301 return new Event(this); 302 } 303 } 304}