From 3b082be1e0c588e7f6d209db2e59ff8ecd6f4077 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 12 Oct 2017 14:55:11 +0000 Subject: [PATCH] CCM NG: sites/pages/themes git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5042 8810af33-2d31-482b-a856-94f89814c4df Former-commit-id: 6db3bc7b3aab9b8fd6dcb8c2498bfebc6c998500 --- .../java/org/librecms/pages/PageManager.java | 76 +++++++++++++++++++ .../main/java/org/librecms/pages/Pages.java | 20 ----- ...{PagesConstants.java => PagesManager.java} | 30 +++++--- .../org/librecms/pages/PagesRepository.java | 34 --------- .../java/org/librecms/pages/PagesRouter.java | 54 +++++++++---- 5 files changed, 136 insertions(+), 78 deletions(-) create mode 100644 ccm-cms/src/main/java/org/librecms/pages/PageManager.java rename ccm-cms/src/main/java/org/librecms/pages/{PagesConstants.java => PagesManager.java} (67%) diff --git a/ccm-cms/src/main/java/org/librecms/pages/PageManager.java b/ccm-cms/src/main/java/org/librecms/pages/PageManager.java new file mode 100644 index 000000000..4c6ac65d9 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pages/PageManager.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2017 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.librecms.pages; + +import org.libreccm.categorization.Category; +import org.libreccm.categorization.CategoryRepository; + +import java.util.Optional; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class PageManager { + + @Inject + private CategoryRepository categoryRepo; + + @Inject + private PageRepository pageRepo; + + @Transactional(Transactional.TxType.REQUIRED) + public Page findPageForCategory(final Category category) { + + final Optional page = pageRepo.findPageForCategory(category); + + if (page.isPresent()) { + return page.get(); + } else { + final Category forCategory = categoryRepo + .findById(category.getObjectId()) + .orElseThrow(() -> new IllegalArgumentException(String + .format("No Category with ID %d in the database.", + category.getObjectId()))); + + if (forCategory.getParentCategory() == null) { + return new Page(); + } else { + return findPageForCategory(forCategory.getParentCategory()); + } + } + } + + @Transactional(Transactional.TxType.REQUIRED) + public Page createPageForCategory(final Category category) { + + final Page page = new Page(); + page.setCategory(category); + + pageRepo.save(page); + + return page; + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pages/Pages.java b/ccm-cms/src/main/java/org/librecms/pages/Pages.java index 75df6b286..ed7daf702 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/Pages.java +++ b/ccm-cms/src/main/java/org/librecms/pages/Pages.java @@ -63,26 +63,6 @@ import static org.librecms.CmsConstants.*; query = "SELECT (CASE WHEN COUNT(p) > 0 THEN true ELSE false END) " + "FROM Pages p JOIN p.site s " + "WHERE s.defaultSite = true") - , - @NamedQuery( - name = "Pages.findPageModelForIndexPage", - query = "SELECT DISTINCT m " - + "FROM PageModel m " - + "JOIN m.categories c " - + "WHERE c.category = :category " - + "AND c.type = '" - + PagesConstants.CATEGORIZATION_TYPE_PAGE_MODEL_INDEX + "' " - + "AND m.version = :version") - , - @NamedQuery( - name = "Pages.findPageModelForItemPage", - query = "SELECT DISTINCT m " - + "FROM PageModel m " - + "JOIN m.categories c " - + "WHERE c.category = :category " - + "AND c.type = '" - + PagesConstants.CATEGORIZATION_TYPE_PAGE_MODEL_ITEM + "' " - + "AND m.version = :version") }) public class Pages extends CcmApplication implements Serializable { diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesConstants.java b/ccm-cms/src/main/java/org/librecms/pages/PagesManager.java similarity index 67% rename from ccm-cms/src/main/java/org/librecms/pages/PagesConstants.java rename to ccm-cms/src/main/java/org/librecms/pages/PagesManager.java index e380b9d6b..bdb287de6 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/PagesConstants.java +++ b/ccm-cms/src/main/java/org/librecms/pages/PagesManager.java @@ -18,19 +18,29 @@ */ package org.librecms.pages; +import org.libreccm.categorization.Domain; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + /** * * @author Jens Pelzetter */ -public final class PagesConstants { - - private PagesConstants() { - //Nothing +@RequestScoped +public class PagesManager { + + @Inject + private PagesRepository pagesRepo; + + public Pages createPages(final Domain domain) { + + final Pages pages = new Pages(); + pages.setCategoryDomain(domain); + + pagesRepo.save(pages); + + return pages; } - - public static final String CATEGORIZATION_TYPE_PAGE_MODEL_INDEX - = "page_model_index"; - public static final String CATEGORIZATION_TYPE_PAGE_MODEL_ITEM - = "page_model_item"; - + } diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesRepository.java b/ccm-cms/src/main/java/org/librecms/pages/PagesRepository.java index 8d11f87d3..b9b212127 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/PagesRepository.java +++ b/ccm-cms/src/main/java/org/librecms/pages/PagesRepository.java @@ -69,40 +69,6 @@ public class PagesRepository extends AbstractEntityRepository { } } - @Transactional(Transactional.TxType.REQUIRED) - public Optional findPageModelForIndexPage( - final Category category, - final PageModelVersion version) { - - final TypedQuery query = getEntityManager() - .createNamedQuery("Pages.findPageModelForIndexPage", PageModel.class); - query.setParameter("category", category); - query.setParameter("version", version.toString()); - - try { - return Optional.of(query.getSingleResult()); - } catch(NoResultException ex) { - return Optional.empty(); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - public Optional findPageModelForItemPage( - final Category category, - final PageModelVersion version) { - - final TypedQuery query = getEntityManager() - .createNamedQuery("Pages.findPageModelForItemPage", PageModel.class); - query.setParameter("category", category); - query.setParameter("version", version.toString()); - - try { - return Optional.of(query.getSingleResult()); - } catch(NoResultException ex) { - return Optional.empty(); - } - } - @Override public Class getEntityClass() { return Pages.class; diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java b/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java index 1775789bb..8ed6d2c43 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java +++ b/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java @@ -23,7 +23,6 @@ import org.libreccm.categorization.CategoryManager; import org.libreccm.categorization.CategoryRepository; import org.libreccm.pagemodel.PageModel; import org.libreccm.pagemodel.PageModelManager; -import org.libreccm.pagemodel.PageModelVersion; import org.libreccm.sites.Site; import org.libreccm.sites.SiteRepository; import org.libreccm.theming.ThemeInfo; @@ -32,7 +31,6 @@ import org.libreccm.theming.Themes; import java.util.HashMap; import java.util.Map; -import java.util.Optional; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -75,6 +73,12 @@ public class PagesRouter { @Inject private PageModelManager pageModelManager; + @Inject + private PageRepository pageRepo; + + @Inject + private PageManager pageManager; + @Inject private SiteRepository siteRepo; @@ -84,7 +88,7 @@ public class PagesRouter { @Path("/index.{lang}.html") @Produces("text/html") @Transactional(Transactional.TxType.REQUIRED) - public String getCategoryIndexPage( + public String getCategoryIndexPageAsHtml( @Context final UriInfo uriInfo, @PathParam("page") @@ -126,19 +130,18 @@ public class PagesRouter { page, domain))); - final Optional pageModel = pagesRepo - .findPageModelForIndexPage(category, - PageModelVersion - .valueOf(pageModelVersion)); + final Page pageConf = pageManager.findPageForCategory(category); + + final PageModel pageModel = pageConf.getIndexPageModel(); final Map parameters = new HashMap<>(); parameters.put("currentCategory", category); final Map buildResult; - if (pageModel.isPresent()) { - buildResult = pageBuilder.buildPage(pageModel.get(), parameters); - } else { + if (pageModel == null) { buildResult = pageBuilder.buildPage(parameters); + } else { + buildResult = pageBuilder.buildPage(pageModel, parameters); } final ThemeInfo themeInfo; @@ -163,11 +166,11 @@ public class PagesRouter { return themes.process(buildResult, themeInfo); } - - @Path("/index.{lang}.tree") + + @Path("/index.{lang}.json") @Produces("text/html") @Transactional(Transactional.TxType.REQUIRED) - public String getCategoryIndexPageTree( + public String getCategoryIndexPageAsJson( @Context final UriInfo uriInfo, @PathParam("page") @@ -183,7 +186,30 @@ public class PagesRouter { @QueryParam("pagemodel-version") @DefaultValue("LIVE") final String pageModelVersion) { - + + throw new UnsupportedOperationException(); + } + + @Path("/index.{lang}.xml") + @Produces("text/html") + @Transactional(Transactional.TxType.REQUIRED) + public String getCategoryIndexPageAsXml( + @Context + final UriInfo uriInfo, + @PathParam("page") + final String page, + @PathParam("lang") + final String language, + @QueryParam("theme") + @DefaultValue("--DEFAULT--") + final String theme, + @QueryParam("theme-version") + @DefaultValue("LIVE") + final String themeVersion, + @QueryParam("pagemodel-version") + @DefaultValue("LIVE") + final String pageModelVersion) { + throw new UnsupportedOperationException(); }