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

com.github.messenger4j.internal.gson.TargetAudienceSerializer Maven / Gradle / Ivy

Go to download

A Java library for building Chatbots on the Facebook Messenger Platform - easy and fast

The newest version!
package com.github.messenger4j.internal.gson;

import com.github.messenger4j.common.SupportedCountry;
import com.github.messenger4j.messengerprofile.targetaudience.BlacklistTargetAudience;
import com.github.messenger4j.messengerprofile.targetaudience.TargetAudience;
import com.github.messenger4j.messengerprofile.targetaudience.WhitelistTargetAudience;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author Max Grabenhorst
 * @since 1.0.0
 */
final class TargetAudienceSerializer implements JsonSerializer {

  @Override
  public JsonElement serialize(
      TargetAudience targetAudience, Type typeOfSrc, JsonSerializationContext context) {
    final JsonObject targetAudienceObject = new JsonObject();
    targetAudienceObject.add("audience_type", context.serialize(targetAudience.audienceType()));

    boolean isWhitelistAudience = targetAudience instanceof WhitelistTargetAudience;
    boolean isBlacklistAudience = targetAudience instanceof BlacklistTargetAudience;

    if (isWhitelistAudience || isBlacklistAudience) {
      final JsonObject countriesObject = new JsonObject();
      if (isWhitelistAudience) {
        countriesObject.add(
            "whitelist",
            context.serialize(
                transformCountries(((WhitelistTargetAudience) targetAudience).countries())));
      }
      if (isBlacklistAudience) {
        countriesObject.add(
            "blacklist",
            context.serialize(
                transformCountries(((BlacklistTargetAudience) targetAudience).countries())));
      }
      targetAudienceObject.add("countries", countriesObject);
    }

    return targetAudienceObject;
  }

  private List transformCountries(List countries) {
    return countries.stream().map(Enum::name).collect(Collectors.toList());
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy