private Optional<Value> processGDMObject(final Node object) {

    final NodeType objectType = object.getType();

    switch (objectType) {
      case Literal:
        final LiteralNode literalNode = (LiteralNode) object;
        final String value = literalNode.getValue();

        final String finalValue;

        if (!value.trim().isEmpty()) {

          // note: we need to trim the values; otherwise, we'll get a
          // 'wikibase-validator-malformed-value' error
          final String trimmedValue = value.trim();

          // note: we need to cut the values, if they are longer then 400 characters; otherwise,
          // we'll get a 'wikibase-validator-too-long' error
          finalValue = cutLongValue(trimmedValue);
        } else {

          // empty values are not possible in Wikidata - insert placeholder for now

          // finalValue = VALUE_WAS_EMPTY_ORIGINALLY;

          return Optional.empty();
        }

        return Optional.ofNullable(Datamodel.makeStringValue(finalValue));
      case Resource:

        // create ItemIdValue, i.e., create a Wikidata Item just with the Id as label

        final ResourceNode resourceNode = (ResourceNode) object;

        return Optional.ofNullable(processGDMResourceNode(resourceNode));
      default:

        // TODO throw an exception or just skip and log (i.e. these should be bnodes)
    }

    return Optional.empty();
  }
  private static String printGDMNode(final Node node) {

    final StringBuilder sb = new StringBuilder();

    final Long id = node.getId();

    sb.append("id = '");

    if (id != null) {

      sb.append(id);
    } else {

      sb.append("no node id available");
    }

    final NodeType nodeType = node.getType();

    switch (nodeType) {
      case Literal:
        sb.append("' :: ");

        final LiteralNode literalNode = (LiteralNode) node;
        final String value = literalNode.getValue();

        sb.append("value = '").append(value);

        break;
      case Resource:
        sb.append("' :: ");

        final ResourceNode resourceNode = (ResourceNode) node;
        final String resourceURI = resourceNode.getUri();

        sb.append("uri = '").append(resourceURI);

        break;
    }

    sb.append("' :: type = '").append(nodeType).append("'}");

    return sb.toString();
  }