package com.airlock.iam.application.webserver.infrastructure.logs;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.annotation.Nullable;
import lombok.NonNull;

@JsonInclude(Include.NON_NULL)
public class StructuredAccessLog {
   @JsonProperty("time")
   private String time;
   @JsonProperty("timestamp")
   private String timestamp;
   @JsonProperty("program")
   @NonNull
   private final String program;
   @JsonProperty("time_processing_millis")
   private long elapsedTimeMillis;
   @JsonProperty("time_first_byte_millis")
   private long firstByteTime;
   @JsonProperty("bytes_out")
   private long bytesSent;
   @JsonProperty("address_remote")
   private String remoteAddress;
   @JsonProperty("address_local")
   private String localAddress;
   @JsonProperty("address_peer")
   private String peerAddress;
   @JsonProperty("port_remote")
   private int remotePort;
   @JsonProperty("port_local")
   private int localPort;
   @JsonProperty("host")
   private String remoteHostName;
   @JsonProperty("protocol")
   private String requestProtocol;
   @JsonProperty("http_method")
   private String requestMethod;
   @JsonProperty("http_status")
   private int httpStatusCode;
   @JsonProperty("http_user_agent")
   private String userAgent;
   @JsonProperty("http_referrer")
   private String referrer;
   @JsonProperty("http_accept_lang")
   private String acceptLanguage;
   @JsonProperty("entry_path")
   private String requestPath;
   @JsonProperty("entry_query")
   private String queryString;
   @JsonProperty("sess_id")
   private String sessionId;
   @JsonProperty("user")
   private String remoteUser;
   @JsonProperty("server_local_name")
   private String localServerName;
   @JsonProperty("thread")
   private String threadName;
   @JsonProperty("connection_status")
   private String connectionStatus;
   @JsonProperty("label")
   @Nullable
   private String label;

   @SuppressFBWarnings(justification = "generated code")
   StructuredAccessLog(
      String time,
      String timestamp,
      @NonNull String program,
      long elapsedTimeMillis,
      long firstByteTime,
      long bytesSent,
      String remoteAddress,
      String localAddress,
      String peerAddress,
      int remotePort,
      int localPort,
      String remoteHostName,
      String requestProtocol,
      String requestMethod,
      int httpStatusCode,
      String userAgent,
      String referrer,
      String acceptLanguage,
      String requestPath,
      String queryString,
      String sessionId,
      String remoteUser,
      String localServerName,
      String threadName,
      String connectionStatus,
      @Nullable String label
   ) {
      if (program == null) {
         throw new NullPointerException("program is marked non-null but is null");
      }

      this.time = time;
      this.timestamp = timestamp;
      this.program = program;
      this.elapsedTimeMillis = elapsedTimeMillis;
      this.firstByteTime = firstByteTime;
      this.bytesSent = bytesSent;
      this.remoteAddress = remoteAddress;
      this.localAddress = localAddress;
      this.peerAddress = peerAddress;
      this.remotePort = remotePort;
      this.localPort = localPort;
      this.remoteHostName = remoteHostName;
      this.requestProtocol = requestProtocol;
      this.requestMethod = requestMethod;
      this.httpStatusCode = httpStatusCode;
      this.userAgent = userAgent;
      this.referrer = referrer;
      this.acceptLanguage = acceptLanguage;
      this.requestPath = requestPath;
      this.queryString = queryString;
      this.sessionId = sessionId;
      this.remoteUser = remoteUser;
      this.localServerName = localServerName;
      this.threadName = threadName;
      this.connectionStatus = connectionStatus;
      this.label = label;
   }

