Skip to content

Commit ce59546

Browse files
committed
Merge remote-tracking branch 'origin/458-align-sync-apis' into sync
# Conflicts: # objectbox-java/src/main/java/io/objectbox/sync/SyncBuilder.java # objectbox-java/src/main/java/io/objectbox/sync/SyncClientImpl.java
2 parents e108fd0 + b5734e2 commit ce59546

18 files changed

+319
-217
lines changed

objectbox-java/src/main/java/io/objectbox/sync/AbstractSyncClientListener.java

Lines changed: 0 additions & 26 deletions
This file was deleted.

objectbox-java/src/main/java/io/objectbox/sync/SyncBuilder.java

Lines changed: 63 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
import io.objectbox.BoxStore;
66
import io.objectbox.annotation.apihint.Experimental;
77
import io.objectbox.sync.internal.Platform;
8+
import io.objectbox.sync.listener.SyncChangeListener;
9+
import io.objectbox.sync.listener.SyncCompletedListener;
10+
import io.objectbox.sync.listener.SyncConnectionListener;
11+
import io.objectbox.sync.listener.SyncListener;
12+
import io.objectbox.sync.listener.SyncLoginListener;
813

914
/**
1015
* A builder to create a {@link SyncClient}; the builder itself should be created via
@@ -19,13 +24,15 @@ public class SyncBuilder {
1924
final String url;
2025
final SyncCredentials credentials;
2126

22-
SyncClientListener listener;
23-
SyncChangesListener changesListener;
27+
@Nullable SyncLoginListener loginListener;
28+
@Nullable SyncCompletedListener completedListener;
29+
@Nullable SyncChangeListener changeListener;
30+
@Nullable SyncConnectionListener connectionListener;
31+
@Nullable SyncListener listener;
2432

2533
@Nullable
2634
String[] trustedCertPaths;
2735
boolean uncommittedAcks;
28-
boolean manualStart;
2936

3037
RequestUpdatesMode requestUpdatesMode = RequestUpdatesMode.AUTO;
3138

@@ -103,50 +110,82 @@ public SyncBuilder uncommittedAcks() {
103110
return this;
104111
}
105112

106-
107113
/**
108-
* Prevents the client from starting (connecting, logging in, syncing) automatically.
109-
* It will need to be started manually later.
110-
*
111-
* @see SyncClient#start()
114+
* Sets a listener to only observe Sync login events.
115+
* <p>
116+
* This listener can also be {@link SyncClient#setSyncLoginListener(SyncLoginListener) set or removed}
117+
* on the Sync client directly.
112118
*/
113-
public SyncBuilder manualStart() {
114-
manualStart = true;
119+
public SyncBuilder loginListener(SyncLoginListener loginListener) {
120+
this.loginListener = loginListener;
115121
return this;
116122
}
117123

118124
/**
119-
* Sets a listener to observe sync events like login or sync completion.
120-
* This listener can also be set (or removed) on the sync client directly.
121-
*
122-
* @see SyncClient#setSyncListener(SyncClientListener)
125+
* Sets a listener to only observe Sync completed events.
126+
* <p>
127+
* This listener can also be {@link SyncClient#setSyncCompletedListener(SyncCompletedListener) set or removed}
128+
* on the Sync client directly.
123129
*/
124-
public SyncBuilder listener(SyncClientListener listener) {
125-
this.listener = listener;
130+
public SyncBuilder completedListener(SyncCompletedListener completedListener) {
131+
this.completedListener = completedListener;
126132
return this;
127133
}
128134

129135
/**
130136
* Sets a listener to observe fine granular changes happening during sync.
131-
* This listener can also be set (or removed) on the sync client directly.
132-
*
133-
* @see SyncClient#setSyncChangesListener(SyncChangesListener)
137+
* <p>
138+
* This listener can also be {@link SyncClient#setSyncChangeListener(SyncChangeListener) set or removed}
139+
* on the Sync client directly.
134140
*/
135-
public SyncBuilder changesListener(SyncChangesListener changesListener) {
136-
this.changesListener = changesListener;
141+
public SyncBuilder changeListener(SyncChangeListener changeListener) {
142+
this.changeListener = changeListener;
137143
return this;
138144
}
139145

146+
/**
147+
* Sets a listener to only observe Sync connection events.
148+
* <p>
149+
* This listener can also be {@link SyncClient#setSyncConnectionListener(SyncConnectionListener) set or removed}
150+
* on the Sync client directly.
151+
*/
152+
public SyncBuilder connectionListener(SyncConnectionListener connectionListener) {
153+
this.connectionListener = connectionListener;
154+
return this;
155+
}
156+
157+
/**
158+
* Sets a listener to observe all Sync events like login or sync completion.
159+
* <p>
160+
* Note: this will replace any login, completed or connection listener.
161+
* <p>
162+
* This listener can also be {@link SyncClient#setSyncListener(SyncListener) set or removed}
163+
* on the Sync client directly.
164+
*/
165+
public SyncBuilder listener(SyncListener listener) {
166+
this.listener = listener;
167+
return this;
168+
}
169+
170+
/**
171+
* Builds and returns a Sync client ready to {@link SyncClient#start()}.
172+
*/
140173
public SyncClient build() {
141-
if (credentials == null) {
142-
throw new IllegalStateException("Credentials are required.");
143-
}
144174
if (boxStore.getSyncClient() != null) {
145175
throw new IllegalStateException("The given store is already associated with a Sync client, close it first.");
146176
}
147177
return new SyncClientImpl(this);
148178
}
149179

180+
/**
181+
* Builds, {@link SyncClient#start() starts} and returns a Sync client.
182+
*/
183+
public SyncClient buildAndStart() {
184+
SyncClient syncClient = build();
185+
syncClient.start();
186+
return syncClient;
187+
}
188+
150189
private void checkNotNull(Object object, String message) {
151190
//noinspection ConstantConditions Non-null annotation does not enforce, so check for null.
152191
if (object == null) {

objectbox-java/src/main/java/io/objectbox/sync/SyncChange.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package io.objectbox.sync;
22

33
import io.objectbox.annotation.apihint.Experimental;
4+
import io.objectbox.sync.listener.SyncChangeListener;
45

6+
// Note: this class is expected to be in this package by JNI, check before modifying/removing it.
57
/**
68
* A collection of changes made to one entity type during a sync transaction.
7-
* Delivered via {@link SyncChangesListener}.
9+
* Delivered via {@link SyncChangeListener}.
810
* IDs of changed objects are available via {@link #getChangedIds()} and those of removed objects via
911
* {@link #getRemovedIds()}.
1012
*/

objectbox-java/src/main/java/io/objectbox/sync/SyncClient.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,16 @@
22

33
import io.objectbox.annotation.apihint.Experimental;
44
import io.objectbox.sync.SyncBuilder.RequestUpdatesMode;
5+
import io.objectbox.sync.listener.SyncChangeListener;
6+
import io.objectbox.sync.listener.SyncCompletedListener;
7+
import io.objectbox.sync.listener.SyncConnectionListener;
8+
import io.objectbox.sync.listener.SyncListener;
9+
import io.objectbox.sync.listener.SyncLoginListener;
510

611
import java.io.Closeable;
712

13+
import javax.annotation.Nullable;
14+
815
/**
916
* ObjectBox sync client. Build a client with {@link Sync#client}.
1017
*
@@ -40,24 +47,35 @@ public interface SyncClient extends Closeable {
4047
long getLastLoginCode();
4148

4249
/**
43-
* Sets a {@link SyncClientListener}. Replaces a previously set listener.
50+
* Sets a listener to observe login events. Replaces a previously set listener.
51+
* Set to {@code null} to remove the listener.
52+
*/
53+
void setSyncLoginListener(@Nullable SyncLoginListener listener);
54+
55+
/**
56+
* Sets a listener to observe Sync completed events. Replaces a previously set listener.
57+
* Set to {@code null} to remove the listener.
4458
*/
45-
void setSyncListener(SyncClientListener listener);
59+
void setSyncCompletedListener(@Nullable SyncCompletedListener listener);
4660

4761
/**
48-
* Removes a previously set {@link SyncClientListener}. Does nothing if no listener was set.
62+
* Sets a listener to observe Sync connection events. Replaces a previously set listener.
63+
* Set to {@code null} to remove the listener.
4964
*/
50-
void removeSyncListener();
65+
void setSyncConnectionListener(@Nullable SyncConnectionListener listener);
5166

5267
/**
53-
* Sets a {@link SyncChangesListener}. Replaces a previously set listener.
68+
* Sets a listener to observe all Sync events.
69+
* Replaces all other previously set listeners, except a {@link SyncChangeListener}.
70+
* Set to {@code null} to remove the listener.
5471
*/
55-
void setSyncChangesListener(SyncChangesListener listener);
72+
void setSyncListener(@Nullable SyncListener listener);
5673

5774
/**
58-
* Removes a previously set {@link SyncChangesListener}. Does nothing if no listener was set.
75+
* Sets a {@link SyncChangeListener}. Replaces a previously set listener.
76+
* Set to {@code null} to remove the listener.
5977
*/
60-
void removeSyncChangesListener();
78+
void setSyncChangeListener(@Nullable SyncChangeListener listener);
6179

6280
/**
6381
* Updates the login credentials. This should not be required during regular use.

0 commit comments

Comments
 (0)