diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java
index ca1b15d9c..6784e416c 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java
@@ -72,7 +72,7 @@ public class ContainerModel implements Serializable {
*/
@Id
@Column(name = "CONTAINER_ID")
- @XmlElement(name = "ocntainer-model-id")
+ @XmlElement(name = "container-model-id")
private long containerId;
/**
diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java
index 32301d974..f4bbfa471 100644
--- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java
+++ b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java
@@ -22,6 +22,7 @@ import com.arsdigita.kernel.KernelConfig;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.core.CoreConstants;
import org.libreccm.l10n.GlobalizationHelper;
+import org.libreccm.pagemodel.ContainerModel;
import org.libreccm.pagemodel.PageModel;
import org.libreccm.pagemodel.PageModelManager;
import org.libreccm.pagemodel.PageModelRepository;
@@ -47,8 +48,10 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import java.util.Date;
+import java.util.List;
import java.util.Objects;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* Provides RESTful endpoints for retrieving, creating, updating and deleting
@@ -293,6 +296,7 @@ public class PageModels {
return Json
.createObjectBuilder()
+ .add("containers", mapContainersToJson(pageModel))
.add("description",
globalizationHelper
.getValueFromLocalizedString(pageModel.getDescription()))
@@ -312,6 +316,29 @@ public class PageModels {
.build();
}
+ private JsonArray mapContainersToJson(final PageModel pageModel) {
+
+ final JsonArrayBuilder containers = Json.createArrayBuilder();
+
+ pageModel
+ .getContainers()
+ .stream()
+ .map(this::mapContainerToJson)
+ .forEach(container -> containers.add(container));
+
+ return containers.build();
+ }
+
+ private JsonObject mapContainerToJson(final ContainerModel container) {
+
+ return Json
+ .createObjectBuilder()
+ .add("containerUuid", container.getContainerUuid())
+ .add("key", container.getKey())
+ .add("uuid", container.getUuid())
+ .build();
+ }
+
/**
* Check if the {@link PublicationStatus} of the provided PageModel.
*
diff --git a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx
index 35458c425..5a1e20da0 100644
--- a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx
+++ b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/PageModelsEditor.tsx
@@ -1,5 +1,10 @@
import * as React from "react";
-import {PageModel, PageModelVersion, PublicationStatus} from "./datatypes";
+import {
+ ContainerModel,
+ PageModel,
+ PageModelVersion,
+ PublicationStatus
+} from "./datatypes";
export {
PageModelEditor,
@@ -291,11 +296,15 @@ class PageModelComponent
}}>Edit
{this.props.pageModel.publicationStatus === PublicationStatus.NOT_PUBLISHED.toString()
- &&
+ &&
}
{this.props.pageModel.publicationStatus === PublicationStatus.NEEDS_UPDATE.toString()
- &&
+ &&
}
+
;
}
}
@@ -315,7 +324,7 @@ class PageModelComponent
});
}
- private getLastModifiedDate():string {
+ private getLastModifiedDate(): string {
if (this.props.pageModel.lastPublished === 0) {
return "";
@@ -405,11 +414,11 @@ class PageModelComponent
credentials: "same-origin",
headers,
method: "PUT",
- }
+ };
const url: string = `${this.props.dispatcherPrefix}`
+ `/page-models/${this.props.ccmApplication}/`
- + `${this.props.pageModel.name}`
+ + `${this.props.pageModel.name}`;
fetch(url, init)
.then((response: Response) => {
@@ -455,11 +464,11 @@ class PageModelComponent
credentials: "same-origin",
headers,
method: "POST",
- }
+ };
const url: string = `${this.props.dispatcherPrefix}`
+ `/page-models/${this.props.ccmApplication}/`
- + `${this.props.pageModel.name}`
+ + `${this.props.pageModel.name}`;
fetch(url, init)
.then((response: Response) => {
@@ -470,21 +479,45 @@ class PageModelComponent
this.setState({
...this.state,
errorMsg: `Failed to publish PageModel: `
- + ` ${response.status} ${response.statusText}`,
+ + ` ${response.status} ${response.statusText}`,
});
}
})
.catch((error) => {
- this.setState({
- ...this.state,
- errorMsg: `Failed to publish PageModel: ${error.message}`,
- })
+ this.setState({
+ ...this.state,
+ errorMsg: `Failed to publish PageModel: ${error.message}`,
+ })
});
}
}
+interface ContainerListProps {
+
+ containers: ContainerModel[],
+}
+
+class ContainerListComponent extends React.Component {
+
+ public render(): React.ReactNode {
+ return
+
+
+ {this.props.containers
+ && this.props.containers.map((container) =>
+ -
+ {container.key}
+
+
+
+
)}
+
+
+ }
+}
+
// interface PageModelEditorProps {
//
// }
@@ -549,8 +582,8 @@ class PageModelEditor
+ Create new PageModel
{
this.setState((state: PageModelEditorState) => {
@@ -588,8 +621,8 @@ class PageModelEditor
}
{this.state.selectedPageModel !== null &&
{
this.reload();
@@ -607,6 +640,7 @@ class PageModelEditor
this.setState({
...this.state,
selectedPageModel: {
+ containers: [],
description: "",
lastModified: 0,
lastPublished: 0,
@@ -627,10 +661,10 @@ class PageModelEditor
const init: RequestInit = {
credentials: "same-origin",
method: "GET",
- }
+ };
- const url: string = `${this.getDispatcherPrefix()}`
- + `/page-models/${this.getCcmApplication()}`;
+ const url: string = `${PageModelEditor.getDispatcherPrefix()}`
+ + `/page-models/${PageModelEditor.getCcmApplication()}`;
fetch(url, init)
.then((response) => {
@@ -682,7 +716,7 @@ class PageModelEditor
}
- private getDispatcherPrefix(): string {
+ private static getDispatcherPrefix(): string {
const dataElem: HTMLElement | null = document
.querySelector("#page-models-editor.react-data");
@@ -700,7 +734,7 @@ class PageModelEditor
}
}
- private getCcmApplication(): string {
+ private static getCcmApplication(): string {
const dataElem: HTMLElement | null = document
.querySelector("#page-models-editor.react-data");
diff --git a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/datatypes.ts b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/datatypes.ts
index e6e582582..48390d0e1 100644
--- a/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/datatypes.ts
+++ b/ccm-pagemodelseditor/src/main/typescript/ccm-pagemodelseditor/datatypes.ts
@@ -1,7 +1,15 @@
-export { PageModel, PageModelVersion, PublicationStatus };
+export { ContainerModel, PageModel, PageModelVersion, PublicationStatus };
+
+interface ContainerModel {
+
+ containerUuid: string;
+ key: string;
+ uuid: string;
+}
interface PageModel {
+ containers: ContainerModel[],
description: string;
modelUuid: string;
name: string;