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

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

package com.contentful.java.cda;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

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 retrofit2.Response;

final class ResourceFactory {
  private ResourceFactory() {
    throw new AssertionError();
  }

  static final Gson GSON = createGson();

  static CDASpace space(Response response) {
    CDASpace space = response.body();
    setDefaultLocale(space);
    return space;
  }

  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.space());
    ResourceUtils.mapResources(resources, array.assets, array.entries);
    ResourceUtils.setRawFields(array);
    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);
    ResourceUtils.resolveLinks(result, client);

    return result;
  }

  static  T fromResponse(Response response) {
    return response.body();
  }

  private static void setDefaultLocale(CDASpace space) {
    for (CDALocale locale : space.locales()) {
      if (locale.isDefaultLocale()) {
        space.defaultLocale = locale;
        break;
      }
    }
  }

  private static Gson createGson() {
    return new GsonBuilder()
        .registerTypeAdapter(CDAResource.class, new ResourceDeserializer())
        .create();
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy