/*
   * Gets a list of Revision's from the TopicIndex database for a specific
   * topic
   */
  public List<Object[]> getTopicRevisionsById(final Integer topicId) {
    final List<Object[]> results = new ArrayList<Object[]>();
    try {
      final List<String> additionalKeys =
          CollectionUtilities.toArrayList("revisions", "topic" + topicId);
      final BaseRestCollectionV1<RESTTopicV1, RESTTopicCollectionV1> topicRevisions;
      if (collectionsCache.containsKey(RESTTopicV1.class, additionalKeys)) {
        topicRevisions =
            collectionsCache.get(RESTTopicV1.class, RESTTopicCollectionV1.class, additionalKeys);
      } else {
        /* We need to expand the Revisions collection */
        final ExpandDataTrunk expand = new ExpandDataTrunk();
        final ExpandDataTrunk expandTags = new ExpandDataTrunk(new ExpandDataDetails("tags"));
        final ExpandDataTrunk expandRevs = new ExpandDataTrunk(new ExpandDataDetails("revisions"));
        expandTags.setBranches(
            CollectionUtilities.toArrayList(
                new ExpandDataTrunk(new ExpandDataDetails("categories"))));
        expandRevs.setBranches(
            CollectionUtilities.toArrayList(
                expandTags,
                new ExpandDataTrunk(new ExpandDataDetails("sourceUrls")),
                new ExpandDataTrunk(new ExpandDataDetails("properties")),
                new ExpandDataTrunk(new ExpandDataDetails("outgoingRelationships")),
                new ExpandDataTrunk(new ExpandDataDetails("incomingRelationships"))));
        expand.setBranches(CollectionUtilities.toArrayList(expandRevs));

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

        final RESTTopicV1 topic = client.getJSONTopic(topicId, expandString);
        collectionsCache.add(RESTTopicV1.class, topic.getRevisions(), additionalKeys, true);
        topicRevisions = topic.getRevisions();
      }

      // Create the custom revisions list
      if (topicRevisions != null && topicRevisions.getItems() != null) {
        for (final RESTTopicV1 topicRev : topicRevisions.getItems()) {
          Object[] revision = new Object[2];
          revision[0] = topicRev.getRevision();
          revision[1] = topicRev.getLastModified();
          results.add(revision);
        }
      }
      return results;
    } catch (Exception e) {
      log.debug(e.getMessage());
      e.printStackTrace();
    }
    return null;
  }
 /*
  * Gets a specific category tuple from the database as specified by the
  * categories ID.
  */
 public RESTCategoryV1 getCategoryById(final int id) {
   try {
     if (entityCache.containsKeyValue(RESTCategoryV1.class, id)) {
       return entityCache.get(RESTCategoryV1.class, id);
     } else {
       final RESTCategoryV1 category = client.getJSONCategory(id, null);
       entityCache.add(category);
       return category;
     }
   } catch (Exception e) {
     log.debug(e.getMessage());
     e.printStackTrace();
   }
   return null;
 }