@SuppressWarnings("unchecked")
  private AnnotationView buildAnnotationView(Annotation annotation, boolean loadAllReplies) {
    Object values[];
    try {
      values =
          (Object[])
              hibernateTemplate
                  .findByCriteria(
                      DetachedCriteria.forClass(Article.class)
                          .add(Restrictions.eq("ID", annotation.getArticleID()))
                          .setProjection(
                              Projections.projectionList()
                                  .add(Projections.property("doi"))
                                  .add(Projections.property("title"))),
                      0,
                      1)
                  .get(0);

    } catch (IndexOutOfBoundsException e) {
      // this should never happen
      throw new IllegalStateException(
          "Annotation "
              + annotation.getID()
              + " pointed to an article that didn't exist;"
              + " articleID: "
              + annotation.getArticleID());
    }

    String articleDoi = (String) values[0];
    String articleTitle = (String) values[1];

    return buildAnnotationView(annotation, articleDoi, articleTitle, loadAllReplies);
  }
  @SuppressWarnings("unchecked")
  private AnnotationView buildAnnotationView(
      Annotation annotation, String articleDoi, String articleTitle, boolean loadAllReplies) {
    Map<Long, List<Annotation>> fulReplyMap = null;
    if (loadAllReplies) {
      fulReplyMap = buildReplyMap(annotation.getArticleID());
    }

    return new AnnotationView(annotation, articleDoi, articleTitle, fulReplyMap);
  }