   @SuppressFBWarnings(justification = "generated code")
   public static StructuredAccessLog.StructuredAccessLogBuilder builder() {
      return new StructuredAccessLog.StructuredAccessLogBuilder();
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getTime() {
      return this.time;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getTimestamp() {
      return this.timestamp;
   }

   @NonNull
   @SuppressFBWarnings(justification = "generated code")
   public String getProgram() {
      return this.program;
   }

   @SuppressFBWarnings(justification = "generated code")
   public long getElapsedTimeMillis() {
      return this.elapsedTimeMillis;
   }

   @SuppressFBWarnings(justification = "generated code")
   public long getFirstByteTime() {
      return this.firstByteTime;
   }

   @SuppressFBWarnings(justification = "generated code")
   public long getBytesSent() {
      return this.bytesSent;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getRemoteAddress() {
      return this.remoteAddress;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getLocalAddress() {
      return this.localAddress;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getPeerAddress() {
      return this.peerAddress;
   }

   @SuppressFBWarnings(justification = "generated code")
   public int getRemotePort() {
      return this.remotePort;
   }

   @SuppressFBWarnings(justification = "generated code")
   public int getLocalPort() {
      return this.localPort;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getRemoteHostName() {
      return this.remoteHostName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getRequestProtocol() {
      return this.requestProtocol;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getRequestMethod() {
      return this.requestMethod;
   }

   @SuppressFBWarnings(justification = "generated code")
   public int getHttpStatusCode() {
      return this.httpStatusCode;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getUserAgent() {
      return this.userAgent;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getReferrer() {
      return this.referrer;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getAcceptLanguage() {
      return this.acceptLanguage;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getRequestPath() {
      return this.requestPath;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getQueryString() {
      return this.queryString;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getSessionId() {
      return this.sessionId;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getRemoteUser() {
      return this.remoteUser;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getLocalServerName() {
      return this.localServerName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getThreadName() {
      return this.threadName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public String getConnectionStatus() {
      return this.connectionStatus;
   }

   @Nullable
   @SuppressFBWarnings(justification = "generated code")
   public String getLabel() {
      return this.label;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setTime(String time) {
      this.time = time;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setTimestamp(String timestamp) {
      this.timestamp = timestamp;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setElapsedTimeMillis(long elapsedTimeMillis) {
      this.elapsedTimeMillis = elapsedTimeMillis;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setFirstByteTime(long firstByteTime) {
      this.firstByteTime = firstByteTime;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setBytesSent(long bytesSent) {
      this.bytesSent = bytesSent;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setRemoteAddress(String remoteAddress) {
      this.remoteAddress = remoteAddress;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setLocalAddress(String localAddress) {
      this.localAddress = localAddress;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setPeerAddress(String peerAddress) {
      this.peerAddress = peerAddress;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setRemotePort(int remotePort) {
      this.remotePort = remotePort;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setLocalPort(int localPort) {
      this.localPort = localPort;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setRemoteHostName(String remoteHostName) {
      this.remoteHostName = remoteHostName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setRequestProtocol(String requestProtocol) {
      this.requestProtocol = requestProtocol;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setRequestMethod(String requestMethod) {
      this.requestMethod = requestMethod;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setHttpStatusCode(int httpStatusCode) {
      this.httpStatusCode = httpStatusCode;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setUserAgent(String userAgent) {
      this.userAgent = userAgent;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setReferrer(String referrer) {
      this.referrer = referrer;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setAcceptLanguage(String acceptLanguage) {
      this.acceptLanguage = acceptLanguage;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setRequestPath(String requestPath) {
      this.requestPath = requestPath;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setQueryString(String queryString) {
      this.queryString = queryString;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setSessionId(String sessionId) {
      this.sessionId = sessionId;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setRemoteUser(String remoteUser) {
      this.remoteUser = remoteUser;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setLocalServerName(String localServerName) {
      this.localServerName = localServerName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setThreadName(String threadName) {
      this.threadName = threadName;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setConnectionStatus(String connectionStatus) {
      this.connectionStatus = connectionStatus;
   }

   @SuppressFBWarnings(justification = "generated code")
   public void setLabel(@Nullable String label) {
      this.label = label;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public boolean equals(Object o) {
      if (o == this) {
         return true;
      } else if (!(o instanceof StructuredAccessLog other)) {
         return false;
      } else {
         if (!other.canEqual(this)) {
            return false;
         }

         if (this.elapsedTimeMillis != other.elapsedTimeMillis) {
            return false;
         }

         if (this.firstByteTime != other.firstByteTime) {
            return false;
         }

         if (this.bytesSent != other.bytesSent) {
            return false;
         }

         if (this.remotePort != other.remotePort) {
            return false;
         }

         if (this.localPort != other.localPort) {
            return false;
         }

         if (this.httpStatusCode != other.httpStatusCode) {
            return false;
         }

         Object this$time = this.time;
         Object other$time = other.time;
         if (this$time == null ? other$time == null : this$time.equals(other$time)) {
            Object this$timestamp = this.timestamp;
            Object other$timestamp = other.timestamp;
            if (this$timestamp == null ? other$timestamp == null : this$timestamp.equals(other$timestamp)) {
               Object this$program = this.program;
               Object other$program = other.program;
               if (this$program == null ? other$program == null : this$program.equals(other$program)) {
                  Object this$remoteAddress = this.remoteAddress;
                  Object other$remoteAddress = other.remoteAddress;
                  if (this$remoteAddress == null ? other$remoteAddress == null : this$remoteAddress.equals(other$remoteAddress)) {
                     Object this$localAddress = this.localAddress;
                     Object other$localAddress = other.localAddress;
                     if (this$localAddress == null ? other$localAddress == null : this$localAddress.equals(other$localAddress)) {
                        Object this$peerAddress = this.peerAddress;
                        Object other$peerAddress = other.peerAddress;
                        if (this$peerAddress == null ? other$peerAddress == null : this$peerAddress.equals(other$peerAddress)) {
                           Object this$remoteHostName = this.remoteHostName;
                           Object other$remoteHostName = other.remoteHostName;
                           if (this$remoteHostName == null ? other$remoteHostName == null : this$remoteHostName.equals(other$remoteHostName)) {
                              Object this$requestProtocol = this.requestProtocol;
                              Object other$requestProtocol = other.requestProtocol;
                              if (this$requestProtocol == null ? other$requestProtocol == null : this$requestProtocol.equals(other$requestProtocol)) {
                                 Object this$requestMethod = this.requestMethod;
                                 Object other$requestMethod = other.requestMethod;
                                 if (this$requestMethod == null ? other$requestMethod == null : this$requestMethod.equals(other$requestMethod)) {
                                    Object this$userAgent = this.userAgent;
                                    Object other$userAgent = other.userAgent;
                                    if (this$userAgent == null ? other$userAgent == null : this$userAgent.equals(other$userAgent)) {
                                       Object this$referrer = this.referrer;
                                       Object other$referrer = other.referrer;
                                       if (this$referrer == null ? other$referrer == null : this$referrer.equals(other$referrer)) {
                                          Object this$acceptLanguage = this.acceptLanguage;
                                          Object other$acceptLanguage = other.acceptLanguage;
                                          if (this$acceptLanguage == null ? other$acceptLanguage == null : this$acceptLanguage.equals(other$acceptLanguage)) {
                                             Object this$requestPath = this.requestPath;
                                             Object other$requestPath = other.requestPath;
                                             if (this$requestPath == null ? other$requestPath == null : this$requestPath.equals(other$requestPath)) {
                                                Object this$queryString = this.queryString;
                                                Object other$queryString = other.queryString;
                                                if (this$queryString == null ? other$queryString == null : this$queryString.equals(other$queryString)) {
                                                   Object this$sessionId = this.sessionId;
                                                   Object other$sessionId = other.sessionId;
                                                   if (this$sessionId == null ? other$sessionId == null : this$sessionId.equals(other$sessionId)) {
                                                      Object this$remoteUser = this.remoteUser;
                                                      Object other$remoteUser = other.remoteUser;
                                                      if (this$remoteUser == null ? other$remoteUser == null : this$remoteUser.equals(other$remoteUser)) {
                                                         Object this$localServerName = this.localServerName;
                                                         Object other$localServerName = other.localServerName;
                                                         if (this$localServerName == null
                                                            ? other$localServerName == null
                                                            : this$localServerName.equals(other$localServerName)) {
                                                            Object this$threadName = this.threadName;
                                                            Object other$threadName = other.threadName;
                                                            if (this$threadName == null ? other$threadName == null : this$threadName.equals(other$threadName)) {
                                                               Object this$connectionStatus = this.connectionStatus;
                                                               Object other$connectionStatus = other.connectionStatus;
                                                               if (this$connectionStatus == null
                                                                  ? other$connectionStatus == null
                                                                  : this$connectionStatus.equals(other$connectionStatus)) {
                                                                  Object this$label = this.label;
                                                                  Object other$label = other.label;
                                                                  return this$label == null ? other$label == null : this$label.equals(other$label);
                                                               } else {
                                                                  return false;
                                                               }
                                                            } else {
                                                               return false;
                                                            }
                                                         } else {
                                                            return false;
                                                         }
                                                      } else {
                                                         return false;
                                                      }
                                                   } else {
                                                      return false;
                                                   }
                                                } else {
                                                   return false;
                                                }
                                             } else {
                                                return false;
                                             }
                                          } else {
                                             return false;
                                          }
                                       } else {
                                          return false;
                                       }
                                    } else {
                                       return false;
                                    }
                                 } else {
                                    return false;
                                 }
                              } else {
                                 return false;
                              }
                           } else {
                              return false;
                           }
                        } else {
                           return false;
                        }
                     } else {
                        return false;
                     }
                  } else {
                     return false;
                  }
               } else {
                  return false;
               }
            } else {
               return false;
            }
         } else {
            return false;
         }
      }
   }

   @SuppressFBWarnings(justification = "generated code")
   protected boolean canEqual(Object other) {
      return other instanceof StructuredAccessLog;
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public int hashCode() {
      int PRIME = 59;
      int result = 1;
      long $elapsedTimeMillis = this.elapsedTimeMillis;
      result = result * 59 + (int)($elapsedTimeMillis >>> 32 ^ $elapsedTimeMillis);
      long $firstByteTime = this.firstByteTime;
      result = result * 59 + (int)($firstByteTime >>> 32 ^ $firstByteTime);
      long $bytesSent = this.bytesSent;
      result = result * 59 + (int)($bytesSent >>> 32 ^ $bytesSent);
      result = result * 59 + this.remotePort;
      result = result * 59 + this.localPort;
      result = result * 59 + this.httpStatusCode;
      Object $time = this.time;
      result = result * 59 + ($time == null ? 43 : $time.hashCode());
      Object $timestamp = this.timestamp;
      result = result * 59 + ($timestamp == null ? 43 : $timestamp.hashCode());
      Object $program = this.program;
      result = result * 59 + ($program == null ? 43 : $program.hashCode());
      Object $remoteAddress = this.remoteAddress;
      result = result * 59 + ($remoteAddress == null ? 43 : $remoteAddress.hashCode());
      Object $localAddress = this.localAddress;
      result = result * 59 + ($localAddress == null ? 43 : $localAddress.hashCode());
      Object $peerAddress = this.peerAddress;
      result = result * 59 + ($peerAddress == null ? 43 : $peerAddress.hashCode());
      Object $remoteHostName = this.remoteHostName;
      result = result * 59 + ($remoteHostName == null ? 43 : $remoteHostName.hashCode());
      Object $requestProtocol = this.requestProtocol;
      result = result * 59 + ($requestProtocol == null ? 43 : $requestProtocol.hashCode());
      Object $requestMethod = this.requestMethod;
      result = result * 59 + ($requestMethod == null ? 43 : $requestMethod.hashCode());
      Object $userAgent = this.userAgent;
      result = result * 59 + ($userAgent == null ? 43 : $userAgent.hashCode());
      Object $referrer = this.referrer;
      result = result * 59 + ($referrer == null ? 43 : $referrer.hashCode());
      Object $acceptLanguage = this.acceptLanguage;
      result = result * 59 + ($acceptLanguage == null ? 43 : $acceptLanguage.hashCode());
      Object $requestPath = this.requestPath;
      result = result * 59 + ($requestPath == null ? 43 : $requestPath.hashCode());
      Object $queryString = this.queryString;
      result = result * 59 + ($queryString == null ? 43 : $queryString.hashCode());
      Object $sessionId = this.sessionId;
      result = result * 59 + ($sessionId == null ? 43 : $sessionId.hashCode());
      Object $remoteUser = this.remoteUser;
      result = result * 59 + ($remoteUser == null ? 43 : $remoteUser.hashCode());
      Object $localServerName = this.localServerName;
      result = result * 59 + ($localServerName == null ? 43 : $localServerName.hashCode());
      Object $threadName = this.threadName;
      result = result * 59 + ($threadName == null ? 43 : $threadName.hashCode());
      Object $connectionStatus = this.connectionStatus;
      result = result * 59 + ($connectionStatus == null ? 43 : $connectionStatus.hashCode());
      Object $label = this.label;
      return result * 59 + ($label == null ? 43 : $label.hashCode());
   }

   @SuppressFBWarnings(justification = "generated code")
   @Override
   public String toString() {
      return "StructuredAccessLog(time="
         + this.getTime()
         + ", timestamp="
         + this.getTimestamp()
         + ", program="
         + this.getProgram()
         + ", elapsedTimeMillis="
         + this.getElapsedTimeMillis()
         + ", firstByteTime="
         + this.getFirstByteTime()
         + ", bytesSent="
         + this.getBytesSent()
         + ", remoteAddress="
         + this.getRemoteAddress()
         + ", localAddress="
         + this.getLocalAddress()
         + ", peerAddress="
         + this.getPeerAddress()
         + ", remotePort="
         + this.getRemotePort()
         + ", localPort="
         + this.getLocalPort()
         + ", remoteHostName="
         + this.getRemoteHostName()
         + ", requestProtocol="
         + this.getRequestProtocol()
         + ", requestMethod="
         + this.getRequestMethod()
         + ", httpStatusCode="
         + this.getHttpStatusCode()
         + ", userAgent="
         + this.getUserAgent()
         + ", referrer="
         + this.getReferrer()
         + ", acceptLanguage="
         + this.getAcceptLanguage()
         + ", requestPath="
         + this.getRequestPath()
         + ", queryString="
         + this.getQueryString()
         + ", sessionId="
         + this.getSessionId()
         + ", remoteUser="
         + this.getRemoteUser()
         + ", localServerName="
         + this.getLocalServerName()
         + ", threadName="
         + this.getThreadName()
         + ", connectionStatus="
         + this.getConnectionStatus()
         + ", label="
         + this.getLabel()
         + ")";
   }

   @SuppressFBWarnings(justification = "generated code")
   public static class StructuredAccessLogBuilder {
      @SuppressFBWarnings(justification = "generated code")
      private String time;
      @SuppressFBWarnings(justification = "generated code")
      private String timestamp;
      @SuppressFBWarnings(justification = "generated code")
      private String program;
      @SuppressFBWarnings(justification = "generated code")
      private long elapsedTimeMillis;
      @SuppressFBWarnings(justification = "generated code")
      private long firstByteTime;
      @SuppressFBWarnings(justification = "generated code")
      private long bytesSent;
      @SuppressFBWarnings(justification = "generated code")
      private String remoteAddress;
      @SuppressFBWarnings(justification = "generated code")
      private String localAddress;
      @SuppressFBWarnings(justification = "generated code")
      private String peerAddress;
      @SuppressFBWarnings(justification = "generated code")
      private int remotePort;
      @SuppressFBWarnings(justification = "generated code")
      private int localPort;
      @SuppressFBWarnings(justification = "generated code")
      private String remoteHostName;
      @SuppressFBWarnings(justification = "generated code")
      private String requestProtocol;
      @SuppressFBWarnings(justification = "generated code")
      private String requestMethod;
      @SuppressFBWarnings(justification = "generated code")
      private int httpStatusCode;
      @SuppressFBWarnings(justification = "generated code")
      private String userAgent;
      @SuppressFBWarnings(justification = "generated code")
      private String referrer;
      @SuppressFBWarnings(justification = "generated code")
      private String acceptLanguage;
      @SuppressFBWarnings(justification = "generated code")
      private String requestPath;
      @SuppressFBWarnings(justification = "generated code")
      private String queryString;
      @SuppressFBWarnings(justification = "generated code")
      private String sessionId;
      @SuppressFBWarnings(justification = "generated code")
      private String remoteUser;
      @SuppressFBWarnings(justification = "generated code")
      private String localServerName;
      @SuppressFBWarnings(justification = "generated code")
      private String threadName;
      @SuppressFBWarnings(justification = "generated code")
      private String connectionStatus;
      @SuppressFBWarnings(justification = "generated code")
      private String label;

      @SuppressFBWarnings(justification = "generated code")
      StructuredAccessLogBuilder() {
      }

      @JsonProperty("time")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder time(String time) {
         this.time = time;
         return this;
      }

      @JsonProperty("timestamp")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder timestamp(String timestamp) {
         this.timestamp = timestamp;
         return this;
      }

      @JsonProperty("program")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder program(@NonNull String program) {
         if (program == null) {
            throw new NullPointerException("program is marked non-null but is null");
         }

         this.program = program;
         return this;
      }

      @JsonProperty("time_processing_millis")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder elapsedTimeMillis(long elapsedTimeMillis) {
         this.elapsedTimeMillis = elapsedTimeMillis;
         return this;
      }

      @JsonProperty("time_first_byte_millis")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder firstByteTime(long firstByteTime) {
         this.firstByteTime = firstByteTime;
         return this;
      }

      @JsonProperty("bytes_out")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder bytesSent(long bytesSent) {
         this.bytesSent = bytesSent;
         return this;
      }

      @JsonProperty("address_remote")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder remoteAddress(String remoteAddress) {
         this.remoteAddress = remoteAddress;
         return this;
      }

      @JsonProperty("address_local")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder localAddress(String localAddress) {
         this.localAddress = localAddress;
         return this;
      }

      @JsonProperty("address_peer")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder peerAddress(String peerAddress) {
         this.peerAddress = peerAddress;
         return this;
      }

      @JsonProperty("port_remote")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder remotePort(int remotePort) {
         this.remotePort = remotePort;
         return this;
      }

      @JsonProperty("port_local")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder localPort(int localPort) {
         this.localPort = localPort;
         return this;
      }

      @JsonProperty("host")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder remoteHostName(String remoteHostName) {
         this.remoteHostName = remoteHostName;
         return this;
      }

      @JsonProperty("protocol")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder requestProtocol(String requestProtocol) {
         this.requestProtocol = requestProtocol;
         return this;
      }

      @JsonProperty("http_method")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder requestMethod(String requestMethod) {
         this.requestMethod = requestMethod;
         return this;
      }

      @JsonProperty("http_status")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder httpStatusCode(int httpStatusCode) {
         this.httpStatusCode = httpStatusCode;
         return this;
      }

      @JsonProperty("http_user_agent")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder userAgent(String userAgent) {
         this.userAgent = userAgent;
         return this;
      }

      @JsonProperty("http_referrer")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder referrer(String referrer) {
         this.referrer = referrer;
         return this;
      }

      @JsonProperty("http_accept_lang")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder acceptLanguage(String acceptLanguage) {
         this.acceptLanguage = acceptLanguage;
         return this;
      }

      @JsonProperty("entry_path")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder requestPath(String requestPath) {
         this.requestPath = requestPath;
         return this;
      }

      @JsonProperty("entry_query")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder queryString(String queryString) {
         this.queryString = queryString;
         return this;
      }

      @JsonProperty("sess_id")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder sessionId(String sessionId) {
         this.sessionId = sessionId;
         return this;
      }

      @JsonProperty("user")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder remoteUser(String remoteUser) {
         this.remoteUser = remoteUser;
         return this;
      }

      @JsonProperty("server_local_name")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder localServerName(String localServerName) {
         this.localServerName = localServerName;
         return this;
      }

      @JsonProperty("thread")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder threadName(String threadName) {
         this.threadName = threadName;
         return this;
      }

      @JsonProperty("connection_status")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder connectionStatus(String connectionStatus) {
         this.connectionStatus = connectionStatus;
         return this;
      }

      @JsonProperty("label")
      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog.StructuredAccessLogBuilder label(@Nullable String label) {
         this.label = label;
         return this;
      }

      @SuppressFBWarnings(justification = "generated code")
      public StructuredAccessLog build() {
         return new StructuredAccessLog(
            this.time,
            this.timestamp,
            this.program,
            this.elapsedTimeMillis,
            this.firstByteTime,
            this.bytesSent,
            this.remoteAddress,
            this.localAddress,
            this.peerAddress,
            this.remotePort,
            this.localPort,
            this.remoteHostName,
            this.requestProtocol,
            this.requestMethod,
            this.httpStatusCode,
            this.userAgent,
            this.referrer,
            this.acceptLanguage,
            this.requestPath,
            this.queryString,
            this.sessionId,
            this.remoteUser,
            this.localServerName,
            this.threadName,
            this.connectionStatus,
            this.label
         );
      }

      @SuppressFBWarnings(justification = "generated code")
      @Override
      public String toString() {
         return "StructuredAccessLog.StructuredAccessLogBuilder(time="
            + this.time
            + ", timestamp="
            + this.timestamp
            + ", program="
            + this.program
            + ", elapsedTimeMillis="
            + this.elapsedTimeMillis
            + ", firstByteTime="
            + this.firstByteTime
            + ", bytesSent="
            + this.bytesSent
            + ", remoteAddress="
            + this.remoteAddress
            + ", localAddress="
            + this.localAddress
            + ", peerAddress="
            + this.peerAddress
            + ", remotePort="
            + this.remotePort
            + ", localPort="
            + this.localPort
            + ", remoteHostName="
            + this.remoteHostName
            + ", requestProtocol="
            + this.requestProtocol
            + ", requestMethod="
            + this.requestMethod
            + ", httpStatusCode="
            + this.httpStatusCode
            + ", userAgent="
            + this.userAgent
            + ", referrer="
            + this.referrer
            + ", acceptLanguage="
            + this.acceptLanguage
            + ", requestPath="
            + this.requestPath
            + ", queryString="
            + this.queryString
            + ", sessionId="
            + this.sessionId
            + ", remoteUser="
            + this.remoteUser
            + ", localServerName="
            + this.localServerName
            + ", threadName="
            + this.threadName
            + ", connectionStatus="
            + this.connectionStatus
            + ", label="
            + this.label
            + ")";
      }
   }
}
