Skip to content

Commit fa51b5e

Browse files
Sync client: provide a builder option accepting a list of credentials
1 parent 4ac4cdb commit fa51b5e

File tree

5 files changed

+64
-13
lines changed

5 files changed

+64
-13
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package io.objectbox.sync;
1818

19+
import java.util.Arrays;
20+
1921
import io.objectbox.BoxStore;
2022
import io.objectbox.BoxStoreBuilder;
2123
import io.objectbox.sync.server.SyncServer;
@@ -97,9 +99,7 @@ public static SyncBuilder client(BoxStore boxStore, String url, SyncCredentials[
9799
SyncBuilder builder = client(boxStore).url(url);
98100
//noinspection ConstantValue
99101
if (multipleCredentials != null) {
100-
for (SyncCredentials credentials : multipleCredentials) {
101-
builder.credentials(credentials);
102-
}
102+
builder.credentials(Arrays.asList(multipleCredentials));
103103
}
104104
return builder;
105105
}

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,34 @@ public SyncBuilder urls(List<String> urls) {
145145

146146
/**
147147
* Adds {@link SyncCredentials} to authenticate the client with the server.
148+
* <p>
149+
* The accepted credentials types depend on your Sync server configuration.
150+
*
151+
* @param credentials credentials created using a {@link SyncCredentials} factory method, for example
152+
* {@code SyncCredentials.jwtIdToken(idToken)}.
153+
* @see #credentials(List)
148154
*/
149155
public SyncBuilder credentials(SyncCredentials credentials) {
150156
checkNotNull(credentials, "credentials");
151157
this.credentials.add(credentials);
152158
return this;
153159
}
154160

161+
/**
162+
* Like {@link #credentials(SyncCredentials)}, but accepts a list of credentials.
163+
*
164+
* @param credentials a list of credentials where each element is created using a {@link SyncCredentials} factory
165+
* method, for example {@code SyncCredentials.jwtIdToken(idToken)}.
166+
* @return this builder for chaining
167+
*/
168+
public SyncBuilder credentials(List<SyncCredentials> credentials) {
169+
checkNotNull(credentials, "credentials");
170+
for (SyncCredentials credential : credentials) {
171+
credentials(credential);
172+
}
173+
return this;
174+
}
175+
155176
/**
156177
* Adds or replaces a <a href="https://sync.objectbox.io/sync-server/sync-filters">Sync filter</a> variable value
157178
* for the given name.

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

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,13 +169,34 @@ public interface SyncClient extends Closeable {
169169
void removeAllFilterVariables();
170170

171171
/**
172-
* Updates the credentials used to authenticate with the server. This should not be required during regular use.
173-
* The original credentials were passed when building sync client.
172+
* Sets credentials to authenticate the client with the server.
173+
* <p>
174+
* Any credentials that were set before are replaced.
175+
* <p>
176+
* Usually, credentials are passed via {@link SyncBuilder#credentials(SyncCredentials)}, but this can be used to
177+
* update them later, such as when a token expires.
178+
* <p>
179+
* The accepted credentials type depends on your Sync server configuration.
180+
*
181+
* @param credentials credentials created using a {@link SyncCredentials} factory method, for example
182+
* {@code SyncCredentials.jwtIdToken(idToken)}.
183+
* @see #setLoginCredentials(List)
174184
*/
175185
void setLoginCredentials(SyncCredentials credentials);
176186

177187
/**
178-
* Like {@link #setLoginCredentials(SyncCredentials)}, but allows setting multiple credentials.
188+
* Like {@link #setLoginCredentials(SyncCredentials)}, but accepts a list of credentials.
189+
*
190+
* @param credentials a list of credentials where each element is created using a {@link SyncCredentials} factory
191+
* method, for example {@code SyncCredentials.jwtIdToken(idToken)}.
192+
*/
193+
void setLoginCredentials(List<SyncCredentials> credentials);
194+
195+
/**
196+
* Like {@link #setLoginCredentials(SyncCredentials)}, but accepts an array of credentials.
197+
*
198+
* @param multipleCredentials an array of credentials where each element is created using a {@link SyncCredentials}
199+
* factory method, for example {@code SyncCredentials.jwtIdToken(idToken)}.
179200
*/
180201
void setLoginCredentials(SyncCredentials[] multipleCredentials);
181202

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,7 @@ public final class SyncClientImpl implements SyncClient {
130130
this.internalListener = new InternalSyncClientListener();
131131
nativeSetListener(handle, internalListener);
132132

133-
if (builder.credentials.size() == 1) {
134-
setLoginCredentials(builder.credentials.get(0));
135-
} else if (builder.credentials.size() > 1) {
136-
setLoginCredentials(builder.credentials.toArray(new SyncCredentials[0]));
137-
} else {
138-
throw new IllegalArgumentException("No credentials provided");
139-
}
133+
setLoginCredentials(builder.credentials);
140134

141135
// If created successfully, let store keep a reference so the caller does not have to.
142136
InternalAccess.setSyncClient(builder.boxStore, this);
@@ -239,6 +233,17 @@ public void removeAllFilterVariables() {
239233
nativeRemoveAllFilterVariables(getHandle());
240234
}
241235

236+
@Override
237+
public void setLoginCredentials(List<SyncCredentials> credentials) {
238+
if (credentials.size() == 1) {
239+
setLoginCredentials(credentials.get(0));
240+
} else if (credentials.size() > 1) {
241+
setLoginCredentials(credentials.toArray(new SyncCredentials[0]));
242+
} else {
243+
throw new IllegalArgumentException("Credentials must be provided");
244+
}
245+
}
246+
242247
@Override
243248
public void setLoginCredentials(SyncCredentials credentials) {
244249
if (credentials == null) {

tests/objectbox-java-test/src/test/java/io/objectbox/sync/ConnectivityMonitorTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,10 @@ public void removeAllFilterVariables() {
191191
public void setLoginCredentials(SyncCredentials credentials) {
192192
}
193193

194+
@Override
195+
public void setLoginCredentials(List<SyncCredentials> credentials) {
196+
}
197+
194198
@Override
195199
public void setLoginCredentials(SyncCredentials[] multipleCredentials) {
196200
}

0 commit comments

Comments
 (0)