diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelAdminPageController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelAdminPageController.java deleted file mode 100644 index cfa46aad8..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelAdminPageController.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2021 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 com.arsdigita.cms.ui.pages; - -import org.libreccm.l10n.GlobalizationHelper; -import org.libreccm.pagemodel.PageModel; -import org.libreccm.pagemodel.PageModelRepository; -import org.librecms.pages.Pages; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; - -/** - * - * @author Jens Pelzetter - */ -@RequestScoped -class PageModelAdminPageController { - - @Inject - private GlobalizationHelper globalizationHelper; - - @Inject - private PageModelRepository pageModelRepository; - - @Transactional(Transactional.TxType.REQUIRED) - protected List findDraftPageModelsByApplication( - final Pages pages - ) { - final List pageModels = pageModelRepository - .findDraftByApplication(pages); - return pageModels.stream().map(this::buildPageModelData).collect( - Collectors.toList() - ); - } - - private PageModelData buildPageModelData(final PageModel fromPageModel) { - final PageModelData result = new PageModelData(); - result.setPageModelId(fromPageModel.getPageModelId()); - result.setTitle(globalizationHelper.getValueFromLocalizedString( - fromPageModel.getTitle())); - return result; - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelData.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelData.java deleted file mode 100644 index 218eae658..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PageModelData.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2021 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 com.arsdigita.cms.ui.pages; - -/** - * - * @author Jens Pelzetter - */ -class PageModelData { - - private long pageModelId; - - private String title; - - public long getPageModelId() { - return pageModelId; - } - - public void setPageModelId(long pageModelId) { - this.pageModelId = pageModelId; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java deleted file mode 100644 index 98b7c56e3..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesAdminPage.java +++ /dev/null @@ -1,447 +0,0 @@ -/* - * 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 com.arsdigita.cms.ui.pages; - -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.SimpleContainer; -import com.arsdigita.bebop.TabbedPane; -import com.arsdigita.bebop.Text; -import com.arsdigita.bebop.Tree; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.bebop.event.ChangeEvent; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.PrintEvent; -import com.arsdigita.bebop.form.Option; -import com.arsdigita.bebop.form.SingleSelect; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.bebop.tree.TreeModel; -import com.arsdigita.bebop.tree.TreeModelBuilder; -import com.arsdigita.cms.ui.CMSApplicationPage; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.toolbox.ui.LayoutPanel; -import com.arsdigita.ui.ReactApp; -import com.arsdigita.ui.admin.categories.CategoriesTreeModel; -import com.arsdigita.util.LockableImpl; - -import org.libreccm.categorization.Category; -import org.libreccm.categorization.CategoryRepository; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.core.UnexpectedErrorException; -import org.libreccm.pagemodel.PageModel; -import org.libreccm.pagemodel.PageModelRepository; -import org.librecms.CmsConstants; -import org.librecms.pages.PageManager; -import org.librecms.pages.PageRepository; -import org.librecms.pages.Pages; - -import java.util.List; -import java.util.Optional; -import java.util.TooManyListenersException; - - -/** - * - * @author Jens Pelzetter - */ -public class PagesAdminPage extends CMSApplicationPage { - - private static final String INDEX_PAGE_MODEL_SELECT = "indexPageModelSelect"; - - private static final String ITEM_PAGE_MODEL_SELECT = "itemPageModelSelect"; - - private static final String INHERIT_PAGEMODEL = "--inherit--"; - - private final ParameterSingleSelectionModel selectedCategory; - - private final Tree categoryTree; - - private final Label nothingSelectedLabel; - - private final Form pageModelForm; - - private final SingleSelect indexPageModelSelect; - - private final SingleSelect itemPageModelSelect; - - private final SaveCancelSection saveCancelSection; - - private Pages pagesInstance; - - private PagesContextBar pagesContextBar; - - public PagesAdminPage() { - - super("", new SimpleContainer()); - - super.setAttribute("application", "admin"); - super.setClassAttr("cms-admin"); -// super.setTitle(new Label(new GlobalizedMessage("cms.ui.pages.title", -// CmsConstants.CMS_BUNDLE))); - - selectedCategory = new ParameterSingleSelectionModel<>( - new StringParameter("selectedCategory")); - super.addGlobalStateParam(selectedCategory.getStateParameter()); - - categoryTree = new Tree(new CategoryTreeModelBuilder()); - categoryTree.addChangeListener(this::categoryTreeStateChanged); - - final LayoutPanel panel = new LayoutPanel(); - panel.setLeft(categoryTree); - - nothingSelectedLabel = new Label(new GlobalizedMessage( - "cms.ui.pages.no_category_selected", - CmsConstants.CMS_BUNDLE)); -// nothingSelectedLabel.addPrintListener(this::printNothingSelectedLabel); - super.setVisibleDefault(nothingSelectedLabel, true); - - pageModelForm = new Form("pageModelForm"); - super.setVisibleDefault(pageModelForm, false); - - final Label heading = new Label(); - heading.addPrintListener(this::printPageModelFormHeading); - heading.setClassAttr("heading"); - pageModelForm.add(heading); - - indexPageModelSelect = new SingleSelect(INDEX_PAGE_MODEL_SELECT); - indexPageModelSelect - .setLabel(new GlobalizedMessage("cms.ui.pages.index_page_model", - CmsConstants.CMS_BUNDLE)); - try { - indexPageModelSelect.addPrintListener(this::populatePageModelSelect); - } catch (TooManyListenersException ex) { - throw new UnexpectedErrorException(ex); - } - pageModelForm.add(indexPageModelSelect); -// super.setVisibleDefault(indexPageModelSelect, false); - - itemPageModelSelect = new SingleSelect(ITEM_PAGE_MODEL_SELECT); - itemPageModelSelect - .setLabel(new GlobalizedMessage("cms.ui.pages.item_page_model", - CmsConstants.CMS_BUNDLE)); - try { - itemPageModelSelect.addPrintListener(this::populatePageModelSelect); - } catch (TooManyListenersException ex) { - throw new UnexpectedErrorException(ex); - } - pageModelForm.add(itemPageModelSelect); -// super.setVisibleDefault(itemPageModelSelect, false); - - saveCancelSection = new SaveCancelSection(); - pageModelForm.add(saveCancelSection); -// super.setVisibleDefault(saveCancelSection, false); - - pageModelForm.addInitListener(this::initPageModelForm); - pageModelForm.addValidationListener(this::validatePageModelForm); - pageModelForm.addProcessListener(this::processPageModelForm); - - final BoxPanel rightPanel = new BoxPanel(BoxPanel.VERTICAL); - rightPanel.setClassAttr("right-panel"); - rightPanel.add(nothingSelectedLabel); - rightPanel.add(pageModelForm); - panel.setRight(rightPanel); - -// final SimpleContainer pageModelsManager = new SimpleContainer( -// "admin:pageModelsManager", AdminUiConstants.ADMIN_XML_NS); -// pageModelsManager.add(new Text("Placeholder page models editor")); - final ReactApp pageModelsManager = new ReactApp( - "page-models-editor", "scripts/dist/ccm-cms-pagemodelseditor.js"); - - pagesContextBar = new PagesContextBar(); - super.add(pagesContextBar); - - final TabbedPane tabbedPane = new TabbedPane(); - tabbedPane.addTab(new Label(new GlobalizedMessage( - "cms.ui.pages.tab.pages", CmsConstants.CMS_BUNDLE)), - panel); - tabbedPane - .addTab(new Label(new GlobalizedMessage( - "cms.ui.pages.tab.page_models", CmsConstants.CMS_BUNDLE)), - pageModelsManager); - super.add(tabbedPane); - - super.addActionListener(this::initPage); - - super.lock(); - } - - public Pages getPagesInstance() { - return pagesInstance; - } - - public void setPagesInstance(final Pages pagesInstance) { - this.pagesInstance = pagesInstance; - pagesContextBar.setPagesInstance(pagesInstance); - } - -// @Override -// public void register(final Page page) { -// -// super.register(page); -// -// page.setVisibleDefault(nothingSelectedLabel, true); -// page.setVisibleDefault(pageModelForm, false); -// -// page.addGlobalStateParam(selectedCategory.getStateParameter()); -// -// } - private void initPage(final ActionEvent event) { - - final PageState state = event.getPageState(); - - if (selectedCategory.isSelected(state)) { - nothingSelectedLabel.setVisible(state, false); - pageModelForm.setVisible(state, true); - } else { - nothingSelectedLabel.setVisible(state, true); - pageModelForm.setVisible(state, false); - } - - } - -// private void printNothingSelectedLabel(final PrintEvent event) { -// -// final PageState state = event.getPageState(); -// final Label target = (Label) event.getTarget(); -// -// target.setVisible(state, !selectedCategory.isSelected(state)); -// } - private void printPageModelFormHeading(final PrintEvent event) { - - final PageState state = event.getPageState(); - final Label target = (Label) event.getTarget(); - -// target.setVisible(state, !selectedCategory.isSelected(state)); - if (selectedCategory.isSelected(state)) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final CategoryRepository categoryRepo = cdiUtil - .findBean(CategoryRepository.class); - - final Category category = categoryRepo - .findById(Long.parseLong(selectedCategory.getSelectedKey(state))) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Category with ID %s in the database.", - selectedCategory.getSelectedKey(state)))); - - target.setLabel(new GlobalizedMessage( - "cms.ui.pages.page_config_for_category", - CmsConstants.CMS_BUNDLE, - new Object[]{category.getName()})); - } - } - - private void populatePageModelSelect(final PrintEvent event) { - -// final PageState state = event.getPageState(); - final SingleSelect target = (SingleSelect) event.getTarget(); - -// if (!selectedCategory.isSelected(state)) { -// target.setVisible(state, false); -// return; -// } - target.clearOptions(); - - target.addOption(new Option(INHERIT_PAGEMODEL, - new Label(new GlobalizedMessage( - "cms.ui.pages.assigned_page_model.inherit", - CmsConstants.CMS_BUNDLE)))); - -// final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); -// final PageModelRepository pageModelRepo = cdiUtil.findBean( -// PageModelRepository.class -// ); -// final List pageModels = pageModelRepo -// .findDraftByApplication(pagesInstance); -// final GlobalizationHelper globalizationHelper = cdiUtil -// .findBean(GlobalizationHelper.class); -// for (final PageModel pageModel : pageModels) { -// target.addOption( -// new Option( -// Long.toString(pageModel.getPageModelId()), -// new Text( -// globalizationHelper.getValueFromLocalizedString( -// pageModel.getTitle() -// ) -// ) -// ) -// ); -// } - final PageModelAdminPageController controller = CdiUtil.createCdiUtil() - .findBean(PageModelAdminPageController.class); - final List pageModels = controller - .findDraftPageModelsByApplication(pagesInstance); - for (final PageModelData pageModel : pageModels) { - target.addOption( - new Option( - Long.toString(pageModel.getPageModelId()), - new Text(pageModel.getTitle()) - ) - ); - } - } - - private void categoryTreeStateChanged(final ChangeEvent event) { - - final PageState state = event.getPageState(); - - final String selectedKey = (String) categoryTree.getSelectedKey(state); - selectedCategory.setSelectedKey(state, selectedKey); - } - - private void initPageModelForm(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - -// pageModelForm.setVisible(state, selectedCategory.isSelected(state)); - saveCancelSection.setVisible(state, selectedCategory.isSelected(state)); - - if (!selectedCategory.isSelected(state)) { - return; - } - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final CategoryRepository categoryRepo = cdiUtil - .findBean(CategoryRepository.class); - final PageRepository pageRepo = cdiUtil - .findBean(PageRepository.class); - - final Category category = categoryRepo - .findById(Long.parseLong(selectedCategory.getSelectedKey(state))) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Category with ID %s in the database.", - selectedCategory.getSelectedKey(state)))); - - final Optional page = pageRepo - .findPageForCategory(category); - - if (page.isPresent()) { - -// if (page.get().getIndexPageModel() == null) { -// indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL); -// } else { -// indexPageModelSelect.setValue(state, -// Long.toString(page -// .get() -// .getIndexPageModel() -// .getPageModelId())); -// } -// -// if (page.get().getItemPageModel() == null) { -// itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL); -// } else { -// itemPageModelSelect.setValue(state, -// Long.toString(page -// .get() -// .getItemPageModel() -// .getPageModelId())); -// } - } else { - indexPageModelSelect.setValue(state, INHERIT_PAGEMODEL); - itemPageModelSelect.setValue(state, INHERIT_PAGEMODEL); - } - } - - private void validatePageModelForm(final FormSectionEvent event) - throws FormProcessException { - - //Nothing for now - } - - private void processPageModelForm(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - - if (saveCancelSection.getSaveButton().isSelected(state)) { - - final FormData data = event.getFormData(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final CategoryRepository categoryRepo = cdiUtil - .findBean(CategoryRepository.class); - final PageManager pageManager = cdiUtil - .findBean(PageManager.class); - final PageRepository pageRepo = cdiUtil - .findBean(PageRepository.class); - final PageModelRepository pageModelRepo = cdiUtil - .findBean(PageModelRepository.class); - - final Category category = categoryRepo - .findById(Long.parseLong(selectedCategory.getSelectedKey(state))) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Category with ID %s in the database.", - selectedCategory.getSelectedKey(state)))); - - final org.librecms.pages.Page page = pageRepo - .findPageForCategory(category) - .orElse(pageManager.createPageForCategory(category)); - - final String selectedIndexPageModelId = data - .getString(INDEX_PAGE_MODEL_SELECT); - final String selectedItemPageModelId = data - .getString(ITEM_PAGE_MODEL_SELECT); - -// if (!INHERIT_PAGEMODEL.equals(selectedIndexPageModelId)) { -// final PageModel model = pageModelRepo -// .findById(Long.parseLong(selectedIndexPageModelId)) -// .orElseThrow(() -> new UnexpectedErrorException(String -// .format("No PageModel with ID %s in the database.", -// selectedIndexPageModelId))); -// page.setIndexPageModel(model); -// } -// -// if (!INHERIT_PAGEMODEL.equals(selectedItemPageModelId)) { -// final PageModel model = pageModelRepo -// .findById(Long.parseLong(selectedItemPageModelId)) -// .orElseThrow(() -> new UnexpectedErrorException(String -// .format("No PageModel with ID %s in the database.", -// selectedItemPageModelId))); -// page.setItemPageModel(model); -// } - - pageRepo.save(page); - } - - categoryTree.clearSelection(state); - selectedCategory.clearSelection(state); - } - - private class CategoryTreeModelBuilder - extends LockableImpl - implements TreeModelBuilder { - - @Override - public TreeModel makeModel(final Tree tree, - final PageState state) { - - return new CategoriesTreeModel(tree, - pagesInstance.getCategoryDomain()); - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesContextBar.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesContextBar.java deleted file mode 100644 index d24a9e49f..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pages/PagesContextBar.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (C) 2018 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 com.arsdigita.cms.ui.pages; - -import com.arsdigita.bebop.PageState; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.toolbox.ui.ContextBar; -import com.arsdigita.web.URL; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.web.ApplicationRepository; -import org.libreccm.web.CcmApplication; -import org.librecms.CmsConstants; -import org.librecms.pages.Pages; - -import java.util.List; - -/** - * - * @author Jens Pelzetter - */ -class PagesContextBar extends ContextBar { - - private Pages pagesInstance; - - @Override - public List entries(final PageState state) { - - final List entries = super.entries(state); - - final String centerTitle = (String) new GlobalizedMessage( - "cms.ui.content_center", CmsConstants.CMS_BUNDLE).localize(); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ApplicationRepository appRepo = cdiUtil.findBean( - ApplicationRepository.class); - final List apps = appRepo.findByType( - CmsConstants.CONTENT_CENTER_APP_TYPE); - - final String centerPath = apps.get(0).getPrimaryUrl(); - final URL url = URL.there(state.getRequest(), centerPath); - entries.add(new Entry(centerTitle, url)); - - final URL pagesUrl = URL.there( - state.getRequest(), - pagesInstance.getPrimaryUrl()); - entries.add(new Entry(String.format("Pages:: %s", - pagesInstance.getPrimaryUrl()), - pagesUrl)); - - return entries; - - } - - protected Pages getPagesInstance() { - return pagesInstance; - } - - protected void setPagesInstance(final Pages pagesInstance) { - this.pagesInstance = pagesInstance; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesServlet.java b/ccm-cms/src/main/java/org/librecms/pages/PagesServlet.java deleted file mode 100644 index 2fb5af005..000000000 --- a/ccm-cms/src/main/java/org/librecms/pages/PagesServlet.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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 com.arsdigita.cms.ui.pages.PagesAdminPage; -import com.arsdigita.templating.PresentationManager; -import com.arsdigita.templating.Templating; -import com.arsdigita.web.BaseApplicationServlet; -import com.arsdigita.web.LoginSignal; -import com.arsdigita.xml.Document; - -import org.apache.shiro.authz.AuthorizationException; -import org.libreccm.security.PermissionChecker; -import org.libreccm.security.Shiro; -import org.libreccm.web.ApplicationRepository; -import org.libreccm.web.CcmApplication; - -import java.io.IOException; - -import javax.inject.Inject; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Servlet for the Admin UI for pages a {@link /ccm/{primaryUrl}}. The admin UI - * itself is implemented by {@link PagesAdminPage}. - * - * @author Jens Pelzetter - */ -@WebServlet(urlPatterns = {"/templates/servlet/pages/*"}) -public class PagesServlet extends BaseApplicationServlet { - - private static final long serialVersionUID = -303317198251922697L; - - @Inject - private ApplicationRepository applicationRepo; - - @Inject - private PagesRepository pagesRepo; - - @Inject - private PermissionChecker permissionChecker; - - @Inject - private Shiro shiro; - - @Override - protected void doService(final HttpServletRequest request, - final HttpServletResponse response, - final CcmApplication application) - throws ServletException, IOException { - - if (!shiro.getSubject().isAuthenticated()) { - throw new LoginSignal(request); - } - - if (!permissionChecker.isPermitted(PagesPrivileges.ADMINISTER_PAGES)) { - throw new AuthorizationException("The current user is not " - + "permitted to administer pages."); - } - - final PagesAdminPage page = new PagesAdminPage(); - - if (!(application instanceof Pages)) { - throw new ServletException( - "Provided application is not an instance of Pages"); - } - - page.setPagesInstance((Pages) application); - - final Document document = page.buildDocument(request, response); - - final PresentationManager presentationManager = Templating - .getPresentationManager(); - presentationManager.servePage(document, request, response); - } - -}