diff --git a/Demo/pom.xml b/Demo/pom.xml new file mode 100644 index 0000000..baf3ba0 --- /dev/null +++ b/Demo/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + com.example + buttercms-demo + 1.0.0 + jar + + + + + com.buttercms + buttercmsclient + 1.12.1 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + make-assembly + package + + single + + + + + com.demo.Demo + + + + jar-with-dependencies + + + + + + + + diff --git a/Demo/src/main/java/com/demo/Demo.java b/Demo/src/main/java/com/demo/Demo.java new file mode 100644 index 0000000..bbc3689 --- /dev/null +++ b/Demo/src/main/java/com/demo/Demo.java @@ -0,0 +1,47 @@ +package com.demo; + +import com.buttercms.ButterCMSClient; +import com.buttercms.model.Page; +import com.buttercms.model.PageResponse; +import com.buttercms.model.PostResponse; +import com.buttercms.model.Post; +import com.demo.PageFields; + +import java.util.Map; +import java.util.HashMap; + + +public class Demo { + public static void main(String[] args) { + String apiKey = System.getenv("API_KEY"); + if (apiKey == null || apiKey.isEmpty()) { + System.out.println("API_KEY environment variable is not set"); + return; + } + + ButterCMSClient client = new ButterCMSClient(apiKey, true); + + try { + PageResponse pageResponse = client.getPage("*", "test-page-1", null, PageFields.class); + Page page = pageResponse.getData(); + + System.out.println("Page Slug: " + page.getSlug()); + System.out.println("Page Status: " + page.getStatus()); + System.out.println("Page Scheduled date: " + page.getScheduled()); + } catch (Exception e) { + System.out.println("Error fetching page: " + e.getMessage()); + } + + try { + PostResponse postResponse = client.getPost("test-blog-post"); + Post post = postResponse.getData(); + + System.out.println("Post Title: " + post.getTitle()); + System.out.println("Post Status: " + post.getStatus()); + System.out.println("Post Published date: " + post.getPublished()); + System.out.println("Post Scheduled date: " + post.getScheduled()); + } catch (Exception e) { + System.out.println("Error fetching post: " + e.getMessage()); + } + } +} diff --git a/Demo/src/main/java/com/demo/PageFields.java b/Demo/src/main/java/com/demo/PageFields.java new file mode 100644 index 0000000..a608786 --- /dev/null +++ b/Demo/src/main/java/com/demo/PageFields.java @@ -0,0 +1,6 @@ +package com.demo; + +public class PageFields { + public String title; + public String description; +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3e6f084 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +# Stage 1: Build Java SDK and Demo +FROM openjdk:8-jdk-alpine AS build_java + +WORKDIR /src +COPY . . +RUN ./mvnw clean install -DskipTests +RUN ./mvnw -f /src/Demo/pom.xml clean package -DskipTests + +# Stage 2: Run the Demo +FROM openjdk:8-jdk-alpine +WORKDIR /app +COPY --from=build_java /src/Demo/target/buttercms-demo-1.0.0-jar-with-dependencies.jar . + +ENV API_BASE_URL=https://api.buttercms.com/v2 +ENV API_KEY=your_api_key + +CMD ["java", "-jar", "buttercms-demo-1.0.0-jar-with-dependencies.jar"] \ No newline at end of file diff --git a/README.md b/README.md index bc00fab..969eb95 100644 --- a/README.md +++ b/README.md @@ -488,6 +488,7 @@ PagesResponse posts = butterClient.getSearchPages(queryParams); |url|String| |created|Date| |published|Date| +|scheduled|Date| |Author|[Author](#author-class)| |Categories|List<[Category](#category-class)>| |Tags|List<[Tag](#tag-class)>| @@ -507,6 +508,7 @@ PagesResponse posts = butterClient.getSearchPages(queryParams); |---|---| |Draft|1| |Published|2| +|Scheduled|3| ### PostResponse Class @@ -638,10 +640,14 @@ PagesResponse posts = butterClient.getSearchPages(queryParams); | Property | Type| |----|---| |slug| string| +|pageType|string| |fields|T| +|status|[Status](#status-enum)| +|scheduled|Date| ## Exceptions ### ButterCMSResponseException General RunTime exception that wraps API error responses + diff --git a/src/main/java/com/buttercms/ButterCMSClient.java b/src/main/java/com/buttercms/ButterCMSClient.java index fe181f3..549561f 100644 --- a/src/main/java/com/buttercms/ButterCMSClient.java +++ b/src/main/java/com/buttercms/ButterCMSClient.java @@ -245,7 +245,15 @@ private Document readXML(String url) { } private String buildURL(final String path, final Map queryParameters) { - final URIBuilder uriBuilder = new URIBuilder(URI.create(ButterCMSAPIConfig.API_BASE + path)); + String baseUrlFromEnv = System.getenv("API_BASE_URL"); + String baseUrl; + if (baseUrlFromEnv != null) { + baseUrl = baseUrlFromEnv; + } else { + baseUrl = ButterCMSAPIConfig.API_BASE_DEFAULT; + } + + final URIBuilder uriBuilder = new URIBuilder(URI.create(baseUrl + path)); uriBuilder.addParameter("auth_token", this.authToken); uriBuilder.addParameter("preview", this.preview.toString()); if (queryParameters != null) { diff --git a/src/main/java/com/buttercms/config/ButterCMSAPIConfig.java b/src/main/java/com/buttercms/config/ButterCMSAPIConfig.java index a09ff62..d3bc87e 100644 --- a/src/main/java/com/buttercms/config/ButterCMSAPIConfig.java +++ b/src/main/java/com/buttercms/config/ButterCMSAPIConfig.java @@ -1,7 +1,7 @@ package com.buttercms.config; public class ButterCMSAPIConfig { - public static String API_BASE = "https://api.buttercms.com/v2"; + public static String API_BASE_DEFAULT = "https://api.buttercms.com/v2"; public static String AUTHORS = "/authors/"; public static String CATEGORIES = "/categories/"; public static String PAGES = "/pages/"; diff --git a/src/main/java/com/buttercms/model/Page.java b/src/main/java/com/buttercms/model/Page.java index 876f795..33bc29c 100644 --- a/src/main/java/com/buttercms/model/Page.java +++ b/src/main/java/com/buttercms/model/Page.java @@ -1,15 +1,23 @@ package com.buttercms.model; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Date; import java.util.Objects; import java.util.StringJoiner; +import java.util.Optional; @JsonIgnoreProperties(ignoreUnknown = true) public class Page { private String slug; - private String pageType; + private String name; private T fields; + private Status status; + private Date updated; + private Optional pageType; + private Optional published; + private Optional scheduled; public String getSlug() { return slug; @@ -19,14 +27,6 @@ public void setSlug(String slug) { this.slug = slug; } - public String getPageType() { - return pageType; - } - - public void setPageType(String pageType) { - this.pageType = pageType; - } - public T getFields() { return fields; } @@ -35,6 +35,54 @@ public void setFields(T fields) { this.fields = fields; } + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Optional getScheduled() { + return scheduled; + } + + public void setScheduled(Date scheduled) { + this.scheduled = Optional.ofNullable(scheduled); + } + + public Date getUpdated() { + return updated; + } + + public void setUpdated(Date updated) { + this.updated = updated; + } + + public Optional getPublished() { + return published; + } + + public void setPublished(Date published) { + this.published = Optional.ofNullable(published); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Optional getPageType() { + return pageType; + } + + public void setPageType(String pageType) { + this.pageType = Optional.ofNullable(pageType); + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -56,4 +104,14 @@ public String toString() { .add("fields=" + fields) .toString(); } + + public enum Status { + @JsonProperty("draft") + DRAFT, + @JsonProperty("published") + PUBLISHED, + @JsonProperty("scheduled") + SCHEDULED + } } + diff --git a/src/main/java/com/buttercms/model/Post.java b/src/main/java/com/buttercms/model/Post.java index 45923fc..304380d 100644 --- a/src/main/java/com/buttercms/model/Post.java +++ b/src/main/java/com/buttercms/model/Post.java @@ -16,6 +16,7 @@ public class Post { private Date created; private String metaDescription; private Date published; + private Date scheduled; private String seoTitle; private String slug; private Status status; @@ -74,6 +75,14 @@ public void setPublished(Date published) { this.published = published; } + public Date getScheduled() { + return scheduled; + } + + public void setScheduled(Date scheduled) { + this.scheduled = scheduled; + } + public String getSeoTitle() { return seoTitle; } @@ -151,6 +160,7 @@ public boolean equals(Object o) { Objects.equals(created, post.created) && Objects.equals(metaDescription, post.metaDescription) && Objects.equals(published, post.published) && + Objects.equals(scheduled, post.scheduled) && Objects.equals(seoTitle, post.seoTitle) && Objects.equals(slug, post.slug) && status == post.status && @@ -164,7 +174,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(author, body, categories, created, metaDescription, published, seoTitle, slug, status, summary, tags, title, url, featuredImage, featuredImageAlt); + return Objects.hash(author, body, categories, created, metaDescription, published, scheduled, seoTitle, slug, status, summary, tags, title, url, featuredImage, featuredImageAlt); } @Override @@ -188,6 +198,10 @@ public enum Status { DRAFT, @JsonProperty("published") - PUBLISHED + PUBLISHED, + + @JsonProperty("scheduled") + SCHEDULED } } +