All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tw.yukina.notion.sdk.endpoint.page.AbstractPageEndpoint Maven / Gradle / Ivy

package tw.yukina.notion.sdk.endpoint.page;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.jetbrains.annotations.NotNull;
import tw.yukina.notion.sdk.endpoint.block.AbstractBlockEndpoint;
import tw.yukina.notion.sdk.model.page.Page;

import java.util.*;

public abstract class AbstractPageEndpoint extends AbstractBlockEndpoint {

    public static final String PATH = "/pages/";

    public static Page toPage(@NotNull ObjectNode objectNode, @NotNull ObjectMapper objectMapper) {
        try {
            return objectMapper.readValue(objectNode.toString(), Page.class);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    public static void preparePageRequest(ObjectNode objectNode){
        ObjectNode properties = (ObjectNode) objectNode.get("properties");
        Iterator> nodes = properties.fields();

        List propertyNeedRemove = new ArrayList<>();

        while (nodes.hasNext()) {
            Map.Entry entry = nodes.next();
            if(propertyRequestNeedRemove(entry)) propertyNeedRemove.add(entry.getKey());
        }

        for(String propertyName: propertyNeedRemove){
            properties.remove(propertyName);
        }
    }

    public static boolean propertyRequestNeedRemove(Map.Entry entry){
        switch (entry.getValue().get("type").asText()) {
            case "formula":
            case "rollup":
            case "created_time":
            case "created_by":
            case "last_edited_time":
            case "last_edited_by":
                return true;
            case "select":
                return !entry.getValue().has("select");
            case "url":
                return !entry.getValue().has("url");
            case "phone_number":
                return !entry.getValue().has("phone_number");
            case "email":
                return !entry.getValue().has("email");
            case "date":
                return !entry.getValue().has("date");
            // TODO: 11/2/21  
        }
        return false;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy