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
+
+
+
+
+
+ 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
}
}
+