Blueprint Developer Manual / Version 2107
Table Of ContentsDeveloping a new software almost always starts by analyzing the domain model. This is not different for CoreMedia CMS. Here the domain model is the source for modeling the content type model. The content type model is the backbone of CoreMedia CMS as it describes what content means to you. Read Chapter 4, Developing a Content Type Model in Content Server Manual for details on the content types.
Basically, there are two places within the Blueprint workspace you may use if you define your own
content type model or extend the Blueprint's one. You will
learn both of them by defining a new content type CMHelloWorld
as a child
of CMTeaser
within a new file mydoctypes.xml
as follows:
<?xml version="1.0" encoding="ISO-8859-1" ?> <DocumentTypeModel xmlns="http://www.coremedia.com/2008/documenttypes" Name="my-doctypes"> <ImportGrammar Name="coremedia-richtext-1.0"/> <ImportDocType Name="CMTeaser"/> <DocType Name="CMHelloWorld" Parent="CMTeaser"> <StringProperty Name="message" Length="32"/> </DocType> </DocumentTypeModel>
Defining content types in contentserver-blueprint-component
The first and a little easier way of defining CMHelloWorld
is to put the
new file mydoctypes.xml
shown above into the directory
apps/content-server/modules/server/contentserver-blueprint-component/src/main/resources/framework/doctypes/my/
.
It is good style to create a subfolder under doctypes
for your customization, here
named "my".
After doing so, you can test your new content type. To do so, you have to build the
contentserver-blueprint-component
module and the content-server-app
module as follows. Remember to stop the server if you have not already.
$ cd apps/content-server/modules/server/contentserver-blueprint-component $ mvn clean install $ cd apps/content-server/spring-boot/content-server-app $ mvn clean install
Now, start the Content Management Server application and take a look into its log file. You should see the following message, telling you that the Content Server created a new database table for the new content type.
[INFO] SQLStore - DocumentTypeRegistry: creating table: CREATE TABLE CMHelloWorld( id_ INT NOT NULL, version_ INT NOT NULL, isApproved_ TINYINT, isPublished_ TINYINT, editorId_ INT, approverId_ INT, publisherId_ INT, editionDate_ DATETIME, approvalDate_ DATETIME, publicationDate_ DATETIME, "locale" VARCHAR(32), "masterVersion" INT, "keywords" VARCHAR(1024), "validFrom" DATETIME, "validFrom_tz" VARCHAR(30), "validTo" DATETIME, "validTo_tz" VARCHAR(30), "segment" VARCHAR(64), "title" VARCHAR(512), "teaserTitle" VARCHAR(512), "notSearchable" INT, "message" VARCHAR(32), PRIMARY KEY (id_, version_), FOREIGN KEY (id_) REFERENCES Resources(id_))
Using a Separate Module in the Context of an Extension
The second possibility is the more flexible way. You build your own module in the context of an
extension. The following steps assume that an extension module my-extension
already
exists and requires a new content type. Proceed as follows:
Create a new subfolder
my-extension-server
in theapps/content-server/modules/extensions/my-extension
directory.Create a
pom.xml
file and add the following contents.:<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.coremedia.blueprint</groupId> <artifactId>my-extension</artifactId> <version>${project.version}</version> <relativePath>../pom.xml</relativePath> </parent> <artifactId>my-extension-server</artifactId> <properties> <coremedia.project.extension.for> server </coremedia.project.extension.for> </properties> </project>
Adjust the
groupId
andartifactId
of the parent declaration according to your project settings.Add this module's Maven coordinates to the Extension Descriptor of the extension.
Create the subfolder
src/main/resources/framework/doctypes/myextension
.Copy the content type definition file from above into the folder created in the last step.
Refer to Section 4.2.1, “Removing Optional Components” to enable the extension.