content: /*
   * Copyright (C) 2015 Actor LLC. <https://actor.im>
   */
  
  package im.actor.core.entity;
  
  import com.google.j2objc.annotations.Property;
  
  import org.jetbrains.annotations.NotNull;
  
  import java.io.IOException;
  
  import im.actor.core.api.ApiFileLocation;
  import im.actor.runtime.bser.BserValues;
  import im.actor.runtime.bser.BserWriter;
  
  // Disabling Bounds checks for speeding up calculations
  
  /*-[
  #define J2OBJC_DISABLE_ARRAY_BOUND_CHECKS 1
  ]-*/
  
  public class FileReference extends WrapperEntity<ApiFileLocation> {
  
      private static final int RECORD_ID = 10;
  
      @Property("readonly, nonatomic")
      private int fileSize;
      @Property("readonly, nonatomic")
      private String fileName;
  
      public FileReference(ApiFileLocation fileLocation, String fileName, int fileSize) {
          super(RECORD_ID, fileLocation);
          this.fileSize = fileSize;
          this.fileName = fileName;
      }
  
      public FileReference(byte[] data) throws IOException {
          super(RECORD_ID, data);
      }
  
      public ApiFileLocation getFileLocation() {
          return getWrapped();
      }
  
      public int getFileSize() {
          return fileSize;
      }
  
      public long getFileId() {
          return getWrapped().getFileId();
      }
  
      public long getAccessHash() {
          return getWrapped().getAccessHash();
      }
  
      public String getFileName() {
          return fileName;
      }
  
      @Override
      public void parse(BserValues values) throws IOException {
          // Is Old layout
          if (!values.getBool(5, false)) {
              long fileId = values.getLong(1);
              long accessHash = values.getLong(2);
              setWrapped(new ApiFileLocation(fileId, accessHash));
          }
  
          // Deserialize new layout
          super.parse(values);
  
          fileSize = values.getInt(3);
          fileName = values.getString(4);
      }
  
      @Override
      public void serialize(BserWriter writer) throws IOException {
          // Mark as new layout
          writer.writeBool(5, true);
          writer.writeInt(3, fileSize);
          writer.writeString(4, fileName);
  
          // Write wrapper
          super.serialize(writer);
      }
  
      @Override
      public boolean equals(Object o) {
          if (this == o) return true;
          if (o == null || getClass() != o.getClass()) return false;
  
          FileReference that = (FileReference) o;
  
          if (getWrapped().getFileId() != that.getWrapped().getFileId()) return false;
  
          return true;
      }
  
      @Override
      public int hashCode() {
          return (int) (getWrapped().getFileId() ^ (getWrapped().getFileId() >>> 32));
      }
  
      @Override
      @NotNull
      protected ApiFileLocation createInstance() {
          return new ApiFileLocation();
      }
  }
  