You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2020/09/04 15:55:42 UTC

[sling-org-apache-sling-app-cms] branch SLING-8913-multiple-instance-types updated: Adding UI for importers, exports and agents

This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch SLING-8913-multiple-instance-types
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git


The following commit(s) were added to refs/heads/SLING-8913-multiple-instance-types by this push:
     new 7fa6f9b  Adding UI for importers, exports and agents
7fa6f9b is described below

commit 7fa6f9bd3bf2bd95cc5ba06d582bcf6b10a3d6c2
Author: Dan Klco <dk...@apache.org>
AuthorDate: Fri Sep 4 11:55:26 2020 -0400

    Adding UI for importers, exports and agents
---
 feature/src/main/features/distribution.json        |  12 +--
 .../components/cms/contentgrid/contentgrid.jsp     |   5 +-
 .../components/cms/contenttable/contenttable.jsp   |   3 +-
 .../sling-cms/components/cms/tilecard/tilecard.jsp |  35 +++++++
 .../libs/sling-cms/components/cms/tiles/tiles.jsp  |  26 +++++
 .../components/publication/agent/agent.jsp         | 112 +++++++++++++++++++++
 .../publication/configuration/configuration.jsp    |  36 +++++++
 .../configurationarray/configurationarray.jsp      |  33 ++++++
 .../components/publication/exporter/exporter.jsp   |  66 ++++++++++++
 .../sling-cms/components/publication/home/home.jsp |  26 +++++
 .../components/publication/importer/importer.jsp   |  66 ++++++++++++
 .../status/status.jsp}                             |   0
 .../libs/sling-cms/content/publication/agent.json  |  94 +++++++++++++++++
 .../libs/sling-cms/content/publication/agents.json |  57 +++++++++++
 .../sling-cms/content/publication/exporter.json    |  69 +++++++++++++
 .../sling-cms/content/publication/exporters.json   |  57 +++++++++++
 .../libs/sling-cms/content/publication/home.json   |  53 ++++++++++
 .../sling-cms/content/publication/importer.json    |  45 +++++++++
 .../sling-cms/content/publication/importers.json   |  57 +++++++++++
 .../libs/sling-cms/content/shared/publish.json     |   2 +-
 .../libs/sling-cms/content/shared/unpublish.json   |   2 +-
 .../jcr_root/libs/sling-cms/content/start.json     |  11 ++
 22 files changed, 855 insertions(+), 12 deletions(-)

