package com.l7tech.server.security.keystore;

import com.l7tech.common.io.NonCloseableOutputStream;
import com.l7tech.objectmodel.imp.NamedEntityImp;
import com.l7tech.util.Charsets;
import com.l7tech.util.PoolByteArrayOutputStream;
import com.l7tech.util.SafeXMLDecoder;
import com.l7tech.util.SafeXMLDecoderBuilder;
import jakarta.persistence.Basic;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.Lob;
import jakarta.persistence.Table;
import java.beans.XMLEncoder;
import java.io.ByteArrayInputStream;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.hibernate.annotations.Proxy;

@Entity
@Proxy(lazy = false)
@Table(name = "keystore_file")
public class KeystoreFile extends NamedEntityImp {
   private static final long serialVersionUID = 7293792837442132345L;
   private static final Charset PROPERTIES_ENCODING = Charsets.UTF8;
   @Column(name = "format", nullable = false, length = 128)
   private String format;
   private byte[] databytes;
   private transient String xmlProperties;
   private Map<String, String> properties;

   public String getFormat() {
      return this.format;
   }

   public void setFormat(String var1) {
      this.format = var1;
   }

   @Basic(fetch = FetchType.LAZY)
   @Column(name = "databytes", length = Integer.MAX_VALUE)
   @Lob
   public byte[] getDatabytes() {
      return this.databytes;
   }

   public void setDatabytes(byte[] var1) {
      this.databytes = var1;
   }

   @Column(name = "properties", length = Integer.MAX_VALUE)
   @Lob
   public String getXmlProperties() {
      if (this.xmlProperties == null) {
         Map var1 = this.properties;
         if (var1 == null) {
            return null;
         }

         PoolByteArrayOutputStream var2 = new PoolByteArrayOutputStream();

         try {
            XMLEncoder var3 = new XMLEncoder(new NonCloseableOutputStream(var2));
            var3.writeObject(var1);
            var3.close();
            this.xmlProperties = var2.toString(PROPERTIES_ENCODING);
         } finally {
            var2.close();
         }
      }

      return this.xmlProperties;
   }

   public void setXmlProperties(String var1) {
      if (var1 == null || !var1.equals(this.xmlProperties)) {
         this.xmlProperties = var1;
         if (var1 != null && var1.length() > 0) {
            SafeXMLDecoder var2 = new SafeXMLDecoderBuilder(new ByteArrayInputStream(var1.getBytes(PROPERTIES_ENCODING))).build();
            this.properties = (Map<String, String>)var2.readObject();
         }
      }
   }

   public String getProperty(String var1) {
      String var2 = null;
      Map var3 = this.properties;
      if (var3 != null) {
         var2 = (String)var3.get(var1);
      }

      return var2;
   }

   public void setProperty(String var1, String var2) {
      Map var3 = this.properties;
      if (var3 == null) {
         var3 = new HashMap();
         this.properties = var3;
      }

      var3.put(var1, var2);
      this.xmlProperties = null;
   }

   public boolean equals(Object var1) {
      if (this == var1) {
         return true;
      } else if (var1 == null || this.getClass() != var1.getClass()) {
         return false;
      } else if (!super.equals(var1)) {
         return false;
      } else {
         KeystoreFile var2 = (KeystoreFile)var1;
         if (!Arrays.equals(this.databytes, var2.databytes)) {
            return false;
         } else {
            return this.format != null ? this.format.equals(var2.format) : var2.format == null;
         }
      }
   }

   public int hashCode() {
      int var1 = super.hashCode();
      var1 = 31 * var1 + (this.format != null ? this.format.hashCode() : 0);
      return 31 * var1 + (this.databytes != null ? Arrays.hashCode(this.databytes) : 0);
   }
}
