All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.postgresql.adba.communication.packets.ErrorPacket Maven / Gradle / Ivy

package org.postgresql.adba.communication.packets;

import org.postgresql.adba.communication.packets.parts.ErrorResponseField;
import org.postgresql.adba.util.BinaryHelper;

import java.util.ArrayList;
import java.util.List;

public class ErrorPacket extends Exception {
  
  private static List parseFields(byte[] payload) {
    List fields = new ArrayList<>();
    List nullPositions = new ArrayList<>();

    for (int i = 0; i < payload.length; i++) {
      if (payload[i] == 0) {
        nullPositions.add(i);
      }
    }

    for (int i = 0; i < nullPositions.size() - 2; i++) {
      fields.add(new ErrorResponseField(ErrorResponseField.Types.lookup(payload[nullPositions.get(i) + 1]),
          new String(BinaryHelper.subBytes(payload, nullPositions.get(i) + 2, nullPositions.get(i + 1)))));
    }
    return fields;
  }
  
  private static String getField(ErrorResponseField.Types type, List fields) {
    for (ErrorResponseField field : fields) {
      if (type == field.getType()) {
        return field.getMessage();
      }
    }

    return null;
  }
  
  private List fields;

  public ErrorPacket(byte[] payload) {
    this(parseFields(payload));
  }
  
  private ErrorPacket(List fields) {
    super(getField(ErrorResponseField.Types.MESSAGE, fields));
    this.fields = fields;
  }

  public List getFields() {
    return fields;
  }

  /**
   * returns the message of the field that matches the type.
   * @param type type to search for
   * @return message of field
   */
  public String getField(ErrorResponseField.Types type) {
    for (ErrorResponseField field : fields) {
      if (type == field.getType()) {
        return field.getMessage();
      }
    }

    return null;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy