|
22 | 22 | import static com.google.common.base.Preconditions.checkNotNull;
|
23 | 23 |
|
24 | 24 | import com.google.api.client.util.Data;
|
| 25 | +import com.google.api.core.ApiFunction; |
25 | 26 | import com.google.api.core.BetaApi;
|
| 27 | +import com.google.cloud.StringEnumType; |
| 28 | +import com.google.cloud.StringEnumValue; |
26 | 29 | import com.google.cloud.storage.Storage.BlobField;
|
27 | 30 | import com.google.cloud.storage.TransportCompatibility.Transport;
|
28 | 31 | import com.google.cloud.storage.UnifiedOpts.NamedField;
|
@@ -104,6 +107,7 @@ public class BlobInfo implements Serializable {
|
104 | 107 | private final Boolean eventBasedHold;
|
105 | 108 | private final Boolean temporaryHold;
|
106 | 109 | private final OffsetDateTime retentionExpirationTime;
|
| 110 | + private final Retention retention; |
107 | 111 | private final transient ImmutableSet<NamedField> modifiedFields;
|
108 | 112 |
|
109 | 113 | /** This class is meant for internal use only. Users are discouraged from using this class. */
|
@@ -168,6 +172,119 @@ public final boolean equals(Object o) {
|
168 | 172 | }
|
169 | 173 | }
|
170 | 174 |
|
| 175 | + /** |
| 176 | + * Defines a blob's Retention policy. Can only be used on objects in a retention-enabled bucket. |
| 177 | + */ |
| 178 | + public static final class Retention implements Serializable { |
| 179 | + |
| 180 | + private static final long serialVersionUID = 5046718464542688444L; |
| 181 | + |
| 182 | + private Mode mode; |
| 183 | + |
| 184 | + private OffsetDateTime retainUntilTime; |
| 185 | + |
| 186 | + /** Returns the retention policy's Mode. Can be Locked or Unlocked. */ |
| 187 | + public Mode getMode() { |
| 188 | + return mode; |
| 189 | + } |
| 190 | + |
| 191 | + /** Returns what time this object will be retained until, if the mode is Locked. */ |
| 192 | + public OffsetDateTime getRetainUntilTime() { |
| 193 | + return retainUntilTime; |
| 194 | + } |
| 195 | + |
| 196 | + @Override |
| 197 | + public boolean equals(Object o) { |
| 198 | + if (this == o) { |
| 199 | + return true; |
| 200 | + } |
| 201 | + if (!(o instanceof Retention)) { |
| 202 | + return false; |
| 203 | + } |
| 204 | + Retention that = (Retention) o; |
| 205 | + return Objects.equals(mode, that.mode) |
| 206 | + && Objects.equals(retainUntilTime, that.retainUntilTime); |
| 207 | + } |
| 208 | + |
| 209 | + @Override |
| 210 | + public int hashCode() { |
| 211 | + return Objects.hash(mode, retainUntilTime); |
| 212 | + } |
| 213 | + |
| 214 | + @Override |
| 215 | + public String toString() { |
| 216 | + return MoreObjects.toStringHelper(this) |
| 217 | + .add("mode", mode) |
| 218 | + .add("retainUntilTime", retainUntilTime) |
| 219 | + .toString(); |
| 220 | + } |
| 221 | + |
| 222 | + public static Builder newBuilder() { |
| 223 | + return new Builder(); |
| 224 | + } |
| 225 | + |
| 226 | + public Builder toBuilder() { |
| 227 | + return new Builder().setMode(this.mode).setRetainUntilTime(this.retainUntilTime); |
| 228 | + } |
| 229 | + |
| 230 | + private Retention() {} |
| 231 | + |
| 232 | + public Retention(Builder builder) { |
| 233 | + this.mode = builder.mode; |
| 234 | + this.retainUntilTime = builder.retainUntilTime; |
| 235 | + } |
| 236 | + |
| 237 | + public static final class Builder { |
| 238 | + private Mode mode; |
| 239 | + private OffsetDateTime retainUntilTime; |
| 240 | + |
| 241 | + /** Sets the retention policy's Mode. Can be Locked or Unlocked. */ |
| 242 | + public Builder setMode(Mode mode) { |
| 243 | + this.mode = mode; |
| 244 | + return this; |
| 245 | + } |
| 246 | + |
| 247 | + /** Sets what time this object will be retained until, if the mode is Locked. */ |
| 248 | + public Builder setRetainUntilTime(OffsetDateTime retainUntilTime) { |
| 249 | + this.retainUntilTime = retainUntilTime; |
| 250 | + return this; |
| 251 | + } |
| 252 | + |
| 253 | + public Retention build() { |
| 254 | + return new Retention(this); |
| 255 | + } |
| 256 | + } |
| 257 | + |
| 258 | + public static final class Mode extends StringEnumValue { |
| 259 | + private static final long serialVersionUID = 1973143582659557184L; |
| 260 | + |
| 261 | + private Mode(String constant) { |
| 262 | + super(constant); |
| 263 | + } |
| 264 | + |
| 265 | + private static final ApiFunction<String, Mode> CONSTRUCTOR = Mode::new; |
| 266 | + |
| 267 | + private static final StringEnumType<Mode> type = |
| 268 | + new StringEnumType<>(Mode.class, CONSTRUCTOR); |
| 269 | + |
| 270 | + public static final Mode UNLOCKED = type.createAndRegister("Unlocked"); |
| 271 | + |
| 272 | + public static final Mode LOCKED = type.createAndRegister("Locked"); |
| 273 | + |
| 274 | + public static Mode valueOfStrict(String constant) { |
| 275 | + return type.valueOfStrict(constant); |
| 276 | + } |
| 277 | + |
| 278 | + public static Mode valueOf(String constant) { |
| 279 | + return type.valueOf(constant); |
| 280 | + } |
| 281 | + |
| 282 | + public static Mode[] values() { |
| 283 | + return type.values(); |
| 284 | + } |
| 285 | + } |
| 286 | + } |
| 287 | + |
171 | 288 | /** Builder for {@code BlobInfo}. */
|
172 | 289 | public abstract static class Builder {
|
173 | 290 |
|
@@ -408,6 +525,8 @@ Builder setRetentionExpirationTimeOffsetDateTime(OffsetDateTime retentionExpirat
|
408 | 525 | return setRetentionExpirationTime(millisOffsetDateTimeCodec.decode(retentionExpirationTime));
|
409 | 526 | }
|
410 | 527 |
|
| 528 | + public abstract Builder setRetention(Retention retention); |
| 529 | + |
411 | 530 | /** Creates a {@code BlobInfo} object. */
|
412 | 531 | public abstract BlobInfo build();
|
413 | 532 |
|
@@ -506,6 +625,7 @@ static final class BuilderImpl extends Builder {
|
506 | 625 | private Boolean eventBasedHold;
|
507 | 626 | private Boolean temporaryHold;
|
508 | 627 | private OffsetDateTime retentionExpirationTime;
|
| 628 | + private Retention retention; |
509 | 629 | private final ImmutableSet.Builder<NamedField> modifiedFields = ImmutableSet.builder();
|
510 | 630 |
|
511 | 631 | BuilderImpl(BlobId blobId) {
|
@@ -543,6 +663,7 @@ static final class BuilderImpl extends Builder {
|
543 | 663 | eventBasedHold = blobInfo.eventBasedHold;
|
544 | 664 | temporaryHold = blobInfo.temporaryHold;
|
545 | 665 | retentionExpirationTime = blobInfo.retentionExpirationTime;
|
| 666 | + retention = blobInfo.retention; |
546 | 667 | }
|
547 | 668 |
|
548 | 669 | @Override
|
@@ -916,6 +1037,14 @@ Builder setRetentionExpirationTimeOffsetDateTime(OffsetDateTime retentionExpirat
|
916 | 1037 | return this;
|
917 | 1038 | }
|
918 | 1039 |
|
| 1040 | + @Override |
| 1041 | + public Builder setRetention(Retention retention) { |
| 1042 | + // todo: b/308194853 |
| 1043 | + modifiedFields.add(BlobField.RETENTION); |
| 1044 | + this.retention = retention; |
| 1045 | + return this; |
| 1046 | + } |
| 1047 | + |
919 | 1048 | @Override
|
920 | 1049 | public BlobInfo build() {
|
921 | 1050 | checkNotNull(blobId);
|
@@ -1139,6 +1268,7 @@ Builder clearRetentionExpirationTime() {
|
1139 | 1268 | eventBasedHold = builder.eventBasedHold;
|
1140 | 1269 | temporaryHold = builder.temporaryHold;
|
1141 | 1270 | retentionExpirationTime = builder.retentionExpirationTime;
|
| 1271 | + retention = builder.retention; |
1142 | 1272 | modifiedFields = builder.modifiedFields.build();
|
1143 | 1273 | }
|
1144 | 1274 |
|
@@ -1532,6 +1662,11 @@ public OffsetDateTime getRetentionExpirationTimeOffsetDateTime() {
|
1532 | 1662 | return retentionExpirationTime;
|
1533 | 1663 | }
|
1534 | 1664 |
|
| 1665 | + /** Returns the object's Retention policy. */ |
| 1666 | + public Retention getRetention() { |
| 1667 | + return retention; |
| 1668 | + } |
| 1669 | + |
1535 | 1670 | /** Returns a builder for the current blob. */
|
1536 | 1671 | public Builder toBuilder() {
|
1537 | 1672 | return new BuilderImpl(this);
|
@@ -1581,6 +1716,7 @@ public int hashCode() {
|
1581 | 1716 | kmsKeyName,
|
1582 | 1717 | eventBasedHold,
|
1583 | 1718 | temporaryHold,
|
| 1719 | + retention, |
1584 | 1720 | retentionExpirationTime);
|
1585 | 1721 | }
|
1586 | 1722 |
|
@@ -1622,7 +1758,8 @@ public boolean equals(Object o) {
|
1622 | 1758 | && Objects.equals(kmsKeyName, blobInfo.kmsKeyName)
|
1623 | 1759 | && Objects.equals(eventBasedHold, blobInfo.eventBasedHold)
|
1624 | 1760 | && Objects.equals(temporaryHold, blobInfo.temporaryHold)
|
1625 |
| - && Objects.equals(retentionExpirationTime, blobInfo.retentionExpirationTime); |
| 1761 | + && Objects.equals(retentionExpirationTime, blobInfo.retentionExpirationTime) |
| 1762 | + && Objects.equals(retention, blobInfo.retention); |
1626 | 1763 | }
|
1627 | 1764 |
|
1628 | 1765 | ImmutableSet<NamedField> getModifiedFields() {
|
|
0 commit comments