/*
   * Gets a collection of translated topics based on the list of topic ids
   * passed.
   */
  public RESTTranslatedTopicCollectionV1 getTranslatedTopicsByTopicIds(
      final List<Integer> ids, final String locale) {
    if (ids.isEmpty()) return null;

    try {
      final RESTTranslatedTopicCollectionV1 topics = new RESTTranslatedTopicCollectionV1();
      final StringBuffer urlVars = new StringBuffer("query;latestTranslations=true;topicIds=");
      // final String encodedComma = URLEncoder.encode(",", "UTF-8");

      for (final Integer id : ids) {
        if (!entityCache.containsKeyValue(RESTTranslatedTopicV1.class, id)
            && !entityCache.containsKeyValue(RESTTranslatedTopicV1.class, (id * -1))) {
          urlVars.append(id + ",");
        } else if (entityCache.containsKeyValue(RESTTranslatedTopicV1.class, (id * -1))) {
          topics.addItem(entityCache.get(RESTTranslatedTopicV1.class, (id * -1)));
        } else {
          topics.addItem(entityCache.get(RESTTranslatedTopicV1.class, id));
        }
      }

      String query = urlVars.toString();

      if (query.length() != "query;latestTranslations=true;topicIds=".length()) {
        query = query.substring(0, query.length() - 1);

        /* Add the locale to the query if one was passed */
        if (locale != null && !locale.isEmpty()) query += ";locale1=" + locale + "1";

        PathSegment path = new PathSegmentImpl(query, false);

        /*
         * We need to expand the all the items in the translatedtopic
         * collection
         */
        final ExpandDataTrunk expand = new ExpandDataTrunk();

        final ExpandDataTrunk translatedTopicsExpand =
            new ExpandDataTrunk(new ExpandDataDetails("translatedtopics"));
        final ExpandDataTrunk topicExpandTranslatedTopics =
            new ExpandDataTrunk(new ExpandDataDetails(RESTTopicV1.TRANSLATEDTOPICS_NAME));
        final ExpandDataTrunk tags = new ExpandDataTrunk(new ExpandDataDetails("tags"));
        final ExpandDataTrunk properties =
            new ExpandDataTrunk(new ExpandDataDetails(RESTBaseTopicV1.PROPERTIES_NAME));
        final ExpandDataTrunk categories = new ExpandDataTrunk(new ExpandDataDetails("categories"));
        final ExpandDataTrunk parentTags = new ExpandDataTrunk(new ExpandDataDetails("parenttags"));
        final ExpandDataTrunk outgoingRelationships =
            new ExpandDataTrunk(
                new ExpandDataDetails(RESTTranslatedTopicV1.ALL_LATEST_OUTGOING_NAME));
        final ExpandDataTrunk topicsExpand =
            new ExpandDataTrunk(new ExpandDataDetails(RESTTranslatedTopicV1.TOPIC_NAME));

        /* We need to expand the categories collection on the topic tags */
        tags.setBranches(CollectionUtilities.toArrayList(categories, parentTags, properties));
        outgoingRelationships.setBranches(
            CollectionUtilities.toArrayList(tags, properties, topicsExpand));

        topicsExpand.setBranches(CollectionUtilities.toArrayList(topicExpandTranslatedTopics));

        translatedTopicsExpand.setBranches(
            CollectionUtilities.toArrayList(tags, outgoingRelationships, properties, topicsExpand));

        expand.setBranches(CollectionUtilities.toArrayList(translatedTopicsExpand));

        final String expandString = mapper.writeValueAsString(expand);
        // final String expandEncodedString = URLEncoder.encode(expandString, "UTF-8");

        final RESTTranslatedTopicCollectionV1 downloadedTopics =
            client.getJSONTranslatedTopicsWithQuery(path, expandString);
        entityCache.add(downloadedTopics);

        /* Transfer the downloaded data to the current topic list */
        if (downloadedTopics != null && downloadedTopics.getItems() != null) {
          for (final RESTTranslatedTopicV1 item : downloadedTopics.getItems()) {
            entityCache.add(item, item.getTopicId(), false);
            topics.addItem(item);
          }
        }
      }

      return topics;
    } catch (Exception e) {
      log.error(ExceptionUtilities.getStackTrace(e));
    }
    return null;
  }