
com.contentful.java.cda.ResourceFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of java-sdk Show documentation
Show all versions of java-sdk Show documentation
Java SDK for Contentful's Content Delivery API.
package com.contentful.java.cda;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import retrofit2.Response;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static com.contentful.java.cda.rich.RichTextFactory.resolveRichTextField;
public final class ResourceFactory {
public ResourceFactory() {
throw new AssertionError();
}
static final Gson GSON = createGson();
public static CDAArray array(Response arrayResponse, CDAClient client) {
CDAArray array = arrayResponse.body();
array.assets = new LinkedHashMap<>();
array.entries = new LinkedHashMap<>();
Set resources = collectResources(array);
ResourceUtils.localizeResources(resources, client.cache);
ResourceUtils.mapResources(resources, array.assets, array.entries);
ResourceUtils.setRawFields(array);
resolveRichTextField(array, client);
ResourceUtils.resolveLinks(array, client);
return array;
}
public static CDAArray arrayFromJson(CDAArray array, CDAClient client) {
array.assets = new LinkedHashMap<>();
array.entries = new LinkedHashMap<>();
Set resources = collectResources(array);
ResourceUtils.localizeResources(resources, client.cache);
ResourceUtils.mapResources(resources, array.assets, array.entries);
ResourceUtils.setRawFields(array);
resolveRichTextField(array, client);
ResourceUtils.resolveLinks(array, client);
return array;
}
private static Set collectResources(CDAArray array) {
Set resources = new LinkedHashSet<>(array.items());
if (array.includes != null) {
if (array.includes.assets != null) {
resources.addAll(array.includes.assets);
}
if (array.includes.entries != null) {
resources.addAll(array.includes.entries);
}
}
return resources;
}
static SynchronizedSpace sync(
Response newSpace,
SynchronizedSpace oldSpace,
CDAClient client) {
Map assets = new HashMap<>();
Map entries = new HashMap<>();
// Map resources from existing space
if (oldSpace != null) {
ResourceUtils.mapResources(oldSpace.items(), assets, entries);
}
SynchronizedSpace result = ResourceUtils.iterate(newSpace, client);
ResourceUtils.mapResources(result.items(), assets, entries);
ResourceUtils.mapDeletedResources(result);
List items = new ArrayList<>();
items.addAll(assets.values());
items.addAll(entries.values());
result.items = items;
result.assets = assets;
result.entries = entries;
ResourceUtils.setRawFields(result);
resolveRichTextField(result, client);
ResourceUtils.resolveLinks(result, client);
return result;
}
static T fromResponse(Response response) {
return response.body();
}
@SuppressWarnings("unchecked")
static List fromArrayToItems(CDAArray array) {
final List result = new ArrayList<>(array.items.size());
for (CDAResource resource : array.items) {
result.add((T) resource);
}
return result;
}
public static Gson createGson() {
return new GsonBuilder()
.registerTypeAdapter(CDAResource.class, new ResourceDeserializer())
.disableHtmlEscaping()
.create();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy