/**
   * Helper function to load an annotation object from an xwiki object.
   *
   * @param object the xwiki object to load an annotation from
   * @param deprecatedContext XWikiContext to make operations on xwiki data
   * @return the Annotation instance for the annotation stored in BaseObject
   */
  protected Annotation loadAnnotationFromObject(BaseObject object, XWikiContext deprecatedContext) {
    // load the annotation with its ID, special handling of the state since it needs
    // deserialization, special
    // handling of the original selection which shouldn't be set if it's empty
    Annotation annotation = new Annotation(object.getNumber() + "");
    annotation.setState(AnnotationState.valueOf(object.getStringValue(Annotation.STATE_FIELD)));
    String originalSelection = object.getStringValue(Annotation.ORIGINAL_SELECTION_FIELD);
    if (originalSelection != null && originalSelection.length() > 0) {
      annotation.setOriginalSelection(originalSelection);
    }

    Collection<String> skippedFields =
        Arrays.asList(new String[] {Annotation.ORIGINAL_SELECTION_FIELD, Annotation.STATE_FIELD});
    // go through all props and load them in the annotation, except for the ones already loaded
    // get all the props, filter those that need to be skipped and save the rest
    for (String propName : object.getPropertyNames()) {
      if (!skippedFields.contains(propName)) {
        try {
          annotation.set(propName, ((BaseProperty) object.get(propName)).getValue());
        } catch (XWikiException e) {
          this.logger.warn(
              "Unable to get property "
                  + propName
                  + " from object "
                  + object.getClassName()
                  + "["
                  + object.getNumber()
                  + "]. Will not be saved in the annotation.",
              e);
        }
      }
    }
    return annotation;
  }
  private static void fillObjectSummary(
      ObjectSummary objectSummary,
      ObjectFactory objectFactory,
      URI baseUri,
      Document doc,
      BaseObject xwikiObject,
      XWiki xwikiApi,
      Boolean withPrettyNames)
      throws XWikiException {

    objectSummary.setId(String.format("%s:%s", doc.getPrefixedFullName(), xwikiObject.getGuid()));
    objectSummary.setGuid(xwikiObject.getGuid());
    objectSummary.setPageId(doc.getPrefixedFullName());
    objectSummary.setPageVersion(doc.getVersion());
    objectSummary.setPageAuthor(doc.getAuthor());
    if (withPrettyNames) {
      objectSummary.setPageAuthorName(xwikiApi.getUserName(doc.getAuthor(), false));
    }
    objectSummary.setWiki(doc.getWiki());
    objectSummary.setSpace(doc.getSpace());
    objectSummary.setPageName(doc.getName());
    objectSummary.setClassName(xwikiObject.getClassName());
    objectSummary.setNumber(xwikiObject.getNumber());

    String[] propertyNames = xwikiObject.getPropertyNames();
    if (propertyNames.length > 0) {
      objectSummary.setHeadline(xwikiObject.get(propertyNames[0]).toFormString());
    }
  }