diff --git a/feature/src/main/features/distribution.json b/feature/src/main/features/distribution.json
index 52d467f..bf9080a 100644
--- a/feature/src/main/features/distribution.json
+++ b/feature/src/main/features/distribution.json
@@ -12,27 +12,27 @@
     ],
     "configurations": {
         "org.apache.sling.distribution.resources.impl.DistributionConfigurationResourceProviderFactory~agent": {
-            "provider.roots": "/libs/sling-cms/content/distribution/services/agents",
+            "provider.roots": "/libs/sling/distribution/settings/agents",
             "kind": "agent"
         },
         "org.apache.sling.distribution.resources.impl.DistributionConfigurationResourceProviderFactory~exporter": {
-            "provider.roots": "/libs/sling-cms/content/distribution/services/exporters",
+            "provider.roots": "/libs/sling/distribution/settings/exporters",
             "kind": "exporter"
         },
         "org.apache.sling.distribution.resources.impl.DistributionConfigurationResourceProviderFactory~importer": {
-            "provider.roots": "/libs/sling-cms/content/distribution/services/importers",
+            "provider.roots": "/libs/sling/distribution/settings/importers",
             "kind": "importer"
         },
         "org.apache.sling.distribution.resources.impl.DistributionServiceResourceProviderFactory~agent": {
-            "provider.roots": "/libs/sling-cms/content/distribution/services/agents",
+            "provider.roots": "/libs/sling/distribution/services/agents",
             "kind": "agent"
         },
         "org.apache.sling.distribution.resources.impl.DistributionServiceResourceProviderFactory~exporter": {
-            "provider.roots": "/libs/sling-cms/content/distribution/services/exporter",
+            "provider.roots": "/libs/sling/distribution/services/exporter",
             "kind": "exporter"
         },
         "org.apache.sling.distribution.resources.impl.DistributionServiceResourceProviderFactory~importer": {
-            "provider.roots": "/libs/sling-cms/content/distribution/services/importer",
+            "provider.roots": "/libs/sling/distribution/services/importer",
             "kind": "importer"
         },
         "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~distribution": {
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentgrid/contentgrid.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentgrid/contentgrid.jsp
index b122bab..e680f54 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentgrid/contentgrid.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contentgrid/contentgrid.jsp
@@ -82,9 +82,8 @@
                                 <div class="card-footer-item card-footer-group">
                                     <span>${sling:encode(title,'HTML')}</span>
                                     <c:catch var="ex">
-                                        <small>
-                                            <fmt:formatDate type="both" dateStyle="long" timeStyle="long" value = "${child.valueMap['jcr:content/jcr:lastModified'].time}" />
-                                        </small>
+                                        <fmt:formatDate type="both" dateStyle="long" timeStyle="long" value = "${child.valueMap['jcr:content/jcr:lastModified'].time}" var="lastMod" />
+                                        <small>${lastMod}</small>
                                     </c:catch>
                                 </div>
                             </footer>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
index ba5540e..a4fcab0 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/contenttable/contenttable.jsp
@@ -35,7 +35,8 @@
             <c:set var="parentPath" value="${slingRequest.requestPathInfo.suffix}${not empty properties.appendSuffix ? properties.appendSuffix : ''}" />
             <c:set var="count" value="1" />
             <c:forEach var="child" items="${sling:listChildren(sling:getResource(resourceResolver, parentPath))}" varStatus="status">
-                <sling:getResource var="typeConfig" base="${resource}" path="types/${child.valueMap['jcr:primaryType']}" />
+                <c:set var="type" value="${not empty child.valueMap['jcr:primaryType'] ? child.valueMap['jcr:primaryType'] : fn:replace(child.resourceType,'/','-')}" />
+                <sling:getResource var="typeConfig" base="${resource}" path="types/${type}" />
                 <c:if test="${typeConfig != null && !fn:contains(child.name,':')}">
                     <tr class="contentnav__item sortable__row" data-resource="${child.path}" data-type="${typeConfig.path}">
                         <td class="Cell-Static" title="# ${status.index + 1}" data-sort-value="<fmt:formatNumber pattern="0000" value="${count}" />">
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tilecard/tilecard.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tilecard/tilecard.jsp
new file mode 100644
index 0000000..fb3a9e2
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tilecard/tilecard.jsp
@@ -0,0 +1,35 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+ <%@include file="/libs/sling-cms/global.jsp"%>
+<div class="tile is-parent is-3 contentnav__item">
+    <div class="tile is-child">
+        <div class="card is-linked" title="${sling:encode(properties.title,'HTML_ATTR')}" data-value="${resource.path}">
+            <div class="card-image">
+                <figure class="image is-5by4">
+                    <img src="${sling:encode(properties.image,'HTML_ATTR')}" loading="lazy" alt="${sling:encode(properties.title,'HTML_ATTR')}">
+                </figure>
+            </div>
+            <footer class="card-footer">
+                <a class="card-footer-item" href="${sling:encode(properties.link,'HTML_ATTR')}" title="${sling:encode(properties.title,'HTML')}">
+                    ${sling:encode(properties.title,'HTML')}
+                </a>
+            </footer>
+        </div>
+    </div>
+</div> 
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tiles/tiles.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tiles/tiles.jsp
new file mode 100644
index 0000000..ff7d4fb
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/tiles/tiles.jsp
@@ -0,0 +1,26 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+ <%@include file="/libs/sling-cms/global.jsp"%>
+<div class="scroll-container contentnav">
+    <div class="tile is-ancestor">
+        <c:forEach var="child" items="${sling:listChildren(resource)}">
+            <sling:include resource="${child}" />
+        </c:forEach>
+    </div>
+</div>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/agent/agent.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/agent/agent.jsp
new file mode 100644
index 0000000..a1b581d
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/agent/agent.jsp
@@ -0,0 +1,112 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+<%@include file="/libs/sling-cms/global.jsp"%>
+<c:set var="agent" value="${slingRequest.requestPathInfo.suffixResource}" />
+<c:set var="agentCfg" value="${agent.valueMap}" />
+<nav class="breadcrumb" aria-label="breadcrumbs">
+    <ul>
+        <li>
+            <a href="/cms/publication/home.html">
+                Publication
+            </a>
+        </li>
+        <li>
+            <a href="/cms/publication/agents.html/libs/sling/distribution/settings/agents">
+                Agents
+            </a>
+        </li>
+        <li class="is-active">
+            <a href="#">
+                <sling:encode value="${agentCfg.title}" mode="HTML" />
+            </a>
+        </li>
+    </ul>
+</nav>
+<h1 class="title">
+    <sling:encode value="${agentCfg.title}" mode="HTML" />
+</h1>
+<h2 class="subtitle">
+    <sling:encode value="${agent.name}" mode="HTML" />
+</h2>
+<div class="scroll-container">
+    <c:if test="${not empty agentCfg.details}">
+        <p>
+            <sling:encode value="${agent.name}" mode="HTML" />
+        </p>
+    </c:if>
+    <div class="columns">
+        <div class="column is-6">
+            <article class="message is-light">
+                <div class="message-header">
+                    <p>Configuration</p>
+                </div>
+                <div class="message-body">
+                    <dl>
+                        <sling:getResource base="${resource}" path="configuration" var="configuration" />
+                        <c:set var="config" value="${agentCfg}" scope="request" />
+                        <c:forEach var="configRsrc" items="${sling:listChildren(configuration)}">
+                            <sling:include resource="${configRsrc}" />
+                        </c:forEach>
+                    </dl>
+                    <a class="button" href="/system/console/configMgr/${agentCfg['service.pid']}">Edit</a>
+                </div>
+            </article>
+        </div>
+        <div class="column is-6">
+            <c:forEach var="url" items="${agentCfg['packageImporter.endpoints']}" varStatus="status">
+                <article class="message is-light">
+                    <sling:getResource var="queue" path="/libs/sling/distribution/services/agents/${agent.name}/queues/endpoint${status.index}" />
+                    <div class="message-header">
+                        <p>Queue #${status.index + 1}</p>
+                    </div>
+                    <div class="message-body">
+                        <dl>
+                            <dt>Endpoint URL</dt>
+                            <dd>
+                                <sling:encode value="${url}" mode="HTML" />
+                            </dd>
+                            <dt>Count</dt>
+                            <dd>
+                                <sling:encode value="${queue.valueMap.itemsCount}" mode="HTML" />
+                            </dd>
+                            <dt>State</dt>
+                            <dd>
+                                <sling:encode value="${queue.valueMap.state}" mode="HTML" />
+                            </dd>
+                        </dl>
+                    </div>
+                </article>
+            </c:forEach>
+        </div>
+    </div>
+    
+    <article class="message is-light">
+        <div class="message-header">
+            <p>Logs</p>
+        </div>
+        <div class="message-body">
+            <figure class="image is-16by9">
+                <iframe class="has-ratio" src="/libs/sling/distribution/services/agents/${agent.name}/log.txt"></iframe>
+            </figure>
+        </div>
+    </article>
+
+</div>
+
+
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/configuration/configuration.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/configuration/configuration.jsp
new file mode 100644
index 0000000..d02ecec
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/configuration/configuration.jsp
@@ -0,0 +1,36 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+<%@include file="/libs/sling-cms/global.jsp"%>
+<c:if test="${not empty config[properties.key]}">
+    <dt>
+        <sling:encode value="${properties.title}" mode="HTML" />
+    </dt>
+    <dd>
+        <c:choose>
+            <c:when test="${not empty properties.objectClass}">
+                <a href="/system/console/services?filter=%28%26%28objectClass%3D${properties.objectClass}%29%28name%3D${sling:encode(config[properties.key],'HTML_ATTR')}%29%29">
+                    <sling:encode value="${config[properties.key]}" mode="HTML" />
+                </a>
+            </c:when>
+            <c:otherwise>
+                <sling:encode value="${config[properties.key]}" mode="HTML" />
+            </c:otherwise>
+        </c:choose>
+    </dd>
+</c:if>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/configurationarray/configurationarray.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/configurationarray/configurationarray.jsp
new file mode 100644
index 0000000..191bb99
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/configurationarray/configurationarray.jsp
@@ -0,0 +1,33 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+<%@include file="/libs/sling-cms/global.jsp"%>
+<c:if test="${config[properties.key] != null && fn:length(config[properties.key]) > 0 && not empty config[properties.key][0]}">
+    <dt>
+        <sling:encode value="${properties.title}" mode="HTML" />
+    </dt>
+    <dd>
+        <ul>
+            <c:forEach var="item" items="${config[properties.key]}">
+                <li>
+                    <sling:encode value="${item}" mode="HTML" />
+                </li>
+            </c:forEach>
+        </ul>
+    </dd>
+</c:if>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/exporter/exporter.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/exporter/exporter.jsp
new file mode 100644
index 0000000..426f9bc
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/exporter/exporter.jsp
@@ -0,0 +1,66 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+<%@include file="/libs/sling-cms/global.jsp"%>
+<c:set var="exporter" value="${slingRequest.requestPathInfo.suffixResource}" />
+<c:set var="exporterCfg" value="${exporter.valueMap}" />
+<nav class="breadcrumb" aria-label="breadcrumbs">
+    <ul>
+        <li>
+            <a href="/cms/publication/home.html">
+                Publication
+            </a>
+        </li>
+        <li>
+            <a href="/cms/publication/exporters.html/libs/sling/distribution/settings/exporters">
+                Exporters
+            </a>
+        </li>
+        <li class="is-active">
+            <a href="#">
+                <sling:encode value="${exporterCfg.name}" mode="HTML" />
+            </a>
+        </li>
+    </ul>
+</nav>
+<h1 class="title">
+    <sling:encode value="${exporterCfg.name}" mode="HTML" />
+</h1>
+<div class="scroll-container">
+    <div class="columns">
+        <div class="column is-6">
+            <article class="message is-light">
+                <div class="message-header">
+                    <p>Configuration</p>
+                </div>
+                <div class="message-body">
+                    <dl>
+                        <sling:getResource base="${resource}" path="configuration" var="configuration" />
+                        <c:set var="config" value="${exporterCfg}" scope="request" />
+                        <c:forEach var="configRsrc" items="${sling:listChildren(configuration)}">
+                            <sling:include resource="${configRsrc}" />
+                        </c:forEach>
+                    </dl>
+                    <a class="button" href="/system/console/configMgr/${exporterCfg['service.pid']}">Edit</a>
+                </div>
+            </article>
+        </div>
+    </div>
+</div>
+
+
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/home/home.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/home/home.jsp
new file mode 100644
index 0000000..51cc8fe
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/home/home.jsp
@@ -0,0 +1,26 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+<%@include file="/libs/sling-cms/global.jsp"%>
+<sling:adaptTo adaptable="${resourceResolver}" adaptTo="org.apache.sling.cms.publication.PublicationManager" var="publicationManager" />
+<br/>
+<dl>
+    <dt>Publication Mode</dt>
+    <dd>${publicationManager.publicationMode}</dd>
+</dl>
+<br/>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/importer/importer.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/importer/importer.jsp
new file mode 100644
index 0000000..f54a9bc
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/importer/importer.jsp
@@ -0,0 +1,66 @@
+<%-- /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */ --%>
+<%@include file="/libs/sling-cms/global.jsp"%>
+<c:set var="importer" value="${slingRequest.requestPathInfo.suffixResource}" />
+<c:set var="importerCfg" value="${importer.valueMap}" />
+<nav class="breadcrumb" aria-label="breadcrumbs">
+    <ul>
+        <li>
+            <a href="/cms/publication/home.html">
+                Publication
+            </a>
+        </li>
+        <li>
+            <a href="/cms/publication/importers.html/libs/sling/distribution/settings/importers">
+                Importers
+            </a>
+        </li>
+        <li class="is-active">
+            <a href="#">
+                <sling:encode value="${importerCfg.name}" mode="HTML" />
+            </a>
+        </li>
+    </ul>
+</nav>
+<h1 class="title">
+    <sling:encode value="${importerCfg.name}" mode="HTML" />
+</h1>
+<div class="scroll-container">
+    <div class="columns">
+        <div class="column is-6">
+            <article class="message is-light">
+                <div class="message-header">
+                    <p>Configuration</p>
+                </div>
+                <div class="message-body">
+                    <dl>
+                        <sling:getResource base="${resource}" path="configuration" var="configuration" />
+                        <c:set var="config" value="${importerCfg}" scope="request" />
+                        <c:forEach var="configRsrc" items="${sling:listChildren(configuration)}">
+                            <sling:include resource="${configRsrc}" />
+                        </c:forEach>
+                    </dl>
+                    <a class="button" href="/system/console/configMgr/${importerCfg['service.pid']}">Edit</a>
+                </div>
+            </article>
+        </div>
+    </div>
+</div>
+
+
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/publicationstatus/publicationstatus.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/status/status.jsp
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/publicationstatus/publicationstatus.jsp
rename to ui/src/main/resources/jcr_root/libs/sling-cms/components/publication/status/status.jsp
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/agent.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/agent.json
new file mode 100644
index 0000000..d9f5a11
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/agent.json
@@ -0,0 +1,94 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Publication Agent",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "agent": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/publication/agent",
+                "configuration": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "enabled": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Enabled",
+                        "key": "enabled"
+                    },
+                    "allowedRoots": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configurationarray",
+                        "title": "Allowed Roots",
+                        "key": "allowed.roots"
+                    },
+                    "async-delivery": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Async Delivery",
+                        "key": "async.delivery"
+                    },
+                    "http-conn-timeout": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Connection Timeout",
+                        "key": "http.conn.timeout"
+                    },
+                    "log-level": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Log Level",
+                        "key": "log.level"
+                    },
+                    "packageBuilder-target": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Package Builder Target",
+                        "objectName": "org.apache.sling.distribution.packaging.DistributionPackageBuilder",
+                        "key": "packageBuilder.target"
+                    },
+                    "priorityQueues": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configurationarray",
+                        "title": "Priority Queues",
+                        "key": "priorityQueues"
+                    },
+                    "queue-provider": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Queue Provider",
+                        "key": "queue.provider"
+                    },
+                    "queue-processing-enabled": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Queue Processing Enabled",
+                        "key": "queue.processing.enabled"
+                    },
+                    "requestAuthorizationStrategy-target": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Request Authorization Strategy Target",
+                        "objectName": "org.apache.sling.distribution.agent.impl.DistributionRequestAuthorizationStrategy",
+                        "key": "requestAuthorizationStrategy.target"
+                    },
+                    "transportSecretProvider-target": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Transport Secret Provider Target",
+                        "objectName": "org.apache.sling.distribution.transport.DistributionTransportSecretProvider",
+                        "key": "transportSecretProvider.target"
+                    },
+                    "type": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Type",
+                        "key": "type"
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/agents.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/agents.json
new file mode 100644
index 0000000..b23af79
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/agents.json
@@ -0,0 +1,57 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Publication Agents",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\"><ul><li><a href=\"/cms/publication/home.html\">Publication</a></li><li class=\"is-active\"><a href=\"#\">Agents</a></li></ul></nav>"
+            },
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {}
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "columns": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Name"
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Title"
+                    }
+                },
+                "types": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling-distribution-setting": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "columns": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "name": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/name",
+                                "link": true,
+                                "prefix": "/cms/publication/agent.html"
+                            },
+                            "title": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/text",
+                                "property": "title"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/exporter.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/exporter.json
new file mode 100644
index 0000000..9877b28
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/exporter.json
@@ -0,0 +1,69 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Publication Exporter",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "exporter": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/publication/exporter",
+                "configuration": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "agent-target": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Agent Target",
+                        "key": "agent.target"
+                    },
+                    "drop-invalid-items": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Drop invalid queue items",
+                        "key": "drop.invalid.items"
+                    },
+                    "endpoints": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configurationarray",
+                        "title": "Endpoints",
+                        "key": "endpoints"
+                    },
+                    "packageBuilder-target": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Package Builder Target",
+                        "objectName": "org.apache.sling.distribution.packaging.DistributionPackageBuilder",
+                        "key": "packageBuilder.target"
+                    },
+                    "pull-items": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Pull Items",
+                        "key": "pull.items"
+                    },
+                    "queue": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Queue",
+                        "key": "queue"
+                    },
+                    "transportSecretProvider-target": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Transport Secret Provider Target",
+                        "objectName": "org.apache.sling.distribution.transport.DistributionTransportSecretProvider",
+                        "key": "transportSecretProvider.target"
+                    },
+                    "type": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Type",
+                        "key": "type"
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/exporters.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/exporters.json
new file mode 100644
index 0000000..c9a7f10
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/exporters.json
@@ -0,0 +1,57 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Publication Exporters",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\"><ul><li><a href=\"/cms/publication/home.html\">Publication</a></li><li class=\"is-active\"><a href=\"#\">Exporters</a></li></ul></nav>"
+            },
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {}
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "columns": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Name"
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Title"
+                    }
+                },
+                "types": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling-distribution-setting": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "columns": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "name": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/name",
+                                "link": true,
+                                "prefix": "/cms/publication/exporter.html"
+                            },
+                            "title": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/text",
+                                "property": "title"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/home.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/home.json
new file mode 100644
index 0000000..d628749
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/home.json
@@ -0,0 +1,53 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Publication",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h3>Publication</h3>"
+            },
+            "pubhome": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/publication/home"
+            },
+            "tiles": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/tiles",
+                "agents": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/cms/tilecard",
+                    "image": "/static/sling-cms/thumbnails/publish-agent.png.transform/sling-cms-thumbnail.png",
+                    "link": "/cms/publication/agents.html/libs/sling/distribution/settings/agents",
+                    "title": "Agents"
+                },
+                "bulk-publication": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/cms/tilecard",
+                    "image": "/static/sling-cms/thumbnails/bulk-publication.png.transform/sling-cms-thumbnail.png",
+                    "link": "/cms/publication/bulk-publication.html",
+                    "title": "Bulk Publication"
+                },
+                "exporters": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/cms/tilecard",
+                    "image": "/static/sling-cms/thumbnails/exporter.png.transform/sling-cms-thumbnail.png",
+                    "link": "/cms/publication/exporters.html/libs/sling/distribution/settings/exporters",
+                    "title": "Exporters"
+                },
+                "importers": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling:resourceType": "sling-cms/components/cms/tilecard",
+                    "image": "/static/sling-cms/thumbnails/importer.png.transform/sling-cms-thumbnail.png",
+                    "link": "/cms/publication/importers.html/libs/sling/distribution/settings/importers",
+                    "title": "Importers"
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/importer.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/importer.json
new file mode 100644
index 0000000..68d1a9d
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/importer.json
@@ -0,0 +1,45 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Publication Importer",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "importer": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/publication/importer",
+                "configuration": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "enabled": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configurationarray",
+                        "title": "Endpoints",
+                        "key": "endpoints"
+                    },
+                    "packageBuilder-target": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Package Builder Target",
+                        "objectName": "org.apache.sling.distribution.packaging.DistributionPackageBuilder",
+                        "key": "packageBuilder.target"
+                    },
+                    "transportSecretProvider-target": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Transport Secret Provider Target",
+                        "objectName": "org.apache.sling.distribution.transport.DistributionTransportSecretProvider",
+                        "key": "transportSecretProvider.target"
+                    },
+                    "type": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "sling:resourceType": "sling-cms/components/publication/configuration",
+                        "title": "Type",
+                        "key": "type"
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/importers.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/importers.json
new file mode 100644
index 0000000..ac6971c
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/publication/importers.json
@@ -0,0 +1,57 @@
+{
+    "jcr:primaryType": "sling:Page",
+    "jcr:content": {
+        "sling:resourceType": "sling-cms/components/pages/base",
+        "jcr:title": "Publication Importers",
+        "jcr:primaryType": "nt:unstructured",
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/general/container",
+            "richtext": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<nav class=\"breadcrumb\" aria-label=\"breadcrumbs\"><ul><li><a href=\"/cms/publication/home.html\">Publication</a></li><li class=\"is-active\"><a href=\"#\">Importers</a></li></ul></nav>"
+            },
+            "contentactions": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentactions",
+                "actions": {}
+            },
+            "contenttable": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contenttable",
+                "columns": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "name": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Name"
+                    },
+                    "title": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "title": "Title"
+                    }
+                },
+                "types": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "sling-distribution-setting": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "columns": {
+                            "jcr:primaryType": "nt:unstructured",
+                            "name": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/name",
+                                "link": true,
+                                "prefix": "/cms/publication/importer.html"
+                            },
+                            "title": {
+                                "jcr:primaryType": "nt:unstructured",
+                                "sling:resourceType": "sling-cms/components/cms/columns/text",
+                                "property": "title"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/publish.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/publish.json
index 04bf291..0559aa8 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/publish.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/publish.json
@@ -9,7 +9,7 @@
             "sling:resourceType": "sling-cms/components/general/container",
             "publicationstatus": {
                 "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/cms/publicationstatus"
+                "sling:resourceType": "sling-cms/components/publication/status"
             },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/unpublish.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/unpublish.json
index 06e44a4..52dad53 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/unpublish.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/shared/unpublish.json
@@ -9,7 +9,7 @@
             "sling:resourceType": "sling-cms/components/general/container",
             "publicationstatus": {
                 "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/cms/publicationstatus"
+                "sling:resourceType": "sling-cms/components/publication/status"
             },
             "slingform": {
                 "jcr:primaryType": "nt:unstructured",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
index 6fb313d..a584ae4 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/start.json
@@ -138,6 +138,17 @@
                         "link": "/bin/browser.html",
                         "text": "Node Browser"
                     },
+                    "publication": {
+                        "jcr:primaryType": "nt:unstructured",
+                        "alternatives": [
+                            "/cms/publication"
+                        ],
+                        "enabledGroups": [
+                            "publishers"
+                        ],
+                        "link": "/cms/publication/home.html",
+                        "text": "Publication"
+                    },
                     "systemconsole": {
                         "jcr:primaryType": "nt:unstructured",
                         "enabledGroups": [