2525import com .google .cloud .bigtable .data .v2 .models .Range .AbstractTimestampRange ;
2626import com .google .common .base .Preconditions ;
2727import com .google .protobuf .ByteString ;
28+ import java .io .IOException ;
29+ import java .io .ObjectInputStream ;
30+ import java .io .ObjectOutputStream ;
2831import java .io .Serializable ;
2932import javax .annotation .Nonnull ;
3033
@@ -200,7 +203,19 @@ public Filter label(@Nonnull String label) {
200203 // Implementations of target specific filters.
201204 /** DSL for adding filters to a chain. */
202205 public static final class ChainFilter implements Filter {
203- private RowFilter .Chain .Builder builder ;
206+ private static final long serialVersionUID = -6756759448656768478L ;
207+ private transient RowFilter .Chain .Builder builder ;
208+
209+ private void writeObject (ObjectOutputStream s ) throws IOException {
210+ s .defaultWriteObject ();
211+ s .writeObject (builder .build ());
212+ }
213+
214+ private void readObject (ObjectInputStream s ) throws IOException , ClassNotFoundException {
215+ s .defaultReadObject ();
216+ RowFilter .Chain chain = (RowFilter .Chain ) s .readObject ();
217+ this .builder = chain .toBuilder ();
218+ }
204219
205220 private ChainFilter () {
206221 this .builder = RowFilter .Chain .newBuilder ();
@@ -241,7 +256,19 @@ public ChainFilter clone() {
241256
242257 /** DSL for adding filters to the interleave list. */
243258 public static final class InterleaveFilter implements Filter {
244- private RowFilter .Interleave .Builder builder ;
259+ private static final long serialVersionUID = -6356151037337889421L ;
260+ private transient RowFilter .Interleave .Builder builder ;
261+
262+ private void writeObject (ObjectOutputStream s ) throws IOException {
263+ s .defaultWriteObject ();
264+ s .writeObject (builder .build ());
265+ }
266+
267+ private void readObject (ObjectInputStream s ) throws IOException , ClassNotFoundException {
268+ s .defaultReadObject ();
269+ RowFilter .Interleave interleave = (RowFilter .Interleave ) s .readObject ();
270+ this .builder = interleave .toBuilder ();
271+ }
245272
246273 private InterleaveFilter () {
247274 builder = RowFilter .Interleave .newBuilder ();
@@ -281,7 +308,19 @@ public InterleaveFilter clone() {
281308
282309 /** DSL for configuring a conditional filter. */
283310 public static final class ConditionFilter implements Filter {
284- private RowFilter .Condition .Builder builder ;
311+ private static final long serialVersionUID = -2720899822014446776L ;
312+ private transient RowFilter .Condition .Builder builder ;
313+
314+ private void writeObject (ObjectOutputStream s ) throws IOException {
315+ s .defaultWriteObject ();
316+ s .writeObject (builder .build ());
317+ }
318+
319+ private void readObject (ObjectInputStream s ) throws IOException , ClassNotFoundException {
320+ s .defaultReadObject ();
321+ RowFilter .Condition condition = (RowFilter .Condition ) s .readObject ();
322+ this .builder = condition .toBuilder ();
323+ }
285324
286325 private ConditionFilter (@ Nonnull Filter predicate ) {
287326 Preconditions .checkNotNull (predicate );
@@ -323,7 +362,9 @@ public ConditionFilter clone() {
323362 }
324363 }
325364
326- public static final class KeyFilter {
365+ public static final class KeyFilter implements Serializable {
366+ private static final long serialVersionUID = 5137765114285539458L ;
367+
327368 private KeyFilter () {}
328369
329370 /**
@@ -383,7 +424,9 @@ public Filter sample(double probability) {
383424 }
384425 }
385426
386- public static final class FamilyFilter {
427+ public static final class FamilyFilter implements Serializable {
428+ private static final long serialVersionUID = -4470936841191831553L ;
429+
387430 private FamilyFilter () {}
388431
389432 /**
@@ -405,7 +448,9 @@ public Filter exactMatch(@Nonnull String value) {
405448 }
406449 }
407450
408- public static final class QualifierFilter {
451+ public static final class QualifierFilter implements Serializable {
452+ private static final long serialVersionUID = -1274850022909506559L ;
453+
409454 private QualifierFilter () {}
410455
411456 /**
@@ -459,7 +504,8 @@ public QualifierRangeFilter rangeWithinFamily(@Nonnull String family) {
459504
460505 /** Matches only cells from columns within the given range. */
461506 public static final class QualifierRangeFilter
462- extends AbstractByteStringRange <QualifierRangeFilter > implements Filter , Serializable {
507+ extends AbstractByteStringRange <QualifierRangeFilter > implements Filter {
508+ private static final long serialVersionUID = -1909319911147913630L ;
463509 private final String family ;
464510
465511 private QualifierRangeFilter (String family ) {
@@ -505,7 +551,9 @@ public QualifierRangeFilter clone() {
505551 }
506552 }
507553
508- public static final class TimestampFilter {
554+ public static final class TimestampFilter implements Serializable {
555+ private static final long serialVersionUID = 5284219722591464991L ;
556+
509557 private TimestampFilter () {}
510558
511559 /**
@@ -529,7 +577,9 @@ public TimestampRangeFilter exact(Long exactTimestamp) {
529577
530578 /** Matches only cells with microsecond timestamps within the given range. */
531579 public static final class TimestampRangeFilter
532- extends AbstractTimestampRange <TimestampRangeFilter > implements Filter , Serializable {
580+ extends AbstractTimestampRange <TimestampRangeFilter > implements Filter {
581+ private static final long serialVersionUID = 8410980338603335276L ;
582+
533583 private TimestampRangeFilter () {}
534584
535585 @ InternalApi
@@ -571,7 +621,9 @@ public TimestampRangeFilter clone() {
571621 }
572622 }
573623
574- public static final class ValueFilter {
624+ public static final class ValueFilter implements Serializable {
625+ private static final long serialVersionUID = 6722715229238811179L ;
626+
575627 private ValueFilter () {}
576628
577629 /**
@@ -628,7 +680,9 @@ public Filter strip() {
628680
629681 /** Matches only cells with values that fall within the given value range. */
630682 public static final class ValueRangeFilter extends AbstractByteStringRange <ValueRangeFilter >
631- implements Filter , Serializable {
683+ implements Filter {
684+ private static final long serialVersionUID = -2452360677825047088L ;
685+
632686 private ValueRangeFilter () {}
633687
634688 @ InternalApi
@@ -668,7 +722,9 @@ public ValueRangeFilter clone() {
668722 }
669723 }
670724
671- public static final class OffsetFilter {
725+ public static final class OffsetFilter implements Serializable {
726+ private static final long serialVersionUID = 3228791236971884041L ;
727+
672728 private OffsetFilter () {}
673729
674730 /**
@@ -681,7 +737,9 @@ public Filter cellsPerRow(int count) {
681737 }
682738 }
683739
684- public static final class LimitFilter {
740+ public static final class LimitFilter implements Serializable {
741+ private static final long serialVersionUID = -794915549003008940L ;
742+
685743 private LimitFilter () {}
686744
687745 /**
@@ -705,6 +763,7 @@ public Filter cellsPerColumn(int count) {
705763 }
706764
707765 private static final class SimpleFilter implements Filter {
766+ private static final long serialVersionUID = 3595911451325189833L ;
708767 private final RowFilter proto ;
709768
710769 private SimpleFilter (@ Nonnull RowFilter proto ) {
@@ -729,7 +788,7 @@ public SimpleFilter clone() {
729788 }
730789
731790 @ InternalExtensionOnly
732- public interface Filter extends Cloneable {
791+ public interface Filter extends Cloneable , Serializable {
733792 @ InternalApi
734793 RowFilter toProto ();
735794 }
0 commit comments