in community/document-readers/spring-ai-alibaba-starter-document-reader-notion/src/main/java/com/alibaba/cloud/ai/reader/notion/NotionDocumentReader.java [75:168]
private Map<String, Object> buildMetadata() {
Map<String, Object> metadata = new HashMap<>();
// Add basic metadata
metadata.put(NotionResource.SOURCE, notionResource.getSource());
metadata.put("resourceType", notionResource.getResourceType().name());
metadata.put("resourceId", notionResource.getResourceId());
// Add metadata from Notion API
if (pageMetadata != null) {
// Creation and update times
String createdTime = pageMetadata.get("created_time").asText();
if (StringUtils.hasText(createdTime)) {
metadata.put("createdTime", Instant.parse(createdTime).toEpochMilli());
}
String lastEditedTime = pageMetadata.get("last_edited_time").asText();
if (StringUtils.hasText(lastEditedTime)) {
metadata.put("lastEditedTime", Instant.parse(lastEditedTime).toEpochMilli());
}
// Creator and last editor
JsonNode createdBy = pageMetadata.get("created_by");
if (createdBy != null) {
String creatorName = createdBy.get("name").asText();
String creatorId = createdBy.get("id").asText();
if (StringUtils.hasText(creatorName)) {
metadata.put("createdBy", creatorName);
}
if (StringUtils.hasText(creatorId)) {
metadata.put("createdById", creatorId);
}
}
JsonNode lastEditedBy = pageMetadata.get("last_edited_by");
if (lastEditedBy != null) {
String editorName = lastEditedBy.get("name").asText();
String editorId = lastEditedBy.get("id").asText();
if (StringUtils.hasText(editorName)) {
metadata.put("lastEditedBy", editorName);
}
if (StringUtils.hasText(editorId)) {
metadata.put("lastEditedById", editorId);
}
}
// URL
String url = pageMetadata.get("url").asText();
if (StringUtils.hasText(url)) {
metadata.put("url", url);
}
// Parent information
JsonNode parent = pageMetadata.get("parent");
if (parent != null) {
String parentType = parent.get("type").asText();
if (StringUtils.hasText(parentType)) {
metadata.put("parentType", parentType);
String parentId = parent.get(parentType + "_id").asText();
if (StringUtils.hasText(parentId)) {
metadata.put("parentId", parentId);
}
}
}
// Icon
JsonNode icon = pageMetadata.get("icon");
if (icon != null) {
String iconType = icon.get("type").asText();
String iconUrl = icon.get("url").asText();
if (StringUtils.hasText(iconType)) {
metadata.put("iconType", iconType);
}
if (StringUtils.hasText(iconUrl)) {
metadata.put("iconUrl", iconUrl);
}
}
// Cover
JsonNode cover = pageMetadata.get("cover");
if (cover != null) {
String coverType = cover.get("type").asText();
String coverUrl = cover.get("url").asText();
if (StringUtils.hasText(coverType)) {
metadata.put("coverType", coverType);
}
if (StringUtils.hasText(coverUrl)) {
metadata.put("coverUrl", coverUrl);
}
}
}
return metadata;
}