1 package org.wikimedia.search.extra.superdetectnoop;
2
3 import static org.wikimedia.search.extra.superdetectnoop.ChangeHandler.TypeSafe.nullAndTypeSafe;
4
5 import javax.annotation.Nonnull;
6
7
8
9
10
11
12
13
14
15 public final class VersionedDocumentHandler implements ChangeHandler.NonnullChangeHandler<Number> {
16 public static class Recognizer implements ChangeHandler.Recognizer {
17 private static final String DESCRIPTION = "documentVersion";
18
19 @Override
20 public ChangeHandler<Object> build(String description) {
21 if (!description.equals(DESCRIPTION)) {
22 return null;
23 }
24 return INSTANCE;
25 }
26 }
27
28 private static final ChangeHandler<Object> INSTANCE =
29 nullAndTypeSafe(Number.class, new VersionedDocumentHandler());
30
31 private VersionedDocumentHandler() {
32
33 }
34
35 @Override
36 public ChangeHandler.Result handle(@Nonnull Number oldVersion, @Nonnull Number newVersion) {
37 if (oldVersion.longValue() == newVersion.longValue()) {
38
39
40
41
42
43 return ChangeHandler.CloseEnough.INSTANCE;
44 } else if (oldVersion.longValue() > newVersion.longValue()) {
45 return ChangeHandler.NoopDocument.INSTANCE;
46 }
47 return new ChangeHandler.Changed(newVersion);
48 }
49 }