All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.contentful.java.cda.ResourceFactory Maven / Gradle / Ivy

There is a newer version: 9.1.0
Show newest version
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