From 5ce4bea2eda03f777d4badae02a6b9fc13bd4798 Mon Sep 17 00:00:00 2001
From: dorman <37854724+dormanze@users.noreply.github.com>
Date: Thu, 16 Jan 2025 17:50:51 +0800
Subject: [PATCH] Update missing XML fields in AndOperator, Expiration and
 RuleFilter (#1613)

---
 .../java/io/minio/messages/AndOperator.java   | 33 +++++++++++++++++++
 .../java/io/minio/messages/Expiration.java    | 19 +++++++++++
 .../java/io/minio/messages/RuleFilter.java    | 26 +++++++++++++++
 3 files changed, 78 insertions(+)

diff --git a/api/src/main/java/io/minio/messages/AndOperator.java b/api/src/main/java/io/minio/messages/AndOperator.java
index 7824254e6..370a7acc4 100644
--- a/api/src/main/java/io/minio/messages/AndOperator.java
+++ b/api/src/main/java/io/minio/messages/AndOperator.java
@@ -31,6 +31,12 @@ public class AndOperator {
   @Convert(PrefixConverter.class)
   private String prefix;
 
+  @Element(name = "ObjectSizeLessThan", required = false)
+  private Integer objectSizeLessThan;
+
+  @Element(name = "ObjectSizeGreaterThan", required = false)
+  private Integer objectSizeGreaterThan;
+
   @ElementMap(
       attribute = false,
       entry = "Tag",
@@ -67,10 +73,37 @@ public AndOperator(
     this.tags = (tags != null) ? Collections.unmodifiableMap(tags) : null;
   }
 
+  public AndOperator(
+      @Nullable @Element(name = "Prefix", required = false) String prefix,
+      @Nullable
+          @ElementMap(
+              attribute = false,
+              entry = "Tag",
+              inline = true,
+              key = "Key",
+              value = "Value",
+              required = false)
+          Map<String, String> tags,
+      @Nullable @Element(name = "ObjectSizeLessThan", required = false) Integer objectSizeLessThan,
+      @Nullable @Element(name = "ObjectSizeGreaterThan", required = false)
+          Integer objectSizeGreaterThan) {
+    this(prefix, tags);
+    this.objectSizeLessThan = objectSizeLessThan;
+    this.objectSizeGreaterThan = objectSizeGreaterThan;
+  }
+
   public String prefix() {
     return this.prefix;
   }
 
+  public Integer objectSizeLessThan() {
+    return this.objectSizeLessThan;
+  }
+
+  public Integer objectSizeGreaterThan() {
+    return this.objectSizeGreaterThan;
+  }
+
   public Map<String, String> tags() {
     return this.tags;
   }
diff --git a/api/src/main/java/io/minio/messages/Expiration.java b/api/src/main/java/io/minio/messages/Expiration.java
index f269cd4d7..a410b7929 100644
--- a/api/src/main/java/io/minio/messages/Expiration.java
+++ b/api/src/main/java/io/minio/messages/Expiration.java
@@ -27,6 +27,9 @@ public class Expiration extends DateDays {
   @Element(name = "ExpiredObjectDeleteMarker", required = false)
   private Boolean expiredObjectDeleteMarker;
 
+  @Element(name = "ExpiredObjectAllVersions", required = false)
+  private Boolean expiredObjectAllVersions;
+
   public Expiration(
       @Nullable @Element(name = "Date", required = false) ResponseDate date,
       @Nullable @Element(name = "Days", required = false) Integer days,
@@ -51,7 +54,23 @@ public Expiration(ZonedDateTime date, Integer days, Boolean expiredObjectDeleteM
     this(date == null ? null : new ResponseDate(date), days, expiredObjectDeleteMarker);
   }
 
+  public Expiration(
+      @Nullable @Element(name = "Date", required = false) ResponseDate date,
+      @Nullable @Element(name = "Days", required = false) Integer days,
+      @Nullable @Element(name = "ExpiredObjectDeleteMarker", required = false)
+          Boolean expiredObjectDeleteMarker,
+      @Element(name = "ExpiredObjectAllVersions", required = false)
+          Boolean expiredObjectAllVersions) {
+    this(date, days, expiredObjectDeleteMarker);
+    this.expiredObjectAllVersions = expiredObjectAllVersions;
+  }
+
   public Boolean expiredObjectDeleteMarker() {
     return expiredObjectDeleteMarker;
   }
+
+  /** This is MinIO specific extension. */
+  public Boolean expiredObjectAllVersions() {
+    return expiredObjectAllVersions;
+  }
 }
diff --git a/api/src/main/java/io/minio/messages/RuleFilter.java b/api/src/main/java/io/minio/messages/RuleFilter.java
index 413b62f9f..f6de06f09 100644
--- a/api/src/main/java/io/minio/messages/RuleFilter.java
+++ b/api/src/main/java/io/minio/messages/RuleFilter.java
@@ -38,6 +38,12 @@ public class RuleFilter {
   @Element(name = "Tag", required = false)
   private Tag tag;
 
+  @Element(name = "ObjectSizeLessThan", required = false)
+  private Integer objectSizeLessThan;
+
+  @Element(name = "ObjectSizeGreaterThan", required = false)
+  private Integer objectSizeGreaterThan;
+
   public RuleFilter(
       @Nullable @Element(name = "And", required = false) AndOperator andOperator,
       @Nullable @Element(name = "Prefix", required = false) String prefix,
@@ -51,6 +57,18 @@ public RuleFilter(
     }
   }
 
+  public RuleFilter(
+      @Nullable @Element(name = "And", required = false) AndOperator andOperator,
+      @Nullable @Element(name = "Prefix", required = false) String prefix,
+      @Nullable @Element(name = "Tag", required = false) Tag tag,
+      @Nullable @Element(name = "ObjectSizeLessThan", required = false) Integer objectSizeLessThan,
+      @Nullable @Element(name = "ObjectSizeGreaterThan", required = false)
+          Integer objectSizeGreaterThan) {
+    this(andOperator, prefix, tag);
+    this.objectSizeLessThan = objectSizeLessThan;
+    this.objectSizeGreaterThan = objectSizeGreaterThan;
+  }
+
   public RuleFilter(@Nonnull AndOperator andOperator) {
     this.andOperator = Objects.requireNonNull(andOperator, "And operator must not be null");
   }
@@ -74,4 +92,12 @@ public String prefix() {
   public Tag tag() {
     return this.tag;
   }
+
+  public Integer objectSizeLessThan() {
+    return this.objectSizeLessThan;
+  }
+
+  public Integer objectSizeGreaterThan() {
+    return this.objectSizeGreaterThan;
+  }
 }