|
11 | 11 |
|
12 | 12 | import java.io.File; |
13 | 13 | import java.lang.reflect.Type; |
14 | | -import java.math.BigDecimal; |
15 | 14 | import java.math.RoundingMode; |
16 | 15 | import java.util.ArrayList; |
| 16 | +import java.util.Arrays; |
17 | 17 | import java.util.Collections; |
18 | 18 | import java.util.Currency; |
19 | 19 | import java.util.HashMap; |
|
22 | 22 | import java.util.Map; |
23 | 23 | import java.util.Set; |
24 | 24 | import java.util.concurrent.CopyOnWriteArrayList; |
25 | | -import java.util.function.Consumer; |
26 | | -import java.util.function.Predicate; |
27 | | -import java.util.stream.Collectors; |
| 25 | + |
28 | 26 | import io.snabble.sdk.googlepay.GooglePayHelper; |
29 | 27 | import io.snabble.sdk.auth.SnabbleAuthorizationInterceptor; |
30 | 28 | import io.snabble.sdk.codes.templates.CodeTemplate; |
|
33 | 31 | import io.snabble.sdk.utils.GsonHolder; |
34 | 32 | import io.snabble.sdk.utils.JsonUtils; |
35 | 33 | import io.snabble.sdk.utils.Logger; |
| 34 | +import io.snabble.sdk.utils.SimpleJsonCallback; |
36 | 35 | import okhttp3.OkHttpClient; |
| 36 | +import okhttp3.Request; |
| 37 | +import okhttp3.Response; |
| 38 | +import okhttp3.ResponseBody; |
37 | 39 |
|
38 | 40 | public class Project { |
39 | 41 | private Snabble snabble; |
40 | 42 | private String id; |
41 | 43 | private String name; |
42 | 44 |
|
43 | 45 | private ProductDatabase productDatabase; |
44 | | - private Shop[] shops; |
| 46 | + private ArrayList<Shop> shops; |
45 | 47 | private Brand brand; |
46 | 48 | private Company company; |
47 | 49 | private Checkout checkout; |
@@ -90,14 +92,14 @@ public class Project { |
90 | 92 | Project(JsonObject jsonObject) throws IllegalArgumentException { |
91 | 93 | snabble = Snabble.getInstance(); |
92 | 94 |
|
93 | | - parse(jsonObject); |
94 | | - |
95 | 95 | internalStorageDirectory = new File(snabble.getInternalStorageDirectory(), id + "/"); |
96 | 96 | okHttpClient = Snabble.getInstance().getOkHttpClient() |
97 | 97 | .newBuilder() |
98 | 98 | .addInterceptor(new SnabbleAuthorizationInterceptor(this)) |
99 | 99 | .build(); |
100 | 100 |
|
| 101 | + parse(jsonObject); |
| 102 | + |
101 | 103 | boolean generateSearchIndex = snabble.getConfig().generateSearchIndex; |
102 | 104 |
|
103 | 105 | productDatabase = new ProductDatabase(this, id + ".sqlite3", generateSearchIndex); |
@@ -220,13 +222,7 @@ void parse(JsonObject jsonObject) { |
220 | 222 |
|
221 | 223 | availablePaymentMethods = paymentMethodList.toArray(new PaymentMethod[paymentMethodList.size()]); |
222 | 224 |
|
223 | | - if (jsonObject.has("shops")) { |
224 | | - shops = Shop.fromJson(jsonObject.get("shops")); |
225 | | - } |
226 | | - |
227 | | - if (shops == null) { |
228 | | - shops = new Shop[0]; |
229 | | - } |
| 225 | + parseShops(jsonObject); |
230 | 226 |
|
231 | 227 | if (jsonObject.has("company")) { |
232 | 228 | company = GsonHolder.get().fromJson(jsonObject.get("company"), Company.class); |
@@ -324,6 +320,51 @@ void parse(JsonObject jsonObject) { |
324 | 320 | notifyUpdate(); |
325 | 321 | } |
326 | 322 |
|
| 323 | + private void parseShops(JsonObject jsonObject) { |
| 324 | + shops = new ArrayList<>(); |
| 325 | + |
| 326 | + if (jsonObject.has("shops")) { |
| 327 | + Shop[] jsonShops = Shop.fromJson(jsonObject.get("shops")); |
| 328 | + if (jsonShops != null) { |
| 329 | + shops.addAll(Arrays.asList(jsonShops)); |
| 330 | + } |
| 331 | + } |
| 332 | + } |
| 333 | + |
| 334 | + void loadActiveShops(Runnable done) { |
| 335 | + if (snabble.getConfig().loadActiveShops) { |
| 336 | + String url = getActiveShopsUrl(); |
| 337 | + if (url != null) { |
| 338 | + Request request = new Request.Builder() |
| 339 | + .get() |
| 340 | + .url(getActiveShopsUrl()) |
| 341 | + .build(); |
| 342 | + |
| 343 | + okHttpClient.newCall(request).enqueue(new SimpleJsonCallback<JsonObject>(JsonObject.class) { |
| 344 | + @Override |
| 345 | + public void success(JsonObject jsonObject) { |
| 346 | + if (jsonObject.has("shops")) { |
| 347 | + Shop[] hiddenShops = Shop.fromJson(jsonObject.get("shops")); |
| 348 | + if (hiddenShops != null) { |
| 349 | + shops.clear(); |
| 350 | + shops.addAll(Arrays.asList(hiddenShops)); |
| 351 | + |
| 352 | + if (done != null) { |
| 353 | + done.run(); |
| 354 | + } |
| 355 | + } |
| 356 | + } |
| 357 | + } |
| 358 | + |
| 359 | + @Override |
| 360 | + public void error(Throwable t) { |
| 361 | + Logger.e("Failed to load hidden shops, statusCode: %d", responseCode()); |
| 362 | + } |
| 363 | + }); |
| 364 | + } |
| 365 | + } |
| 366 | + } |
| 367 | + |
327 | 368 | public File getInternalStorageDirectory() { |
328 | 369 | return internalStorageDirectory; |
329 | 370 | } |
@@ -394,6 +435,9 @@ public String getDatatransTokenizationUrl() { |
394 | 435 | return urls.get("datatransTokenization"); |
395 | 436 | } |
396 | 437 |
|
| 438 | + public String getActiveShopsUrl() { |
| 439 | + return urls.get("activeShops"); |
| 440 | + } |
397 | 441 | public BarcodeFormat[] getSupportedBarcodeFormats() { |
398 | 442 | return supportedBarcodeFormats; |
399 | 443 | } |
@@ -455,8 +499,8 @@ public Shop getCheckedInShop() { |
455 | 499 | /** |
456 | 500 | * @return The available shops. Empty if no shops are defined. |
457 | 501 | */ |
458 | | - public Shop[] getShops() { |
459 | | - return shops; |
| 502 | + public List<Shop> getShops() { |
| 503 | + return Collections.unmodifiableList(shops); |
460 | 504 | } |
461 | 505 |
|
462 | 506 | public Company getCompany() { |
|
0 commit comments