From 8f380e40ec989a1fd87757736c92b39f829b5ec4 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Tue, 22 Mar 2022 19:25:35 +0100 Subject: [PATCH] Removed depcrecated PageModel --- ...ractContentItemComponentJsonConverter.java | 60 -- .../AbstractContentItemComponentRenderer.java | 203 ---- .../pagemodel/CategorizedItemComponent.java | 43 - .../CategorizedItemComponentJsonBuilder.java | 80 -- .../CategorizedItemComponentRenderer.java | 130 --- .../pagemodel/CategoryTreeComponent.java | 98 -- .../CategoryTreeComponentJsonConverter.java | 91 -- .../CategoryTreeComponentRenderer.java | 191 ---- .../pagemodel/ContentItemComponent.java | 98 -- .../pagemodel/FixedContentItemComponent.java | 98 -- ...ixedContentItemComponentJsonConverter.java | 105 -- .../FixedContentItemComponentRenderer.java | 66 -- .../pagemodel/GreetingItemComponent.java | 47 - .../GreetingItemComponentJsonConverter.java | 80 -- .../GreetingItemComponentRenderer.java | 140 --- .../librecms/pagemodel/ItemListComponent.java | 182 ---- .../ItemListComponentJsonConverter.java | 119 --- .../pagemodel/ItemListComponentRenderer.java | 387 -------- .../assets/AbstractAssetRenderer.java | 84 -- .../pagemodel/assets/AssetRenderer.java | 46 - .../pagemodel/assets/AssetRenderers.java | 114 --- .../pagemodel/assets/AudioAssetRenderer.java | 82 -- .../pagemodel/assets/BinaryAssetRenderer.java | 78 -- .../pagemodel/assets/BookmarkRenderer.java | 71 -- .../assets/ContactableEntityRenderer.java | 90 -- .../assets/ExternalAudioAssetRenderer.java | 85 -- .../assets/ExternalVideoAssetRenderer.java | 83 -- .../pagemodel/assets/FileAssetRenderer.java | 56 -- .../pagemodel/assets/ImageRenderer.java | 88 -- .../assets/LegalMetadataRenderer.java | 76 -- .../assets/OrganizationRenderer.java | 55 -- .../pagemodel/assets/PersonRenderer.java | 86 -- .../assets/PostalAddressRenderer.java | 57 -- .../pagemodel/assets/RelatedLinkRenderer.java | 118 --- .../pagemodel/assets/SideNoteRenderer.java | 68 -- .../pagemodel/assets/VideoAssetRenderer.java | 82 -- .../AbstractContentItemRenderer.java | 248 ----- .../contentitems/ArticleRenderer.java | 85 -- .../contentitems/ContentItemRenderer.java | 54 - .../contentitems/ContentItemRenderers.java | 169 ---- .../pagemodel/contentitems/EventRenderer.java | 102 -- .../MultiPartArticleRenderer.java | 133 --- .../pagemodel/contentitems/NewsRenderer.java | 86 -- .../org/librecms/pages/CmsPageRenderer.java | 58 -- .../java/org/librecms/pages/PagesRouter.java | 929 ------------------ .../pages/models/ContentItemModel.java | 6 +- .../h2/V7_0_0_33__remove_page_model.sql | 8 + .../pgsql/V7_0_0_33__remove_page_model.sql | 8 + .../java/org/libreccm/modules/Module.java | 13 - .../AbstractComponentModelJsonConverter.java | 111 --- .../pagemodel/AbstractPageRenderer.java | 186 ---- .../libreccm/pagemodel/ComponentModel.java | 265 ----- .../ComponentModelJsonConverter.java | 50 - .../pagemodel/ComponentModelRepository.java | 184 ---- .../libreccm/pagemodel/ComponentModels.java | 132 --- .../libreccm/pagemodel/ComponentRenderer.java | 69 -- .../pagemodel/ComponentRendererManager.java | 123 --- .../libreccm/pagemodel/ContainerModel.java | 273 ----- .../pagemodel/ContainerModelManager.java | 145 --- .../pagemodel/ContainerModelRepository.java | 104 -- .../pagemodel/ConvertsComponentModel.java | 43 - .../org/libreccm/pagemodel/PageModel.java | 484 --------- .../pagemodel/PageModelComponentModel.java | 80 -- .../libreccm/pagemodel/PageModelManager.java | 609 ------------ .../pagemodel/PageModelRepository.java | 378 ------- .../libreccm/pagemodel/PageModelVersion.java | 32 - .../org/libreccm/pagemodel/PageRenderer.java | 75 -- .../libreccm/pagemodel/RendersComponent.java | 41 - .../pagemodel/RendersPageModelType.java | 42 - .../org/libreccm/pagemodel/package-info.java | 43 - .../org/libreccm/pagemodel/rs/Components.java | 628 ------------ .../org/libreccm/pagemodel/rs/Containers.java | 253 ----- .../org/libreccm/pagemodel/rs/PageModels.java | 383 -------- .../libreccm/pagemodel/rs/PageModelsApp.java | 88 -- .../pagemodel/rs/PageModelsController.java | 181 ---- .../pagemodel/rs/PublicationStatus.java | 10 - .../pagemodel/rs/StylesJsonMapper.java | 201 ---- .../pagemodel/rs/StylesMediaRule.java | 623 ------------ .../org/libreccm/pagemodel/rs/StylesRs.java | 667 ------------- .../org/libreccm/pagemodel/rs/StylesRule.java | 356 ------- .../libreccm/pagemodel/rs/package-info.java | 25 - .../pagemodel/styles/CssProperty.java | 145 --- .../libreccm/pagemodel/styles/Dimension.java | 120 --- .../libreccm/pagemodel/styles/MediaQuery.java | 200 ---- .../libreccm/pagemodel/styles/MediaRule.java | 170 ---- .../libreccm/pagemodel/styles/MediaType.java | 33 - .../org/libreccm/pagemodel/styles/Rule.java | 170 ---- .../org/libreccm/pagemodel/styles/Styles.java | 197 ---- .../pagemodel/styles/StylesManager.java | 150 --- .../pagemodel/styles/StylesRepository.java | 169 ---- .../org/libreccm/pagemodel/styles/Unit.java | 37 - .../java/org/libreccm/theming/Themes.java | 3 +- .../V7_0_0_38__remove_page_model_entities.sql | 10 + .../V7_0_0_38__remove_page_model_entities.sql | 10 + 94 files changed, 39 insertions(+), 13795 deletions(-) delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/AbstractContentItemComponentJsonConverter.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/AbstractContentItemComponentRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponent.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentJsonBuilder.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponent.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentJsonConverter.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/ContentItemComponent.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponent.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentJsonConverter.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponent.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentJsonConverter.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponent.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentJsonConverter.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/AbstractAssetRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderers.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/AudioAssetRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/BinaryAssetRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/BookmarkRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/ContactableEntityRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalAudioAssetRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalVideoAssetRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/FileAssetRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/ImageRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/LegalMetadataRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/OrganizationRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/PersonRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/PostalAddressRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/RelatedLinkRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/SideNoteRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/assets/VideoAssetRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ArticleRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/EventRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/MultiPartArticleRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/NewsRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pages/CmsPageRenderer.java delete mode 100644 ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java create mode 100644 ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_33__remove_page_model.sql create mode 100644 ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_33__remove_page_model.sql delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/AbstractComponentModelJsonConverter.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/AbstractPageRenderer.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModel.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelJsonConverter.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelRepository.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRenderer.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRendererManager.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModelManager.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModelRepository.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/ConvertsComponentModel.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/PageModel.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/PageModelComponentModel.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/PageModelManager.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/PageModelRepository.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/PageModelVersion.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/PageRenderer.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/RendersComponent.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/RendersPageModelType.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/package-info.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/Components.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/Containers.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModelsApp.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModelsController.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/PublicationStatus.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesJsonMapper.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesMediaRule.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesRs.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesRule.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/rs/package-info.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/CssProperty.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/Dimension.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaQuery.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaRule.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaType.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/Rule.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/Styles.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/StylesManager.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/StylesRepository.java delete mode 100644 ccm-core/src/main/java/org/libreccm/pagemodel/styles/Unit.java create mode 100644 ccm-core/src/main/resources/db/migrations/org/libreccm/ccm_core/h2/V7_0_0_38__remove_page_model_entities.sql create mode 100644 ccm-core/src/main/resources/db/migrations/org/libreccm/ccm_core/pgsql/V7_0_0_38__remove_page_model_entities.sql diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/AbstractContentItemComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/AbstractContentItemComponentJsonConverter.java deleted file mode 100644 index b2da3bb0f..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/AbstractContentItemComponentJsonConverter.java +++ /dev/null @@ -1,60 +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 org.librecms.pagemodel; - -import org.libreccm.pagemodel.AbstractComponentModelJsonConverter; - -import java.util.Objects; - -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -public abstract class AbstractContentItemComponentJsonConverter - extends AbstractComponentModelJsonConverter { - - private static final String MODE = "mode"; - - protected void convertContentItemComponentPropertiesToJson( - final ContentItemComponent component, - final JsonObjectBuilder objectBuilder) { - - Objects.requireNonNull(component); - Objects.requireNonNull(objectBuilder); - - objectBuilder.add(MODE, component.getMode()); - } - - protected void readContentItemComponentPropertiesFromJson( - final JsonObject jsonObject, final ContentItemComponent component) { - - Objects.requireNonNull(jsonObject); - Objects.requireNonNull(component); - - if (!jsonObject.isNull(MODE)) { - - component.setMode(jsonObject.getString(MODE)); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/AbstractContentItemComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/AbstractContentItemComponentRenderer.java deleted file mode 100644 index e804c3a08..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/AbstractContentItemComponentRenderer.java +++ /dev/null @@ -1,203 +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.pagemodel; - -import com.arsdigita.kernel.KernelConfig; - -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.security.PermissionChecker; -import org.librecms.contentsection.ContentItem; -import org.librecms.contentsection.ContentItemL10NManager; -import org.librecms.contentsection.ContentItemManager; -import org.librecms.contentsection.privileges.ItemPrivileges; -import org.librecms.pagemodel.contentitems.AbstractContentItemRenderer; -import org.librecms.pagemodel.contentitems.ContentItemRenderers; - -import java.util.Locale; -import java.util.Map; -import java.util.Objects; - -import javax.inject.Inject; -import javax.transaction.Transactional; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; - -import static org.librecms.pages.PagesConstants.*; - -import org.libreccm.pagemodel.ComponentRenderer; -import org.librecms.pagemodel.contentitems.ContentItemRenderer; - -import java.util.Collections; - -/** - * - * Abstract base class for rendering an {@link ContentItemComponent} which - * provides some logic useful for most implementations of - * {@link ContentItemComponentRenderer}. - * - * @author Jens Pelzetter - * @param - */ -@Deprecated -public abstract class AbstractContentItemComponentRenderer - implements ComponentRenderer { - - @Inject - private ConfigurationManager confManager; - - @Inject - private ContentItemRenderers contentItemRenderers; - - @Inject - private ContentItemL10NManager iteml10nManager; - - @Inject - private ContentItemManager itemManager; - - @Inject - private PermissionChecker permissionChecker; - - /** - * Retrieves the content item to render. - * - * @param componentModel The {@link ComponentModel} which is rendered. - * @param parameters Additional parameters. - * - * @return The {@link ContentItem} to render. - */ - protected abstract ContentItem getContentItem( - T componentModel, final Map parameters); - - /** - * Renders the provided {@link ContentItemComponent} and the - * {@link ContentItem} retrieved by - * {@link #getContentItem(org.librecms.pagemodel.ContentItemComponent, java.util.Map)}. - * - * The {@link ContentItem} is rendered using an appropriate implementation - * of {@link ContentItemRenderer}. This method use the draft version of the - * item there is an parameters {@code showDraftItem} in the - * {@code parameters} map with the value {@code true}. If - * {@code showDraftItem} is set to {@code true} and the current user is not - * permitted to new the draft version of the item an - * {@link WebApplicationException} with the correct HTTP response code is - * thrown. - * - * Likewise of the current user is not permitted to view the view version of - * the item an {@link WebApplicationException} with the correct HTTP - * response code is thrown. - * - * @param componentModel The {@link ComponentModel} to render. - * @param parameters Additional parameters. - * - * @return The rendered component. - */ - @Transactional(Transactional.TxType.REQUIRED) - @Override - public Map renderComponent( - final T componentModel, - final Map parameters) { - - Objects.requireNonNull(componentModel); - Objects.requireNonNull(parameters); - - final ContentItem contentItem = getContentItem(componentModel, - parameters); - - if (contentItem == null) { - return Collections.emptyMap(); - } - - if (Boolean.TRUE.equals(parameters.get("showDraftItem"))) { - - final ContentItem draftItem = itemManager - .getDraftVersion(contentItem, contentItem.getClass()); - - if (permissionChecker.isPermitted(ItemPrivileges.PREVIEW, draftItem)) { - final Map result = generateItem(componentModel, - parameters, - draftItem); - result.put("showDraftItem", Boolean.TRUE); - - return result; - } else { - throw new WebApplicationException( - "You are not permitted to view the draft version of this item.", - Response.Status.UNAUTHORIZED); - } - - } else { - - final ContentItem liveItem = itemManager - .getLiveVersion(contentItem, contentItem.getClass()) - .orElseThrow(() -> new NotFoundException( - "This content item does not " - + "have a live version.")); - - if (permissionChecker.isPermitted(ItemPrivileges.VIEW_PUBLISHED, - liveItem)) { - return generateItem(componentModel, - parameters, - liveItem); - } else { - throw new WebApplicationException( - "You are not permitted to view the live version of " - + "this item.", - Response.Status.UNAUTHORIZED); - } - } - } - - /** - * A helper method for rendering the {@link ContentItem}. There should be no - * need to overwrite this method, but maybe there are scenarios where this - * is necessary. - * - * @param componentModel The component model to render. - * @param parameters Additional parameters. - * @param item The item to render. - * - * @return The rendered content item. - */ - protected Map generateItem( - final T componentModel, - final Map parameters, - final ContentItem item) { - - final Locale language; - if (parameters.containsKey("language")) { - language = new Locale((String) parameters.get(PARAMETER_LANGUAGE)); - } else { - final KernelConfig kernelConfig = confManager - .findConfiguration(KernelConfig.class); - language = kernelConfig.getDefaultLocale(); - } - - if (iteml10nManager.hasLanguage(item, language)) { - - final AbstractContentItemRenderer renderer = contentItemRenderers - .findRenderer(item.getClass(), componentModel.getMode()); - - return renderer.render(item, language); - } else { - throw new NotFoundException("Requested language is not available."); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponent.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponent.java deleted file mode 100644 index 4584fa725..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponent.java +++ /dev/null @@ -1,43 +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.pagemodel; - -import javax.persistence.Entity; -import javax.persistence.Table; - -import static org.librecms.CmsConstants.*; - -/** - * A component for showing a content item which is assigned to a category. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "CATEGORIZED_ITEM_COMPONENTS", schema = DB_SCHEMA) -public class CategorizedItemComponent extends ContentItemComponent { - - private static final long serialVersionUID = 6366311513244770272L; - - @Override - public boolean canEqual(final Object obj) { - return obj instanceof CategorizedItemComponent; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentJsonBuilder.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentJsonBuilder.java deleted file mode 100644 index edcd2340e..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentJsonBuilder.java +++ /dev/null @@ -1,80 +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 org.librecms.pagemodel; - -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.ConvertsComponentModel; - -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@ConvertsComponentModel(componentModel = CategorizedItemComponent.class) -public class CategorizedItemComponentJsonBuilder - extends AbstractContentItemComponentJsonConverter { - - @Override - public JsonObject toJson(final ComponentModel componentModel) { - - Objects.requireNonNull(componentModel); - - final JsonObjectBuilder objectBuilder = Json.createObjectBuilder(); - - if (!(componentModel instanceof CategorizedItemComponent)) { - throw new IllegalArgumentException( - "This converter only processes CategorizedItemComponents."); - } - - final CategorizedItemComponent component - = (CategorizedItemComponent) componentModel; - - convertBasePropertiesToJson(component, objectBuilder); - convertContentItemComponentPropertiesToJson(component, objectBuilder); - - return objectBuilder.build(); - } - - @Override - public void fromJson(final JsonObject jsonObject, - final ComponentModel componentModel) { - - Objects.requireNonNull(jsonObject); - - if (!(componentModel instanceof CategorizedItemComponent)) { - throw new IllegalArgumentException( - "This converter only processes CategorizedItemComponents."); - } - - final CategorizedItemComponent component - = (CategorizedItemComponent) componentModel; - - readBasePropertiesFromJson(jsonObject, component); - readContentItemComponentPropertiesFromJson(jsonObject, component); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentRenderer.java deleted file mode 100644 index a0206d287..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategorizedItemComponentRenderer.java +++ /dev/null @@ -1,130 +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.pagemodel; - -import org.libreccm.categorization.Categorization; -import org.libreccm.categorization.Category; -import org.libreccm.categorization.CategoryRepository; -import org.libreccm.core.CcmObject; -import org.librecms.contentsection.ContentItem; -import org.librecms.contentsection.ContentItemVersion; - -import java.util.Map; -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.NoResultException; -import javax.persistence.TypedQuery; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Join; -import javax.persistence.criteria.Root; -import javax.ws.rs.NotFoundException; - -import static org.librecms.pages.PagesConstants.*; - -import org.libreccm.pagemodel.RendersComponent; - -/** - * Renderer for the {@link CategorizedItemComponent}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@RendersComponent(componentModel = CategorizedItemComponent.class) -public class CategorizedItemComponentRenderer - extends AbstractContentItemComponentRenderer { - - @Inject - private CategoryRepository categoryRepo; - - @Inject - private EntityManager entityManager; - - @Override - protected ContentItem getContentItem( - final CategorizedItemComponent componentModel, - final Map parameters) { - - Objects.requireNonNull(componentModel); - Objects.requireNonNull(parameters); - - if (!parameters.containsKey(PARAMETER_CATEGORY)) { - throw new IllegalArgumentException(String - .format("The parameters map passed to this component does " - + "not include the parameter \"%s\"", - PARAMETER_CATEGORY)); - } - - if (!parameters.containsKey(PARAMETER_ITEMNAME)) { - throw new IllegalArgumentException(String - .format("The parameters map passed to this component does " - + "not include the parameter \"%s\"", - PARAMETER_ITEMNAME)); - } - - if (!(parameters.get(PARAMETER_CATEGORY) instanceof Category)) { - throw new IllegalArgumentException(String - .format("The parameters map passed to this GreetingItem " - + "component contains the parameter \"category\", but the " - + "parameter is not of type \"%s\" but of type \"%s\".", - Category.class.getName(), - parameters.get(PARAMETER_CATEGORY).getClass().getName())); - } - - final Category category = categoryRepo - .findById(((CcmObject) parameters.get(PARAMETER_CATEGORY)) - .getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No category with ID %d in the database.", - ((CcmObject) parameters.get(PARAMETER_CATEGORY)).getObjectId()))); - - final String itemName = (String) parameters.get(PARAMETER_ITEMNAME); - - final CriteriaBuilder builder = entityManager.getCriteriaBuilder(); - final CriteriaQuery criteriaQuery = builder - .createQuery(ContentItem.class); - - final Root from = criteriaQuery.from(ContentItem.class); - final Join join = from - .join("categories"); - - final TypedQuery query = entityManager - .createQuery(criteriaQuery - .select(from) - .where(builder.and( - builder.equal(from.get("displayName"), itemName), - builder.equal(from.get("version"), ContentItemVersion.DRAFT), - builder.equal(join.get("category"), category) - ))); - - try { - return query.getSingleResult(); - } catch (NoResultException ex) { - throw new NotFoundException(String - .format("No ContentItem with name \"%s\" in Category \"%s\".", - itemName, - Objects.toString(category))); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponent.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponent.java deleted file mode 100644 index e37099504..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponent.java +++ /dev/null @@ -1,98 +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.pagemodel; - -import org.libreccm.pagemodel.ComponentModel; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; - -import static org.librecms.CmsConstants.*; - -/** - * A component which shows the category tree. Depending on the parameters set - * either the complete category tree is shown or the sub tree of the current - * category. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "CATEGORY_TREE_COMPONENTS", schema = DB_SCHEMA) -public class CategoryTreeComponent extends ComponentModel { - - private static final long serialVersionUID = 9142791033478189003L; - - @Column(name = "SHOW_FULL_TREE") - private boolean showFullTree; - - public boolean isShowFullTree() { - return showFullTree; - } - - public void setShowFullTree(final boolean showFullTree) { - this.showFullTree = showFullTree; - } - - @Override - public int hashCode() { - int hash = super.hashCode(); - hash = 61 * hash + (showFullTree ? 1 : 0); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - - if (!super.equals(obj)) { - return false; - } - - if (!(obj instanceof CategoryTreeComponent)) { - return false; - } - final CategoryTreeComponent other = (CategoryTreeComponent) obj; - if (!other.canEqual(this)) { - return false; - } - return showFullTree == other.isShowFullTree(); - } - - @Override - public boolean canEqual(final Object obj) { - return obj instanceof CategoryTreeComponent; - } - - @Override - public String toString(final String data) { - - return super.toString(String.format(", showFullTree = %b%s", - showFullTree, - data)); - - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentJsonConverter.java deleted file mode 100644 index 6d4a53d39..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentJsonConverter.java +++ /dev/null @@ -1,91 +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 org.librecms.pagemodel; - -import org.libreccm.pagemodel.AbstractComponentModelJsonConverter; -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.ConvertsComponentModel; - -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@ConvertsComponentModel(componentModel = CategoryTreeComponent.class) -public class CategoryTreeComponentJsonConverter - extends AbstractComponentModelJsonConverter { - - private static final String SHOW_FULL_TREE = "showFullTree"; - - @Override - public JsonObject toJson(final ComponentModel componentModel) { - - Objects.requireNonNull(componentModel); - - if (!(componentModel instanceof CategoryTreeComponent)) { - throw new IllegalArgumentException( - "This converter only processes CategoryTreeComponents."); - } - - final CategoryTreeComponent categoryTree - = (CategoryTreeComponent) componentModel; - - final JsonObjectBuilder builder = Json.createObjectBuilder(); - convertBasePropertiesToJson(categoryTree, builder); - - builder.add(SHOW_FULL_TREE, categoryTree.isShowFullTree()); - - return builder.build(); - } - - @Override - public void fromJson(final JsonObject jsonObject, - final ComponentModel componentModel) { - - Objects.requireNonNull(jsonObject); - - if (!(componentModel instanceof CategoryTreeComponent)) { - throw new IllegalArgumentException( - "This converter only processes CategoryTreeComponents."); - } - - final CategoryTreeComponent categoryTree - = (CategoryTreeComponent) componentModel; - - if (!(componentModel instanceof CategoryTreeComponent)) { - throw new IllegalArgumentException( - "This converter only processes CategoryTreeComponents."); - } - - readBasePropertiesFromJson(jsonObject, categoryTree); - - if (jsonObject.containsKey(SHOW_FULL_TREE)) { - categoryTree.setShowFullTree(jsonObject.getBoolean(SHOW_FULL_TREE)); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentRenderer.java deleted file mode 100644 index 9a8de7249..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/CategoryTreeComponentRenderer.java +++ /dev/null @@ -1,191 +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.pagemodel; - -import com.arsdigita.kernel.KernelConfig; - -import org.libreccm.categorization.Category; -import org.libreccm.categorization.CategoryManager; -import org.libreccm.categorization.CategoryRepository; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.core.CcmObject; - -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; - -import static org.librecms.pages.PagesConstants.*; - -import org.libreccm.pagemodel.ComponentRenderer; -import org.libreccm.pagemodel.RendersComponent; - -/** - * Renderer for the {@link CategoryTreeComponent}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@RendersComponent(componentModel = CategoryTreeComponent.class) -public class CategoryTreeComponentRenderer - implements ComponentRenderer { - - @Inject - private CategoryManager categoryManager; - - @Inject - private CategoryRepository categoryRepo; - - @Inject - private ConfigurationManager confManager; - - @Transactional(Transactional.TxType.REQUIRED) - @Override - public Map renderComponent( - final CategoryTreeComponent componentModel, - final Map parameters) { - - Objects.requireNonNull(componentModel); - Objects.requireNonNull(parameters); - - if (!parameters.containsKey(PARAMETER_CATEGORY)) { - throw new IllegalArgumentException( - "The parameters map passed to this CategoryTree component does " - + "not include the parameter \"category\""); - } - - if (!(parameters.get(PARAMETER_CATEGORY) instanceof Category)) { - throw new IllegalArgumentException(String - .format("The parameters map passed to this CategoryTree " - + "component contains the parameter \"category\", but the " - + "parameter is not of type \"%s\" but of type \"%s\".", - Category.class.getName(), - parameters.get(PARAMETER_CATEGORY).getClass().getName())); - } - - final Category category = categoryRepo - .findById(((CcmObject) parameters.get(PARAMETER_CATEGORY)) - .getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No category with ID %d in the database.", - ((CcmObject) parameters.get(PARAMETER_CATEGORY)).getObjectId()))); - - final Locale language; - if (parameters.containsKey(PARAMETER_LANGUAGE)) { - language = new Locale((String) parameters.get(PARAMETER_LANGUAGE)); - } else { - final KernelConfig kernelConfig = confManager - .findConfiguration(KernelConfig.class); - language = kernelConfig.getDefaultLocale(); - } - - final Map result = new HashMap<>(); - if (componentModel.isShowFullTree()) { - - final Category rootCategory = findRootCategory(category); - - result.put("categoryId", Long.toString(rootCategory.getObjectId())); - result.put("uuid", rootCategory.getUuid()); - result.put("categoryName", rootCategory.getName()); - result.put("categoryPath", - categoryManager.getCategoryPath(rootCategory)); - result.put("categoryTitle", - rootCategory.getTitle().getValue(language)); - result.put("selected", rootCategory.equals(category)); - - final List> subCategories = rootCategory - .getSubCategories() - .stream() - .map(current -> generateCategoryWithTree(current, - category, - language)) - .collect(Collectors.toList()); - result.put("subCategories", subCategories); - } else { - result.put("categoryName", category.getName()); - result.put("categoryPath", - categoryManager.getCategoryPath(category)); - result.put("categoryTitle", category.getTitle().getValue(language)); - - final List> subCategories = category - .getSubCategories() - .stream() - .map(current -> generateCategory(current, language)) - .collect(Collectors.toList()); - result.put("subCategories", subCategories); - } - return result; - } - - protected Map generateCategory(final Category category, - final Locale language) { - - final Map result = new HashMap<>(); - result.put("categoryId", Long.toString(category.getObjectId())); - result.put("uuid", category.getUuid()); - result.put("categoryName", category.getName()); - result.put("categoryPath", categoryManager.getCategoryPath(category)); - result.put("categoryTitle", category.getTitle().getValue(language)); - return result; - } - - protected Map generateCategoryWithTree( - final Category category, - final Category selectedCategory, - final Locale language) { - - final Map result = new HashMap<>(); - result.put("categoryId", Long.toString(category.getObjectId())); - result.put("uuid", category.getUuid()); - result.put("categoryName", category.getName()); - result.put("categoryPath", categoryManager.getCategoryPath(category)); - result.put("categoryTitle", category.getTitle().getValue(language)); - result.put("selected", selectedCategory.equals(category)); - - if (!category.getSubCategories().isEmpty()) { - final List> subCategories = category - .getSubCategories() - .stream() - .map(current -> generateCategoryWithTree(current, - selectedCategory, - language)) - .collect(Collectors.toList()); - result.put("subCategories", subCategories); - } - - return result; - } - - protected Category findRootCategory(final Category category) { - - if (category.getParentCategory() == null) { - return category; - } else { - return findRootCategory(category.getParentCategory()); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/ContentItemComponent.java b/ccm-cms/src/main/java/org/librecms/pagemodel/ContentItemComponent.java deleted file mode 100644 index 87f9064ae..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/ContentItemComponent.java +++ /dev/null @@ -1,98 +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.pagemodel; - -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.PageModel; - -import java.util.Objects; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.Table; - -import static org.librecms.CmsConstants.*; - -/** - * Basic {@link PageModel} component for displaying a content item. This class - * is not indented for direct use. The subclasses should be used instead. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "CONTENT_ITEM_COMPONENTS", schema = DB_SCHEMA) -public class ContentItemComponent extends ComponentModel { - - private static final long serialVersionUID = 4904530823926147281L; - - @Column(name = "MODE") - private String mode; - - public String getMode() { - return mode; - } - - public void setMode(final String mode) { - this.mode = mode; - } - - @Override - public int hashCode() { - int hash = super.hashCode(); - hash = 13 * hash + Objects.hashCode(mode); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!super.equals(obj)) { - return false; - } - if (!(obj instanceof ContentItemComponent)) { - return false; - } - final ContentItemComponent other = (ContentItemComponent) obj; - if (!other.canEqual(this)) { - return false; - } - - return Objects.equals(mode, other.getMode()); - } - - @Override - public boolean canEqual(final Object obj) { - return obj instanceof ContentItemComponent; - } - - @Override - public String toString(final String data) { - return super.toString(String - .format(", mode = \"%s\"", - Objects.toString(mode), - data)); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponent.java b/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponent.java deleted file mode 100644 index ce8cb4e72..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponent.java +++ /dev/null @@ -1,98 +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.pagemodel; - -import org.librecms.contentsection.ContentItem; - -import java.util.Objects; - -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; -import javax.persistence.Table; - -import static org.librecms.CmsConstants.*; - -/** - * Component for showing a specific {@link ContentItem}. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "FIXED_CONTENT_ITEM_COMPONENTS", schema = DB_SCHEMA) -public class FixedContentItemComponent extends ContentItemComponent { - - private static final long serialVersionUID = -4518031021801472455L; - - @OneToOne - @JoinColumn(name = "CONTENT_ITEM_ID") - private ContentItem contentItem; - - public ContentItem getContentItem() { - return contentItem; - } - - public void setContentItem(final ContentItem contentItem) { - this.contentItem = contentItem; - } - - @Override - public int hashCode() { - int hash = super.hashCode(); - hash = 41 * hash + Objects.hashCode(contentItem); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - - if (!super.equals(obj)) { - return false; - } - - if (!(obj instanceof FixedContentItemComponent)) { - return false; - } - final FixedContentItemComponent other = (FixedContentItemComponent) obj; - if (!other.canEqual(this)) { - return false; - } - return Objects.equals(contentItem, other.getContentItem()); - } - - @Override - public boolean canEqual(final Object obj) { - return obj instanceof FixedContentItemComponent; - } - - @Override - public String toString(final String data) { - return super.toString(String.format(", contentItem = %s%s", - Objects.toString(contentItem), - data)); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentJsonConverter.java deleted file mode 100644 index 464857053..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentJsonConverter.java +++ /dev/null @@ -1,105 +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 org.librecms.pagemodel; - -import org.libreccm.core.UnexpectedErrorException; -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.ConvertsComponentModel; -import org.librecms.contentsection.ContentItemRepository; - -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@ConvertsComponentModel(componentModel = FixedContentItemComponent.class) -public class FixedContentItemComponentJsonConverter - extends AbstractContentItemComponentJsonConverter { - - private static final String CONTENT_ITEM = "contentItem"; - - @Inject - private ContentItemRepository itemRepo; - - @Override - public JsonObject toJson(final ComponentModel componentModel) { - - Objects.requireNonNull(componentModel); - - if (!(componentModel instanceof FixedContentItemComponent)) { - throw new IllegalArgumentException( - "This converter only processes FixedContentItemComponents."); - } - - final FixedContentItemComponent component - = (FixedContentItemComponent) componentModel; - - final JsonObjectBuilder objectBuilder = Json.createObjectBuilder(); - - convertBasePropertiesToJson(component, objectBuilder); - convertContentItemComponentPropertiesToJson(component, objectBuilder); - - if (component.getContentItem() != null) { - objectBuilder.add(CONTENT_ITEM, - component.getContentItem().getUuid()); - } - - return objectBuilder.build(); - } - - @Override - public void fromJson(final JsonObject jsonObject, - final ComponentModel componentModel) { - - Objects.requireNonNull(jsonObject); - - if (!(componentModel instanceof FixedContentItemComponent)) { - throw new IllegalArgumentException( - "This converter only processes FixedContentItemComponents."); - } - - final FixedContentItemComponent component - = (FixedContentItemComponent) componentModel; - - readBasePropertiesFromJson(jsonObject, component); - readContentItemComponentPropertiesFromJson(jsonObject, component); - - if (!jsonObject.isNull(CONTENT_ITEM)) { - - final String uuid = jsonObject.getString(CONTENT_ITEM); - - component - .setContentItem(itemRepo - .findByUuid(uuid) - .orElseThrow(() -> new UnexpectedErrorException( - String.format("No ContentItem with UUID \"%s\" exists.", - uuid)))); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentRenderer.java deleted file mode 100644 index 5d6ed55ba..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/FixedContentItemComponentRenderer.java +++ /dev/null @@ -1,66 +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.pagemodel; - -import org.librecms.contentsection.ContentItem; -import org.librecms.contentsection.ContentItemRepository; - -import java.util.Map; -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.ws.rs.NotFoundException; - -import org.libreccm.pagemodel.RendersComponent; - -/** - * Renderer for the {@link FixedContentItemComponent}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@RendersComponent(componentModel = FixedContentItemComponent.class) -public class FixedContentItemComponentRenderer - extends AbstractContentItemComponentRenderer { - - @Inject - private ContentItemRepository itemRepo; - - @Override - protected ContentItem getContentItem( - final FixedContentItemComponent componentModel, - final Map parameters) { - - Objects.requireNonNull(componentModel); - Objects.requireNonNull(parameters); - - if (componentModel.getContentItem() == null) { - throw new NotFoundException("No ContentItem configured."); - } - - return itemRepo - .findById(componentModel.getContentItem().getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format("No ContentItem with ID %d in the database.", - componentModel.getContentItem().getObjectId()))); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponent.java b/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponent.java deleted file mode 100644 index 179bcfcac..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponent.java +++ /dev/null @@ -1,47 +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.pagemodel; - -import org.libreccm.categorization.Category; -import org.libreccm.pagemodel.PageModel; - -import javax.persistence.Entity; -import javax.persistence.Table; - -import static org.librecms.CmsConstants.*; - -/** - * A {@link PageModel} component model for displaying the Greeting/Index item of - * a {@link Category}. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "GREETING_ITEM_COMPONENTS", schema = DB_SCHEMA) -public class GreetingItemComponent extends ContentItemComponent { - - private static final long serialVersionUID = 592400386436077481L; - - @Override - public boolean canEqual(final Object obj) { - return obj instanceof GreetingItemComponent; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentJsonConverter.java deleted file mode 100644 index 0416ba52a..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentJsonConverter.java +++ /dev/null @@ -1,80 +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 org.librecms.pagemodel; - -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.ConvertsComponentModel; - -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.json.Json; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@ConvertsComponentModel(componentModel = GreetingItemComponent.class) -public class GreetingItemComponentJsonConverter - extends AbstractContentItemComponentJsonConverter { - - @Override - public JsonObject toJson(final ComponentModel componentModel) { - - Objects.requireNonNull(componentModel); - - if (!(componentModel instanceof GreetingItemComponent)) { - throw new IllegalArgumentException( - "This converter only processes GreetingItemComponents."); - } - - final GreetingItemComponent component - = (GreetingItemComponent) componentModel; - - final JsonObjectBuilder objectBuilder = Json.createObjectBuilder(); - - convertBasePropertiesToJson(component, objectBuilder); - convertContentItemComponentPropertiesToJson(component, objectBuilder); - - return objectBuilder.build(); - } - - @Override - public void fromJson(final JsonObject jsonObject, - final ComponentModel componentModel) { - - Objects.requireNonNull(jsonObject); - - if (!(componentModel instanceof GreetingItemComponent)) { - throw new IllegalArgumentException( - "This converter only processes GreetingItemComponents."); - } - - final GreetingItemComponent component - = (GreetingItemComponent) componentModel; - - readBasePropertiesFromJson(jsonObject, component); - readContentItemComponentPropertiesFromJson(jsonObject, component); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java deleted file mode 100644 index 0aa6583a1..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/GreetingItemComponentRenderer.java +++ /dev/null @@ -1,140 +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.pagemodel; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.categorization.Category; -import org.libreccm.categorization.CategoryManager; -import org.libreccm.categorization.CategoryRepository; -import org.libreccm.core.CcmObject; -import org.librecms.contentsection.ContentItem; - -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -import static org.librecms.pages.PagesConstants.*; - -import org.libreccm.pagemodel.RendersComponent; -import org.librecms.contentsection.ContentItemVersion; - -/** - * Renderer for the {@link GreetingItemComponent}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@RendersComponent(componentModel = GreetingItemComponent.class) -public class GreetingItemComponentRenderer - extends AbstractContentItemComponentRenderer { - - private static final Logger LOGGER = LogManager - .getLogger(GreetingItemComponentRenderer.class); - - @Inject - private CategoryRepository categoryRepo; - - @Inject - private CategoryManager categoryManager; - - @Override - protected ContentItem getContentItem( - final GreetingItemComponent componentModel, - final Map parameters) { - - Objects.requireNonNull(componentModel); - Objects.requireNonNull(parameters); - - if (!parameters.containsKey(PARAMETER_CATEGORY)) { - throw new IllegalArgumentException( - "The parameters map passed to this GreetingItem component does " - + "not include the parameter \"category\""); - } - - if (!(parameters.get(PARAMETER_CATEGORY) instanceof Category)) { - throw new IllegalArgumentException(String - .format("The parameters map passed to this GreetingItem " - + "component contains the parameter \"category\", but the " - + "parameter is not of type \"%s\" but of type \"%s\".", - Category.class.getName(), - parameters.get(PARAMETER_CATEGORY).getClass().getName())); - } - - final Optional catResult = categoryRepo.findById( - ((CcmObject) parameters.get(PARAMETER_CATEGORY)).getObjectId() - ); - final Category category = catResult.orElseThrow( - () -> new IllegalArgumentException( - String.format( - "No category with ID %d in the database.", - ((CcmObject) parameters.get(PARAMETER_CATEGORY)) - .getObjectId() - ) - ) - ); -// final Category category = categoryRepo -// .findById(((CcmObject) parameters.get(PARAMETER_CATEGORY)) -// .getObjectId()) -// .orElseThrow(() -> new IllegalArgumentException(String.format( -// "No category with ID %d in the database.", -// ((CcmObject) parameters.get(PARAMETER_CATEGORY)).getObjectId()))); - - final Optional indexObj = categoryManager - .getIndexObject(category) - .stream() - .filter(object -> object instanceof ContentItem) - .filter(item -> { - return ((ContentItem) item) - .getVersion() == ContentItemVersion.LIVE; - }) - .findFirst(); - - if (indexObj.isPresent()) { - - if (indexObj.get() instanceof ContentItem) { - return (ContentItem) indexObj.get(); - } else { -// throw new NotFoundException(String -// .format( -// "The index item %s of category %s does not have " -// + "a live version.", -// Objects.toString(indexObj), -// Objects.toString(category))); - LOGGER.debug("The index item {} of category {} does not have " - + "a live version.", - Objects.toString(indexObj), - Objects.toString(category)); - return null; - } - } else { - LOGGER.debug("The category {} does not have a index item.", - Objects.toString(category)); - return null; -// throw new NotFoundException(String -// .format("The category %s does not have a index item.", -// Objects.toString(category))); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponent.java b/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponent.java deleted file mode 100644 index e4271b70c..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponent.java +++ /dev/null @@ -1,182 +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.pagemodel; - -import org.libreccm.pagemodel.ComponentModel; -import org.librecms.contentsection.ContentItem; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -import javax.persistence.CollectionTable; -import javax.persistence.Column; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.Table; - -import static org.librecms.CmsConstants.*; - -/** - * A component for displaying the list of {@link ContentItem}s assigned to a - * Category. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "ITEM_LIST_COMPONENTS", schema = DB_SCHEMA) -public class ItemListComponent extends ComponentModel { - - private static final long serialVersionUID = -8058080493341203684L; - - /** - * Should the list show also items assigned to sub categories? - */ - @Column(name = "DESCINDING") - private boolean descending; - - /** - * Include only items of the specified type into the list. This must be a - * subtype of {@link ContentItem}. - */ - @Column(name = "LIMIT_TO_TYPE") - private String limitToType; - - /** - * Maximum number of items shown on one page. - */ - @Column(name = "PAGE_SIZE") - private int pageSize; - - /** - * Order the list by this properties. Warning: All items must have the - * properties listed here, otherwise an error will occur! - */ - @ElementCollection - @CollectionTable(name = "ITEM_LIST_ORDER", - schema = DB_SCHEMA, - joinColumns = { - @JoinColumn(name = "ITEM_LIST_ID") - }) - @Column(name = "LIST_ORDER") - private List listOrder; - - public ItemListComponent() { - listOrder = new ArrayList<>(); - } - - public boolean isDescending() { - return descending; - } - - public void setDescending(final boolean descending) { - this.descending = descending; - } - - public String getLimitToType() { - return limitToType; - } - - public void setLimitToType(final String limitToType) { - this.limitToType = limitToType; - } - - public int getPageSize() { - return pageSize; - } - - public void setPageSize(final int pageSize) { - this.pageSize = pageSize; - } - - public List getListOrder() { - return Collections.unmodifiableList(listOrder); - } - - public void addListOrder(final String order) { - listOrder.add(order); - } - - public void removeListOrder(final String order) { - listOrder.remove(order); - } - - public void setListOrder(final List listOrder) { - this.listOrder = new ArrayList<>(listOrder); - } - - @Override - public int hashCode() { - int hash = super.hashCode(); - hash = 41 * hash + (descending ? 1 : 0); - hash = 41 * hash + Objects.hashCode(limitToType); - hash = 41 * hash + Objects.hashCode(listOrder); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - - if (!super.equals(obj)) { - return false; - } - - if (!(obj instanceof ItemListComponent)) { - return false; - } - final ItemListComponent other = (ItemListComponent) obj; - if (!other.canEqual(this)) { - return false; - } - - if (descending != other.isDescending()) { - return false; - } - if (!Objects.equals(limitToType, other.getLimitToType())) { - return false; - } - return Objects.equals(listOrder, other.getListOrder()); - } - - @Override - public boolean canEqual(final Object obj) { - return obj instanceof ItemListComponent; - } - - @Override - public String toString(final String data) { - return super.toString(String.format(", descending = %b, " - + "limitToTypes = %s, " - + "listOrder = %s%s", - descending, - limitToType, - Objects.toString(listOrder), - data)); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentJsonConverter.java b/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentJsonConverter.java deleted file mode 100644 index 0a0f84088..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentJsonConverter.java +++ /dev/null @@ -1,119 +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 org.librecms.pagemodel; - -import org.libreccm.pagemodel.AbstractComponentModelJsonConverter; -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.ConvertsComponentModel; - -import java.util.Objects; -import java.util.stream.Collectors; - -import javax.enterprise.context.RequestScoped; -import javax.json.Json; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@ConvertsComponentModel(componentModel = ItemListComponent.class) -public class ItemListComponentJsonConverter - extends AbstractComponentModelJsonConverter { - - private static final String LIST_ORDER = "listOrder"; - private static final String PAGE_SIZE = "pageSize"; - private static final String LIMIT_TO_TYPE = "limitToType"; - private static final String DESCENDING = "descending"; - - @Override - public JsonObject toJson(final ComponentModel componentModel) { - - Objects.requireNonNull(componentModel); - - if (!(componentModel instanceof ItemListComponent)) { - throw new IllegalArgumentException( - "This implementation does only handle ItemListComponents."); - } - - final ItemListComponent itemList = (ItemListComponent) componentModel; - final JsonObjectBuilder builder = Json.createObjectBuilder(); - - convertBasePropertiesToJson(itemList, builder); - - builder.add(DESCENDING, itemList.isDescending()); - builder.add(LIMIT_TO_TYPE, itemList.getLimitToType()); - builder.add(PAGE_SIZE, itemList.getPageSize()); - - final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); - if (itemList.getListOrder() != null) { - - itemList - .getListOrder() - .stream() - .forEach(value -> arrayBuilder.add(value)); - } - builder.add(LIST_ORDER, arrayBuilder.build()); - - return builder.build(); - } - - @Override - public void fromJson(final JsonObject jsonObject, - final ComponentModel componentModel) { - - Objects.requireNonNull(jsonObject); - - if (!(componentModel instanceof ItemListComponent)) { - throw new IllegalArgumentException( - "This implementation does only handle ItemListComponents."); - } - - final ItemListComponent itemList = (ItemListComponent) componentModel; - readBasePropertiesFromJson(jsonObject, itemList); - - if (!jsonObject.isNull(DESCENDING)) { - itemList.setDescending(jsonObject.getBoolean(DESCENDING)); - } - - if (!jsonObject.isNull(LIMIT_TO_TYPE)) { - itemList.setLimitToType(jsonObject.getString(LIMIT_TO_TYPE)); - } - - if (!jsonObject.isNull(PAGE_SIZE)) { - itemList.setPageSize(jsonObject.getInt(PAGE_SIZE)); - } - - if (!jsonObject.isNull(LIST_ORDER)) { - - itemList.setListOrder( - jsonObject - .getJsonArray(LIST_ORDER) - .stream() - .map(value -> value.toString()) - .collect(Collectors.toList())); - - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java deleted file mode 100644 index eb699cf0a..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/ItemListComponentRenderer.java +++ /dev/null @@ -1,387 +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.pagemodel; - -import com.arsdigita.kernel.KernelConfig; - -import org.libreccm.categorization.Categorization; -import org.libreccm.categorization.Category; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.core.UnexpectedErrorException; - -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -import org.libreccm.pagemodel.ComponentRenderer; -import org.librecms.contentsection.ContentItem; -import org.librecms.pagemodel.contentitems.AbstractContentItemRenderer; -import org.librecms.pagemodel.contentitems.ContentItemRenderers; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Objects; -import java.util.stream.Collectors; - -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Join; -import javax.persistence.criteria.Order; -import javax.persistence.criteria.Root; -import javax.servlet.http.HttpServletRequest; - -import static org.librecms.pages.PagesConstants.*; - -import org.libreccm.pagemodel.RendersComponent; -import org.libreccm.security.Permission; -import org.libreccm.security.PermissionChecker; -import org.libreccm.security.Role; -import org.libreccm.security.RoleManager; -import org.libreccm.security.Shiro; -import org.libreccm.security.User; -import org.libreccm.security.UserRepository; -import org.librecms.contentsection.ContentItemVersion; -import org.librecms.contentsection.privileges.ItemPrivileges; - -import java.util.Optional; - -import javax.persistence.criteria.JoinType; -import javax.persistence.criteria.Predicate; - -/** - * Renderer for the {@link ItemListComponent}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@RendersComponent(componentModel = ItemListComponent.class) -public class ItemListComponentRenderer - implements ComponentRenderer { - - @Inject - private ConfigurationManager confManager; - - @Inject - private ContentItemRenderers itemRenderers; - - @Inject - private EntityManager entityManager; - - @Inject - private HttpServletRequest request; - - @Inject - private PermissionChecker permissionChecker; - - @Inject - private RoleManager roleManager; - - @Inject - private Shiro shiro; - - @Inject - private UserRepository userRepository; - - @Override - public Map renderComponent( - final ItemListComponent componentModel, - final Map parameters) { - - Objects.requireNonNull(componentModel); - Objects.requireNonNull(parameters); - - if (!parameters.containsKey(PARAMETER_CATEGORY)) { - throw new IllegalArgumentException( - "The parameters map passed to this GreetingItem component does " - + "not include the parameter \"category\""); - } - - if (!(parameters.get(PARAMETER_CATEGORY) instanceof Category)) { - throw new IllegalArgumentException(String - .format("The parameters map passed to this GreetingItem " - + "component contains the parameter \"category\", but the " - + "parameter is not of type \"%s\" but of type \"%s\".", - Category.class.getName(), - parameters.get(PARAMETER_CATEGORY).getClass().getName())); - } - - final Category category = (Category) parameters.get(PARAMETER_CATEGORY); - final Locale language; - if (parameters.containsKey(PARAMETER_LANGUAGE)) { - language = new Locale((String) parameters.get(PARAMETER_LANGUAGE)); - } else { - final KernelConfig kernelConfig = confManager - .findConfiguration(KernelConfig.class); - language = kernelConfig.getDefaultLocale(); - } - - final List categories = new ArrayList<>(); - if (componentModel.isDescending()) { - categories.addAll(collectCategories(category)); - } - categories.add(category); - - final Class limitToType = getLimitToType( - componentModel); - - final List items = findItems( - limitToType, - categories, - componentModel.getListOrder(), - componentModel.getPageSize()); - - final Map result = new HashMap<>(); - result.put("items", - items - .stream() - .map(item -> renderItem(item, language)) - .collect(Collectors.toList())); - return result; - } - - private List collectCategories(final Category category) { - - if (category.getSubCategories().isEmpty()) { - return Collections.emptyList(); - } else { - final List categories = new ArrayList<>(); - for (final Category subCategory : category.getSubCategories()) { - categories.add(subCategory); - categories.addAll(collectCategories(subCategory)); - } - return categories; - } - } - - private List findItems( - final Class limitToType, - final List categories, - final List listOrder, - final int pageSize) { - - final CriteriaBuilder criteriaBuilder = entityManager - .getCriteriaBuilder(); - final CriteriaQuery criteriaQuery - = criteriaBuilder - .createQuery(limitToType); - final Root from = criteriaQuery - .from(limitToType); - final Join catJoin = from - .join("categories"); - final Join permissionsJoin = from - .join("permissions", JoinType.LEFT); - - final Optional user = shiro.getUser(); - final List roles; - if (user.isPresent()) { - final User theUser = userRepository - .findById(user.get().getPartyId()) - .orElseThrow(() -> new IllegalArgumentException(String - .format( - "No user with id %d in the database. " - + "Where did that ID come from?", - user.get().getPartyId()))); - roles = roleManager.findAllRolesForUser(theUser); - } else { - - final Optional publicUser; - - final KernelConfig kernelConfig = confManager - .findConfiguration(KernelConfig.class); - final String principal = (String) shiro - .getPublicUser() - .getPrincipal(); - if (kernelConfig.emailIsPrimaryIdentifier()) { - publicUser = userRepository.findByEmailAddress(principal); - } else { - publicUser = userRepository.findByName(principal); - } - - if (publicUser.isPresent()) { - roles = roleManager.findAllRolesForUser(publicUser.get()); - } else { - roles = Collections.emptyList(); - } - } - - final boolean isSystemUser = shiro.isSystemUser(); - final boolean isAdmin = permissionChecker.isPermitted("*"); - - final Predicate permissionsCheck; - if (roles.isEmpty()) { - permissionsCheck = criteriaBuilder - .or( - criteriaBuilder.equal(criteriaBuilder.literal(true), - isSystemUser), - criteriaBuilder.equal(criteriaBuilder.literal(true), - isAdmin) - ); - } else { - permissionsCheck = criteriaBuilder - .or( - criteriaBuilder - .and( - criteriaBuilder.in(permissionsJoin.get("grantee")) - .value(roles), - criteriaBuilder - .equal( - permissionsJoin.get("grantedPrivilege"), - criteriaBuilder.selectCase() - .when( - criteriaBuilder.equal( - from.get("version"), - ContentItemVersion.DRAFT), - ItemPrivileges.PREVIEW) - .otherwise( - ItemPrivileges.VIEW_PUBLISHED)) - ), - criteriaBuilder - .equal(criteriaBuilder.literal(true), - isSystemUser), - criteriaBuilder - .equal(criteriaBuilder.literal(true), - isAdmin) - ); - } - - criteriaQuery.distinct(true).where(criteriaBuilder - .and(catJoin.get("category").in(categories), - criteriaBuilder.equal(catJoin.get("indexObject"), false), - criteriaBuilder.equal(catJoin.get("type"), ""), - criteriaBuilder.equal(from.get("version"), - ContentItemVersion.LIVE), - permissionsCheck -// criteriaBuilder.or( -// criteriaBuilder.and( -// criteriaBuilder -// .in(permissionsJoin.get("grantee")) -// .value(roles), -// criteriaBuilder.equal( -// permissionsJoin.get("grantedPrivilege"), -// criteriaBuilder.selectCase() -// .when( -// criteriaBuilder -// .equal(from.get("version"), -// ContentItemVersion.DRAFT), -// ItemPrivileges.PREVIEW) -// .otherwise(ItemPrivileges.VIEW_PUBLISHED)) -// ), -// criteriaBuilder -// .equal(criteriaBuilder.literal(true), -// isSystemUser), -// criteriaBuilder -// .equal(criteriaBuilder.literal(true), -// isAdmin) -// ) - ) - ); - - criteriaQuery - .orderBy(listOrder - .stream() - .map(order -> createOrder(order, from, criteriaBuilder)) - .collect(Collectors.toList())); - - return entityManager - .createQuery(criteriaQuery) - .setFirstResult(getOffset(pageSize)) - .setMaxResults(pageSize) - .getResultList(); - } - - private Class getLimitToType( - final ItemListComponent componentModel) { - - final String className = componentModel.getLimitToType(); - - if (className == null - || className.matches("\\s*")) { - return ContentItem.class; - } else { - final Class clazz; - try { - clazz = Class.forName(className); - } catch (ClassNotFoundException ex) { - throw new UnexpectedErrorException(ex); - } - - if (ContentItem.class.isAssignableFrom(clazz)) { - @SuppressWarnings("unchecked") - final Class type - = (Class) clazz; - return type; - } else { - throw new UnexpectedErrorException(String - .format( - "The type \"%s\" set in ItemList is not a subtype of " - + "\"%s\".", - clazz.getName(), - ContentItem.class.getName())); - } - } - } - - private Order createOrder(final String order, - final Root from, - final CriteriaBuilder criteriaBuilder) { - - if (order.endsWith(" ASC")) { - final String colName = order - .substring(0, order.length() - " ASC".length()); - return (criteriaBuilder.asc(from.get(colName))); - } else if (order.endsWith(" DESC")) { - final String colName = order - .substring(0, order.length() - " DESC".length()); - return criteriaBuilder.desc(from.get(colName)); - } else { - return criteriaBuilder.asc(from.get(order)); - } - } - - private int getOffset(final int pageSize) { - - if (request.getParameterMap().containsKey("page")) { - final String value = request.getParameter("page"); - if (value.matches("\\d*")) { - final int page = Integer.valueOf(value); - - return page * pageSize; - } else { - return 0; - } - } else { - return 0; - } - } - - private Map renderItem(final ContentItem item, - final Locale language) { - - final AbstractContentItemRenderer renderer = itemRenderers - .findRenderer(item.getClass()); - return renderer.render(item, language); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AbstractAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AbstractAssetRenderer.java deleted file mode 100644 index 6fd2de387..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AbstractAssetRenderer.java +++ /dev/null @@ -1,84 +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.pagemodel.assets; - -import org.librecms.contentsection.Asset; - -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -/** - * Abstract base class for rendering {@link Asset}s. - * - * @author Jens Pelzetter - */ -@Deprecated -public abstract class AbstractAssetRenderer { - - /** - * Basic implementation rendering the common properties of an asset. For - * rendering the specific properties of the asset this method calls - * {@link #renderAsset(org.librecms.contentsection.Asset, java.util.Locale, java.util.Map)}. - * - * The common properties put into {@code result} are: - * - *
-     *  {
-     *      "objectId": {@link Asset#getObjectId()}
-     *      "uuid": {@link Asset#getUuid()}
-     *      "displayName": {@link Asset#getDisplayName()}
-     *      "title": {@link Asset#getTitle()}
-     *  }
-     * 
- * - * @param asset The {@link Asset} to render. - * @param language The current language. - * - * @return The rendered asset. - */ - public Map render(final Asset asset, - final Locale language) { - - final Map result = new HashMap<>(); - - result.put("objectId", asset.getObjectId()); - result.put("uuid", asset.getUuid()); - result.put("displayName", asset.getDisplayName()); - result.put("title", asset.getTitle().getValue(language)); - - renderAsset(asset, language, result); - - return result; - } - - /** - * Renders the special properties of an specific asset type. If the provided - * asset is not of the correct type for the renderer this an implementation - * of this method should return without doing anything. - * - * @param asset The {@link Asset} to render. - * @param language The current language. - * @param result The map in which the rendered properties are stored. - */ - protected abstract void renderAsset(final Asset asset, - final Locale language, - final Map result); - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderer.java deleted file mode 100644 index 300dbadfa..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderer.java +++ /dev/null @@ -1,46 +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.pagemodel.assets; - -import org.librecms.contentsection.Asset; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * Annotation for marking asset renderers. - * - * @author Jens Pelzetter - */ -@Deprecated -@Qualifier -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, - ElementType.FIELD, - ElementType.PARAMETER, - ElementType.TYPE}) -public @interface AssetRenderer { - - Class renders(); - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderers.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderers.java deleted file mode 100644 index 2b124122a..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderers.java +++ /dev/null @@ -1,114 +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.pagemodel.assets; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Any; -import javax.enterprise.inject.Instance; -import javax.enterprise.util.AnnotationLiteral; -import javax.inject.Inject; - -/** - * Provides access to all available implementations of - * {@link AbstractAssetRenderer}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class AssetRenderers { - - private static final Logger LOGGER = LogManager - .getLogger(AssetRenderers.class); - - @Inject - @Any - private Instance renderers; - - /** - * Tries to find an implementation of {@link AbstractAssetRenderer} for the - * provided asset type. If no renderer is found for the provided - * {@code assetType} an noop implementation of {@link AbstractAssetRenderer} - * is returned. This means that only the common properties of the asset are - * rendered. - * - * @param assetType The asset type. - * - * @return An renderer for the provided asset type. - */ - public AbstractAssetRenderer findRenderer( - final Class assetType) { - - LOGGER.debug("Trying to find renderer for asset type \"{}\"...", - assetType.getName()); - - final AssetRendererLiteral literal = new AssetRendererLiteral(assetType); - - final Instance instance = renderers - .select(literal); - - if (instance.isUnsatisfied()) { - - LOGGER.warn("No renderer for asset type \"{}\". " - + "Returning default renderer.", - assetType.getName()); - - return new AbstractAssetRenderer() { - - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - //Nothing here. - } - - }; - } else { - return instance.iterator().next(); - } - } - - private class AssetRendererLiteral - extends AnnotationLiteral - implements AssetRenderer { - - private static final long serialVersionUID = 2635180159989399554L; - - private final Class renders; - - public AssetRendererLiteral(final Class renders) { - this.renders = renders; - } - - @Override - public Class renders() { - return renders; - } - - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AudioAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AudioAssetRenderer.java deleted file mode 100644 index 8e5577d2f..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AudioAssetRenderer.java +++ /dev/null @@ -1,82 +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.pagemodel.assets; - -import org.librecms.assets.AudioAsset; -import org.librecms.assets.LegalMetadata; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * Renderer for {@link AudioAsset}s. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = AudioAsset.class) -public class AudioAssetRenderer extends BinaryAssetRenderer { - - @Inject - @AssetRenderer(renders = LegalMetadata.class) - private AbstractAssetRenderer legalMetadataRenderer; - - /** - * Renders to provided {@link AudioAsset}. The following properties are put - * into {@code result}: - * - *
-     *  {
-     *      "legamMetadata": {@link AudioAsset#getLegalMetadata()}.
-     *  }
-     * 
- * - * The associated {@link LegalMetadata} asset is rendered using - * {@link LegalMetadataRenderer} and the result is put {@code result} under - * the key {@code legalMetadata}. - * - * @param asset The asset to render. - * @param language The current language. - * @param result The map into which the result is placed. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - super.renderAsset(asset, language, result); - - final AudioAsset audioAsset; - if (asset instanceof AudioAsset) { - audioAsset = (AudioAsset) asset; - } else { - return; - } - - result.put("legalMetadata", - legalMetadataRenderer.render(audioAsset.getLegalMetadata(), - language)); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BinaryAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BinaryAssetRenderer.java deleted file mode 100644 index a05f8f9ce..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BinaryAssetRenderer.java +++ /dev/null @@ -1,78 +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.pagemodel.assets; - -import org.librecms.assets.BinaryAsset; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; -import java.util.Objects; - -/** - * A renderer for {@link BinaryAsset}s. Please note that the binary data is - * usually not included into the render result. Instead an URL to a service - * which provides the binary data is included. For more details see the - * documentation of the specific renderers. - * - * @author Jens Pelzetter - */ -@Deprecated -public class BinaryAssetRenderer extends AbstractAssetRenderer { - - /** - * Renders the common properties of all {@link BinaryAssets}. These are the - * following properties: - * - *
-     *  {
-     *      "description": {@link BinaryAsset#getDescription()}
-     *      "fileName": {@link BinaryAsset#getFileName()}
-     *      "mimeType": {@link BinaryAsset#getMimeType()}
-     *      "size": {@link BinaryAsset#getSize()}.
-     *  }
-     * 
- * - * The mime type is converted to a string using - * {@link Objects#toString(java.lang.Object)}. - * - * @param asset The asset to render. - * @param language The current language. - * @param result The map into which the result is put. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - final BinaryAsset binaryAsset; - if (asset instanceof BinaryAsset) { - binaryAsset = (BinaryAsset) asset; - } else { - return; - } - - result.put("description", - binaryAsset.getDescription().getValue(language)); - result.put("fileName", binaryAsset.getFileName()); - result.put("mimeType", Objects.toString(binaryAsset.getMimeType())); - result.put("size", binaryAsset.getSize()); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BookmarkRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BookmarkRenderer.java deleted file mode 100644 index ff2974bd3..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BookmarkRenderer.java +++ /dev/null @@ -1,71 +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.pagemodel.assets; - -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -import org.librecms.assets.Bookmark; - -/** - * Renderer for {@link Bookmark} assets. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = Bookmark.class) -public class BookmarkRenderer extends AbstractAssetRenderer { - - /** - * Renders the provided {@link BookmarkAsset}. The following properties - * are put into {@code result}: - * - *
-     *  {
-     *      "description": {@link Bookmark#getDescription()}
-     *      "url": {@link Bookmark#getUrl()}.
-     *  }
-     * 
- * - * @param asset The asset to render. - * @param language The current language. - * @param result The map into which the result is placed. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - final Bookmark bookmark; - if (asset instanceof Bookmark) { - bookmark = (Bookmark) asset; - } else { - return; - } - - result.put("description", bookmark.getDescription().getValue(language)); - result.put("url", bookmark.getUrl()); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ContactableEntityRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ContactableEntityRenderer.java deleted file mode 100644 index 034e056a3..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ContactableEntityRenderer.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2019 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.pagemodel.assets; - -import org.librecms.assets.ContactEntry; -import org.librecms.assets.ContactableEntity; -import org.librecms.assets.Organization; -import org.librecms.assets.PostalAddress; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class ContactableEntityRenderer extends AbstractAssetRenderer { - - @Inject - private AssetRenderers assetRenderers; - - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - final ContactableEntity contactable; - if (asset instanceof ContactableEntity) { - contactable = (ContactableEntity) asset; - } else { - return; - } - - final Map contactEntries = buildContactEntries( - contactable); - result.put("contactEntries", contactEntries); - - if (contactable.getPostalAddress() != null) { - - final AbstractAssetRenderer postalAddressRenderer = assetRenderers - .findRenderer(PostalAddress.class); - final PostalAddress postalAddress = contactable.getPostalAddress(); - - result.put("postalAddress", - postalAddressRenderer.render(postalAddress, language)); - } - } - - private Map buildContactEntries( - final ContactableEntity contactable) { - - return contactable - .getContactEntries() - .stream() - .map(this::buildContactEntry) - .collect(Collectors.toMap(entry -> entry[0], entry -> entry[1])); - } - - private String[] buildContactEntry(final ContactEntry entry) { - - final String key = entry.getKey().getEntryKey(); - final String value = entry.getValue(); - - return new String[]{key, value}; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalAudioAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalAudioAssetRenderer.java deleted file mode 100644 index 8302f95c1..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalAudioAssetRenderer.java +++ /dev/null @@ -1,85 +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.pagemodel.assets; - -import org.librecms.assets.ExternalAudioAsset; -import org.librecms.assets.LegalMetadata; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * Renderer for {@link ExternalAudioAsset}s. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = ExternalAudioAsset.class) -public class ExternalAudioAssetRenderer extends BookmarkRenderer { - - @Inject - @AssetRenderer(renders = LegalMetadata.class) - private AbstractAssetRenderer legalMetadataRenderer; - - /** - * Renders the provided {@link ExternalVideoAsset}. In addition to the data - * put into {@code result} by the {@link BookmarkRenderer} the following - * properties are put into the map: - * - *
-     *  {
-     *      "legalMetadata": {@link ExternalVideoAsset#getLegalMetadata()}
-     *  }
-     * 
- * - * The associated {@link LegalMetadata} asset is rendered using the - * {@link LegalMetadata} and the result is put into the map under the key - * {@code legalMetadata}. - * - * @param asset The asset to render. - * @param language The current language - * @param result The map into which the result is put. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - super.renderAsset(asset, language, result); - - final ExternalAudioAsset externalAudioAsset; - if (asset instanceof ExternalAudioAsset) { - externalAudioAsset = (ExternalAudioAsset) asset; - } else { - return; - } - - result.put("legalMetadata", - legalMetadataRenderer - .render(externalAudioAsset.getLegalMetadata(), - language)); - - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalVideoAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalVideoAssetRenderer.java deleted file mode 100644 index 64ca21ba0..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalVideoAssetRenderer.java +++ /dev/null @@ -1,83 +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.pagemodel.assets; - -import org.librecms.assets.ExternalVideoAsset; -import org.librecms.assets.LegalMetadata; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * Renderer for {@link ExternalVideoAsset}s. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = ExternalVideoAsset.class) -public class ExternalVideoAssetRenderer extends BookmarkRenderer { - - @Inject - @AssetRenderer(renders = LegalMetadata.class) - private AbstractAssetRenderer legalMetadataRenderer; - - /** - * Renders the provided {@link ExternalVideoAsset}. In addition to the data - * put into {@code result} by the {@link BookmarkRenderer} the following - * properties are put into the map: - * - *
-     *  {
-     *      "legalMetadata": {@link ExternalVideoAsset#getLegalMetadata()}
-     *  }
-     * 
- * - * The associated {@link LegalMetadata} asset is rendered using the - * {@link LegalMetadata} and the result is put into the map under the key - * {@code legalMetadata}. - * - * @param asset The asset to render. - * @param language The current language - * @param result The map into which the result is put. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - super.renderAsset(asset, language, result); - - final ExternalVideoAsset externalVideoAsset; - if (asset instanceof ExternalVideoAsset) { - externalVideoAsset = (ExternalVideoAsset) asset; - } else { - return; - } - - result.put("legalMetadata", - legalMetadataRenderer - .render(externalVideoAsset.getLegalMetadata(), language)); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/FileAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/FileAssetRenderer.java deleted file mode 100644 index 58edbac26..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/FileAssetRenderer.java +++ /dev/null @@ -1,56 +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.pagemodel.assets; - -import org.librecms.assets.FileAsset; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -/** - * Renderer for {@link FileAsset}s. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = FileAsset.class) -public class FileAssetRenderer extends BinaryAssetRenderer { - - /** - * Renders the provided {@link FileAsset}. No additional data. - * - * @param asset - * @param locale - * @param result - */ - @Override - protected void renderAsset(final Asset asset, - final Locale locale, - final Map result) { - - super.renderAsset(asset, locale, result); - - //Nothing more yet - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ImageRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ImageRenderer.java deleted file mode 100644 index 4cd9b9df5..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ImageRenderer.java +++ /dev/null @@ -1,88 +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.pagemodel.assets; - -import org.librecms.assets.Image; -import org.librecms.assets.LegalMetadata; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * Renderer for {@link ImageRenderer}. - * - * @author Jens Pelzetter - */ -@Deprecated -@AssetRenderer(renders = Image.class) -@RequestScoped -public class ImageRenderer extends BinaryAssetRenderer { - - @Inject - @AssetRenderer(renders = LegalMetadata.class) - private AbstractAssetRenderer legalMetadataRenderer; - - /** - * Renders the provided {@link ImageAsset}. The following data is put into - * the map: - * - *
-     *  {
-     *      "width": {@link Image#getWidth()}
-     *      "height": {@link Image#getHeight()}
-     *      "legalMetadata": {@link LegalMetadataRenderer#render(org.librecms.contentsection.Asset, java.util.Locale)} using {@link Image#getLegalMetadata()}.
-     *  }
-     * 
- * - * The associated {@link LegalMetadata} asset is rendered using - * {@link LegalMetadataRenderer} and the result is put into map under the - * key {@code legalMetadata}. - * - * @param asset The asset to render. - * @param language The current language. - * @param result The map into which the result is put. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - super.renderAsset(asset, language, result); - - final Image image; - if (asset instanceof Image) { - image = (Image) asset; - } else { - return; - } - - result.put("width", image.getWidth()); - result.put("height", image.getHeight()); - if (image.getLegalMetadata() != null) { - result.put("legalMetadata", - legalMetadataRenderer.render(image.getLegalMetadata(), - language)); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/LegalMetadataRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/LegalMetadataRenderer.java deleted file mode 100644 index 1dc76edc7..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/LegalMetadataRenderer.java +++ /dev/null @@ -1,76 +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.pagemodel.assets; - -import org.librecms.assets.LegalMetadata; -import org.librecms.contentsection.Asset; - -import java.util.ArrayList; -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -/** - * Renderer for {@link LegalMetadata} assets. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = LegalMetadata.class) -public class LegalMetadataRenderer extends AbstractAssetRenderer { - - /** - * Render the provided {@link LegalMetadata} asset. The following properties - * are added to the {@code result} map: - * - *
-     *      "rightsHolder": {@link LegalMetadata#getRightsHolder()}
-     *      "rights": {@link LegalMetadata#getRights()}
-     *      "publisher": {@link LegalMetadata#getPublisher()}
-     *      "creator": {@link LegalMetadata#getCreator()}
-     *      "contributors": {@link LegalMetadata#getContributors()}
-     * 
- * - * @param asset The asset to renderer. - * @param language The current language. - * @param result The map into which the result is placed. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - final LegalMetadata legalMetadata; - if (asset instanceof LegalMetadata) { - legalMetadata = (LegalMetadata) asset; - } else { - return; - } - - result.put("rightsHolder", legalMetadata.getRightsHolder()); - result.put("rights", legalMetadata.getRights().getValue(language)); - result.put("publisher", legalMetadata.getPublisher()); - result.put("creator", legalMetadata.getCreator()); - result.put("contributors", - new ArrayList<>(legalMetadata.getContributors())); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/OrganizationRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/OrganizationRenderer.java deleted file mode 100644 index 09ff2c42e..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/OrganizationRenderer.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2019 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.pagemodel.assets; - -import org.librecms.assets.Organization; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = Organization.class) -public class OrganizationRenderer extends ContactableEntityRenderer { - - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - super.renderAsset(asset, language, result); - - final Organization organization; - if (asset instanceof Organization) { - organization = (Organization) asset; - } else { - return; - } - - result.put("organizationName", organization.getName()); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/PersonRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/PersonRenderer.java deleted file mode 100644 index 18abd77a7..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/PersonRenderer.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (C) 2019 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.pagemodel.assets; - -import org.librecms.assets.Person; -import org.librecms.assets.PersonName; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = Person.class) -public class PersonRenderer extends ContactableEntityRenderer { - - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - super.renderAsset(asset, language, result); - - final Person person; - if (asset instanceof Person) { - person = (Person) asset; - } else { - return; - } - - final PersonName personName = person.getPersonName(); - if (personName != null) { - - if (personName.getSurname() != null - && !personName.getSurname().isEmpty()) { - - result.put("surname", personName.getSurname()); - } - - if (personName.getGivenName() != null - && !personName.getGivenName().isEmpty()) { - - result.put("givenName", personName.getGivenName()); - } - - if (personName.getPrefix() != null - && !personName.getPrefix().isEmpty()) { - - result.put("prefix", personName.getPrefix()); - } - - if (personName.getSuffix() != null - && !personName.getSuffix().isEmpty()) { - - result.put("suffix", personName.getSuffix()); - } - } - - if (person.getBirthdate() != null) { - result.put("birthdate", person.getBirthdate()); - } - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/PostalAddressRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/PostalAddressRenderer.java deleted file mode 100644 index e68ac03ce..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/PostalAddressRenderer.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2019 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.pagemodel.assets; - -import org.librecms.assets.PostalAddress; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = PostalAddress.class) -public class PostalAddressRenderer extends AbstractAssetRenderer { - - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - final PostalAddress postalAddress; - if (asset instanceof PostalAddress) { - postalAddress = (PostalAddress) asset; - } else { - return; - } - - result.put("address", postalAddress.getAddress()); - result.put("city", postalAddress.getCity()); - result.put("isoCountryCode", postalAddress.getIsoCountryCode()); - result.put("postalCode", postalAddress.getPostalCode()); - result.put("state", postalAddress.getState()); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/RelatedLinkRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/RelatedLinkRenderer.java deleted file mode 100644 index 47d25eb12..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/RelatedLinkRenderer.java +++ /dev/null @@ -1,118 +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.pagemodel.assets; - -import org.librecms.assets.Bookmark; -import org.librecms.assets.RelatedLink; -import org.librecms.contentsection.Asset; -import org.librecms.contentsection.ContentItem; - -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * Renderer for {@link RelatedLink} assets. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = RelatedLink.class) -public class RelatedLinkRenderer extends AbstractAssetRenderer { - - @Inject - @AssetRenderer(renders = Bookmark.class) - private AbstractAssetRenderer bookmarkRenderer; - - /** - * Render the provided {@link RelatedLink}. - * - * Depending on the type of the {@link RelatedLink} (internal or external) - * different properties are placed into {@code result}. - * - * For internal links: An entry with the key {@code targetItem} and a map - * containing the following properties of the target item: - * - *
-     *      {
-     *          "objectId": {@link ContentItem#getObjectId()}
-     *          "itemUuid": {@link ContentItem#getItemUuid()}
-     *          "displayName": {@link ContentItem#getDisplayName()}
-     *          "name": {@link ContentItem#getName()}
-     *          "title": {@link ContentItem#getTitle()}
-     *          "description": {@link ContentItem#getDescription()}
-     *      }
-     * 
- * - * For external links an {@link RelatedLink} uses a association with a - * {@link Bookmark}. The {@code Bookmark} is rendered using the - * {@link BookmarkRenderer}. The result is put into {@code result} with the - * key {@code bookmark}. - * - * - * @param asset The asset to render. - * @param language The current language. - * @param result The map is which to result is stored. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - final RelatedLink relatedLink; - if (asset instanceof RelatedLink) { - relatedLink = (RelatedLink) asset; - } else { - return; - } - - if (relatedLink.getTargetItem() != null) { - result.put("targetItem", - renderTargetItem(relatedLink.getTargetItem(), - language)); - } - - if (relatedLink.getBookmark() != null) { - result.put("bookmark", - bookmarkRenderer.render(relatedLink.getBookmark(), - language)); - } - } - - protected Map renderTargetItem(final ContentItem targetItem, - final Locale language) { - - final Map result = new HashMap<>(); - - result.put("objectId", targetItem.getObjectId()); - result.put("itemUuid", targetItem.getItemUuid()); - result.put("displayName", targetItem.getDisplayName()); - result.put("name", targetItem.getName().getValue(language)); - result.put("title", targetItem.getTitle().getValue(language)); - result.put("description", - targetItem.getDescription().getValue(language)); - - return result; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/SideNoteRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/SideNoteRenderer.java deleted file mode 100644 index cd6f516fb..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/SideNoteRenderer.java +++ /dev/null @@ -1,68 +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.pagemodel.assets; - -import org.librecms.assets.SideNote; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -/** - * Renderer for {@link SideNote} assets. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = SideNote.class) -public class SideNoteRenderer extends AbstractAssetRenderer { - - /** - * Renderer to provided {@link SideNote}. The only property put into - * {@code result} by this renderer is {@code text}: - * - *
-     *  {
-     *      "text": {@link SideNote#getText()}
-     *  }
-     * 
- * - * @param asset The {@link SideNote} to render. - * @param language The current language. - * @param result The into which the result is placed. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - final SideNote siteNote; - if (asset instanceof SideNote) { - siteNote = (SideNote) asset; - } else { - return; - } - - result.put("text", siteNote.getText().getValue(language)); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/VideoAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/VideoAssetRenderer.java deleted file mode 100644 index 412b01d34..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/VideoAssetRenderer.java +++ /dev/null @@ -1,82 +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.pagemodel.assets; - -import org.librecms.assets.LegalMetadata; -import org.librecms.assets.VideoAsset; -import org.librecms.contentsection.Asset; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * Renderer for {@link VideoAsset}s. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@AssetRenderer(renders = VideoAsset.class) -public class VideoAssetRenderer extends BinaryAssetRenderer { - - @Inject - @AssetRenderer(renders = LegalMetadata.class) - private AbstractAssetRenderer legalMetadataRenderer; - - /** - * Renders the provided {@link VideoAsset}. The following properties a put - * into {@code result}: - * - *
-     *  {
-     *      width: {@link VideoAsset#getWidth()}
-     *      height: {@link VideoAsset#getHeight()}
-     *      legalMetadata: {@link VideoAsset#getLegalMetadata()}
-     *  }
-     * 
- * - * @param asset The asset to render. - * @param language The current language. - * @param result The map into which the result is put. - */ - @Override - protected void renderAsset(final Asset asset, - final Locale language, - final Map result) { - - super.renderAsset(asset, language, result); - - final VideoAsset videoAsset; - if (asset instanceof VideoAsset) { - videoAsset = (VideoAsset) asset; - } else { - return; - } - - result.put("width", videoAsset.getWidth()); - result.put("height", videoAsset.getHeight()); - result.put("legalMetadata", - legalMetadataRenderer.render(videoAsset.getLegalMetadata(), - language)); - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java deleted file mode 100644 index d2cd242fa..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java +++ /dev/null @@ -1,248 +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.pagemodel.contentitems; - -import org.libreccm.messaging.Attachment; -import org.librecms.contentsection.Asset; -import org.librecms.pagemodel.assets.AbstractAssetRenderer; -import org.librecms.contentsection.AttachmentList; -import org.librecms.contentsection.ContentItem; -import org.librecms.contentsection.ContentType; -import org.librecms.contentsection.ItemAttachment; -import org.librecms.contentsection.rs.ContentItems; -import org.librecms.pagemodel.assets.AssetRenderers; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * Base class for the renderers for {@link ContentItems}. - * - * @author Jens Pelzetter - */ -@Deprecated -public abstract class AbstractContentItemRenderer implements Serializable { - - private static final long serialVersionUID = 1290408390406469580L; - -// private final AssetRenderers assetRenderers; -// -// public AbstractContentItemRenderer(final AssetRenderers assetRenderers) { -// this.assetRenderers = assetRenderers; -// } - - /** - * This method should be called to render a {@link ContentItem}. The method - * puts the common properties for {@link ContentItem}s into {@code result} - * and than calls - * {@link #renderItem(org.librecms.contentsection.ContentItem, java.util.Locale, java.util.Map)} - * to put the special properties of provided item into {@code result}. - * - * The common properties put into {@code result} are: - * - *
-     *  {
-     *      "objectId": {@link ContentItem#getObjectId()}
-     *      "uuid": {@link ContentItem#getUuid()}
-     *      "displayName": {@link ContentItem#getDisplayName()}
-     *      "itemUuid": {@link ContentItem#getItemUuid()}
-     *      "name": {@link ContentItem#getName()}
-     *      "title": {@link ContentItem#getTitle()}
-     *      "contentType": {@link ContentItem#getContentType()}
-     *      "description": {@link ContentItem#getDescription()}
-     *      "creationDate": {@link ContentItem#getCreationDate()}
-     *      "lastModified": {@link ContentItem#getLastModified()}
-     *      "creationUserName": {@link ContentItem#getCreationUserName()}
-     *      "lastModifyingUserName": {@link ContentItem#getLastModifyingUserName()}
-     *      "attachments": {@link ContentItem#getAttachments()}.
-     *  }
-     * 
- * - * The value of {@link ContentItem#getContentType} is rendered by - * {@link #renderContentType(org.librecms.contentsection.ContentType, java.util.Locale)}. - * - * The value of {@link ContentItem#getAttachments()} is rendered using - * {@link #renderAttachmentList(org.librecms.contentsection.AttachmentList, java.util.Locale)}. - * - * @param item The item to render. - * @param language The current language. - * - * @return A map with the data of the provided {@link ContentItem}. - */ - public Map render(final ContentItem item, - final Locale language) { - - final Map result = new HashMap<>(); - - result.put("objectId", item.getObjectId()); - result.put("uuid", item.getUuid()); - result.put("displayName", item.getDisplayName()); - result.put("itemUuid", item.getItemUuid()); - result.put("name", item.getName().getValue(language)); - result.put("title", item.getTitle().getValue(language)); - result.put("contentType", renderContentType(item.getContentType(), - language)); - result.put("description", item.getDescription().getValue(language)); - result.put("version", item.getVersion().toString()); - result.put("creationDate", item.getCreationDate()); - result.put("lastModified", item.getLastModified()); - result.put("creationUserName", item.getCreationUserName()); - result.put("lastModifyingUserName", item.getLastModifyingUserName()); - result.put("attachments", - item - .getAttachments() - .stream() - .map(list -> renderAttachmentList(list, language)) - .collect(Collectors.toList())); - - renderItem(item, language, result); - - return result; - } - - protected abstract void renderItem(final ContentItem item, - final Locale language, - final Map result); - - protected abstract AssetRenderers getAssetRenderers(); - - /** - * Renders the {@link ContentType} of an {@link ContentItem}. The generated - * map contains the following values: - * - *
-     *  {
-     *      "objectId": {@link ContentType#getObjectId()}
-     *      "uuid": {@link ContentType#getUuid()}
-     *      "displayName": {@link ContentType#getDisplayName()}
-     *      "label": {@link ContentType#getLabel()}
-     *  }
-     * 
- * - * @param contentType The {@link ContentType} to render. - * @param language The current language. - * - * @return A map with the properties of the {@link ContentType}. - */ - protected Map renderContentType( - final ContentType contentType, final Locale language) { - - final Map result = new HashMap<>(); - - result.put("objectId", contentType.getObjectId()); - result.put("uuid", contentType.getUuid()); - result.put("displayName", contentType.getDisplayName()); - result.put("label", contentType.getLabel().getValue(language)); - - return result; - } - - /** - * Renders a {@link AttachmentList} and all {@link ItemAttachment}s. in the - * list. The map contains the following values: - * - *
-     *  {
-     *      "listId": {@link AttachmentList#getListId()}
-     *      "uuid": {@link AttachmentList#getUuid()}
-     *      "name": {@link AttachmentList#getName()}
-     *      "order": {@link AttachmentList#getListOrder()}
-     *      "title": {@link AttachmentList#getTitle()}
-     *      "description": {@link AttachmentList#getDescription()}
-     *      "attachments": {@link AttachmentList#getAttachments()}
-     *  }
-     * 
- * - * The attachments of the list are rendered using - * {@link #renderAttachment(org.librecms.contentsection.ItemAttachment, java.util.Locale)}. - * - * @param attachmentList The {@link AttachmentList} to render. - * @param language The current language. - * - * @return A map containing the data of the {@link AttachmentList} and its - * {@link Attachment}s. - */ - protected Map renderAttachmentList( - final AttachmentList attachmentList, - final Locale language) { - - final Map result = new HashMap<>(); - - result.put("listId", attachmentList.getListId()); - result.put("uuid", attachmentList.getUuid()); - result.put("name", attachmentList.getName()); - result.put("order", attachmentList.getListOrder()); - result.put("title", attachmentList.getTitle().getValue(language)); - result.put("description", - attachmentList.getDescription().getValue(language)); - - result.put("attachments", - attachmentList - .getAttachments() - .stream() - .map(attachment -> renderAttachment(attachment, language)) - .collect(Collectors.toList())); - - return result; - } - - /** - * Renders an {@link ItemAttachment}. The generated map contains the - * following values: - * - *
-     *  {
-     *      "attachmentId": {@link ItemAttachment#getAttachmentId()}
-     *      "uuid": {@link ItemAttachment#getUuid()}
-     *      "sortKey": {@link ItemAttachment#getSortKey()}
-     *      "asset": {@link ItemAttachment#getAsset()}
-     *  }
-     * 
- * - * The associated {@link Asset} is rendered using the appropriate - * {@link AbstractAssetRenderer} implementation. The - * {@link AbstractAssetRenderer} to use is retrieved using - * {@link AssetRenderers#findRenderer(java.lang.Class)}. - * - * @param attachment The {@link ItemAttachment} to render. - * @param language The current language. - * - * @return A map with the data of the {@link ItemAttachment}. - */ - protected Map renderAttachment( - final ItemAttachment attachment, - final Locale language) { - - final Map result = new HashMap<>(); - - result.put("attachmentId", attachment.getAttachmentId()); - result.put("uuid", attachment.getUuid()); - result.put("sortKey", attachment.getSortKey()); - - final AbstractAssetRenderer renderer = getAssetRenderers() - .findRenderer(attachment.getAsset().getClass()); - result.put("asset", renderer.render(attachment.getAsset(), language)); - - return result; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ArticleRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ArticleRenderer.java deleted file mode 100644 index 41605bab4..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ArticleRenderer.java +++ /dev/null @@ -1,85 +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.pagemodel.contentitems; - -import org.librecms.contentsection.ContentItem; -import org.librecms.contenttypes.Article; -import org.librecms.pagemodel.assets.AssetRenderers; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * Renderer for {@link Article} items. - * - * @author Jens Pelzetter - */ -@Deprecated -@ContentItemRenderer(renders = Article.class) -@RequestScoped -public class ArticleRenderer extends AbstractContentItemRenderer { - - private static final long serialVersionUID = 8355183377902033759L; - - @Inject - private AssetRenderers assetRenderers; - -// @Inject -// public ArticleRenderer(final AssetRenderers assetRenderers) { -// super(assetRenderers); -// } - /** - * Render the provided {@link Article}. The following values are put into - * the map: - * - *
-     *  {
-     *      "text": {@link Article#getText()}
-     *  }
-     * 
- * - * @param item The item to render. - * @param language The current language. - * @param result The map into which the result is placed. - */ - @Override - protected void renderItem( - final ContentItem item, - final Locale language, - final Map result - ) { - final Article article; - if (item instanceof Article) { - article = (Article) item; - } else { - return; - } - - result.put("text", article.getText().getValue(language)); - } - - @Override - public AssetRenderers getAssetRenderers() { - return assetRenderers; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderer.java deleted file mode 100644 index e3078184e..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderer.java +++ /dev/null @@ -1,54 +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.pagemodel.contentitems; - -import org.librecms.contentsection.ContentItem; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * Qualifier annotation for implementations of - * {@link AbstractContentItemRenderer}. - * - * @author Jens Pelzetter - */ -@Deprecated -@Qualifier -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, - ElementType.FIELD, - ElementType.PARAMETER, - ElementType.TYPE}) -public @interface ContentItemRenderer { - - /** - * The type of Item which can be rendered by the annotated content item - * renderer. - * - * @return - */ - Class renders(); - - String mode() default "--DEFAULT--"; -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java deleted file mode 100644 index bab74583e..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java +++ /dev/null @@ -1,169 +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.pagemodel.contentitems; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.librecms.contentsection.ContentItem; -import org.librecms.contenttypes.Article; -import org.librecms.pagemodel.assets.AssetRenderers; - -import java.io.Serializable; -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Any; -import javax.enterprise.inject.Instance; -import javax.enterprise.util.AnnotationLiteral; -import javax.inject.Inject; - -/** - * Provides access to all available implementations of - * {@link AbstractContentItemRenderer}. - * - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class ContentItemRenderers implements Serializable { - - private static final long serialVersionUID = 4038159486301146385L; - - private static final Logger LOGGER = LogManager - .getLogger(ContentItemRenderers.class); - - @Inject - private AssetRenderers assetRenderers; - - @Inject - @Any - private Instance renderers; - - /** - * Tries to find the renderer for provided type and the default mode. - * - * @param itemType The type for which the renderer is retrieved. - * - * @return The renderer for the provided type. - */ - public AbstractContentItemRenderer findRenderer( - final Class itemType) { - - LOGGER.debug("Trying to find default renderer for item type \"{}\"...", - itemType.getName()); - return findRenderer(itemType, "--DEFAULT--"); - } - - /** - * Tries to find the renderer for provided type and the provided mode. If a - * appropriate renderer is found an default renderer with an empty - * implementation of - * {@link AbstractContentItemRenderer#renderItem(org.librecms.contentsection.ContentItem, java.util.Locale, java.util.Map)} - * is returned. - * - * @param itemType The type for which the renderer is retrieved. - * @param mode The render mode. - * - * @return The renderer for the provided type. - */ - public AbstractContentItemRenderer findRenderer( - final Class itemType, final String mode) { - - LOGGER.debug("Trying to find default renderer for item type \"{}\"" - + "and mode \"{}\"...", - itemType.getName(), - mode); - - final ContentItemRendererLiteral literal - = new ContentItemRendererLiteral( - itemType, mode); - - final Instance instance = renderers - .select(literal); - - if (instance.isUnsatisfied()) { - if ("--DEFAULT--".equals(mode)) { - - LOGGER.warn("No renderer for item type \"{}\" and mode " - + "\"--DEFAULT--\". Returning default renderer.", - itemType.getName()); - return new AbstractContentItemRenderer() { - - private static final long serialVersionUID - = -4679445070846896396L; - - @Override - public void renderItem(final ContentItem item, - final Locale language, - final Map result) { - //Nothing here. - } - - @Override - public AssetRenderers getAssetRenderers() { - return assetRenderers; - } - - }; - } else { - LOGGER.warn("No renderer for item type \"{}\" and mode " - + "\"{}\". Trying to find renderer for " - + "mode \"--DEFAULT--\".", - itemType.getName(), - mode); - return findRenderer(itemType); - } - } else { - return instance.iterator().next(); - } - - } - - private class ContentItemRendererLiteral - extends AnnotationLiteral - implements ContentItemRenderer { - - private static final long serialVersionUID = 6104170621944116228L; - - private final Class renders; - private final String mode; - - public ContentItemRendererLiteral( - final Class renders, - final String mode) { - - this.renders = renders; - this.mode = mode; - } - - @Override - public Class renders() { - return renders; - } - - @Override - public String mode() { - return mode; - } - - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/EventRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/EventRenderer.java deleted file mode 100644 index d44740f18..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/EventRenderer.java +++ /dev/null @@ -1,102 +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.pagemodel.contentitems; - -import org.librecms.contentsection.ContentItem; -import org.librecms.contenttypes.Event; -import org.librecms.pagemodel.assets.AssetRenderers; - -import java.util.Locale; -import java.util.Map; - -import javax.inject.Inject; - -/** - * Renderer for {@link Event} items. - * - * @author Jens Pelzetter - */ -@Deprecated -@ContentItemRenderer(renders = Event.class) -public class EventRenderer extends AbstractContentItemRenderer { - - private static final long serialVersionUID = -3517404651544429745L; - - @Inject - private AssetRenderers assetRenderers; - -// @Inject -// public EventRenderer(final AssetRenderers assetRenderers) { -// super(assetRenderers); -// } - - /** - * Render the provided {@link Event}. The following values are put into - * {@code result}: - * - *
-     *  {
-     *      "text": {@link Event#getText()}
-     *      "startDate": {@link Event#getStartDate()}
-     *      "endDate": {@link Event#getEndDate()}
-     *      "eventDate": {@link Event#getEventType()}
-     *      "location": {@link Event#getLocation()}
-     *      "mainContributor": {@link Event#getMainContributor()}
-     *      "eventType": {@link Event#getEventType()}
-     *      "mapLink": {@link Event#getMapLink()}
-     *      "cost": {@link Event#getCost()}
-     *  }
-     * 
- * - * @param item The item to render. - * @param language The current language. - * @param result The map into which the result is placed. - */ - @Override - public void renderItem(final ContentItem item, - final Locale language, - final Map result) { - - final Event event; - if (item instanceof Event) { - event = (Event) item; - } else { - return; - } - - result.put("text", event.getText().getValue(language)); - result.put("startDate", event.getStartDate()); - result.put("endDate", event.getEndDate()); - result.put("eventDate", event.getEventDate().getValue(language)); - result.put("location", event.getLocation().getValue(language)); - result.put("mainContributor", - event.getMainContributor().getValue(language)); - result.put("eventType", event.getEventType().getValue(language)); - result.put("mapLink", event.getMapLink()); - result.put("cost", event.getCost().getValue(language)); - } - - @Override - protected AssetRenderers getAssetRenderers() { - return assetRenderers; - } - - - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/MultiPartArticleRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/MultiPartArticleRenderer.java deleted file mode 100644 index 97c9b082c..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/MultiPartArticleRenderer.java +++ /dev/null @@ -1,133 +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.pagemodel.contentitems; - -import org.librecms.contentsection.ContentItem; -import org.librecms.contenttypes.MultiPartArticle; -import org.librecms.contenttypes.MultiPartArticleSection; -import org.librecms.pagemodel.assets.AssetRenderers; - -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.inject.Inject; - -/** - * Renderer for {@link MultiPartArticle} items. - * - * @author Jens Pelzetter - */ -@Deprecated -@ContentItemRenderer(renders = MultiPartArticle.class) -public class MultiPartArticleRenderer extends AbstractContentItemRenderer { - - private static final long serialVersionUID = -4298383182795585868L; - - @Inject - private AssetRenderers assetRenderers; - -// @Inject -// public MultiPartArticleRenderer(final AssetRenderers assetRenderers) { -// super(assetRenderers); -// } - - /** - * Renders the provided {@link MultiPartArticle}. The following values are - * put into {@code result}: - * - *
-     *  {
-     *      "summary": {@link MultiPartArticle#getSummary()}
-     *      "sections": {@link MultiPartArticle#getSections()}
-     *  }
-     * 
- * - * The value of {@code sections} is a list containing a {@link Map} - * generated by - * {@link #renderSection(org.librecms.contenttypes.MultiPartArticleSection, java.util.Locale)} - * for each section. - * - * @param item The item to render. - * @param language The current language. - * @param result The map into which the result is placed. - */ - @Override - public void renderItem(final ContentItem item, - final Locale language, - final Map result) { - - final MultiPartArticle article; - if (item instanceof MultiPartArticle) { - article = (MultiPartArticle) item; - } else { - return; - } - - result.put("summary", article.getSummary().getValue(language)); - result.put("sections", - article - .getSections() - .stream() - .map(section -> renderSection(section, language)) - .collect(Collectors.toList())); - - } - - /** - * Renders a {@link MultiPartArticleSection}. The generated map contains the - * following values: - * - *
-     *  {
-     *      "sectionId": {@link MultiPartArticleSection#getSectionId()}
-     *      "title": {@link MultiPartArticleSection#getTitle()}
-     *      "rank": {@link MultiPartArticleSection#getRank()}
-     *      "pageBreak": {@link MultiPartArticleSection#isPageBreak()}
-     *      "text": {@link MultiPartArticleSection#getText()}
-     *  }
-     * 
- * - * @param section The section to render. - * @param language The current language. - * - * @return A map with the data of the section. - */ - protected Map renderSection( - final MultiPartArticleSection section, final Locale language) { - - final Map result = new HashMap<>(); - - result.put("sectionId", section.getSectionId()); - result.put("title", section.getTitle().getValue(language)); - result.put("rank", section.getRank()); - result.put("pageBreak", section.isPageBreak()); - result.put("text", section.getText().getValue(language)); - - return result; - } - - @Override - protected AssetRenderers getAssetRenderers() { - return assetRenderers; - } - - -} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/NewsRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/NewsRenderer.java deleted file mode 100644 index 902d28963..000000000 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/NewsRenderer.java +++ /dev/null @@ -1,86 +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.pagemodel.contentitems; - -import org.librecms.contentsection.ContentItem; -import org.librecms.contenttypes.News; -import org.librecms.pagemodel.assets.AssetRenderers; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * Renderer for {@link News} items. - * - * @author Jens Pelzetter - */ -@Deprecated -@ContentItemRenderer(renders = News.class) -@RequestScoped -public class NewsRenderer extends AbstractContentItemRenderer { - - private static final long serialVersionUID = -493301428054148505L; - - @Inject - private AssetRenderers assetRenderers; - -// @Inject -// public NewsRenderer(final AssetRenderers assetRenderers) { -// super(assetRenderers); -// } - /** - * Renders the provided {@link News} item. The following values are put into - * {@code result}: - * - *
-     *  {
-     *      "text": {@link News#getText()}
-     *      "releaseDate": {@link News#getReleaseDate()}
-     *  }
-     * 
- * - * @param item The item to render. - * @param language The current language. - * @param result The map into which the result is placed. - */ - @Override - public void renderItem(final ContentItem item, - final Locale language, - final Map result) { - - final News news; - if (item instanceof News) { - news = (News) item; - } else { - return; - } - - result.put("text", news.getText().getValue(language)); - result.put("releaseDate", news.getReleaseDate()); - } - - @Override - protected AssetRenderers getAssetRenderers() { - return assetRenderers; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pages/CmsPageRenderer.java b/ccm-cms/src/main/java/org/librecms/pages/CmsPageRenderer.java deleted file mode 100644 index b6e2df0a6..000000000 --- a/ccm-cms/src/main/java/org/librecms/pages/CmsPageRenderer.java +++ /dev/null @@ -1,58 +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 org.libreccm.categorization.Category; -import org.libreccm.pagemodel.AbstractPageRenderer; -import org.libreccm.pagemodel.PageRenderer; - -import java.util.HashMap; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; - -/** - * Implementation of {@link PageRenderer} for CMS pages. - * - * @author Jens Pelzetter - */ -@RequestScoped -public class CmsPageRenderer extends AbstractPageRenderer { - - @Override - public Map renderPage(final Map parameters) { - - final Map result = new HashMap<>(); - result.put("application", Pages.class.getName()); - if (parameters.containsKey(PagesRouter.SITE_INFO)) { - result.put( - PagesRouter.SITE_INFO, parameters.get(PagesRouter.SITE_INFO) - ); - } - - if (parameters.containsKey(PagesRouter.PAGE_PATH)) { - result.put( - PagesRouter.PAGE_PATH, parameters.get(PagesRouter.PAGE_PATH) - ); - } - - return result; - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java b/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java deleted file mode 100644 index c3e31aff8..000000000 --- a/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java +++ /dev/null @@ -1,929 +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.kernel.KernelConfig; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import org.libreccm.categorization.Category; -import org.libreccm.categorization.CategoryManager; -import org.libreccm.categorization.CategoryRepository; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.l10n.GlobalizationHelper; -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; -import org.libreccm.theming.ThemeVersion; -import org.libreccm.theming.Themes; -import org.librecms.contentsection.ContentItemVersion; - -import java.net.URI; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; - -import javax.annotation.PostConstruct; -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; - -import static org.librecms.pages.PagesConstants.*; - -/** - * JAX-RS class providing access to the pages. - * - * @author Jens Pelzetter - */ -@Deprecated // to be replaced by PagesController -@RequestScoped -@Path("/") -public class PagesRouter { - - protected static final String PAGE_PATH = "pagePath"; - - protected static final String PAGE_PATH_CATEGORY_ID = "categoryId"; - - protected static final String PAGE_PATH_CATEGORY_NAME = "categoryName"; - - protected static final String PAGE_PATH_CATEGORY_TITLE = "categoryTitle"; - - protected static final String PAGE_PATH_CATEGORY_UUID = "uuid"; - - protected static final String SITE_INFO = "siteInfo"; - - protected static final String SITE_INFO_NAME = "name"; - - protected static final String SITE_INFO_DOMAIN = "domain"; - - protected static final String SITE_INFO_HOST = "host"; - - protected static final String SITE_INFO_LANGS = "supportedLanguages"; - - @Inject - private CategoryManager categoryManager; - - @Inject - private CategoryRepository categoryRepo; - - @Inject - private ConfigurationManager confManager; - - @Inject - private GlobalizationHelper globalizationHelper; - - @Inject - private CmsPageRenderer pageBuilder; - - @Inject - private PagesRepository pagesRepo; - - @Inject - private PageManager pageManager; - - @Inject - private PageModelManager pageModelManager; - - @Inject - private SiteRepository siteRepo; - - @Inject - private Themes themes; - - private Locale defaultLocale; - - @PostConstruct - private void init() { - final KernelConfig kernelConfig = confManager - .findConfiguration(KernelConfig.class); - defaultLocale = kernelConfig.getDefaultLocale(); - } - - @GET - @Path("/") - @Transactional(Transactional.TxType.REQUIRED) - public Response redirectToIndexPage(@Context final UriInfo uriInfo) { - - final String domain = uriInfo.getBaseUri().getHost(); - final Pages pages = getPages(domain); - final Category category = getCategory(domain, pages, "/"); - final String language = determineLanguage(category); - - final String indexPage = String.format("/index.%s.html", language); - final URI uri = uriInfo.getBaseUriBuilder().path(indexPage).build(); - return Response.temporaryRedirect(uri).build(); - } - - @GET - @Path("/{name:[\\w\\-]+}") - @Transactional(Transactional.TxType.REQUIRED) - public Response getRootPage( - @Context final UriInfo uriInfo, - @PathParam("name") final String itemName) { - - final String domain = uriInfo.getBaseUri().getHost(); - final Pages pages = getPages(domain); - final Category category = getCategory(domain, pages, "/"); - final String language = determineLanguage(category); - - final String itemPage = String.format("/%s.%s.html", itemName, language); - final URI uri = uriInfo.getBaseUriBuilder().path(itemPage).build(); - return Response.temporaryRedirect(uri).build(); - } - - @GET - @Path("/{name:[\\w\\-]+}.html") - @Transactional(Transactional.TxType.REQUIRED) - public Response getRootPageAsHtml( - @Context final UriInfo uriInfo, - @PathParam("name") final String itemName) { - - final String domain = uriInfo.getBaseUri().getHost(); - final Pages pages = getPages(domain); - final Category category = getCategory(domain, pages, "/"); - final String language = determineLanguage(category); - - final String itemPage = String.format("/%s.%s.html", itemName, language); - final String path = uriInfo - .getPath() - .replace(String.format("%s.html", itemName), itemPage); - - final URI uri = uriInfo.getBaseUriBuilder().path(path).build(); - return Response.temporaryRedirect(uri).build(); - } - - @GET - @Path("/{name:[\\w\\-]+}.{lang:\\w+}.html") - @Produces("text/html") - @Transactional(Transactional.TxType.REQUIRED) - public String getRootPageAsHtml( - @Context - final UriInfo uriInfo, - @PathParam("name") - final String itemName, - @PathParam("lang") - final String language, - @QueryParam("theme") - @DefaultValue("--DEFAULT--") - final String theme, - @QueryParam("preview") - @DefaultValue("") - final String preview) { - - final Versions versions = generateFromPreviewParam(preview); - - final Map result; - if ("index".equals(itemName)) { - result = getCategoryIndexPage(uriInfo, - "/", - language, - versions.getPageModelVersion()); - } else { - result = getCategoryItemPage(uriInfo, - "/", - itemName, - language, - versions.getPageModelVersion()); - } - final Site site = getSite(uriInfo); - final ThemeInfo themeInfo = getTheme(site, - theme, - versions.getThemeVersion()); - - return themes.process(result, themeInfo); - } - - @GET - @Path("/{name:[\\w\\-]+}.{lang:\\w+}.json") - @Produces("application/json") - @Transactional(Transactional.TxType.REQUIRED) - public String getRootPageAsJson( - @Context - final UriInfo uriInfo, - @PathParam("name") - final String itemName, - @PathParam("lang") - final String language, - @QueryParam("preview") - @DefaultValue("") - final String preview) { - - final Versions versions = generateFromPreviewParam(preview); - - final ObjectMapper mapper = new ObjectMapper(); - - final Map result; - if ("index".equals(itemName)) { - result = getCategoryIndexPage(uriInfo, - "/", - language, - versions.getPageModelVersion()); - } else { - result = getCategoryItemPage(uriInfo, - "/", - itemName, - language, - versions.getPageModelVersion()); - } - - try { - final String json = mapper.writeValueAsString(result); - return json; - } catch (JsonProcessingException ex) { - throw new WebApplicationException(ex); - } - } - - @GET - @Path("/{name:[\\w\\-]+}.{lang:\\w+}.xml") - @Produces("text/xml") - @Transactional(Transactional.TxType.REQUIRED) - public String getRootPageAsXml( - @Context - final UriInfo uriInfo, - @PathParam("name") - final String itemName, - @PathParam("lang") - final String language, - @QueryParam("preview") - @DefaultValue("") - final String preview) { - - final Versions versions = generateFromPreviewParam(preview); - - final JacksonXmlModule xmlModule = new JacksonXmlModule(); - final ObjectMapper mapper = new XmlMapper(xmlModule); - mapper.enable(SerializationFeature.INDENT_OUTPUT); - - final Map result; - if ("index".equals(itemName)) { - result = getCategoryIndexPage(uriInfo, - "/", - language, - versions.getPageModelVersion()); - } else { - result = getCategoryItemPage(uriInfo, - "/", - itemName, - language, - versions.getPageModelVersion()); - } - - try { - final String html = mapper - .writer() - .withRootName("page") - .writeValueAsString(result); - return html; - } catch (JsonProcessingException ex) { - throw new WebApplicationException(ex); - } - } - - /** - * Retrieve the item page for a category and the content item associated - * with the category and identified by {@code itemName}. - * - * Redirects to - * {@link #getPageAsHtml(javax.ws.rs.core.UriInfo, java.lang.String, java.lang.String)}. - * - * @param uriInfo - * @param page - * @param itemName - * - * @return - */ - @GET - @Path("/{page:[\\w\\-/]+}/{name:[\\w\\-]+}") - @Transactional(Transactional.TxType.REQUIRED) - public Response getPage( - @Context final UriInfo uriInfo, - @PathParam("page") final String page, - @PathParam("name") final String itemName) { - - final String domain = uriInfo.getBaseUri().getHost(); - final Pages pages = getPages(domain); - final Category category = getCategory(domain, pages, page); - final String language = determineLanguage(category); - - final String redirectTo; - if (uriInfo.getPath().endsWith("/")) { - redirectTo = String.format("%sindex.%s.html", - uriInfo.getPath(), - language); - } else { - final String itemPath = String.format("%s.%s.html", - itemName, - language); - redirectTo = uriInfo.getPath().replace(itemName, itemPath); - } - - final URI uri = uriInfo.getBaseUriBuilder().path(redirectTo).build(); - return Response.temporaryRedirect(uri).build(); - } - - /** - * Retrieve the item page for a category and the content item associated - * with the category and identified by {@code itemName}. Redirects to - * {@link #getPageAsHtml(javax.ws.rs.core.UriInfo, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)}. - * - * @param uriInfo - * @param page - * @param itemName - * - * @return - */ - @GET - @Path("/{page:[\\w\\-/]+}/{name:[\\w\\-]+}.html") - @Transactional(Transactional.TxType.REQUIRED) - public Response getPageAsHtml( - @Context final UriInfo uriInfo, - @PathParam("page") final String page, - @PathParam("name") final String itemName) { - - final String domain = uriInfo.getBaseUri().getHost(); - final Pages pages = getPages(domain); - final Category category = getCategory(domain, pages, page); - final String language = determineLanguage(category); - - final String redirectTo; - if (uriInfo.getPath().endsWith("/")) { - redirectTo = String.format("%sindex.%s.html", - uriInfo.getPath(), - language); - } else { - final String itemPath = String.format("%s.%s.html", - itemName, - language); - redirectTo = uriInfo.getPath().replace(itemName, itemPath); - } - - final URI uri = uriInfo.getBaseUriBuilder().path(redirectTo).build(); - return Response.temporaryRedirect(uri).build(); - } - - /** - * Retrieve the item page as HTML for a category and the content item - * associated with the category and identified by {@code itemName}. - * - * @param uriInfo - * @param page - * @param itemName - * @param language - * @param theme - * @param preview - * - * @return - */ - @GET - @Path("/{page:[\\w\\-/]+}/{name:[\\w\\-]+}.{lang:\\w+}.html") - @Produces("text/html") - @Transactional(Transactional.TxType.REQUIRED) - public String getPageAsHtml( - @Context - final UriInfo uriInfo, - @PathParam("page") - final String page, - @PathParam("name") - final String itemName, - @PathParam("lang") - final String language, - @QueryParam("theme") - @DefaultValue("--DEFAULT--") - final String theme, - @QueryParam("preview") - @DefaultValue("") - final String preview) { - - final Versions versions = generateFromPreviewParam(preview); - - final Map result; - if ("index".equals(itemName)) { - result = getCategoryIndexPage(uriInfo, - page, - language, - versions.getPageModelVersion()); - } else { - result = getCategoryItemPage(uriInfo, - page, - itemName, - language, - versions.getPageModelVersion()); - } - - final Site site = getSite(uriInfo); - final ThemeInfo themeInfo = getTheme(site, - theme, - versions.getThemeVersion()); - return themes.process(result, themeInfo); - } - - /** - * Retrieve the item page as JSON for a category and the content item - * associated with the category and identified by {@code itemName}. - * - * @param uriInfo - * @param page - * @param itemName - * @param language - * @param preview - * - * @return - */ - @GET - @Path("/{page:[\\w\\-/]+}/{name:[\\w\\-]+}.{lang:\\w+}.json") - @Produces("application/json") - @Transactional(Transactional.TxType.REQUIRED) - public String getPageAsJson( - @Context - final UriInfo uriInfo, - @PathParam("page") - final String page, - @PathParam("name") - final String itemName, - @PathParam("lang") - final String language, - @QueryParam("preview") - @DefaultValue("") - final String preview) { - - final Versions versions = generateFromPreviewParam(preview); - - final ObjectMapper mapper = new ObjectMapper(); - - final Map result; - if ("index".equals(itemName)) { - result = getCategoryIndexPage(uriInfo, - page, - language, - versions.getPageModelVersion()); - } else { - result = getCategoryItemPage(uriInfo, - page, - itemName, - language, - versions.getPageModelVersion()); - } - - try { - final String json = mapper.writeValueAsString(result); - return json; - } catch (JsonProcessingException ex) { - throw new WebApplicationException(ex); - } - } - - /** - * Retrieve the item page as XML for a category and the content item - * associated with the category and identified by {@code itemName}. - * - * @param uriInfo - * @param page - * @param itemName - * @param language - * @param preview - * - * @return - */ - @GET - @Path("/{page:[\\w\\-/]+}/{name:[\\w\\-]+}.{lang:\\w+}.xml") - @Produces("text/xml") - @Transactional(Transactional.TxType.REQUIRED) - public String getPageAsXml( - @Context - final UriInfo uriInfo, - @PathParam("page") - final String page, - @PathParam("name") - final String itemName, - @PathParam("lang") - final String language, - @QueryParam("preview") - @DefaultValue("") - final String preview) { - - final Versions versions = generateFromPreviewParam(preview); - - final JacksonXmlModule xmlModule = new JacksonXmlModule(); - final ObjectMapper mapper = new XmlMapper(xmlModule); - mapper.enable(SerializationFeature.INDENT_OUTPUT); - - final Map result; - if ("index".equals(itemName)) { - result = getCategoryIndexPage(uriInfo, - page, - language, - versions.getPageModelVersion()); - } else { - result = getCategoryItemPage(uriInfo, - page, - itemName, - language, - versions.getPageModelVersion()); - } - - try { - final String html = mapper - .writer() - .withRootName("page") - .writeValueAsString(result); - return html; - } catch (JsonProcessingException ex) { - throw new WebApplicationException(ex); - } - } - - private Site getSite(final UriInfo uriInfo) { - - Objects.requireNonNull(uriInfo); - - final String domain = uriInfo.getBaseUri().getHost(); - - final Site site; - if (siteRepo.hasSiteForDomain(domain)) { - site = siteRepo.findByDomain(domain).get(); - } else { - site = siteRepo - .findDefaultSite() - .orElseThrow(() -> new NotFoundException( - "No matching Site and no default Site.")); - } - - return site; - } - - private Pages getPages(final String domain) { - - return pagesRepo - .findPagesForSite(domain) - .orElseThrow(() -> new NotFoundException(String - .format("No Pages for domain \"%s\" available.", - domain))); - } - - private Category getCategory(final String domain, - final Pages pages, - final String pagePath) { - - return categoryRepo - .findByPath(pages.getCategoryDomain(), pagePath) - .orElseThrow(() -> new NotFoundException(String.format( - "No Page for path \"%s\" in site \"%s\"", - pagePath, - domain))); - - } - - private String determineLanguage(final Category category) { - - final Locale negoiatedLocale = globalizationHelper - .getNegotiatedLocale(); - - final String language; - if (category.getTitle().hasValue(negoiatedLocale)) { - language = negoiatedLocale.toString(); - } else if (category.getTitle().hasValue(defaultLocale)) { - language = defaultLocale.toString(); - } else { - throw new NotFoundException(); - } - - return language; - } - - private ThemeInfo getTheme(final Site site, - final String theme, - final ThemeVersion themeVersion) { - - if ("--DEFAULT--".equals(theme)) { - return themes - .getTheme(site.getDefaultTheme(), themeVersion) - .orElseThrow(() -> new WebApplicationException( - String.format("The configured default theme \"%s\" for " - + "site \"%s\" is not available.", - site.getDefaultTheme(), - site.getDomainOfSite()), - Response.Status.INTERNAL_SERVER_ERROR)); - } else { - return themes.getTheme(theme, themeVersion) - .orElseThrow(() -> new WebApplicationException( - String.format("The theme \"%s\" is not available.", - theme), - Response.Status.BAD_REQUEST)); - } - } - - private Page getPage(final UriInfo uriInfo, - final String pagePath, - final String language, - final Map parameters) { - - Objects.requireNonNull(uriInfo); - Objects.requireNonNull(pagePath); - Objects.requireNonNull(parameters); - - final KernelConfig kernelConfig = confManager - .findConfiguration(KernelConfig.class); - - final String domain = uriInfo.getBaseUri().getHost(); - final Pages pages = getPages(domain); - final Map siteInfo = new HashMap<>(); - siteInfo.put(SITE_INFO_HOST, uriInfo.getBaseUri().getHost()); - siteInfo.put(SITE_INFO_DOMAIN, pages.getSite().getDomainOfSite()); - siteInfo.put(SITE_INFO_NAME, pages.getSite().getDisplayName()); - siteInfo.put( - SITE_INFO_LANGS, - kernelConfig.getSupportedLanguages().stream().sorted().collect( - Collectors.toList() - ) - ); - parameters.put(SITE_INFO, siteInfo); - final Category category = getCategory(domain, pages, pagePath); - - final Locale locale = new Locale(language); - // disabled. Needs to be decided if the available languages of the - // index item or of the category are - // used to decide if a NotFoundException is thrown. -// if (!category.getTitle().hasValue(locale)) { -// throw new NotFoundException(); -// } - - globalizationHelper.setSelectedLocale(locale); - - parameters.put(PAGE_PATH, buildPageCategoriesPath(category, locale)); - parameters.put(PARAMETER_CATEGORY, category); - return pageManager.findPageForCategory(category); - } - - private Map buildPage( - final PageModel pageModel, - final Map parameters) { - - Objects.requireNonNull(pageModel); - Objects.requireNonNull(parameters); - - final Map result; - if (pageModel == null) { - result = pageBuilder.renderPage(parameters); - } else { - result = pageBuilder.renderPage(pageModel, parameters); - } - - return result; - } - - private Map getCategoryIndexPage( - final UriInfo uriInfo, - final String pagePath, - final String language, - final PageModelVersion pageModelVersion) { - - final Map parameters = new HashMap<>(); - final Page page = getPage(uriInfo, - pagePath, - language, - parameters); - -// final PageModel pageModel; -// if (pageModelVersion == PageModelVersion.DRAFT) { -// pageModel = pageModelManager -// .getDraftVersion(page.getIndexPageModel()); -// } else { -// pageModel = pageModelManager -// .getLiveVersion(page.getIndexPageModel()) -// .orElseThrow(() -> new NotFoundException(String -// .format("The PageModel for the index page of the category" -// + "\"%s\" is not available as live version.", -// pagePath))); -// } -// -// parameters.put(PARAMETER_LANGUAGE, language); -// -// return buildPage(pageModel, parameters); - throw new UnsupportedOperationException(); - } - - private Map getCategoryItemPage( - final UriInfo uriInfo, - final String pagePath, - final String itemName, - final String language, - final PageModelVersion pageModelVersion) { - - final Map parameters = new HashMap<>(); - final Page page = PagesRouter.this.getPage(uriInfo, pagePath, language, - parameters); - -// final PageModel pageModel; -// if (pageModelVersion == PageModelVersion.DRAFT) { -// pageModel = pageModelManager.getDraftVersion(page -// .getItemPageModel()); -// } else { -// pageModel = pageModelManager -// .getLiveVersion(page.getItemPageModel()) -// .orElseThrow(() -> new NotFoundException(String -// .format("The PageModel for the index page of the category" -// + "\"%s\" is not available as live version.", -// pagePath))); -// } -// -// parameters.put(PARAMETER_ITEMNAME, itemName); -// parameters.put(PARAMETER_LANGUAGE, language); -// -// return buildPage(pageModel, parameters); - throw new UnsupportedOperationException(); - } - - private List> buildPageCategoriesPath( - final Category category, Locale language - ) { - final List categoriesInPath = categoryManager - .getCategoriesInPath(category); - return categoriesInPath - .stream() - .map(cat -> buildPathCategoriesPathEntry(category, language)) - .collect(Collectors.toList()); - } - - private Map buildPathCategoriesPathEntry( - final Category category, Locale language - ) { - - final Map result = new HashMap<>(); - result.put(PAGE_PATH_CATEGORY_ID, Long.toString(category.getObjectId())); - result.put(PAGE_PATH_CATEGORY_UUID, category.getUuid()); - result.put(PAGE_PATH_CATEGORY_NAME, category.getName()); - result.put( - PAGE_PATH_CATEGORY_TITLE, category.getTitle().getValue(language) - ); - - return result; - } - - /** - * Parse the value of the {@code preview} query parameter. - * - * @param value The value of the {@code preview} query parameter to parse. - * - * @return If the provided value is {@code all} a {@link Versions} object - * with all versions set to the draft versions is created and - * returned. If the provided value is {@code null} or empty a - * {@link Versions} object with fields set the the live versions is - * returned. Otherwise the values is split into tokens (separated by - * commas). The values of the returned {@link Versions} depend on - * presence of certain tokens. At the moment to following tokens are - * recognised: - *
- *
{@code content}
- *
{@link Versions#contentVersion} is set to - * {@link ContentItemVersion#DRAFT}
- *
{@code pagemodel}
- *
{@link Versions#pageModelVersion} is set to - * {@link PageModelVersion#DRAFT}
- *
{@code theme}
- *
{@link Versions#themeVersion} is set to - * {@link ThemeVersion#DRAFT}.
- *
- * - */ - private Versions generateFromPreviewParam(final String value) { - - if (value == null || value.isEmpty() || value.matches("\\s*")) { - return new Versions(ContentItemVersion.LIVE, - PageModelVersion.LIVE, - ThemeVersion.LIVE); - } else if ("all".equals(value.toLowerCase(Locale.ROOT))) { - return new Versions(ContentItemVersion.DRAFT, - PageModelVersion.DRAFT, - ThemeVersion.DRAFT); - } else { - final Set values = new HashSet<>(); - Collections.addAll(values, - value.toLowerCase(Locale.ROOT).split(",")); - - final Versions result = new Versions(); - if (values.contains("content")) { - result.setContentVersion(ContentItemVersion.DRAFT); - } - if (values.contains("pagemodel")) { - result.setPageModelVersion(PageModelVersion.DRAFT); - } - if (values.contains("theme")) { - result.setThemeVersion(ThemeVersion.DRAFT); - } - return result; - } - } - - /** - * Encapsulate the result of converting the value of the {@code preview} - * query parameter. - */ - private class Versions { - - /** - * Version of content to use - */ - private ContentItemVersion contentVersion; - - /** - * Version of {@link PageModel} to use. - */ - private PageModelVersion pageModelVersion; - - /** - * Version of theme to use. - */ - private ThemeVersion themeVersion; - - /** - * Creates a new {@code Versions} object with all fields set to - * {@code live} versions. - */ - public Versions() { - this.contentVersion = ContentItemVersion.LIVE; - this.pageModelVersion = PageModelVersion.LIVE; - this.themeVersion = ThemeVersion.LIVE; - } - - /** - * Create a new {@code Versions} object with the provided parameters. - * - * @param contentVersion - * @param pageModelVersion - * @param themeVersion - */ - public Versions(final ContentItemVersion contentVersion, - final PageModelVersion pageModelVersion, - final ThemeVersion themeVersion) { - this.contentVersion = contentVersion; - this.pageModelVersion = pageModelVersion; - this.themeVersion = themeVersion; - } - - public ContentItemVersion getContentVersion() { - return contentVersion; - } - - public void setContentVersion(final ContentItemVersion contentVersion) { - this.contentVersion = contentVersion; - } - - public PageModelVersion getPageModelVersion() { - return pageModelVersion; - } - - public void setPageModelVersion(final PageModelVersion pageModelVersion) { - this.pageModelVersion = pageModelVersion; - } - - public ThemeVersion getThemeVersion() { - return themeVersion; - } - - public void setThemeVersion(final ThemeVersion themeVersion) { - this.themeVersion = themeVersion; - } - - } - -} diff --git a/ccm-cms/src/main/java/org/librecms/pages/models/ContentItemModel.java b/ccm-cms/src/main/java/org/librecms/pages/models/ContentItemModel.java index 05eb4bc41..f28ccf617 100644 --- a/ccm-cms/src/main/java/org/librecms/pages/models/ContentItemModel.java +++ b/ccm-cms/src/main/java/org/librecms/pages/models/ContentItemModel.java @@ -28,7 +28,6 @@ import org.librecms.contentsection.ContentItem; import org.librecms.contentsection.ContentItemVersion; import org.librecms.contentsection.ItemAttachment; import org.librecms.pages.PagesController; -import org.librecms.pages.PagesRouter; import org.librecms.pages.PagesService; import java.time.ZoneId; @@ -50,9 +49,8 @@ import javax.ws.rs.core.Response; /** * Retrieves a categorized content item for the current category. To work, the - * {@link #itemName} property MUST be initalized by the using application (for - * example {@link PagesRouter}. The value for {@link #itemName} is usually - * determined from the requested URL. + * {@link #itemName} property MUST be initalized by the using application. The + * value for {@link #itemName} is usually determined from the requested URL. * * @author Jens Pelzetter */ diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_33__remove_page_model.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_33__remove_page_model.sql new file mode 100644 index 000000000..da2f8c42f --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_33__remove_page_model.sql @@ -0,0 +1,8 @@ +drop table CCM_CMS.CATEGORY_TREE_COMPONENTS; +drop table CCM_CMS.FIXED_CONTENT_ITEM_COMPONENTS; +drop table CCM_CMS.GREETING_ITEM_COMPONENTS; +drop table CCM_CMS.CATEGORIZED_ITEM_COMPONENTS; +drop table CCM_CMS.CONTENT_ITEM_COMPONENTS; + +drop table CCM_CMS.ITEM_LIST_ORDER; +drop table CCM_CMS.ITEM_LIST_COMPONENTS; diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_33__remove_page_model.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_33__remove_page_model.sql new file mode 100644 index 000000000..da2f8c42f --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_33__remove_page_model.sql @@ -0,0 +1,8 @@ +drop table CCM_CMS.CATEGORY_TREE_COMPONENTS; +drop table CCM_CMS.FIXED_CONTENT_ITEM_COMPONENTS; +drop table CCM_CMS.GREETING_ITEM_COMPONENTS; +drop table CCM_CMS.CATEGORIZED_ITEM_COMPONENTS; +drop table CCM_CMS.CONTENT_ITEM_COMPONENTS; + +drop table CCM_CMS.ITEM_LIST_ORDER; +drop table CCM_CMS.ITEM_LIST_COMPONENTS; diff --git a/ccm-core/src/main/java/org/libreccm/modules/Module.java b/ccm-core/src/main/java/org/libreccm/modules/Module.java index 26ba25f37..335905f53 100644 --- a/ccm-core/src/main/java/org/libreccm/modules/Module.java +++ b/ccm-core/src/main/java/org/libreccm/modules/Module.java @@ -20,9 +20,6 @@ package org.libreccm.modules; import org.libreccm.configuration.Configuration; import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.PageModel; -import org.libreccm.pagemodel.PageModelComponentModel; import org.libreccm.web.ApplicationType; import java.lang.annotation.Retention; @@ -92,14 +89,4 @@ public @interface Module { */ Class[] configurations() default {}; - /** - * Components for use in {@link PageModel}s provided by the annotated - * module. - * - * @return An array containing all {@link ComponentModel}s provided by the - * annotated module. - */ - @Deprecated - PageModelComponentModel[] pageModelComponentModels() default {}; - } diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/AbstractComponentModelJsonConverter.java b/ccm-core/src/main/java/org/libreccm/pagemodel/AbstractComponentModelJsonConverter.java deleted file mode 100644 index 25b959133..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/AbstractComponentModelJsonConverter.java +++ /dev/null @@ -1,111 +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 org.libreccm.pagemodel; - -import java.util.Objects; - -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; - -/** - * Converter for the basic properties of a { - * - * @ComponentModel}. Can be used as base for implementations. - * - * @author Jens Pelzetter - */ -@Deprecated -public abstract class AbstractComponentModelJsonConverter - implements ComponentModelJsonConverter { - - /** - * Converts the basic properties of a {@link ComponentModel} to JSON. - * - * @param componentModel The {@link ComponentModel}. - * @param objectBuilder The {@link JsonObjectBuilder} to use. - */ - protected void convertBasePropertiesToJson( - final ComponentModel componentModel, - final JsonObjectBuilder objectBuilder) { - - Objects.requireNonNull(componentModel); - Objects.requireNonNull(objectBuilder); - - objectBuilder - .add("componentModelId", - Long.toString(componentModel.getComponentModelId())) - .add("uuid", componentModel.getUuid()) - .add("modelUuid", componentModel.getModelUuid()) - .add("key", componentModel.getKey()) - .add("type", componentModel.getClass().getName()); - - if (componentModel.getIdAttribute() != null) { - objectBuilder.add("idAttribute", - componentModel.getIdAttribute()); - } - - if (componentModel.getClassAttribute() != null) { - objectBuilder.add("classAttribute", - componentModel.getClassAttribute()); - } - - if (componentModel.getStyleAttribute() != null) { - objectBuilder.add("styleAttribute", - componentModel.getStyleAttribute()); - } - } - - /** - * Read the basic properties of a {@link ComponentModel} from a - * {@link JsonObject}. - * - * @param jsonObject The {@link JsonObject}. - * @param componentModel The {@link ComponentModel}. - */ - protected void readBasePropertiesFromJson( - final JsonObject jsonObject, final ComponentModel componentModel) { - - Objects.requireNonNull(jsonObject); - Objects.requireNonNull(componentModel); - - //UUIDs are solely managed by the server! -// if (jsonObject.containsKey("uuid")) { -// componentModel.setUuid(jsonObject.getString("uuid")); -// } -// if (jsonObject.containsKey("modelUuid")) { -// componentModel.setModelUuid(jsonObject.getString("modelUuid")); -// } - componentModel.setKey(jsonObject.getString("key")); - - if (jsonObject.getString("idAttribute", null) != null) { - componentModel.setIdAttribute(jsonObject.getString("idAttribute")); - } - - if (jsonObject.getString("classAttribute", null) != null) { - componentModel - .setClassAttribute(jsonObject.getString("classAttribute")); - } - - if (jsonObject.getString("styleAttribute", null) != null) { - componentModel - .setStyleAttribute(jsonObject.getString("styleAttribute")); - } - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/AbstractPageRenderer.java b/ccm-core/src/main/java/org/libreccm/pagemodel/AbstractPageRenderer.java deleted file mode 100644 index 91e6c49f4..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/AbstractPageRenderer.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import com.arsdigita.ui.UI; -import com.arsdigita.web.URL; - -import org.apache.shiro.subject.Subject; -import org.libreccm.security.Shiro; -import org.libreccm.security.User; - -import java.util.HashMap; -import java.util.Map; - -import javax.inject.Inject; - -import java.util.Optional; - -import javax.servlet.http.HttpServletRequest; - -/** - * An abstract base class for implementations of the {@link PageRenderer} - * interface providing some functionality needed by all implementations of the - * {@link PageRenderer} interface. - * - * @author Jens Pelzetter - * - */ -@Deprecated -public abstract class AbstractPageRenderer implements PageRenderer { - - @Inject - private ComponentRendererManager componentRendererManager; - - @Inject - private HttpServletRequest request; - - @Inject - private Shiro shiro; - - /** - * Renders a {@code Page} based on a {@link PageModel}. This implementation - * first calls {@link #renderPage()} to create the page object. After that - * all {@link ComponentModel}s of the {@link PageModel} are processed and - * the component objects created by the {@link ComponentRenderer}s are added - * to the page. - * - * @param pageModel The {@link PageModel} to render. - * @param parameters Parameters provided by application which wants to - * render a {@link PageModel}. The parameters are passed - * the {@link ComponentRenderer}s. - * - * @return A map containing the results from rendering the components of the - * page model. - */ - @Override - public Map renderPage(final PageModel pageModel, - final Map parameters) { - - final Map page = renderPage(parameters); - - final Map currentUserData = new HashMap<>(); - if (shiro.getUser().isPresent()) { - final User currentUser = shiro.getUser().get(); - final Subject currentSubject = shiro.getSubject(); - currentUserData.put( - "authenticated", currentSubject.isAuthenticated() - ); - currentUserData.put("username", currentUser.getName()); - currentUserData.put( - "email", currentUser.getPrimaryEmailAddress().toString() - ); - currentUserData.put("familyName", currentUser.getFamilyName()); - currentUserData.put("givenName", currentUser.getGivenName()); - - currentUserData.put( - "workspaceUrl", - URL.there(request, UI.getWorkspaceURL()).toString() - ); - currentUserData.put( - "loginUrl", - URL.there(request, "/login").toString() - ); - currentUserData.put( - "logoutUrl", - URL.there( - request, - "register/logout" - ) - ); - currentUserData.put( - "changePasswordUrl", - URL.there( - request, - "register/change-password" - ) - ); - - } else { - currentUserData.put("authenticated", false); - } - page.put("currentUser", currentUserData); - - for (final ContainerModel containerModel : pageModel.getContainers()) { - - final Map container = renderContainer( - containerModel, parameters); - page.put(containerModel.getKey(), container); - } - - return page; - } - - protected Map renderContainer( - final ContainerModel containerModel, - final Map parameters) { - - final Map container = new HashMap<>(); - - container.put("key", containerModel.getKey()); - if (containerModel.getStyles() != null) { - container.put("styles", containerModel.getStyles().toCss()); - } - - for (final ComponentModel componentModel : containerModel - .getComponents()) { - - renderComponent(componentModel, - componentModel.getClass(), - parameters) - .ifPresent(component -> container.put(componentModel.getKey(), - component)); - } - - return container; - } - - /** - * Helper method for rendering the components. - * - * @param Generics variable for the type of rendered - * component - * @param componentModel The {@link ComponentModel} to process. - * @param componentModelClass The class of the {@link ComponentModel}. - * @param parameters Parameters provided by application which wants - * to render a {@link PageModel}. The parameters - * are passed the {@link ComponentRenderer}s. - * - * @return A map containing the results from rendering the components of the - * page model. - */ - protected Optional renderComponent( - final ComponentModel componentModel, - final Class componentModelClass, - final Map parameters) { - - final Optional> renderer = componentRendererManager - .findComponentRenderer(componentModelClass); - - if (renderer.isPresent()) { - @SuppressWarnings("unchecked") - final M model = (M) componentModel; - return Optional - .of(renderer.get().renderComponent(model, parameters)); - } else { - return Optional.empty(); - } - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModel.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModel.java deleted file mode 100644 index 654835c56..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModel.java +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import org.libreccm.core.CoreConstants; -import org.libreccm.modules.Module; - -import javax.validation.constraints.NotNull; - -import java.io.Serializable; -import java.util.Objects; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.Table; - -/** - * Base class for the component models for use in a {@link PageModel}. This - * class is not designed for direct use. Instead the classes for concrete - * components have to be used. A component model must be registered by adding it - * to list of component models provided by a module by adding it the the list - * provided by {@link Module#pageModelComponentModels() } using the - * {@link PageModelComponentModel} annotation. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@Table(name = "PAGE_MODEL_COMPONENT_MODELS", schema = CoreConstants.DB_SCHEMA) -@NamedQueries({ - @NamedQuery(name = "ComponentModel.findComponentByContainerAndKey", - query = "SELECT c " - + "FROM ComponentModel c " - + "WHERE c.container = :container " - + "AND c.key = :key") -}) -public class ComponentModel implements Serializable { - - private static final long serialVersionUID = 8585775139379396806L; - - /** - * ID in the database for this instance. - */ - @Id - @Column(name = "COMPONENT_MODEL_ID") - @GeneratedValue(strategy = GenerationType.AUTO) - private long componentModelId; - - /** - * The UUID of the instance. - */ - @Column(name = "UUID", length = 255, nullable = false) - @NotNull - private String uuid; - - /** - * The UUID of the {@code ComponentModel} which is the same for the draft - * and live version. - */ - @Column(name = "MODEL_UUID", length = 255, nullable = false) - @NotNull - private String modelUuid; - - @ManyToOne - @JoinColumn(name = "CONTAINER_ID") - private ContainerModel container; - - /** - * ID of the component. Must be unique inside a {@link PageModel}. - */ - @Column(name = "ID_ATTRIBUTE", length = 255) - private String idAttribute; - - /** - * CSS Style classes to add to the HTML element representing the component - * in the HTML generated from the rendered component model. - */ - @Column(name = "CLASS_ATTRIBUTE", length = 512) - private String classAttribute; - - /** - * CSS styles to add to the HTML element representing the component in the - * HTML generated from the rendered component model. Avoid using this as it - * will add inline styles to the HTML. - */ - @Column(name = "STYLE_ATTRIBUTE", length = 1024) - private String styleAttribute; - - /** - * Key for identifying the component in a {@link PageModel}. The will be - * used as key in the map generated by - * {@link PageRenderer#renderPage(java.util.Map)} and - * {@link PageRenderer#renderPage(org.libreccm.pagemodel.PageModel, java.util.Map)}. - */ - @Column(name = "COMPONENT_KEY", length = 255) - private String key; - - public long getComponentModelId() { - return componentModelId; - } - - protected void setComponentModelId(final long componentModelId) { - this.componentModelId = componentModelId; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(final String uuid) { - this.uuid = uuid; - } - - public String getModelUuid() { - return modelUuid; - } - - protected void setModelUuid(final String modelUuid) { - this.modelUuid = modelUuid; - } - - public ContainerModel getContainer() { - return container; - } - - protected void setContainer(final ContainerModel container) { - this.container = container; - } - - public String getIdAttribute() { - return idAttribute; - } - - public void setIdAttribute(final String idAttribute) { - this.idAttribute = idAttribute; - } - - public String getClassAttribute() { - return classAttribute; - } - - public void setClassAttribute(final String classAttribute) { - this.classAttribute = classAttribute; - } - - public String getStyleAttribute() { - return styleAttribute; - } - - public void setStyleAttribute(final String styleAttribute) { - this.styleAttribute = styleAttribute; - } - - public String getKey() { - return key; - } - - public void setKey(final String key) { - this.key = key; - } - - @Override - public int hashCode() { - int hash = 7; - hash - = 53 * hash + (int) (componentModelId ^ (componentModelId >>> 32)); - hash = 53 * hash + Objects.hashCode(uuid); - hash = 53 * hash + Objects.hashCode(container); - hash = 53 * hash + Objects.hashCode(idAttribute); - hash = 53 * hash + Objects.hashCode(classAttribute); - hash = 53 * hash + Objects.hashCode(styleAttribute); - hash = 53 * hash + Objects.hashCode(key); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof ComponentModel)) { - return false; - } - final ComponentModel other = (ComponentModel) obj; - if (!other.canEqual(this)) { - return false; - } - - if (componentModelId != other.getComponentModelId()) { - return false; - } - if (!Objects.equals(idAttribute, other.getIdAttribute())) { - return false; - } - if (!Objects.equals(classAttribute, other.getClassAttribute())) { - return false; - } - if (!Objects.equals(styleAttribute, other.getStyleAttribute())) { - return false; - } - - if (!Objects.equals(container, other.getContainer())) { - return false; - } - - return Objects.equals(key, other.getKey()); - } - - public boolean canEqual(final Object obj) { - return obj instanceof ComponentModel; - } - - @Override - public final String toString() { - return toString(""); - } - - public String toString(final String data) { - return String.format("%s{ " - + "componentModelId = %d, " - + "container = %s, " - + "idAttribute = \"%s\", " - + "classAttribute = \"%s\", " - + "styleAttribute = \"%s\", " - + "key = \"%s\"" - + " }", - super.hashCode(), - componentModelId, - container, - idAttribute, - classAttribute, - styleAttribute, - key); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelJsonConverter.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelJsonConverter.java deleted file mode 100644 index 440c4851e..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelJsonConverter.java +++ /dev/null @@ -1,50 +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 org.libreccm.pagemodel; - -import javax.json.JsonObject; - -/** - * Interface which the JSON converters for {@link ComponentModel}s. - * - * @author Jens Pelzetter - */ -@Deprecated -public interface ComponentModelJsonConverter { - - /** - * Convert a {@link ComponentModel} to JSON. - * - * @param componentModel The {@link ComponentModel} to convert. - * - * @return The JSON representation of the provided {@link ComponentModel}. - */ - JsonObject toJson(ComponentModel componentModel); - - /** - * Read the values of a {@link ComponentModel} from a JSON object and set - * them on the provided component model. - * - * @param jsonObject The JSON object with the values. - * @param componentModel The {@link ComponentModel} on which the values are - * set. - */ - void fromJson(JsonObject jsonObject, ComponentModel componentModel); - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelRepository.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelRepository.java deleted file mode 100644 index fb36d275c..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModelRepository.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import org.libreccm.core.AbstractEntityRepository; -import org.libreccm.core.CoreConstants; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -import javax.enterprise.context.RequestScoped; -import javax.transaction.Transactional; - -import java.util.UUID; - -import javax.persistence.EntityGraph; -import javax.persistence.NoResultException; -import javax.persistence.TypedQuery; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Root; - -/** - * Repository class for managing {@link ComponentModel} entities. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class ComponentModelRepository - extends AbstractEntityRepository { - - private static final long serialVersionUID = -6358512316472857971L; - - @Override - public Class getEntityClass() { - return ComponentModel.class; - } - - @Override - public String getIdAttributeName() { - return "componentModelId"; - } - - @Override - public Long getIdOfEntity(final ComponentModel entity) { - return entity.getComponentModelId(); - } - - @Override - public boolean isNew(final ComponentModel componentModel) { - return componentModel.getComponentModelId() == 0; - } - - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - @Transactional(Transactional.TxType.REQUIRED) - @Override - public void save(final ComponentModel componentModel) { - super.save(componentModel); - } - - /** - * Initialises a new entity. - * - * @param componentModel The new {@link ComponentModel} entity to - * initialise. - */ - @Override - public void initNewEntity(final ComponentModel componentModel) { - - final String uuid = UUID.randomUUID().toString(); - - componentModel.setUuid(uuid); - if (componentModel.getModelUuid() == null - || componentModel.getModelUuid().isEmpty()) { - componentModel.setModelUuid(uuid); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - public Optional findById( - final long modelId, final Class modelClass) { - - return Optional.ofNullable(getEntityManager().find(modelClass, - modelId)); - } - - @Transactional(Transactional.TxType.REQUIRED) - public Optional findById( - final long modelId, - final Class modelClass, - final String entityGraphName) { - - return Optional.ofNullable(getEntityManager().find(modelClass, - modelId)); - } - - @Transactional(Transactional.TxType.REQUIRED) - public Optional findById( - final long entityId, - final Class modelClass, - final EntityGraph entityGraph) { - - Objects.requireNonNull(entityId); - Objects.requireNonNull(entityGraph); - - final Map hints = new HashMap<>(); - hints.put(FETCH_GRAPH_HINT_KEY, entityGraph); - return Optional.ofNullable(getEntityManager().find(modelClass, - entityId, - hints)); - } - - @Transactional(Transactional.TxType.REQUIRED) - public Optional findById( - final long entityId, - final Class modelClass, - final String... fetchJoins) { - - Objects.requireNonNull(entityId); - - final CriteriaBuilder builder = getEntityManager() - .getCriteriaBuilder(); - final CriteriaQuery criteriaQuery = builder - .createQuery(modelClass); - final Root from = criteriaQuery.from(modelClass); - criteriaQuery.from(getEntityClass()); - criteriaQuery.select(from); - for (final String fetchJoin : fetchJoins) { - from.fetch(fetchJoin); - } - - criteriaQuery - .where(builder.equal(from.get(getIdAttributeName()), entityId)); - - final TypedQuery query = getEntityManager() - .createQuery(criteriaQuery); - try { - return Optional.of(query.getSingleResult()); - } catch (NoResultException ex) { - return Optional.empty(); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - public Optional findComponentByContainerAndKey( - final ContainerModel containerModel, - final String componentKey) { - - final TypedQuery query = getEntityManager() - .createNamedQuery("ComponentModel.findComponentByContainerAndKey", - ComponentModel.class); - query.setParameter("container", containerModel); - query.setParameter("key", componentKey); - - try { - return Optional.of(query.getSingleResult()); - } catch(NoResultException ex) { - return Optional.empty(); - } - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java deleted file mode 100644 index 05f172dd5..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentModels.java +++ /dev/null @@ -1,132 +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.libreccm.pagemodel; - -import org.libreccm.modules.CcmModule; -import org.libreccm.modules.Module; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.ServiceLoader; - -import javax.annotation.PostConstruct; -import javax.enterprise.context.ApplicationScoped; - -/** - * An Utility class which provides access to all component models available. - * - * This class is an {@link ApplicationScoped} CDI bean. The {@link #init} method - * is called by the CDI container after creating an instance of this class. The - * {@link #init} method retrieves the informations about the available - * {@link ComponentModel}s from the module classes. For exactly from the - * {@link Module#pageModelComponentModels()} property of the {@link Module} - * annotation of the module class. - * - * @author Jens Pelzetter - */ -@Deprecated -@ApplicationScoped -public class ComponentModels { - - private final List availableComponentModels - = new ArrayList<>(); - - private final Map componentInfos - = new HashMap<>(); - - /** - * Creates the list of available {@link ComponentModels}. Called by the CDI - * container. - */ - @PostConstruct - private void init() { - - final ServiceLoader modules = ServiceLoader - .load(CcmModule.class); - - for (final CcmModule module : modules) { - - final Module moduleData = module - .getClass() - .getAnnotation(Module.class); - - final PageModelComponentModel[] componentModels = moduleData - .pageModelComponentModels(); - - for (final PageModelComponentModel componentModel : componentModels) { - availableComponentModels.add(componentModel); - componentInfos.put(componentModel.modelClass().getName(), - componentModel); - } - } - } - - /** - * Get a list of the available {@link ComponentModel}s. - * - * @return A (unmodifiable) list of all available {@link ComponentModel}s. - */ - public List findAvailableComponentModels() { - return Collections.unmodifiableList(availableComponentModels); - } - - /** - * Get the informations about a specific {@link ComponentModel} - * implementation. - * - * @param clazz The class of the {@link ComponentModel} implementation. - * - * @return An {@link Optional} containing the informations about the - * {@link ComponentModel} implementation. If the class is not a - * {@link ComponentModel} implementation or is an unknown - * implementation an empty {@link Optional} is returned. - */ - public Optional getComponentModelInfo( - final Class clazz) { - - return getComponentModelInfo(clazz.getName()); - } - - /** - * Get the informations about a specific {@link ComponentModel} - * implementation. - * - * @param className The name of the class of the {@link ComponentModel} - * implementation. - * - * @return An {@link Optional} containing the informations about the - * {@link ComponentModel} implementation. If the class is not a - * {@link ComponentModel} implementation or is an unknown - * implementation an empty {@link Optional} is returned. - */ - public Optional getComponentModelInfo( - final String className) { - - if (componentInfos.containsKey(className)) { - return Optional.of(componentInfos.get(className)); - } else { - return Optional.empty(); - } - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRenderer.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRenderer.java deleted file mode 100644 index 839149605..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRenderer.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import java.util.Collection; -import java.util.Map; - -/** - * A {@code ComponentRenderer} transforms a {@link ComponentModel} into a - * component. - * - * An implementation must be annotation with the {@link RendersComponent} - * qualifier annotation. - * - * @author Jens Pelzetter - * @param Type of the model the component renderer processes. - */ -@Deprecated -public interface ComponentRenderer { - - /** - * Renders a {@link ComponentModel}. - * - * The result of the rendering process is a {@link Map} which uses strings - * as key. The values are either Java primitive types or Collections. More - * exactly the values are objects of one the following types: - * - *
    - *
  • {@link Double}
  • - *
  • {@link Float}
  • - *
  • {@link Integer}
  • - *
  • {@link Long}
  • - *
  • {@link Short}
  • - *
  • {@link String}
  • - *
  • {@link List}
  • - *
  • {@link Map}
  • - *
- * - * Other subtypes {@link Collection} are might be supported but there is no - * guarantee for that. The values in a collection must be one of the types - * in the list above. Collections might contain multiple types from the list - * above. The keys for a map should always be strings. - * - * @param componentModel The component model to render. - * @param parameters Parameters provided by the calling - * {@link PageRenderer}. - * - * @return A map representing the rendered component. - */ - Map renderComponent(M componentModel, - Map parameters); - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRendererManager.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRendererManager.java deleted file mode 100644 index 771b87384..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ComponentRendererManager.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Instance; -import javax.enterprise.util.AnnotationLiteral; -import javax.inject.Inject; - -import java.util.Iterator; -import java.util.Optional; - -import javax.enterprise.inject.Any; - -/** - * Provides access to all available implementations of the - * {@link ComponentRenderer} interface. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class ComponentRendererManager { - - private static final Logger LOGGER = LogManager.getLogger( - ComponentRendererManager.class); - - @Inject - @Any - private Instance> componentRenderers; - - /** - * Find an implementation of the {@link ComponentRenderer} interface for a - * specific {@link ComponentModel}. - * - * @param Generic variable for the subtype of - * {@link ComponentModel} which is produced by - * the {@link ComponentRenderer} implementation. - * @param componentModelClass The sub class of the {@link ComponentModel} - * for which is processed by the - * {@link ComponentRenderer}. - * - * @return An {@link Optional} containing the implementation of the - * {@link ComponentRenderer} interface for the specified parameters. - * If there is no implementation for the specified parameters an - * empty {@link Optional} is returned. - */ - @SuppressWarnings("unchecked") - public Optional> findComponentRenderer( - final Class componentModelClass) { - - LOGGER.debug("Trying to find ComponentRenderer for ComponentModel\"{}\"" - + "and type \"{}\"...", - componentModelClass.getName()); - - final RenderComponentLiteral literal = new RenderComponentLiteral( - componentModelClass); - - final Instance> instance = componentRenderers - .select(literal); - if (instance.isUnsatisfied()) { - LOGGER.warn("No ComponentRenderer for component model \"{}\". " - + "Ignoring component model.", - componentModelClass.getName()); - return Optional.empty(); - } else if (instance.isAmbiguous()) { - throw new IllegalStateException(String.format( - "Multiple ComponentRenderers for component model \"%s\"available. " - + "Something is wrong", - componentModelClass.getName())); - } else { - final Iterator> iterator = instance. - iterator(); - final ComponentRenderer componentRenderer = iterator.next(); - - return Optional.of((ComponentRenderer) componentRenderer); - } - - } - - /** - * Annotation literal for the {@link RendersComponent} annotation. - */ - private static class RenderComponentLiteral - extends AnnotationLiteral - implements RendersComponent { - - private static final long serialVersionUID = -2601632434295178600L; - - private final Class componentModel; - - public RenderComponentLiteral( - final Class componentModel) { - this.componentModel = componentModel; - } - - @Override - public Class componentModel() { - return componentModel; - } - - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java deleted file mode 100644 index 68a51d5e5..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModel.java +++ /dev/null @@ -1,273 +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 org.libreccm.pagemodel; - -import org.hibernate.annotations.Cascade; -import org.hibernate.annotations.CascadeType; -import org.libreccm.core.CoreConstants; -import org.libreccm.pagemodel.styles.Styles; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.OrderBy; -import javax.persistence.Table; -import javax.validation.constraints.NotNull; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - -/** - * A {@code ContainerModel} for grouping {@link ComponentModel}s. Each - * {@link PageModel} contains a least one container. A container also contains - * styles which allow it to provide the theme engine with CSS for aligning the - * components in the container. Please note that theme developers can ignore the - * information. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "PAGE_MODEL_CONTAINER_MODELS", schema = CoreConstants.DB_SCHEMA) -@NamedQueries({ - @NamedQuery(name = "ContainerModel.findByKeyAndPage", - query = "SELECT c FROM ContainerModel c " - + "WHERE c.key = :key " - + "AND c.pageModel = :pageModel") -}) -@XmlRootElement(name = "container-model") -public class ContainerModel implements Serializable { - - private static final long serialVersionUID = -7472858443655353588L; - - /** - * ID of the ContainerModel in the database. - */ - @Id - @Column(name = "CONTAINER_ID") - @GeneratedValue(strategy = GenerationType.AUTO) - @XmlElement(name = "container-model-id") - private long containerId; - - /** - * The UUID of this version of the container. - */ - @Column(name = "UUID", length = 255, nullable = false) - @NotNull - private String uuid; - - /** - * The UUID of the container which is the same in all versions. - */ - @Column(name = "CONTAINER_UUID", length = 255, nullable = false) - @NotNull - private String containerUuid; - - /** - * A key for identifying the container inside a {@link PageModel}. May be - * used for the value of the {@code id} or {@code class} attribute in HTML. - * It is recommended the use semantic names. - */ - @Column(name = "CONTAINER_KEY", length = 255) - private String key; - - /** - * Styles for this container. This should be limited to CSS which describes - * the layout of the components in the container. Colours etc. are the - * responsibility of the theme. A theme might also alter the styles stored - * here. - */ - @OneToOne - @JoinColumn(name = "STYLE_ID") - @Cascade(CascadeType.ALL) - private Styles styles; - - @ManyToOne - @JoinColumn(name = "PAGE_MODEL_ID") - @XmlTransient - private PageModel pageModel; - - /** - * The components in this this container. - */ - @OneToMany(mappedBy = "container") - @OrderBy("key ASC") - private List components; - - public ContainerModel() { - this.styles = new Styles(); - this.components = new ArrayList<>(); - } - - public long getContainerId() { - return containerId; - } - - protected void setContainerId(final long containerId) { - this.containerId = containerId; - } - - public String getUuid() { - return uuid; - } - - public void setUuid(final String uuid) { - this.uuid = uuid; - } - - public String getContainerUuid() { - return containerUuid; - } - - protected void setContainerUuid(final String containerUuid) { - this.containerUuid = containerUuid; - } - - public String getKey() { - return key; - } - - public void setKey(final String key) { - this.key = key; - } - - public Styles getStyles() { - return styles; - } - - protected void setStyles(final Styles styles) { - this.styles = styles; - } - - public PageModel getPageModel() { - return pageModel; - } - - protected void setPageModel(final PageModel pageModel) { - this.pageModel = pageModel; - } - - public List getComponents() { - return Collections.unmodifiableList(components); - } - - protected void setComponents(final List components) { - this.components = new ArrayList<>(components); - } - - protected void addComponent(final ComponentModel component) { - components.add(component); - } - - protected void removeComponent(final ComponentModel component) { - components.remove(component); - } - - protected void clearComponents() { - components.clear(); - } - - @Override - public int hashCode() { - int hash = 5; - hash = 97 * hash + (int) (containerId ^ (containerId >>> 32)); - hash = 97 * hash + Objects.hashCode(uuid); - hash = 97 * hash + Objects.hashCode(containerUuid); - hash = 97 * hash + Objects.hashCode(key); - hash = 97 * hash + Objects.hashCode(styles); - return hash; - } - - @Override - public boolean equals(final Object obj) { - - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof ContainerModel)) { - return false; - } - final ContainerModel other = (ContainerModel) obj; - if (!other.canEqual(this)) { - return false; - } - - if (containerId != other.getContainerId()) { - return false; - } - if (!Objects.equals(uuid, other.getUuid())) { - return false; - } - if (!Objects.equals(containerUuid, other.getContainerUuid())) { - return false; - } - - if (!Objects.equals(styles, other.getStyles())) { - return false; - } - - return Objects.equals(key, other.getKey()); - } - - public boolean canEqual(final Object obj) { - return obj instanceof ContainerModel; - } - - public String toString(final String data) { - - return String.format("%s{ " - + "containerId = %d, " - + "uuid = %s, " - + "containerUuid = %s, " - + "key = \"%s\", " - + "styles = %s%s" - + " }", - super.toString(), - containerId, - uuid, - containerUuid, - key, - Objects.toString(styles), - data); - } - - @Override - public final String toString() { - - return toString(""); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModelManager.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModelManager.java deleted file mode 100644 index 373be7d6d..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModelManager.java +++ /dev/null @@ -1,145 +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 org.libreccm.pagemodel; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.modules.CcmModule; -import org.libreccm.modules.Module; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; -import java.util.ServiceLoader; - -import javax.annotation.PostConstruct; -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class ContainerModelManager implements Serializable { - - private static final long serialVersionUID = -2793646505397414050L; - - private static final Logger LOGGER = LogManager - .getLogger(ContainerModelManager.class); - - @Inject - private ContainerModelRepository containerRepo; - - @Inject - private ComponentModelRepository componentModelRepo; - - private final Map components - = new HashMap<>(); - - /** - * Called by CDI after an instance of this class is created. Initialises the - * {@link #components} by retrieving the data about all available - * {@link ComponentModel}s. - */ - @PostConstruct - private void init() { - LOGGER.debug("Initalising {}...", - ContainerModelManager.class.getName()); - - final ServiceLoader modules = ServiceLoader.load( - CcmModule.class); - - for (CcmModule module : modules) { - final Module moduleData = module.getClass().getAnnotation( - Module.class); - - final PageModelComponentModel[] models = moduleData - .pageModelComponentModels(); - - for (PageModelComponentModel model : models) { - components.put(model.modelClass().getName(), - model); - } - } - LOGGER.debug("Initalised {}. Found {} ComponentModels.", - ContainerModelManager.class.getName(), - components.size()); - } - - /** - * Adds a {@link ComponentModel} to a {@link ContainerModel}. - * - * @param container The {@link ContainerModel} to which component model - * is added. - * @param componentModel The {@link ComponentModel} to add. - */ - @Transactional(Transactional.TxType.REQUIRED) - public void addComponentModel(final ContainerModel container, - final ComponentModel componentModel) { - - if (container == null) { - throw new IllegalArgumentException( - "Can't add a component model to page model null."); - } - - if (componentModel == null) { - throw new IllegalArgumentException( - "Can't add component model null to a page model."); - } - - container.addComponent(componentModel); - componentModel.setContainer(container); - - containerRepo.save(container); - componentModelRepo.save(componentModel); - } - - /** - * Removes a {@link ComponentModel} from a {@link ContainerModel}. - * - * @param container The {@link ContainerModel} from which the - * {@link ComponentModel} is removed. - * @param componentModel The {@link ComponentModel} to remove. The component - * model is also removed from the database. - */ - @Transactional(Transactional.TxType.REQUIRED) - public void removeComponentModel(final ContainerModel container, - final ComponentModel componentModel) { - - if (container == null) { - throw new IllegalArgumentException( - "Can't remove a component model from page model null."); - } - - if (componentModel == null) { - throw new IllegalArgumentException( - "Can't remove component model null from a page model."); - } - - container.removeComponent(componentModel); - componentModel.setContainer(null); - - containerRepo.save(container); - componentModelRepo.delete(componentModel); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModelRepository.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModelRepository.java deleted file mode 100644 index 18fb59ccf..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ContainerModelRepository.java +++ /dev/null @@ -1,104 +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 org.libreccm.pagemodel; - -import org.libreccm.core.AbstractEntityRepository; -import org.libreccm.core.CoreConstants; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; - -import java.util.Optional; -import java.util.UUID; - -import javax.enterprise.context.RequestScoped; -import javax.persistence.NoResultException; -import javax.persistence.TypedQuery; -import javax.transaction.Transactional; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class ContainerModelRepository - extends AbstractEntityRepository { - - private static final long serialVersionUID = 6613005988522263867L; - - @Override - public Class getEntityClass() { - return ContainerModel.class; - } - - @Override - public String getIdAttributeName() { - return "containerId"; - } - - @Override - public Long getIdOfEntity(final ContainerModel container) { - return container.getContainerId(); - } - - @Override - public boolean isNew(final ContainerModel container) { - return container.getContainerId() == 0; - } - - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - @Transactional(Transactional.TxType.REQUIRED) - @Override - public void save(final ContainerModel container) { - - super.save(container); - } - - @Override - public void initNewEntity(final ContainerModel container) { - - final String uuid = UUID.randomUUID().toString(); - container.setUuid(uuid); - - if (container.getContainerUuid() == null - || container.getContainerUuid().isEmpty()) { - - container.setContainerUuid(uuid); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - public Optional findContainerByKeyAndPageModel( - final String key, final PageModel pageModel) { - - final TypedQuery query = getEntityManager() - .createNamedQuery("ContainerModel.findByKeyAndPage", - ContainerModel.class); - query.setParameter("key", key); - query.setParameter("pageModel", pageModel); - - try { - return Optional.of(query.getSingleResult()); - } catch (NoResultException ex) { - return Optional.empty(); - } - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/ConvertsComponentModel.java b/ccm-core/src/main/java/org/libreccm/pagemodel/ConvertsComponentModel.java deleted file mode 100644 index 1cbeecd04..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/ConvertsComponentModel.java +++ /dev/null @@ -1,43 +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 org.libreccm.pagemodel; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@Qualifier -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD, - ElementType.METHOD, - ElementType.PARAMETER, - ElementType.TYPE}) -public @interface ConvertsComponentModel { - - Class componentModel(); - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModel.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModel.java deleted file mode 100644 index a2b5b7bb9..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModel.java +++ /dev/null @@ -1,484 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import org.libreccm.core.CoreConstants; -import org.libreccm.l10n.LocalizedString; -import org.libreccm.web.CcmApplication; - -import javax.persistence.Temporal; -import javax.persistence.TemporalType; -import javax.validation.constraints.NotNull; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Objects; - -import javax.persistence.AssociationOverride; -import javax.persistence.Column; -import javax.persistence.Embedded; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToOne; -import javax.persistence.NamedQueries; -import javax.persistence.NamedQuery; -import javax.persistence.OneToMany; -import javax.persistence.OrderBy; -import javax.persistence.Table; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - -/** - * A {@link PageModel} is used by a {@link PageRenderer} implementation to - * render a page. The {@code PageModel} specifics which components are used on a - * page. - * - * @author Jens Pelzetter - * @see PageModelRepository - * @see PageModelManager - * @see PageRenderer - */ -@Deprecated -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -@Table(name = "PAGE_MODELS", schema = CoreConstants.DB_SCHEMA) -@NamedQueries({ - @NamedQuery( - name = "PageModel.findAllDraftModels", - query = "SELECT p FROM PageModel p " - + "WHERE p.version = org.libreccm.pagemodel" - + ".PageModelVersion.DRAFT") - , - @NamedQuery( - name = "PageModel.findAllLiveModels", - query = "SELECT p FROM PageModel p " - + "WHERE p.version = org.libreccm.pagemodel" - + ".PageModelVersion.LIVE") - , - @NamedQuery( - name = "PageModel.findDraftVersion", - query = "SELECT p FROM PageModel p " - + "WHERE p.modelUuid = :uuid " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.DRAFT") - , - @NamedQuery( - name = "PageModel.hasLiveVersion", - query = - "SELECT (CASE WHEN COUNT(p) > 0 THEN true ELSE " - + "False END) " - + "FROM PageModel p " - + "WHERE p.modelUuid = :uuid " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.LIVE" - ) - , - @NamedQuery( - name = "PageModel.findLiveVersion", - query = "SELECT p FROM PageModel p " - + "WHERE p.modelUuid = :uuid " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.LIVE") - , - @NamedQuery( - name = "PageModel.findDraftByApplication", - query = "SELECT p FROM PageModel p " - + "WHERE p.application = :application " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.DRAFT" - ) - , - @NamedQuery( - name = "PageModel.findDraftByApplicationAndName", - query = "SELECT p FROM PageModel p " - + "WHERE p.application = :application " - + "AND p.name = :name " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.DRAFT" - ) - , - @NamedQuery( - name = "PageModel.countDraftByApplicationAndName", - query = "SELECT COUNT(p) FROM PageModel p " - + "WHERE p.name = :name " - + "AND p.application = :application " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.DRAFT" - ) - , - @NamedQuery( - name = "PageModel.countDraftByApplication", - query = "SELECT COUNT(p) FROM PageModel p " - + "WHERE p.application = :application " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.DRAFT" - ) - , - @NamedQuery( - name = "PageModel.findLiveByApplication", - query = "SELECT p FROM PageModel p " - + "WHERE p.application = :application " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.LIVE") - , - @NamedQuery( - name = "PageModel.countLiveByApplication", - query = "SELECT COUNT(p) FROM PageModel p " - + "WHERE p.application = :application " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.LIVE") - , - @NamedQuery( - name = "PageModel.findLiveByApplicationAndName", - query = "SELECT p FROM PageModel p " - + "WHERE p.name = :name " - + "AND p.application = :application " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.LIVE" - ) - , - @NamedQuery( - name = "PageModel.countLiveByApplicationAndName", - query = "SELECT COUNT(p) FROM PageModel p " - + "WHERE p.name = :name " - + "AND p.application = :application " - + "AND p.version = org.libreccm.pagemodel" - + ".PageModelVersion.LIVE" - ) - }) -@XmlRootElement(name = "pagemodel") -public class PageModel implements Serializable { - - private static final long serialVersionUID = 7252512839926020978L; - - /** - * The ID of the entity in the database. - */ - @Id - @Column(name = "PAGE_MODEL_ID") - @GeneratedValue(strategy = GenerationType.AUTO) - @XmlElement(name = "pagemodel-id") - private long pageModelId; - - /** - * The UUID of this {@code PageModel}. Please note that this UUID identifies - * the dataset not the model. Therefore the draft and the live version have - * different values for this field. - */ - @Column(name = "UUID", length = 255, nullable = false) - @NotNull - private String uuid; - - /** - * The UUID of the model. Same for draft and live versions. - */ - @Column(name = "MODEL_UUID", length = 255, nullable = false) - @NotNull - private String modelUuid; - - /** - * The name of this {@code PageModel}. Not localised, for use in URLs. - */ - @Column(name = "NAME", length = 255) - private String name; - - /** - * The version of this {@code PageModel}. - */ - @Column(name = "VERSION", length = 255, nullable = false) - @Enumerated(EnumType.STRING) - private PageModelVersion version; - - - @Column(name = "LAST_MODIFIED") - @Temporal(TemporalType.TIMESTAMP) - private Date lastModified; - - /** - * The localised title of this {@code PageModel} (shown in the - * administration UI), - */ - @Embedded - @AssociationOverride( - name = "values", - joinTable = @JoinTable(name = "PAGE_MODEL_TITLES", - schema = CoreConstants.DB_SCHEMA, - joinColumns = { - @JoinColumn(name = "PAGE_MODEL_ID") - })) - private LocalizedString title; - - /** - * A description of this {@code PageModel} describing its purpose. - */ - @Embedded - @AssociationOverride( - name = "values", - joinTable = @JoinTable(name = "PAGE_MODEL_DESCRIPTIONS", - schema = CoreConstants.DB_SCHEMA, - joinColumns = { - @JoinColumn(name = "PAGE_MODEL_ID") - })) - private LocalizedString description; - - /** - * The application with which this {@code PageModel} is associated. - */ - @ManyToOne - @JoinColumn(name = "APPLICATION_ID") - @XmlTransient - private CcmApplication application; - - /** - * The type of this {@code PageModel}. - */ - @Column(name = "TYPE", length = 255, nullable = false) - @NotNull - private String type; - - @OneToMany(mappedBy = "pageModel") - @OrderBy("key ASC") - private List containers; - - public PageModel() { - - title = new LocalizedString(); - description = new LocalizedString(); - containers = new ArrayList<>(); - } - - public long getPageModelId() { - - return pageModelId; - } - - protected void setPageModelId(final long pageModelId) { - - this.pageModelId = pageModelId; - } - - public String getUuid() { - - return uuid; - } - - public void setUuid(final String uuid) { - - this.uuid = uuid; - } - - public String getModelUuid() { - - return modelUuid; - } - - protected void setModelUuid(final String modelUuid) { - - this.modelUuid = modelUuid; - } - - public String getName() { - - return name; - } - - public void setName(final String name) { - - this.name = name; - } - - public PageModelVersion getVersion() { - - return version; - } - - protected void setVersion(final PageModelVersion version) { - - this.version = version; - } - - public Date getLastModified() { - - return lastModified; - } - - protected void setLastModified(final Date lastModified) { - - this.lastModified = new Date(lastModified.getTime()); - } - - public LocalizedString getTitle() { - - return title; - } - - protected void setTitle(final LocalizedString title) { - - Objects.requireNonNull(title); - this.title = title; - } - - public LocalizedString getDescription() { - - return description; - } - - protected void setDescription(final LocalizedString description) { - - Objects.requireNonNull(description); - this.description = description; - } - - public CcmApplication getApplication() { - - return application; - } - - public void setApplication(final CcmApplication application) { - - this.application = application; - } - - public String getType() { - - return type; - } - - public void setType(final String type) { - - this.type = type; - } - - public List getContainers() { - - return Collections.unmodifiableList(containers); - } - - protected void setContainers(final List containers) { - - this.containers = new ArrayList<>(containers); - } - - protected void addContainer(final ContainerModel container) { - - containers.add(container); - } - - protected void removeContainer(final ContainerModel container) { - - containers.remove(container); - } - - protected void clearContainers() { - - containers.clear(); - } - - @Override - public int hashCode() { - - int hash = 7; - hash = 71 * hash + (int) (pageModelId ^ (pageModelId >>> 32)); - hash = 71 * hash + Objects.hashCode(uuid); - hash = 71 * hash + Objects.hashCode(name); - hash = 71 * hash + Objects.hashCode(title); - hash = 71 * hash + Objects.hashCode(description); - hash = 71 * hash + Objects.hashCode(type); - return hash; - } - - @Override - public boolean equals(final Object obj) { - - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof PageModel)) { - return false; - } - final PageModel other = (PageModel) obj; - if (!other.canEqual(this)) { - return false; - } - if (pageModelId != other.getPageModelId()) { - return false; - } - if (!Objects.equals(uuid, other.getUuid())) { - return false; - } - if (!Objects.equals(name, other.getName())) { - return false; - } - if (!Objects.equals(type, other.getType())) { - return false; - } - if (!Objects.equals(title, other.getTitle())) { - return false; - } - return Objects.equals(description, other.getDescription()); - } - - public boolean canEqual(final Object obj) { - - return obj instanceof PageModel; - } - - @Override - - public final String toString() { - - return toString(""); - - } - - public String toString(final String data) { - - return String.format("%s{ " - + "pageModelId = %d, " - + "uuid = %s, " - + "name = \"%s\", " - + "title = %s, " - + "description = %s, " - + "type = \"%s\"" - + " }", - super.toString(), - pageModelId, - uuid, - name, - Objects.toString(title), - Objects.toString(description), - type); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelComponentModel.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelComponentModel.java deleted file mode 100644 index e88269f55..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelComponentModel.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import com.arsdigita.bebop.Form; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.util.ResourceBundle; - -/** - * Used in the description of {@link CcmModule} to specify which - * {@link ComponentModel}s are provided by an module. - * - * @author Jens Pelzetter - */ -@Deprecated -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface PageModelComponentModel { - - /** - * Fully qualified name of a resource bundle providing the title and - * description of the {@link ComponentModel}. - * - * @return The fully qualified name of the {@link ResourceBundle} which - * provides the title and description of the {@link ComponentModel}. - */ - String descBundle() default ""; - - /** - * Key for the title of the {@link ComponentModel} in the - * {@link ResourceBundle} specified by {@link #descBundle()}. - * - * @return The key for the title of the {@link ComponentModel}. - */ - String titleKey() default "component_model_title"; - - /** - * Key for the description of the {@link ComponentModel} in the - * {@link ResourceBundle} specified by {@link #descBundle()}. - * - * @return The key for the description of the {@link ComponentModel}. - */ - String descKey() default "component_model_desc"; - - /** - * The class which provides the {@link ComponentModel}. - * - * @return The class which provides the {@link ComponentModel}. - */ - Class modelClass(); - - /** - * A (Bebop) form for editing the properties of an instance of the - * {@link ComponentModel}. - * - * @return A (Bebop) form for editing the {@code ComponentModel}. - */ - Class editor(); - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelManager.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelManager.java deleted file mode 100644 index 24329cd9a..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelManager.java +++ /dev/null @@ -1,609 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.core.CoreConstants; -import org.libreccm.core.UnexpectedErrorException; -import org.libreccm.modules.CcmModule; -import org.libreccm.modules.Module; -import org.libreccm.pagemodel.styles.CssProperty; -import org.libreccm.pagemodel.styles.MediaQuery; -import org.libreccm.pagemodel.styles.MediaRule; -import org.libreccm.pagemodel.styles.Rule; -import org.libreccm.pagemodel.styles.Styles; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; -import org.libreccm.web.CcmApplication; - -import javax.annotation.PostConstruct; -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.TypedQuery; -import javax.transaction.Transactional; - -import java.beans.BeanInfo; -import java.beans.IntrospectionException; -import java.beans.Introspector; -import java.beans.PropertyDescriptor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.ServiceLoader; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * Provides several methods for managing {@link PageModel}s. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class PageModelManager { - - private static final Logger LOGGER = LogManager.getLogger( - PageModelManager.class); - - @Inject - private EntityManager entityManager; - - @Inject - private ComponentModelRepository componentModelRepo; - - @Inject - private ContainerModelRepository containerModelRepo; - - @Inject - private ContainerModelManager containerModelManager; - - @Inject - private PageModelRepository pageModelRepo; - - private final Map components - = new HashMap<>(); - - /** - * Called by CDI after an instance of this class is created. Initialises the - * {@link #components} by retrieving the data about all available {@link - * ComponentModel}s. - */ - @PostConstruct - private void init() { - - LOGGER.debug("Initalising {}...", PageModelManager.class.getName()); - - final ServiceLoader modules = ServiceLoader.load( - CcmModule.class); - - for (CcmModule module : modules) { - final Module moduleData = module.getClass().getAnnotation( - Module.class); - - final PageModelComponentModel[] models = moduleData - .pageModelComponentModels(); - - for (PageModelComponentModel model : models) { - components.put(model.modelClass().getName(), - model); - } - } - LOGGER.debug("Initalised {}. Found {} ComponentModels.", - PageModelManager.class.getName(), - components.size()); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public PageModel createPageModel(final String name, - final CcmApplication application) { - - return createPageModel(name, application, ""); - } - - /** - * Creates a new {@link PageModel} for the provided application. The method - * tries to retrieve the appropriate application by using {@link - * PageModelRepository#findLiveByApplicationAndName(org.libreccm.web - * .CcmApplication, - * java.lang.String)}. Please note that this method will always return the - * draft version of the page model. - * - * @param name The name of the new page model. Must be unique for the - * application. - * @param application The application for which the {@link PageModel} is - * created. - * @param type Type of the page model. - * - * @return The new {@link PageModel}. - */ - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public PageModel createPageModel(final String name, - final CcmApplication application, - final String type) { - - Objects.requireNonNull(application, - "Can't create a page model for application " - + "null"); - Objects.requireNonNull(name, "Then name of a Pagemodel can't be null."); - if (name.isEmpty() - || name.matches("\\s*")) { - throw new IllegalArgumentException( - "The name of a PageModel can't be empty."); - } - - LOGGER.debug( - "Creating new PageModel with name \"{}\" for application \"{}\" " - + "and type \"{}\".", - name, - application.getPrimaryUrl(), - type); - - final long count = pageModelRepo.countLiveByApplicationAndName( - application, - name); - - if (count > 0) { - LOGGER.error("A page model with the name \"{}\" for the " - + "application \"{}\" already exists.", - name, - application.getPrimaryUrl()); - throw new IllegalArgumentException(String.format( - "A page model with the name \"%s\" for the application \"%s\" " - + "already exists.", - name, - application.getPrimaryUrl())); - } - - final PageModel pageModel = new PageModel(); - - pageModel.setName(name); - pageModel.setApplication(application); - pageModel.setType(type); - pageModel.setVersion(PageModelVersion.DRAFT); - - return pageModel; - } - - /** - * Retrieves the draft version of a {@link PageModel}. To invoke this method - * the current user needs a permission granting the {@link - * CoreConstants#PRIVILEGE_ADMIN} privilege. - * - * @param pageModel The {@link PageModel} for which the draft version is - * retrieved. - * - * @return The draft version of the provided {@link PageModel}. - */ - @AuthorizationRequired - @Transactional(Transactional.TxType.REQUIRED) - public PageModel getDraftVersion( - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - final PageModel pageModel) { - - if (pageModel == null) { - throw new IllegalArgumentException( - "Can't get draft version for page model null."); - } - - final TypedQuery query = entityManager.createNamedQuery( - "PageModel.findDraftVersion", PageModel.class); - query.setParameter("uuid", pageModel.getModelUuid()); - - return query.getSingleResult(); - } - - /** - * Checks if a {@link PageModel} has a live version. - * - * @param pageModel The {@link PageModel} to check for a live version. - * - * @return {@code true} if there is a live version for the provided {@link - * PageModel}, {@code false} otherwise. - */ - @Transactional(Transactional.TxType.REQUIRED) - public boolean isLive(final PageModel pageModel) { - - final TypedQuery query = entityManager.createNamedQuery( - "PageModel.hasLiveVersion", Boolean.class); - query.setParameter("uuid", pageModel.getModelUuid()); - - return query.getSingleResult(); - } - - /** - * Retrieves the live version of a {@link PageModel}. This method does not - * require any privileges. - * - * @param pageModel The {@link PageModel} of which the live version is - * retrieved. - * - * @return An {@link Optional} containing the live version of the provided - * {@link PageModel} if there is a live version. Otherwise an empty - * {@link Optional} is returned. - */ - @Transactional(Transactional.TxType.REQUIRED) - public Optional getLiveVersion(final PageModel pageModel) { - - if (isLive(pageModel)) { - final TypedQuery query = entityManager.createNamedQuery( - "PageModel.findLiveVersion", - PageModel.class); - query.setParameter("uuid", pageModel.getModelUuid()); - return Optional.of(query.getSingleResult()); - } else { - return Optional.empty(); - } - } - - /** - * Publishes the draft version of a {@link PageModel}. If there is already a - * live version of the provided {@link PageModel} the live version is - * updated. If no live version exists a new live version is created. - * - * @param pageModel The {@link PageModel} to publish. - * - * @return The live version of the provided {@link PageModel}. - */ - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - @Transactional(Transactional.TxType.REQUIRED) - public PageModel publish(final PageModel pageModel) { - - Objects.requireNonNull(pageModel, "Can't publish PageModel null."); - - LOGGER.debug("Publishing PageModel \"{}\"...", pageModel.getName()); - - final PageModel draftModel = getDraftVersion(pageModel); - final PageModel liveModel; - - final boolean isLive; - if (isLive(pageModel)) { - isLive = true; - liveModel = getLiveVersion(draftModel).get(); - } else { - liveModel = new PageModel(); - isLive = false; - } - - liveModel.setName(draftModel.getName()); - liveModel.setVersion(PageModelVersion.LIVE); - liveModel.setModelUuid(draftModel.getModelUuid()); - - for (Map.Entry entry : draftModel.getTitle().getValues() - .entrySet()) { - liveModel.getTitle().putValue(entry.getKey(), entry.getValue()); - } - - for (Map.Entry entry : draftModel.getDescription() - .getValues().entrySet()) { - liveModel.getDescription().putValue(entry.getKey(), - entry.getValue()); - } - - liveModel.setApplication(draftModel.getApplication()); - liveModel.setType(draftModel.getType()); - - LOGGER.debug("Publishing ContainerModels of PageModel \"{}\"...", - draftModel.getName()); - liveModel.clearContainers(); - - draftModel - .getContainers() - .stream() - .map(this::publishContainerModel) - .forEach(liveContainerModel -> addContainerModel(liveModel, - liveContainerModel)); - liveModel.setLastModified(new Date()); - - pageModelRepo.save(liveModel); - //if (isLive) { - // entityManager.merge(liveModel); - //} else { - // entityManager.persist(liveModel); - //} - - LOGGER.debug("Successfully published PageModel \"{}\".", - liveModel.getName()); - return liveModel; - } - - private ContainerModel publishContainerModel( - final ContainerModel draftModel) { - - Objects.requireNonNull(draftModel); - - final ContainerModel liveModel = new ContainerModel(); - liveModel.setKey(draftModel.getKey()); - liveModel.setContainerUuid(draftModel.getContainerUuid()); - - final Styles draftStyles = draftModel.getStyles(); - if (draftStyles != null) { - final Styles liveStyles = new Styles(); - liveStyles.setStyleName(draftStyles.getStyleName()); - liveStyles.setRules(draftStyles - .getRules() - .stream() - .map(this::publishRule) - .collect(Collectors.toList())); - liveStyles.setMediaRules(draftStyles - .getMediaRules() - .stream() - .map(this::publishMediaRule) - .collect(Collectors.toList())); - } - - draftModel - .getComponents() - .stream() - .map(this::publishComponentModel) - .forEach( - liveComponentModel -> containerModelManager - .addComponentModel(liveModel, liveComponentModel)); - - return liveModel; - } - - private MediaRule publishMediaRule(final MediaRule draftMediaRule) { - - Objects.requireNonNull(draftMediaRule); - - final MediaRule liveMediaRule = new MediaRule(); - final MediaQuery liveMediaQuery = new MediaQuery(); - liveMediaQuery - .setMaxWidth(draftMediaRule.getMediaQuery().getMaxWidth()); - liveMediaQuery - .setMediaType(draftMediaRule.getMediaQuery().getMediaType()); - liveMediaQuery - .setMinWidth(draftMediaRule.getMediaQuery().getMinWidth()); - - liveMediaRule.setRules(draftMediaRule - .getRules() - .stream() - .map(this::publishRule) - .collect(Collectors.toList())); - - return liveMediaRule; - } - - private Rule publishRule(final Rule draftRule) { - - Objects.requireNonNull(draftRule); - - final Rule liveRule = new Rule(); - liveRule.setSelector(draftRule.getSelector()); - liveRule.setProperties(draftRule - .getProperties() - .stream() - .map(this::publishCssProperty) - .collect(Collectors.toList())); - - return liveRule; - } - - private CssProperty publishCssProperty(final CssProperty draftProperty) { - - Objects.requireNonNull(draftProperty); - - final CssProperty liveProperty = new CssProperty(); - liveProperty.setName(draftProperty.getName()); - liveProperty.setValue(draftProperty.getValue()); - - return liveProperty; - } - - /** - * Helper method for coping the {@link ComponentModel}s from the draft - * version to the live version. - * - * @param draftModel The draft version of the {@link ComponentModel} to copy - * to the live version of its {@link PageModel}. - * - * @return The live version of the {@link ComponentModel}. - */ - @SuppressWarnings("unchecked") - private ComponentModel publishComponentModel(final ComponentModel draftModel) { - - Objects.requireNonNull(draftModel, - "Can't publish ComponentModel null."); - - LOGGER.debug("Publishing ComponentModel \"{}\"...", - draftModel.getKey()); - - final Class clazz = draftModel.getClass(); - - final ComponentModel liveModel; - try { - liveModel = clazz.newInstance(); - } catch (InstantiationException | IllegalAccessException ex) { - throw new UnexpectedErrorException(ex); - } - - liveModel.setModelUuid(draftModel.getModelUuid()); - - final BeanInfo beanInfo; - try { - beanInfo = Introspector.getBeanInfo(clazz); - } catch (IntrospectionException ex) { - throw new UnexpectedErrorException(ex); - } - - for (final PropertyDescriptor propertyDescriptor : beanInfo. - getPropertyDescriptors()) { - - LOGGER.debug( - "Publishing property \"{}\" of ComponentModel \"{}\"...", - propertyDescriptor.getName(), - draftModel.getKey()); - - final Class propType = propertyDescriptor.getPropertyType(); - final Method readMethod = propertyDescriptor.getReadMethod(); - final Method writeMethod = propertyDescriptor.getWriteMethod(); - - if (propertyIsExcluded(propertyDescriptor.getName())) { - continue; - } - - if (writeMethod == null) { - continue; - } - - if (propType != null - && propType.isAssignableFrom(List.class)) { - - try { - final List source = (List) readMethod - .invoke(draftModel); - final List target = new ArrayList<>(); - target.addAll(source); - writeMethod.invoke(draftModel, target); - } catch (IllegalAccessException - | IllegalArgumentException - | InvocationTargetException ex) { - throw new UnexpectedErrorException(ex); - } - - } else if (propType != null - && propType.isAssignableFrom(Map.class)) { - - final Map source; - final Map target; - - try { - source - = (Map) readMethod.invoke(draftModel); - target = (Map) readMethod.invoke(liveModel); - } catch (IllegalAccessException - | IllegalArgumentException - | InvocationTargetException ex) { - throw new UnexpectedErrorException(ex); - } - - source.forEach((key, value) -> target.put(key, value)); - - } else if (propType != null - && propType.isAssignableFrom(Set.class)) { - - final Set source; - final Set target; - - try { - source = (Set) readMethod.invoke(draftModel); - target = (Set) readMethod.invoke(liveModel); - } catch (IllegalAccessException - | IllegalArgumentException - | InvocationTargetException ex) { - throw new UnexpectedErrorException(ex); - } - - target.addAll(source); - } else { - final Object value; - try { - value = readMethod.invoke(draftModel); - writeMethod.invoke(liveModel, value); - } catch (IllegalAccessException - | IllegalArgumentException - | InvocationTargetException ex) { - throw new UnexpectedErrorException(ex); - } - } - } - - componentModelRepo.save(liveModel); - - LOGGER.debug("Successfully published ComponentModel \"{}\".", - liveModel.getKey()); - return liveModel; - } - - /** - * Helper method to determine if a property is excluded from the publishing - * process. - * - * @param name The name of the property. - * - * @return {@code true} if the property is excluded from the publishing - * process, {@link false} if not. - */ - private boolean propertyIsExcluded(final String name) { - - final String[] excluded = new String[]{ - "class", - "uuid", - "modelUuid" - }; - - boolean result = false; - for (final String current : excluded) { - if (current.equals(name)) { - result = true; - break; - } - } - - return result; - } - - @Transactional(Transactional.TxType.REQUIRED) - public void addContainerModel(final PageModel pageModel, - final ContainerModel container) { - - Objects.requireNonNull(pageModel); - Objects.requireNonNull(container); - - pageModel.addContainer(container); - container.setPageModel(pageModel); - - containerModelRepo.save(container); - pageModelRepo.save(pageModel); - } - - @Transactional(Transactional.TxType.REQUIRED) - public void removeContainerModel(final PageModel pageModel, - final ContainerModel container) { - - Objects.requireNonNull(pageModel); - Objects.requireNonNull(container); - - if (!container.getComponents().isEmpty()) { - - throw new IllegalArgumentException("Container is not empty."); - } - - pageModel.removeContainer(container); - container.setPageModel(null); - - pageModelRepo.save(pageModel); - containerModelRepo.delete(container); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelRepository.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelRepository.java deleted file mode 100644 index d98c947d9..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelRepository.java +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import org.libreccm.core.AbstractEntityRepository; -import org.libreccm.core.CoreConstants; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; -import org.libreccm.web.CcmApplication; - -import javax.enterprise.context.RequestScoped; -import javax.persistence.TypedQuery; -import javax.transaction.Transactional; - -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; - -/** - * Repository for {@link PageModel}s. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class PageModelRepository extends AbstractEntityRepository { - - private static final long serialVersionUID = -7240418542790568571L; - - @Override - public Class getEntityClass() { - return PageModel.class; - } - - @Override - public String getIdAttributeName() { - return "pageModelId"; - } - - @Override - public Long getIdOfEntity(final PageModel entity) { - return entity.getPageModelId(); - } - - @Override - public boolean isNew(final PageModel pageModel) { - - Objects.requireNonNull(pageModel); - - return pageModel.getPageModelId() == 0; - } - - /** - * Sets the UUID field of a new {@link PageModel}. - * - * @param pageModel The new {@link PageModel}. - */ - @Override - public void initNewEntity(final PageModel pageModel) { - - Objects.requireNonNull(pageModel); - - final String uuid = UUID.randomUUID().toString(); - - pageModel.setUuid(uuid); - if (pageModel.getModelUuid() == null - || pageModel.getModelUuid().isEmpty()) { - pageModel.setModelUuid(uuid); - } - } - - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - @Transactional(Transactional.TxType.REQUIRED) - @Override - public void save(final PageModel pageModel) { - - pageModel.setLastModified(new Date()); - - super.save(pageModel); - } - - /** - * Find all draft versions of {@link PageModel}s. - * - * @return A list with all draft versions of {@link PageModel}s. - */ - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - @Transactional(Transactional.TxType.REQUIRED) - public List findAllDraftModels() { - - final TypedQuery query = getEntityManager() - .createNamedQuery("PageModel.findAllDraftModels", PageModel.class); - - return query.getResultList(); - } - - /** - * Find all live versions of {@link PageModel}s. - * - * @return A list with all draft versions of {@link PageModel}s. - */ - @Transactional(Transactional.TxType.REQUIRED) - public List findAllLiveModels() { - - final TypedQuery query = getEntityManager() - .createNamedQuery("PageModel.findAllLiveModels", PageModel.class); - - return query.getResultList(); - } - - /** - * Finds the draft versions of all {@link PageModel}s for the provided - * application. - * - * @param application The application for which the {@link PageModel}s are - * retrieved. - * - * @return A list of the {@link PageModel}s defined for the provided - * {@code application}. - */ - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public List findDraftByApplication( - final CcmApplication application) { - - Objects.requireNonNull(application, - "Can't find page models for application null"); - - final TypedQuery query = getEntityManager() - .createNamedQuery("PageModel.findDraftByApplication", - PageModel.class); - query.setParameter("application", application); - - return query.getResultList(); - } - - /** - * Counts the {@link PageModel}s (draft version) defined for a application. - * - * @param application The application for which the {@link PageModels}s are - * counted. - * - * @return The number of {@link PageModel}s defined for the provided - * {@code application}. - */ - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public long countByApplication(final CcmApplication application) { - - Objects.requireNonNull(application, - "Can't count page models for application null"); - - final TypedQuery query = getEntityManager().createNamedQuery( - "PageModel.countDraftByApplication", Long.class); - query.setParameter("application", application); - - return query.getSingleResult(); - } - - /** - * Finds a {@link PageModel} (draft version) by the application and its - * {@code name}. - * - * @param application The application for which the {@link PageModel} is - * defined. - * @param name The name of the {@link PageModel}. - * - * @return An {@link Optional} containing the {@link PageModel} for the - * provided {@code application} with the provided {@code name}. If - * there is no {@link PageModel} matching the criteria an empty - * {@link Optional} is returned. - */ - public Optional findDraftByApplicationAndName( - final CcmApplication application, - final String name) { - - Objects.requireNonNull(application, - "Can't find page models for application null"); - Objects.requireNonNull(name, - "The name of a page model can't be null or empty."); - - if (name.isEmpty() || name.matches("\\s*")) { - throw new IllegalArgumentException( - "The name of a page model can't be null or empty."); - } - - final long count = countDraftByApplicationAndName(application, name); - if (count == 0) { - return Optional.empty(); - } - - final TypedQuery query = getEntityManager().createNamedQuery( - "PageModel.findDraftByApplicationAndName", PageModel.class); - query.setParameter("application", application); - query.setParameter("name", name); - - return Optional.of(query.getSingleResult()); - } - - /** - * Counts the number of {@link PageModel} (draft version) defined for the - * provided application with the provided name. - * - * @param application The application for which the {@link PageModel} is - * defined. - * @param name The name of the {@link PageModel}. - * - * @return The number of {@link PageModel}s matching the criteria. Should be - * 0 or 1. - */ - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public long countDraftByApplicationAndName(final CcmApplication application, - final String name) { - - Objects.requireNonNull(application, - "Can't find page models for application null"); - Objects.requireNonNull(name, - "The name of a page model can't be null or empty."); - - if (name.isEmpty() || name.matches("\\s*")) { - throw new IllegalArgumentException( - "The name of a page model can't be null or empty."); - } - - final TypedQuery query = getEntityManager().createNamedQuery( - "PageModel.countDraftByApplicationAndName", Long.class); - query.setParameter("application", application); - query.setParameter("name", name); - - return query.getSingleResult(); - } - - /** - * Finds the live versions of all {@link PageModel}s for the provided - * application. - * - * @param application The application for which the {@link PageModel}s are - * retrieved. - * - * @return A list of the {@link PageModel}s defined for the provided - * {@code application}. - */ - @Transactional(Transactional.TxType.REQUIRED) - public List findLiveByApplication( - final CcmApplication application) { - - Objects.requireNonNull(application, - "Can't find page models for application null"); - - final TypedQuery query = getEntityManager() - .createNamedQuery("PageModel.findLiveByApplication", - PageModel.class); - query.setParameter("application", application); - - return query.getResultList(); - } - - /** - * Counts the {@link PageModel}s (live version) defined for a application. - * - * @param application The application for which the {@link PageModels}s are - * counted. - * - * @return The number of {@link PageModel}s defined for the provided - * {@code application}. - */ - @Transactional(Transactional.TxType.REQUIRED) - public long countLiveByApplication(final CcmApplication application) { - - Objects.requireNonNull(application, - "Can't count page models for application null"); - - final TypedQuery query = getEntityManager().createNamedQuery( - "PageModel.countLiveByApplication", Long.class); - query.setParameter("application", application); - - return query.getSingleResult(); - } - - /** - * Finds a {@link PageModel} (live version) by the application and its - * {@code name}. - * - * @param application The application for which the {@link PageModel} is - * defined. - * @param name The name of the {@link PageModel}. - * - * @return An {@link Optional} containing the {@link PageModel} for the - * provided {@code application} with the provided {@code name}. If - * there is no {@link PageModel} matching the criteria an empty - * {@link Optional} is returned. - */ - @Transactional(Transactional.TxType.REQUIRED) - public Optional findLiveByApplicationAndName( - final CcmApplication application, - final String name) { - - Objects.requireNonNull(application, - "Can't find page models for application null"); - Objects.requireNonNull(name, - "The name of a page model can't be null or empty."); - - if (name.isEmpty() || name.matches("\\s*")) { - throw new IllegalArgumentException( - "The name of a page model can't be null or empty."); - } - - final long count = countLiveByApplicationAndName(application, name); - if (count == 0) { - return Optional.empty(); - } - - final TypedQuery query = getEntityManager().createNamedQuery( - "PageModel.findLiveByApplicationAndName", PageModel.class); - query.setParameter("application", application); - query.setParameter("name", name); - - return Optional.of(query.getSingleResult()); - } - - /** - * Counts the number of {@link PageModel} (live version) defined for the - * provided application with the provided name. - * - * @param application The application for which the {@link PageModel} is - * defined. - * @param name The name of the {@link PageModel}. - * - * @return The number of {@link PageModel}s matching the criteria. Should be - * 0 or 1. - */ - @Transactional(Transactional.TxType.REQUIRED) - public long countLiveByApplicationAndName(final CcmApplication application, - final String name) { - - Objects.requireNonNull(application, - "Can't find page models for application null"); - Objects.requireNonNull(name, - "The name of a page model can't be null or empty."); - - if (name.isEmpty() || name.matches("\\s*")) { - throw new IllegalArgumentException( - "The name of a page model can't be null or empty."); - } - - final TypedQuery query = getEntityManager().createNamedQuery( - "PageModel.countLiveByApplicationAndName", Long.class); - query.setParameter("application", application); - query.setParameter("name", name); - - return query.getSingleResult(); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelVersion.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelVersion.java deleted file mode 100644 index c03755a3e..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageModelVersion.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -/** - * Enumeration for the possible values for the version of a {@link PageModel}. - * - * @author Jens Pelzetter - */ -@Deprecated -public enum PageModelVersion { - - DRAFT, - LIVE - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/PageRenderer.java b/ccm-core/src/main/java/org/libreccm/pagemodel/PageRenderer.java deleted file mode 100644 index 345b42e3d..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/PageRenderer.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import java.util.Map; - -/** - * Interface for page renderers. A page renderer is invoked to render a page of - * specific type. An implementation should be a CDI bean which is annotated with - * the qualifier {@link RendersPageModelType}. - * - * An implementation should add all default components which have to be present - * in page. The {@link PageModel} should only specify - * additional components. - * - * - * @author Jens Pelzetter - */ -@Deprecated -public interface PageRenderer { - - /** - * Render a page with the default components for a application. An - * implementation of {@link #renderPage(org.libreccm.pagemodel.PageModel)} - * should use this method for creating the default page. - * - * The result of the rendering process is a map with the values of the - * {@link ComponentModel#key} property as key and the result of rendering - * the component as value. - * - * @param parameters Parameters provided by application which wants to - * render a {@link PageModel}. The parameters are passed - * the {@link ComponentRenderer}s. - * - * @return A page with the default components. - */ - Map renderPage(Map parameters); - - /** - * Render a page using the provided {@link PageModel}. - * Implementations should call the implementation of {@link #renderPage()} - * for creating the basic page with the default components. - * - * The result of the rendering process is a map with the values of the - * {@link ComponentModel#key} property as key and the result of rendering - * the component as value. - * - * - * @param pageModel The {@link PageModel} from which the page is generated. - * @param parameters Parameters provided by application which wants to - * render a {@link PageModel}. The parameters are passed - * the {@link ComponentRenderer}s. - * - * @return The page generated from the provided {@link PageModel}. - */ - Map renderPage(PageModel pageModel, - Map parameters); - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/RendersComponent.java b/ccm-core/src/main/java/org/libreccm/pagemodel/RendersComponent.java deleted file mode 100644 index 0a6c242a2..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/RendersComponent.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2016 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.libreccm.pagemodel; - -import javax.inject.Qualifier; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Specifies which type of components a {@link ComponentRenderer} implementation - * renders. - * - * @author Jens Pelzetter - */ -@Deprecated -@Qualifier -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface RendersComponent { - - Class componentModel(); - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/RendersPageModelType.java b/ccm-core/src/main/java/org/libreccm/pagemodel/RendersPageModelType.java deleted file mode 100644 index af5efb785..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/RendersPageModelType.java +++ /dev/null @@ -1,42 +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.libreccm.pagemodel; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import javax.inject.Qualifier; - -/** - * Specifies which type of {@link PageModel} an implementation of - * {@link PageRenderer} can render. - * - * @author Jens Pelzetter - */ -@Deprecated -@Qualifier -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface RendersPageModelType { - - String value(); - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/package-info.java b/ccm-core/src/main/java/org/libreccm/pagemodel/package-info.java deleted file mode 100644 index 676b0e037..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/package-info.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2016 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 - */ -/** - *

- * The {@code pagemodel} packages provides an abstraction layer between the data - * model of page and its generating components. This layer replaces the JSP - * templates which were used in previous versions of CCM for this purpose. - *

- *

- * The Page Model system allows it to specify which components are used on a - * page and therefore which information is displayed on a page. It is intended - * to be used for public pages (like the item page of a content item category - * page in ccm-cms module. The Page Model system uses data containers which are - * read by a renderer class. - *

- *

- * The central interface is the {@link org.libreccm.pagemodel.PageRenderer} - * interface. An implementation of this interface will take a - * {@link org.libreccm.pagemodel.PageModel} and process it and create a page - * from it using the view technology supported by the implementation. - * {@code PageRenderer}s are CDI beans. Implementations can be retrieved using - * the - * {@link org.libreccm.pagemodel.PageRendererManager#findPageRenderer(String, Class)} - * method. - *

- */ -package org.libreccm.pagemodel; diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/Components.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/Components.java deleted file mode 100644 index 883dd9896..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/Components.java +++ /dev/null @@ -1,628 +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 org.libreccm.pagemodel.rs; - -import org.libreccm.core.CoreConstants; -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.ComponentModelJsonConverter; -import org.libreccm.pagemodel.ComponentModelRepository; -import org.libreccm.pagemodel.ContainerModel; -import org.libreccm.pagemodel.ContainerModelManager; -import org.libreccm.pagemodel.ConvertsComponentModel; -import org.libreccm.pagemodel.PageModel; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; -import org.libreccm.web.CcmApplication; - -import java.beans.PropertyDescriptor; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Any; -import javax.enterprise.inject.Instance; -import javax.enterprise.util.AnnotationLiteral; -import javax.inject.Inject; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObject; -import javax.json.JsonValue; -import javax.transaction.Transactional; -import javax.ws.rs.BadRequestException; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; - -/** - * Provides RESTful endpoints for retrieving, creating, updating and deleting - * {@link ComponentModel}s of a {@link ContainerModel}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@Path("/") -public class Components { - - @Inject - private ComponentModelRepository componentRepo; - - @Inject - private ContainerModelManager containerManager; - - @Inject - private PageModelsController controller; - - @Inject - @Any - private Instance jsonConverters; - - /** - * Retrieve all {@link ComponentModel} of a {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * - * @return A JSON array containing the data of all {@link ComponentModel} of - * the {@link ContainerModel}. - */ - @GET - @Path(PageModelsApp.COMPONENTS_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonArray getComponents( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); - container - .getComponents() - .stream() - .map(component -> mapComponentModelToJson(component)) - .forEach(arrayBuilder::add); - - return arrayBuilder.build(); - } - - /** - * Retrieves a specific {@link ComponentModel}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param componentKey The key of the {@link ComponentModel}. - * - * @return A JSON object containing the data of the {@link ComponentModel}. - */ - @GET - @Path(PageModelsApp.COMPONENT_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject getComponent( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(PageModelsApp.COMPONENT_KEY) final String componentKey) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(componentKey); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - final ComponentModel component = controller - .findComponentModel(app, pageModel, container, componentKey); - - return mapComponentModelToJson(component); - } - - /** - * Creates or updates a {@link ComponentModel}. - * - * If a {@link ComponentModel} with provided {@code componentKey} already - * exists in the container identified by {@code appPath}, - * {@code pageModelName} and {@code containerKey} the {@link ComponentModel} - * is updated with the data from {@code componentModelData}. - * - * Otherwise a new {@link ComponentModel} is created using the data from - * {@code componentModelData}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param componentKey The key of the {@link ComponentModel} to create - * or update. - * @param componentModelData The data for creating or updating the - * {@link ComponentModel}. - * - * @return The new or updated {@link ComponentModel}. - */ - @PUT - @Path(PageModelsApp.COMPONENT_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject putComponent( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(PageModelsApp.COMPONENT_KEY) final String componentKey, - final JsonObject componentModelData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(componentKey); - Objects.requireNonNull(componentModelData); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - final Optional result = container - .getComponents() - .stream() - .filter(c -> c.getKey().equals(componentKey)) - .findAny(); - - final ComponentModel componentModel; - if (result.isPresent()) { - - componentModel = result.get(); - - } else { - - componentModel = createComponentModel(componentModelData); - componentModel.setKey(componentKey); - containerManager.addComponentModel(container, componentModel); - } - - setComponentPropertiesFromJson(componentModelData, componentModel); - - componentRepo.save(componentModel); - - final ComponentModel saved = controller - .findComponentModel(app, pageModel, container, componentKey); - return mapComponentModelToJson(saved); - } - - /** - * Deletes a {@link ComponentModel}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param componentKey The key of the {@link ComponentModel} to delete. - * - */ - @DELETE - @Path(PageModelsApp.COMPONENT_PATH) - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteComponent( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(PageModelsApp.COMPONENT_KEY) final String componentKey) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(componentKey); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - final ComponentModel component = controller - .findComponentModel(app, pageModel, container, componentKey); - - containerManager.removeComponentModel(container, component); - } - - /** - * Helper method for mapping a {@link ComponentModel} to JSON. - * - * @param componentModel The {@link ComponentModel} to map. - * - * @return The JSON representation of the - * {@link ComponentModel} {@code componentModel}. - */ - private JsonObject mapComponentModelToJson( - final ComponentModel componentModel) { - - final Class clazz = Objects - .requireNonNull(componentModel) - .getClass(); - - final ComponentModelJsonConverter jsonConverter - = findJsonConverter(clazz) - .orElseThrow(() -> new WebApplicationException(String.format( - "No JSON converter available for component model \"%s\".", - clazz.getName()))); - - return jsonConverter.toJson(componentModel); - -// Objects.requireNonNull(componentModel); -// -// final JsonObjectBuilder objectBuilder = Json -// .createObjectBuilder() -// .add("componentModelId", -// Long.toString(componentModel.getComponentModelId())) -// .add("uuid", componentModel.getUuid()) -// .add("modelUuid", componentModel.getModelUuid()) -// .add("key", componentModel.getKey()) -// .add("type", componentModel.getClass().getName()); -// -// if (componentModel.getIdAttribute() != null) { -// objectBuilder.add("idAttribute", componentModel.getIdAttribute()); -// } -// -// if (componentModel.getClassAttribute() != null) { -// objectBuilder.add("classAttribute", -// componentModel.getClassAttribute()); -// } -// -// if (componentModel.getStyleAttribute() != null) { -// objectBuilder.add("styleAttribute", -// componentModel.getStyleAttribute()); -// } -// -// final Class clazz = componentModel.getClass(); -// final BeanInfo beanInfo; -// try { -// beanInfo = Introspector.getBeanInfo(clazz); -// } catch (IntrospectionException ex) { -// throw new WebApplicationException(ex); -// } -// -// for (final PropertyDescriptor propertyDescriptor -// : beanInfo.getPropertyDescriptors()) { -// -// final Method readMethod = propertyDescriptor.getReadMethod(); -// final Object value; -// try { -// value = readMethod.invoke(componentModel); -// } catch (IllegalAccessException -// | InvocationTargetException ex) { -// throw new WebApplicationException(ex); -// } -// -// final String valueStr; -// if (value == null) { -// valueStr = ""; -// } else { -// valueStr = value.toString(); -// } -// -// objectBuilder.add(propertyDescriptor.getName(), valueStr); -// -// } -// -// return objectBuilder.build(); - } - - /** - * Creates a new {@link ComponentModel} instance. - * - * Uses reflection and the value of {@code type} property from the JSON - * {@code data} to determine the correct class. - * - * @param data The data from which the new {@link ComponentModel} is - * created. - * - * @return The new {@link ComponentModel}. - */ - private ComponentModel createComponentModel(final JsonObject data) { - - Objects.requireNonNull(data); - - if (!data.containsKey("type")) { - throw new BadRequestException("The JSON data for creating the " - + "component has no value for the type of the component to " - + "create."); - } - - final String type = data.getString("type"); - final Class clazz = findComponentModelClass( - type); - - final ComponentModel componentModel; - try { - componentModel = clazz.getConstructor().newInstance(); - } catch (IllegalAccessException - | InstantiationException - | InvocationTargetException - | NoSuchMethodException ex) { - throw new WebApplicationException(ex); - } - - return componentModel; - } - - /** - * Helper method for finding the correct subclass of {@link ComponentModel} - * using the fully qualified name the class. - * - * @param type The fully qualified name of the subclass of - * {@link ComponentModel}. - * - * @return The subclass of {@link ComponentModel}. - * - * @throws BadRequestException If there is no subclass of - * {@link ComponentModel} with the fully - * qualified name provided by the {@code type} - * parameter. - */ - @SuppressWarnings("unchecked") - private Class findComponentModelClass( - final String type) { - - Objects.requireNonNull(type);; - - try { - final Class clazz = Class.forName(type); - - if (ComponentModel.class.isAssignableFrom(clazz)) { - return (Class) clazz; - } else { - throw new BadRequestException(String.format( - "The type \"%s\" is not a subclass of \"%s\".", - type, - ComponentModel.class.getName())); - } - } catch (ClassNotFoundException ex) { - throw new BadRequestException(String.format( - "The component model type \"%s\" " - + "does not exist.", - type)); - } - } - - /** - * Helper method for setting the properties of a {@link ComponentModel} from - * the JSON data. - * - * @param data The JSON data. - * @param componentModel The {@link ComponentModel}. - */ - private void setComponentPropertiesFromJson( - final JsonObject data, - final ComponentModel componentModel) { - - final Class clazz = Objects - .requireNonNull(componentModel) - .getClass(); - - final ComponentModelJsonConverter jsonConverter - = findJsonConverter(clazz) - .orElseThrow(() -> new WebApplicationException(String.format( - "No JSON converter available for component model \"%s\".", - clazz.getName()))); - - jsonConverter.fromJson(data, componentModel); - -// final BeanInfo beanInfo; -// try { -// beanInfo = Introspector.getBeanInfo(componentModel.getClass()); -// } catch (IntrospectionException ex) { -// throw new WebApplicationException(ex); -// } -// -// Arrays -// .stream(beanInfo.getPropertyDescriptors()) -// .forEach( -// propertyDesc -> setComponentPropertyFromJson(componentModel, -// propertyDesc, -// data)); - } - - /** - * Helper emthod for setting a property of a {@link ComponentModel} using a - * value from JSON data. - * - * @param componentModel The {@link ComponentModel} - * @param propertyDesc The {@link PropertyDescriptor} for the property to - * set. - * @param data The JSON data containing the new value of the - * property. - */ - private void setComponentPropertyFromJson( - final ComponentModel componentModel, - final PropertyDescriptor propertyDesc, - final JsonObject data) { - - // Ignore key and type (handled by other methods). - if ("key".equals(propertyDesc.getName()) - || "type".equals(propertyDesc.getName())) { - - return; - } - - if (data.containsKey(propertyDesc.getName())) { - - final Method writeMethod = propertyDesc.getWriteMethod(); - final Class propertyType = propertyDesc.getPropertyType(); - - if (writeMethod != null) { - try { - -// final String value = data.getString(propertyDesc.getName()); - final JsonValue value = data.get(propertyDesc.getName()); -// final JsonValue.ValueType valueType = value.getValueType(); - - if (propertyType == Boolean.TYPE) { - writeMethod.invoke( - componentModel, - Boolean.parseBoolean(value.toString())); - } else if (propertyType == Double.TYPE) { - writeMethod.invoke( - componentModel, - Double.parseDouble(value.toString())); - } else if (propertyType == Float.TYPE) { - writeMethod.invoke(componentModel, - Float.parseFloat(value.toString())); - } else if (propertyType == Integer.TYPE) { - writeMethod.invoke(componentModel, - Integer.parseInt(value.toString())); - } else if (propertyType == Long.TYPE) { - writeMethod.invoke(componentModel, - Long.parseLong(value.toString())); - } else if (propertyType == String.class) { - writeMethod.invoke(componentModel, value.toString()); - } else if (propertyType == List.class) { - - final JsonValue valueObj = data - .get(propertyDesc.getName()); - if (valueObj.getValueType() - == JsonValue.ValueType.ARRAY) { - - final JsonArray dataArray = data - .getJsonArray(propertyDesc.getName()); - final List values = dataArray - .stream() - .map(jsonValue -> jsonValue.toString()) - .collect(Collectors.toList()); - writeMethod.invoke(componentModel, values); - } else { - - String valueStr = value.toString(); - if (valueStr.startsWith("[")) { - valueStr = valueStr.substring(1); - } - - if (valueStr.endsWith("]")) { - valueStr = valueStr - .substring(valueStr.length() - 1); - } - - final String[] tokens = valueStr.split(","); - - final List values = Arrays - .stream(tokens) - .map(token -> token.trim()) - .collect(Collectors.toList()); - writeMethod.invoke(componentModel, values); - } - } else { - throw new IllegalArgumentException( - "Unsupported property type."); - } - - } catch (IllegalAccessException - | InvocationTargetException ex) { - throw new WebApplicationException(ex); - } - } - } - } - - private Optional - findJsonConverter( - final Class componentModelClass) { - - final ConvertsComponentModelLiteral literal - = new ConvertsComponentModelLiteral( - componentModelClass); - final Instance instance = jsonConverters - .select(literal); - if (instance.isUnsatisfied()) { - return Optional.empty(); - } else if (instance.isAmbiguous()) { - throw new IllegalStateException(String.format( - "Multiple JSONConverter for \"%s\".", - componentModelClass.getName())); - } else { - final Iterator iterator = instance - .iterator(); - @SuppressWarnings("unchecked") - final ComponentModelJsonConverter converter = iterator.next(); - - return Optional.of(converter); - } - } - - private static class ConvertsComponentModelLiteral - extends AnnotationLiteral - implements ConvertsComponentModel { - - private static final long serialVersionUID = 1L; - - private final Class componentModel; - - public ConvertsComponentModelLiteral( - final Class componentModel) { - - this.componentModel = componentModel; - } - - @Override - public Class componentModel() { - return componentModel; - } - - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/Containers.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/Containers.java deleted file mode 100644 index 7a1c029fb..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/Containers.java +++ /dev/null @@ -1,253 +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 org.libreccm.pagemodel.rs; - -import org.libreccm.core.CoreConstants; -import org.libreccm.pagemodel.ContainerModel; -import org.libreccm.pagemodel.ContainerModelRepository; -import org.libreccm.pagemodel.PageModel; -import org.libreccm.pagemodel.PageModelManager; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; -import org.libreccm.web.CcmApplication; - -import java.util.Optional; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObject; -import javax.transaction.Transactional; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; - -/** - * Provides RESTful endpoints for managing the {@link ContainerModel}s of a - * {@link PageModel} - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@Path("/") -public class Containers { - - @Inject - private PageModelsController controller; - - @Inject - private ContainerModelRepository containerModelRepo; - - @Inject - private PageModelManager pageModelManager; - - /** - * Retrieves all {@link ContainerModel}s of a {@link PageModel}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} of which the - * containers are retrieved. - * - * @return A JSON array containing the data of all {@link ContainerModel}s - * of the {@link PageModel} identified by {@code pageModelName} of - * the {@link CcmApplication} with the primary URL {@code appPath}. - */ - @GET - @Path(PageModelsApp.CONTAINERS_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonArray getContainers( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName) { - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); - pageModel - .getContainers() - .stream() - .map(containerModel -> mapContainerModelToJson(containerModel)) - .forEach(arrayBuilder::add); - - return arrayBuilder.build(); - } - - /** - * Retrieve a specific {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The value of the {@link ContainerModel#key} property - * of the {@link ContainerModel} to retrieve. - * - * @return A JSON object containing the data of the {@link PageModel}. - */ - @GET - @Path(PageModelsApp.CONTAINER_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject getContainer( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey) { - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - return mapContainerModelToJson(container); - } - - /** - * Creates or updates a {@link ContainerModel}. If there is already a - * {@link ContainerModel} for the container identified by the provided - * {@code containerKey}, {@code pageModelName} and {@code appPath} the - * {@link ContainerModel} is updated with the data from the - * {@link JsonObject} {@code containerModelData}. - * - * If there is no such {@link ContainerModel} a new {@link ContainerModel} - * is created using the data provided by {@code containerModelData}. - * - * @param appPath The path of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key identifying the {@link ContainerModel}. - * @param containerModelData The data for updating or creating the - * {@link ContainerModel}. - * - * @return The new or updated {@link ContainerModel}. - */ - @PUT - @Path(PageModelsApp.CONTAINER_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject putContainer( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - final JsonObject containerModelData) { - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final Optional result = pageModel - .getContainers() - .stream() - .filter(model -> model.getKey().equals(containerKey)) - .findAny(); - - final ContainerModel containerModel; - if (result.isPresent()) { - - containerModel = result.get(); - - result.get().setKey(containerKey); - containerModelRepo.save(result.get()); - } else { - - containerModel = new ContainerModel(); - containerModel.setKey(containerKey); - - pageModelManager.addContainerModel(pageModel, containerModel); - } - - return mapContainerModelToJson(containerModel); - } - - /** - * Deletes the {@link ContainerModel} identified by the provided parameters. - * - * @param appPath The path of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key identifying the {@link ContainerModel} to - * delete. - */ - @DELETE - @Path(PageModelsApp.CONTAINER_PATH) - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteContainer( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey) { - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - pageModelManager.removeContainerModel(pageModel, container); - } - - /** - * Helper method for mapping a {@link ContainerModel} to JSON: - * - * @param containerModel The {@link ContainerModel} to map. - * - * @return A {@link JsonObject} containing the data of the - * {@link ContainerModel}. - */ - private JsonObject mapContainerModelToJson( - final ContainerModel containerModel) { - - return Json - .createObjectBuilder() - .add("containerId", Long.toString(containerModel.getContainerId())) - .add("uuid", containerModel.getUuid()) - .add("containerUuid", containerModel.getContainerUuid()) - .add("key", containerModel.getKey()) - .build(); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java deleted file mode 100644 index 3abf7c548..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModels.java +++ /dev/null @@ -1,383 +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 org.libreccm.pagemodel.rs; - -import com.arsdigita.kernel.KernelConfig; - -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.core.CoreConstants; -import org.libreccm.l10n.GlobalizationHelper; -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.ContainerModel; -import org.libreccm.pagemodel.PageModel; -import org.libreccm.pagemodel.PageModelManager; -import org.libreccm.pagemodel.PageModelRepository; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; -import org.libreccm.web.CcmApplication; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObject; -import javax.transaction.Transactional; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; - -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -/** - * Provides RESTful endpoints for retrieving, creating, updating and deleting - * {@link PageModels}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@Path("/") -public class PageModels { - - @Inject - private PageModelsController controller; - - @Inject - private PageModelManager pageModelManager; - - @Inject - private PageModelRepository pageModelRepo; - - @Inject - private GlobalizationHelper globalizationHelper; - - @Inject - private ConfigurationManager confManager; - - /** - * Retrieves all {@link PageModel}s available for an {@link - * CcmApplication}. - * - * @param appPath The path of the {@code app}. - * - * @return A JSON array with the data of all {@link PageModel}s of the - * {@link CcmApplication} {@code app}. - * - * @throws NotFoundException If there is no {@link CcmApplication} with the - * primary URL {@code appPath} an {@link - * NotFoundException} thrown resulting in 404 - * response. - */ - @GET - @Path(PageModelsApp.PAGE_MODELS_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonArray getAllPageModels( - @PathParam(PageModelsApp.APP_NAME) String appPath) { - - Objects.requireNonNull(appPath); - - final CcmApplication app = controller - .findCcmApplication(String.format("/%s/", appPath)); - final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); - pageModelRepo - .findDraftByApplication(app) - .stream() - .map(this::mapPageModelToJson) - .forEach(arrayBuilder::add); - - return arrayBuilder.build(); - } - - /** - * Retrieves a specific {@link PageModel}. - * - * @param appPath The path ({@link CcmApplication#primaryUrl} of the - * {@link CcmApplication} to which the {@link - * PageModel} belongs (see - * {@link PageModel#application}). - * @param pageModelName The name of the {@link PageModel} to retrieve (see - * {@link PageModel#name}). - * - * @return A JSON object containing the data of the {@link PageModel}. - * - * @throws NotFoundException If there is not {@link CcmApplication} with the - * primary URL {@code appPath} a {@link - * NotFoundException} is thrown resulting in a 404 - * response. A {@link NotFoundException} is also - * thrown if there no {@link PageModel} identified - * by {@code pageModelName} for the {@link - * CcmApplication} with the primary URL {@code - * appPath}. - */ - @GET - @Path(PageModelsApp.PAGE_MODEL_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject getPageModel( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - - final CcmApplication app = controller - .findCcmApplication(String.format("/%s/", appPath)); - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - return mapPageModelToJson(pageModel); - } - - @POST - @Path(PageModelsApp.PAGE_MODEL_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject publishPageModel( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @FormParam("action") String action) { - - if ("publish".equals(action)) { - - final CcmApplication app = controller - .findCcmApplication(String.format("/%s/", appPath)); - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - pageModelManager.publish(pageModel); - } - - return getPageModel(appPath, pageModelName); - } - - /** - * Creates or updates a {@link PageModel}. - * - * If a {@link PageModel} with the name {@code pageModelName} already exists - * for the {@link CcmApplication} with the primary URL {@code appPath} the - * {@link PageModel} is updated. If there is no such {@link PageModel} a new - * {@link PageModel} is created and associated with the {@link - * CcmApplication} identified by the primary URL {@code appPath}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel}. - * @param pageModelData The data for creating or updating the {@link - * PageModel}. - * - * @return The new or updated {@link PageModel}. - */ - @PUT - @Path(PageModelsApp.PAGE_MODEL_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject putPageModel( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - final JsonObject pageModelData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - - final CcmApplication app = controller - .findCcmApplication(String.format("/%s/", appPath)); - - final KernelConfig kernelConfig = confManager - .findConfiguration(KernelConfig.class); - - final PageModel pageModel; - if (controller.existsPageModel(app, pageModelName)) { - pageModel = controller.findPageModel(app, pageModelName); - - } else { - pageModel = pageModelManager.createPageModel(pageModelName, app); - } - if (pageModelData.containsKey("title")) { - pageModel.getTitle().putValue(kernelConfig.getDefaultLocale(), - pageModelData.getString("title")); - } - if (pageModelData.containsKey("description")) { - pageModel - .getDescription() - .putValue(kernelConfig.getDefaultLocale(), - pageModelData.getString("description")); - } - - controller.savePageModel(pageModel); - - return mapPageModelToJson(pageModel); - } - - /** - * Deletes a {@link PageModel}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to delete. - */ - @DELETE - @Path(PageModelsApp.PAGE_MODEL_PATH) - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deletePageModel( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - - final CcmApplication app = controller - .findCcmApplication(String.format("/%s/", appPath)); - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - pageModelRepo.delete(pageModel); - } - - /** - * Helper method for mapping a {@link PageModel} object to JSON: - * - * @param pageModel The {@link PageModel} to map. - * - * @return A {@link JsonObject} object with the data of the provided {@link - * PageModel}. - */ - private JsonObject mapPageModelToJson(final PageModel pageModel) { - - Objects.requireNonNull(pageModel); - - final long lastPublished; - final Optional liveModel = pageModelManager - .getLiveVersion(pageModel); - if (liveModel.isPresent() - && liveModel.get().getLastModified() != null) { - lastPublished = liveModel.get().getLastModified().getTime(); - } else { - lastPublished = 0; - } - final long lastModified; - if (pageModel.getLastModified() == null) { - lastModified = 0; - } else { - lastModified = pageModel.getLastModified().getTime(); - } - - return Json - .createObjectBuilder() - .add("containers", mapContainersToJson(pageModel)) - .add("description", - globalizationHelper - .getValueFromLocalizedString(pageModel.getDescription())) - .add("modelUuid", pageModel.getModelUuid()) - .add("name", pageModel.getName()) - .add("pageModelId", Long.toString(pageModel.getPageModelId())) - .add("title", - globalizationHelper - .getValueFromLocalizedString(pageModel.getTitle())) - .add("type", pageModel.getType()) - .add("uuid", pageModel.getUuid()) - .add("version", pageModel.getVersion().toString()) - .add("publicationStatus", - getPublicationStatus(pageModel).toString()) - .add("lastModified", lastModified) - .add("lastPublished", lastPublished) - .build(); - } - - private JsonArray mapContainersToJson(final PageModel pageModel) { - - final JsonArrayBuilder containers = Json.createArrayBuilder(); - - pageModel - .getContainers() - .stream() - .map(this::mapContainerToJson) - .forEach(container -> containers.add(container)); - - return containers.build(); - } - - private JsonObject mapContainerToJson(final ContainerModel container) { - - return Json - .createObjectBuilder() - .add("containerUuid", container.getContainerUuid()) - .add("key", container.getKey()) - .add("uuid", container.getUuid()) - .build(); - } - - /** - * Check if the {@link PublicationStatus} of the provided PageModel. - * - * @param pageModel - * - * @return - */ - private PublicationStatus getPublicationStatus(final PageModel pageModel) { - - final PageModel draftModel = pageModelManager - .getDraftVersion(pageModel); - final Optional liveModel = pageModelManager - .getLiveVersion(pageModel); - - final PublicationStatus publicationStatus; - if (liveModel.isPresent()) { - - // Fallback if one the last modified dates is null - if (draftModel.getLastModified() == null - || liveModel.get().getLastModified() == null) { - - return PublicationStatus.NEEDS_UPDATE; - } else if (draftModel - .getLastModified() - .before(liveModel.get().getLastModified())) { - - publicationStatus = PublicationStatus.PUBLISHED; - } else { - publicationStatus = PublicationStatus.NEEDS_UPDATE; - } - } else { - publicationStatus = PublicationStatus.NOT_PUBLISHED; - } - - return publicationStatus; - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModelsApp.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModelsApp.java deleted file mode 100644 index 67c8b82af..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModelsApp.java +++ /dev/null @@ -1,88 +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 org.libreccm.pagemodel.rs; - -import org.libreccm.pagemodel.PageModel; - -import java.util.HashSet; -import java.util.Set; - -import javax.ws.rs.ApplicationPath; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.core.Application; - -/** - * JAX-RS application for managing {@link PageModel}s. - * - * The several paths used by the classes of this JAX-RS application are defined - * in this class as string constants to avoid problems. Some other parts which - * specific to one of the classes are might defined in that class. - * - * All methods providing RESTful endpoints will throw a - * {@link NotFoundException} if one the objects in their path is not found. If - * this is the case the application server will send a 404 response to the - * client. - * - * - * @author Jens Pelzetter - */ -@Deprecated -@ApplicationPath("/page-models") -public class PageModelsApp extends Application { - - protected static final String APP_NAME = "appName"; - protected static final String PAGE_MODEL_NAME = "pageModelName"; - protected static final String CONTAINER_KEY = "containerKey"; - protected static final String COMPONENT_KEY = "componentKey"; - - protected static final String PAGE_MODELS_PATH = "/{" + APP_NAME + "}"; - protected static final String PAGE_MODEL_PATH = PAGE_MODELS_PATH - + "/{" - + PAGE_MODEL_NAME - + "}"; - protected static final String CONTAINERS_PATH = PAGE_MODEL_PATH - + "/containers"; - protected static final String CONTAINER_PATH = CONTAINERS_PATH - + "/{" - + CONTAINER_KEY - + "}"; - protected static final String COMPONENTS_PATH = CONTAINER_PATH - + "/components"; - protected static final String COMPONENT_PATH = COMPONENTS_PATH - + "/{" - + COMPONENT_KEY - + "}"; - - protected static final String STYLES_PATH = CONTAINER_PATH + "/styles"; - - @Override - public Set> getClasses() { - - final Set> classes = new HashSet<>(); - classes.add(PageModels.class); - classes.add(Containers.class); - classes.add(Components.class); - classes.add(StylesRs.class); - classes.add(StylesMediaRule.class); - classes.add(StylesRule.class); - - return classes; - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModelsController.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModelsController.java deleted file mode 100644 index f9284698c..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PageModelsController.java +++ /dev/null @@ -1,181 +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 org.libreccm.pagemodel.rs; - -import org.libreccm.pagemodel.ComponentModel; -import org.libreccm.pagemodel.ComponentModelRepository; -import org.libreccm.pagemodel.ContainerModel; -import org.libreccm.pagemodel.ContainerModelRepository; -import org.libreccm.pagemodel.PageModel; -import org.libreccm.pagemodel.PageModelRepository; -import org.libreccm.web.ApplicationRepository; -import org.libreccm.web.CcmApplication; - -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; -import javax.ws.rs.NotFoundException; - -/** - * A helper class providing some functionality used by the JAX-RS classes in - * this package. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -class PageModelsController { - - @Inject - private ApplicationRepository appRepo; - - @Inject - private ComponentModelRepository componentModelRepo; - - @Inject - private ContainerModelRepository containerRepo; - - @Inject - private PageModelRepository pageModelRepo; - - /** - * Finds a {@link CcmApplication} using its {@code primaryUrl}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * - * @return The {@link CcmApplication} with the provided primary URL. - */ - @Transactional(Transactional.TxType.REQUIRED) - protected CcmApplication findCcmApplication(final String appPath) { - - return appRepo - .retrieveApplicationForPath(Objects.requireNonNull(appPath)) - .orElseThrow(() -> new NotFoundException(String - .format("No application with path \"%s\" found.", - appPath))); - } - - /** - * Finds a {@link ComponentModel} using its {@code componentKey}. - * - * @param app The {@link CcmApplication}. - * @param pageModel The {@link PageModel}. - * @param containerModel The {@link ContainerModel}. - * @param componentKey The key the {@link ComponentModel}. - * - * @return The {@link ComponentModel} identified by the provided - * {@code componentKey}. - */ - @Transactional(Transactional.TxType.REQUIRED) - protected ComponentModel findComponentModel( - final CcmApplication app, - final PageModel pageModel, - final ContainerModel containerModel, - final String componentKey) { - - return componentModelRepo - .findComponentByContainerAndKey(containerModel, componentKey) - .orElseThrow(() -> new NotFoundException(String - .format( - "The Container \"%s\" of the PageModel \"%s\" of application" - + "\"%s\" does not contain a component with the key \"%s\".", - containerModel.getKey(), - pageModel.getName(), - app.getPrimaryUrl(), - componentKey))); - } - - /** - * Finds a {@link ContainerModel} using its {@code containerKey}. - * - * @param app The {@link CcmApplication}. - * @param pageModel The {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * - * @return The {@link ContainerModel} identified by the provided - * {@code containerKey}. - */ - @Transactional(Transactional.TxType.REQUIRED) - protected ContainerModel findContainer(final CcmApplication app, - final PageModel pageModel, - final String containerKey) { - - return containerRepo - .findContainerByKeyAndPageModel( - Objects.requireNonNull(containerKey), - Objects.requireNonNull(pageModel)) - .orElseThrow(() -> new NotFoundException(String - .format("The PageModel \"%s\" of application \"%s\" does not have " - + "a container identified by the key \"%s\".", - pageModel.getName(), - app.getPrimaryUrl(), - containerKey))); - } - - /** - * Determines if a {@link PageModel} with the provided name exists for the - * provided {@link CcmApplication}. - * - * @param app The {@link CcmApplication} to which the - * {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel}. - * - * @return {@code true} if a {@link PageModel} with the name provided by the - * parameter {@code pageModelName} exists for the provided - * {@link CcmApplication} {@code app}, {@code false} otherwise. - */ - @Transactional(Transactional.TxType.REQUIRED) - protected boolean existsPageModel(final CcmApplication app, - final String pageModelName) { - return pageModelRepo - .findDraftByApplicationAndName(app, pageModelName) - .isPresent(); - } - - /** - * Finds a {@link PageModel} using its name. - * - * @param app The {@link CcmApplication} to which the - * {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to retrieve. - * - * @return The {@link PageModel} identified by the name - * {@code pageModelName} for the {@link CcmApplication} {@code app}. - */ - @Transactional(Transactional.TxType.REQUIRED) - protected PageModel findPageModel(final CcmApplication app, - final String pageModelName) { - - return pageModelRepo - .findDraftByApplicationAndName( - Objects.requireNonNull(app), - Objects.requireNonNull(pageModelName)) - .orElseThrow(() -> new NotFoundException(String.format( - "No PageModel with name \"%s\" for application \"%s\".", - pageModelName, app.getPrimaryUrl()))); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected void savePageModel(final PageModel pageModel) { - pageModelRepo.save(pageModel); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PublicationStatus.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PublicationStatus.java deleted file mode 100644 index 049a80960..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/PublicationStatus.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.libreccm.pagemodel.rs; - -@Deprecated -public enum PublicationStatus { - - NOT_PUBLISHED, - PUBLISHED, - NEEDS_UPDATE, - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesJsonMapper.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesJsonMapper.java deleted file mode 100644 index c13876efb..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesJsonMapper.java +++ /dev/null @@ -1,201 +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 org.libreccm.pagemodel.rs; - -import org.libreccm.pagemodel.styles.CssProperty; -import org.libreccm.pagemodel.styles.Dimension; -import org.libreccm.pagemodel.styles.MediaQuery; -import org.libreccm.pagemodel.styles.MediaRule; -import org.libreccm.pagemodel.styles.Rule; - -import java.util.List; -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.json.Json; -import javax.json.JsonArray; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObject; - -/** - * Utility class for mapping the entities from the - * {@link org.libreccm.pagemodel.styles} package to JSON. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -class StylesJsonMapper { - - /** - * Map a {@link Dimension} object to JSON. - * - * @param dimension The {@link Dimension} object to map. - * - * @return A JSON object representing the provided {@link Dimension} object. - */ - protected JsonObject mapDimensionToJson(final Dimension dimension) { - - Objects.requireNonNull(dimension); - - return Json - .createObjectBuilder() - .add("value", dimension.getValue()) - .add("unit", dimension.getUnit().toString()) - .build(); - } - - /** - * Maps a List of {@link MediaRule} objects to JSON. - * - * @param mediaRules The {@link MediaRule}s to map. - * - * @return An JSON array with the data from the {@link MediaRule} objects in - * the list. - */ - protected JsonArray mapMediaRulesToJson(final List mediaRules) { - - final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); - Objects - .requireNonNull(mediaRules) - .stream() - .map(this::mapMediaRuleToJson) - .forEach(arrayBuilder::add); - - return arrayBuilder.build(); - } - - /** - * Maps a {@link MediaRule} object to JSON. - * - * @param mediaRule The {@link MediaRule} object to map. - * - * @return The JSON representation of the provided {@link MediaRule} object. - */ - protected JsonObject mapMediaRuleToJson(final MediaRule mediaRule) { - - Objects.requireNonNull(mediaRule); - - return Json - .createObjectBuilder() - .add("mediaRuleId", mediaRule.getMediaRuleId()) - .add("mediaQuery", mapMediaQueryToJson(mediaRule.getMediaQuery())) - .add("rules", mapRulesToJson(mediaRule.getRules())) - .build(); - } - - /** - * Maps a {@link MediaQuery} object to JSON. - * - * @param mediaQuery The {@link MediaQuery} object to map. - * - * @return The JSON representation of the provided {@link MediaQuery} - * object. - */ - protected JsonObject mapMediaQueryToJson(final MediaQuery mediaQuery) { - - Objects.requireNonNull(mediaQuery); - - return Json - .createObjectBuilder() - .add("mediaQueryId", mediaQuery.getMediaQueryId()) - .add("mediaType", mediaQuery.getMediaType().toString()) - .add("minWidth", mapDimensionToJson(mediaQuery.getMinWidth())) - .add("maxWidth", mapDimensionToJson(mediaQuery.getMaxWidth())) - .build(); - } - - /** - * Maps a list of {@link Rule} objects to JSON. - * - * @param rules The list of {@link Rule} objects to map. - * - * @return A JSON array with the JSON representations of the {@link Rule} - * objects in the list. - */ - protected JsonArray mapRulesToJson(final List rules) { - - final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); - Objects - .requireNonNull(rules) - .stream() - .map(this::mapRuleToJson) - .forEach(arrayBuilder::add); - - return arrayBuilder.build(); - } - - /** - * Maps a {@link Rule} object to JSON. - * - * @param rule The {@link Rule} object to map. - * - * @return The JSON representation of the provided {@link RuleObject}. - */ - protected JsonObject mapRuleToJson(final Rule rule) { - - Objects.requireNonNull(rule); - - return Json - .createObjectBuilder() - .add("ruleId", rule.getRuleId()) - .add("selector", rule.getSelector()) - .add("properties", mapPropertiesToJson(rule.getProperties())) - .build(); - } - - /** - * Maps a list of {@link CssProperty} objects to JSON. - * - * @param properties The list of {@link CssProperty} objects to map. - * - * @return A JSON array containing the JSON representations of the - * {@link CssProperty} objects in the list. - */ - protected JsonArray mapPropertiesToJson(final List properties) { - - final JsonArrayBuilder arrayBuilder = Json.createArrayBuilder(); - Objects - .requireNonNull(properties) - .stream() - .map(this::mapCssPropertyToJson) - .forEach(arrayBuilder::add); - - return arrayBuilder.build(); - } - - /** - * Maps a {@link CssProperty} object to JSON. - * - * @param property The {@link CssProperty} to map. - * @return The JSON representation of the provided {@link CssProperty}. - */ - protected JsonObject mapCssPropertyToJson(final CssProperty property) { - - Objects.requireNonNull(property); - - return Json - .createObjectBuilder() - .add("propertyId", property.getPropertyId()) - .add("name", property.getName()) - .add("value", property.getValue()) - .build(); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesMediaRule.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesMediaRule.java deleted file mode 100644 index bf9660670..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesMediaRule.java +++ /dev/null @@ -1,623 +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 org.libreccm.pagemodel.rs; - -import org.libreccm.core.CoreConstants; -import org.libreccm.pagemodel.ContainerModel; -import org.libreccm.pagemodel.styles.CssProperty; -import org.libreccm.pagemodel.styles.MediaRule; -import org.libreccm.pagemodel.styles.Rule; -import org.libreccm.pagemodel.styles.StylesManager; -import org.libreccm.pagemodel.styles.StylesRepository; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; -import org.libreccm.web.CcmApplication; - -import java.io.Serializable; -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.transaction.Transactional; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; - -/** - * Provides RESTful endpoints for retrieving, creating, updating and deleting - * {@link MediaRule}s. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@Path(StylesRs.MEDIA_RULE_PATH) -public class StylesMediaRule implements Serializable { - - private static final long serialVersionUID = 3257114872624583807L; - - protected final static String PROPERTY_ID = "propertyId"; - protected final static String RULE_ID = "ruleId"; - - protected final static String RULES_PATH = "/rules"; - protected final static String RULE_PATH = RULES_PATH - + "/{" - + RULE_ID - + "}"; - protected final static String PROPERTIES_PATH = RULE_PATH + "/properties"; - protected final static String PROPERTY_PATH = PROPERTIES_PATH - + "/{" - + PROPERTY_ID - + "}"; - - @Inject - private StylesJsonMapper stylesJsonMapper; - - @Inject - private StylesManager stylesManager; - - @Inject - private StylesRepository stylesRepo; - - @Inject - private StylesRs stylesRs; - - /** - * Retrieves all {@link Rule}s of a {@link MediaRule}. - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * - * @return A JSON array with the JSON representations of all {@link Rule}s - * belonging the {@link MediaRule} identified by the provided path. - */ - @GET - @Path(RULES_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonArray getRules( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - return stylesJsonMapper.mapRulesToJson(mediaRule.getRules()); - } - - /** - * Retrieves a specific {@link Rule} from a {@link MediaRule}. - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * @param ruleIdParam The ID of the {@link Rule} to retrieve. - * - * @return The JSON representation of the {@link Rule} identified by the - * provided path. - */ - @GET - @Path(RULE_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject getRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - @PathParam(RULE_ID) String ruleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleIdParam); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - return stylesJsonMapper.mapRuleToJson(findRule(mediaRule, - ruleIdParam)); - } - - /** - * Creates a new {@link Rule} for a {@link MediaRule}. - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * @param ruleData The data from which the new {@link Rule} is - * created. - * - * @return The JSON representation of the new {@link Rule}. - */ - @POST - @Path(RULES_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject createRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - final JsonObject ruleData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleData); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - final Rule rule = new Rule(); - rule.setSelector(ruleData.getString("selector")); - stylesManager.addRuleToMediaRule(rule, mediaRule); - - return stylesJsonMapper.mapRuleToJson(rule); - } - - /** - * Updates an existing {@link Rule} - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * @param ruleIdParam The ID of the {@link Rule} to update. - * @param ruleData The data from which used to update the - * {@link Rule}. - * - * @return The JSON representation of the updated {@link Rule}. - */ - @PUT - @Path(RULE_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject updateRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - @PathParam(RULE_ID) String ruleIdParam, - final JsonObject ruleData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(ruleData); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - final Rule rule = findRule(mediaRule, ruleIdParam); - rule.setSelector(ruleData.getString("selector")); - stylesManager.addRuleToMediaRule(rule, mediaRule); - - return stylesJsonMapper.mapRuleToJson(rule); - } - - @DELETE - @Path(RULE_PATH) - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - @PathParam(RULE_ID) String ruleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleIdParam); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - final Rule rule = findRule(mediaRule, ruleIdParam); - - stylesManager.removeRuleFromMediaRule(rule, mediaRule); - stylesRepo.deleteRule(rule); - } - - /** - * Retrieves all {@link CssProperty} objects assigned to {@link Rule} which - * is assigned to {@link MediaRule}. - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * @param ruleIdParam The ID of the {@link Rule} from which the - * {@link CssProperty} objects are retrieved. - * - * @return A JSON array with the JSON representations of the - * {@link CssProperty} objects. - */ - @GET - @Path(PROPERTIES_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonArray getProperties( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - @PathParam(RULE_ID) String ruleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleIdParam); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - final Rule rule = findRule(mediaRule, ruleIdParam); - - return stylesJsonMapper.mapPropertiesToJson(rule.getProperties()); - } - - /** - * Retrieve a {@link CssProperty} assigned to {@link Rule} which is assigned - * to {@link MediaRule}. - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * @param ruleIdParam The ID of the {@link Rule} from which the - * {@link CssProperty} is retrieved. - * @param propertyIdParam The ID of the {@link CssProperty} to retrieve. - * - * @return The JSON representation of the {@link CssProperty} identified by - * the provided path. - */ - @GET - @Path(PROPERTY_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject getProperty( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - @PathParam(RULE_ID) final String ruleIdParam, - @PathParam(PROPERTY_ID) final String propertyIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(propertyIdParam); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - final Rule rule = findRule(mediaRule, ruleIdParam); - final CssProperty property = findProperty(rule, propertyIdParam); - - return stylesJsonMapper.mapCssPropertyToJson(property); - } - - /** - * Creates a new {@link CssProperty} for a {@link Rule} of a - * {@link MediaRule}. - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * @param ruleIdParam The ID of the {@link Rule} for which the new - * {@link CssProperty} is created. - * @param propertyData The data from which the new {@link CssProperty} - * is created. - * - * @return The JSON representation of the new {@link CssProperty}. - */ - @POST - @Path(PROPERTIES_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject createProperty( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - @PathParam(RULE_ID) String ruleIdParam, - final JsonObject propertyData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(propertyData); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - final Rule rule = findRule(mediaRule, ruleIdParam); - - final CssProperty property = new CssProperty(); - setCssPropertyData(property, propertyData); - stylesManager.addCssPropertyToRule(property, rule); - - return stylesJsonMapper.mapCssPropertyToJson(property); - } - - /** - * Updates an existing {@link CssProperty} of {@link Rule} of a - * {@link MediaRule}. - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * @param ruleIdParam The ID of the {@link Rule} to which the - * {@link CssProperty} belongs. - * @param propertyIdParam The ID of the {@link CssProperty} to update. - * @param propertyData The data which is used to update the - * {@link CssProperty}. - * - * @return The JSON representation of the updated {@link CssProperty}. - */ - @PUT - @Path(PROPERTY_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject updateProperty( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - @PathParam(RULE_ID) String ruleIdParam, - @PathParam(PROPERTY_ID) final String propertyIdParam, - final JsonObject propertyData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(propertyIdParam); - Objects.requireNonNull(propertyData); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - final Rule rule = findRule(mediaRule, ruleIdParam); - - final CssProperty property = findProperty(rule, propertyIdParam); - setCssPropertyData(property, propertyData); - stylesRepo.saveCssProperty(property); - - return stylesJsonMapper.mapCssPropertyToJson(property); - } - - /** - * Deletes a {@link CssProperty} of a {@link Rule} assigned to a - * {@link MediaRule}. - * - * @param appPath The path of the {@link CcmApplication} to which - * the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which - * the {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule}. - * @param ruleIdParam The ID of the {@link Rule} to which the - * {@link CssProperty} belongs. - * @param propertyIdParam The ID of the {@link CssProperty} to delete. - */ - @DELETE - @Path(PROPERTY_PATH) - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteProperty( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.MEDIA_RULE_ID) final String mediaRuleIdParam, - @PathParam(RULE_ID) String ruleIdParam, - @PathParam(PROPERTY_ID) final String propertyIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(propertyIdParam); - - final MediaRule mediaRule = stylesRs.findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - - final Rule rule = findRule(mediaRule, ruleIdParam); - - final CssProperty property = findProperty(rule, propertyIdParam); - stylesManager.removeCssPropertyFromRule(property, rule); - stylesRepo.deleteCssProperty(property); - } - - /** - * Helper method for finding a {@link CssProperty}. - * - * @param rule The {@link Rule} to which the {@link CssProperty} - * belongs. - * @param propertyIdParam The ID of the {@link CssProperty} to find. - * - * @return The {@link CssProperty}. - */ - private CssProperty findProperty(final Rule rule, - final String propertyIdParam) { - - final long propertyId; - try { - propertyId = Long.parseLong(propertyIdParam); - } catch (NumberFormatException ex) { - throw new WebApplicationException(ex); - } - - return rule - .getProperties() - .stream() - .filter(property -> propertyId == property.getPropertyId()) - .findAny() - .orElseThrow(() -> new NotFoundException()); - } - - /** - * Helper method for finding a {@link Rule} assigned to {@link MediaRule}. - * - * @param mediaRule The {@link MediaRule}. - * @param ruleIdParam The ID of {@link Rule} to find. - * - * @return The {@link Rule}. - */ - private Rule findRule(final MediaRule mediaRule, - final String ruleIdParam) { - - final long ruleId; - try { - ruleId = Long.parseLong(ruleIdParam); - } catch (NumberFormatException ex) { - throw new WebApplicationException(ex); - } - - Objects.requireNonNull(mediaRule); - - return mediaRule - .getRules() - .stream() - .filter(rule -> ruleId == rule.getRuleId()) - .findAny() - .orElseThrow(() -> new NotFoundException()); - } - - /** - * Helper method for updating the values of the properties of - * {@link CssProperty} object from its JSON representation. - * - * @param property The {@link CssProperty}. - * @param propertyData The {@link JsonObject} containing the data. - */ - private void setCssPropertyData(final CssProperty property, - final JsonObject propertyData) { - - Objects.requireNonNull(property); - Objects.requireNonNull(propertyData); - - property.setName(propertyData.getString("name")); - property.setValue(propertyData.getString("value")); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesRs.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesRs.java deleted file mode 100644 index 37ff20281..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesRs.java +++ /dev/null @@ -1,667 +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 org.libreccm.pagemodel.rs; - -import org.libreccm.core.CoreConstants; -import org.libreccm.pagemodel.ContainerModel; -import org.libreccm.pagemodel.PageModel; -import org.libreccm.pagemodel.styles.Dimension; -import org.libreccm.pagemodel.styles.MediaRule; -import org.libreccm.pagemodel.styles.MediaType; -import org.libreccm.pagemodel.styles.Rule; -import org.libreccm.pagemodel.styles.Styles; -import org.libreccm.pagemodel.styles.StylesManager; -import org.libreccm.pagemodel.styles.StylesRepository; -import org.libreccm.pagemodel.styles.Unit; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; -import org.libreccm.web.CcmApplication; - -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.transaction.Transactional; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; - -/** - * Provides RESTful endpoints for managing the (CSS) styles of a - * {@link ContainerModel}. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@Path(PageModelsApp.STYLES_PATH) -public class StylesRs { - - protected static final String MEDIA_RULE_ID = "mediaRuleId"; - protected static final String RULE_ID = "ruleId"; - - protected static final String MEDIA_RULES_PATH = "/media-rules"; - protected static final String MEDIA_RULE_PATH = MEDIA_RULES_PATH - + "/{" - + MEDIA_RULE_ID - + "}"; - protected static final String RULES_PATH = "/rules"; - protected static final String RULE_PATH = RULES_PATH - + "/{" - + RULE_ID - + "}"; - - @Inject - private PageModelsController controller; - - @Inject - private StylesJsonMapper stylesJsonMapper; - - @Inject - private StylesManager stylesManager; - - @Inject - private StylesRepository stylesRepo; - - /** - * Retrieves all {@link MediaRule}s from the {@link Styles} entity of a - * {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * - * @return The JSON Array with the JSON representations of all - * {@link MediaRule}s of the {@link ContainerModel} identified by - * the provided path. - */ - @GET - @Path(MEDIA_RULES_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonArray getMediaRules( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - final Styles styles = container.getStyles(); - - return stylesJsonMapper.mapMediaRulesToJson(styles.getMediaRules()); - - } - - /** - * Retrieves a specific {@link MediaRule} from the {@link Styles} entity of - * a {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param mediaRuleIdParam The ID of the {@link MediaRule} to retrieve. - * - * @return The JSON representation of the {@link MediaRule}. - */ - @GET - @Path(MEDIA_RULE_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject getMediaRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(MEDIA_RULE_ID) final String mediaRuleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - - return stylesJsonMapper - .mapMediaRuleToJson(findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam)); - } - - /** - * Creates a new {@link MediaRule}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param mediaRuleData The data for the new {@link MediaRule}. - * - * @return The JSON representation of the new {@link MediaRule}. - */ - @POST - @Path(MEDIA_RULES_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject createMediaRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - final JsonObject mediaRuleData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleData); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - final Styles styles = container.getStyles(); - - final MediaRule mediaRule = new MediaRule(); - setMediaRuleProperties(mediaRuleData, mediaRule); - stylesManager.addMediaRuleToStyles(mediaRule, styles); - - return stylesJsonMapper.mapMediaRuleToJson(mediaRule); - } - - /** - * Update a {@link MediaRule}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param mediaRuleIdParam The ID of the {@link MediaRule} to update. - * @param mediaRuleData The data for updating the {@link MediaRule}. - * - * @return The JSON representation of the updated {@link MediaRule}. - */ - @PUT - @Path(MEDIA_RULE_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject updateMediaRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(MEDIA_RULE_ID) final String mediaRuleIdParam, - final JsonObject mediaRuleData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - Objects.requireNonNull(mediaRuleData); - - final MediaRule mediaRule = findMediaRule(appPath, - pageModelName, - containerKey, - mediaRuleIdParam); - setMediaRuleProperties(mediaRuleData, mediaRule); - stylesRepo.saveMediaRule(mediaRule); - - return stylesJsonMapper.mapMediaRuleToJson(mediaRule); - } - - /** - * Deletes a {@link MediaRule}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param mediaRuleIdParam The ID of the {@link MediaRule} to delete. - */ - @DELETE - @Path(MEDIA_RULE_PATH) - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteMediaRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(MEDIA_RULE_ID) final String mediaRuleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(mediaRuleIdParam); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - final Styles styles = container.getStyles(); - - final MediaRule mediaRule = findMediaRule(pageModel, - container, - mediaRuleIdParam); - stylesManager.removeMediaRuleFromStyles(mediaRule, styles); - } - - /** - * Retrieves all {@link Rule}s from the {@link Styles} entity of a - * {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * - * @return A JSON array with the JSON representation of all {@link Rule}s of - * the {@link ContainerModel}. - */ - @GET - @Path(RULES_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonArray getRules( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - final Styles styles = container.getStyles(); - - return stylesJsonMapper.mapRulesToJson(styles.getRules()); - } - - /** - * Retrieves a specific {@link Rule} from the {@link Styles} entity of a - * {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param ruleIdParam The ID of the {@link Rule} to retrieve. - * - * @return The JSON representation of the {@link Rule}. - */ - @GET - @Path(RULE_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject getRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(RULE_ID) final String ruleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleIdParam); - - return stylesJsonMapper - .mapRuleToJson(findRule(appPath, - pageModelName, - containerKey, - ruleIdParam)); - } - - /** - * Creates a new {@link Rule}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param ruleData The data for the new {@link Rule}. - * - * @return The JSON representation of the new {@link Rule}. - */ - @POST - @Path(RULES_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject createRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - final JsonObject ruleData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleData); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - final Styles styles = container.getStyles(); - - final Rule rule = new Rule(); - rule.setSelector(ruleData.getString("selector")); - stylesManager.addRuleToStyles(rule, styles); - - return stylesJsonMapper.mapRuleToJson(rule); - } - - /** - * Updates an existing {@link Rule}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param ruleIdParam The ID of the {@link Rule} to update. - * @param ruleData The data for updating the {@link Rule}. - * - * @return The JSON representation of the updated {@link Rule}. - */ - @PUT - @Path(RULE_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject updateRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(RULE_ID) final String ruleIdParam, - final JsonObject ruleData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(ruleData); - - final Rule rule = findRule(appPath, - pageModelName, - containerKey, - ruleIdParam); - rule.setSelector(ruleData.getString("selector")); - stylesRepo.saveRule(rule); - return stylesJsonMapper.mapRuleToJson(rule); - } - - /** - * Deletes a {@link Rule}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param ruleIdParam The ID of the {@link Rule} to delete. - */ - @DELETE - @Path(RULE_PATH) - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteRule( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(RULE_ID) final String ruleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleIdParam); - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - final Styles styles = container.getStyles(); - - final Rule rule = findRule(pageModel, container, ruleIdParam); - stylesManager.removeRuleFromStyles(rule, styles); - } - - /** - * An utility method for finding a {@link MediaRule}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param mediaRuleIdParam The ID of the {@link MediaRule} to find. - * - * @return The {@link MediaRule} with the provided {@code mediaRuleId}. - */ - protected MediaRule findMediaRule(final String appPath, - final String pageModelName, - final String containerKey, - final String mediaRuleIdParam) { - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - return findMediaRule(pageModel, container, mediaRuleIdParam); - } - - /** - * An utility method for finding a {@link MediaRule}. - * - * @param pageModel The {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param container The {@link ContainerModel} to which the - * {@link MediaRule} belongs. - * @param mediaRuleIdParam The ID of the {@link MediaRule} to find. - * - * @return The {@link MediaRule} with the ID {@code mediaRuleIdParam}. - */ - private MediaRule findMediaRule(final PageModel pageModel, - final ContainerModel container, - final String mediaRuleIdParam) { - - final Styles styles = container.getStyles(); - - final long mediaRuleId; - try { - mediaRuleId = Long.parseLong(mediaRuleIdParam); - } catch (NumberFormatException ex) { - throw new WebApplicationException(String.format( - "The provided mediaRuleId \"%s\" numeric.", mediaRuleIdParam)); - } - - return styles - .getMediaRules() - .stream() - .filter(mediaRule -> mediaRuleId == mediaRule.getMediaRuleId()) - .findAny() - .orElseThrow(() -> new NotFoundException(String.format( - "No MediaRule with ID %d available in the Styles for " - + "Container \"%s\" of PageModel \"%s\".", - mediaRuleId, - container.getKey(), - pageModel.getName()))); - } - - /** - * Utility method for finding a {@link Rule}. - * - * @param appPath The primary URL of the {@link CcmApplication}. - * @param pageModelName The name of the {@link PageModel}. - * @param containerKey The key of the {@link ContainerModel}. - * @param ruleIdParam The ID of the {@link Rule} to find. - * - * @return The {@link Rule} identified by {@code ruleIdParam}. - */ - protected Rule findRule(final String appPath, - final String pageModelName, - final String containerKey, - final String ruleIdParam) { - - final CcmApplication app = controller.findCcmApplication( - String.format("/%s/", appPath)); - - final PageModel pageModel = controller.findPageModel(app, - pageModelName); - - final ContainerModel container = controller.findContainer(app, - pageModel, - containerKey); - - return findRule(pageModel, container, ruleIdParam); - } - - /** - * An utility method for finding a {@link Rule}. - * - * @param pageModel The {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param container The {@link ContainerModel} to which the {@link Rule} - * belongs. - * @param ruleIdParam The ID of the {@link Rule} to find. - * - * @return The {@link Rule} with the ID {@code ruleIdParam}. - */ - private Rule findRule(final PageModel pageModel, - final ContainerModel container, - final String ruleIdParam) { - - final Styles styles = container.getStyles(); - - final long ruleId; - try { - ruleId = Long.parseLong(ruleIdParam); - } catch (NumberFormatException ex) { - throw new WebApplicationException(String.format( - "The provided mediaRuleId \"%s\" numeric.", ruleIdParam)); - } - - return styles - .getRules() - .stream() - .filter(rule -> ruleId == rule.getRuleId()) - .findAny() - .orElseThrow(() -> new NotFoundException(String.format( - "No Rule with ID %d available in the Styles for " - + "Container \"%s\" of PageModel \"%s\".", - ruleId, - container.getKey(), - pageModel.getName()))); - } - - /** - * Helper method for setting the values of the properties of a - * {@link MediaRule} using the data from a JSON object. - * - * @param mediaRuleData The JSON object providing the data. - * @param mediaRule The {@link MediaRule}. - */ - private void setMediaRuleProperties(final JsonObject mediaRuleData, - final MediaRule mediaRule) { - - Objects.requireNonNull(mediaRuleData); - Objects.requireNonNull(mediaRule); - - final JsonObject mediaQueryData = mediaRuleData - .getJsonObject("mediaQuery"); - final JsonObject maxWidthData = mediaQueryData - .getJsonObject("maxWidth"); - final JsonObject minWidthData = mediaQueryData - .getJsonObject("minWidth"); - - final Dimension maxWidth = new Dimension(); - maxWidth.setUnit(Unit.valueOf(maxWidthData.getString("unit"))); - maxWidth.setValue(maxWidthData.getJsonNumber("value").doubleValue()); - final MediaType mediaType = MediaType.valueOf(mediaQueryData - .getString("mediaType")); - - final Dimension minWidth = new Dimension(); - minWidth.setUnit(Unit.valueOf(minWidthData.getString("unit"))); - minWidth.setValue(minWidthData.getJsonNumber("minWidth").doubleValue()); - - mediaRule.getMediaQuery().setMaxWidth(maxWidth); - mediaRule.getMediaQuery().setMediaType(mediaType); - mediaRule.getMediaQuery().setMinWidth(minWidth); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesRule.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesRule.java deleted file mode 100644 index 880ba85c3..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/StylesRule.java +++ /dev/null @@ -1,356 +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 org.libreccm.pagemodel.rs; - -import org.libreccm.core.CoreConstants; -import org.libreccm.pagemodel.ContainerModel; -import org.libreccm.pagemodel.styles.CssProperty; -import org.libreccm.pagemodel.styles.Rule; -import org.libreccm.pagemodel.styles.StylesManager; -import org.libreccm.pagemodel.styles.StylesRepository; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; -import org.libreccm.web.CcmApplication; - -import java.io.Serializable; -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.json.JsonArray; -import javax.json.JsonObject; -import javax.transaction.Transactional; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; - -/** - * Provides RESTful endpoints for retrieving, creating, updating and deleting - * {@link Rule} objects. - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -@Path(StylesRs.RULE_PATH) -public class StylesRule implements Serializable { - - private static final long serialVersionUID = -8447970787677773230L; - - protected final static String PROPERTY_ID = "propertyId"; - - protected final static String PROPERTIES_PATH = "/properties"; - protected final static String PROPERTY_PATH = PROPERTIES_PATH - + "/{" - + PROPERTY_ID - + "}"; - - @Inject - private StylesJsonMapper stylesJsonMapper; - - @Inject - private StylesManager stylesManager; - - @Inject - private StylesRepository stylesRepo; - - @Inject - private StylesRs stylesRs; - - /** - * Retrieves all {@link CssProperty} objects of a {@link Rule} assigned to - * the {@link Styles} entity of a {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which the - * {@link Rule} belongs. - * @param ruleIdParam The ID of the {@link Rule} from which the - * {@link CssProperty} objects are retrieved. - * - * @return A JSON array with the JSON representation of the - * {@link CssProperty} objects of the {@link Rule} identified by the - * provided path. - */ - @GET - @Path(PROPERTIES_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonArray getProperties( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.RULE_ID) final String ruleIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleIdParam); - - final Rule rule = stylesRs.findRule(appPath, - pageModelName, - containerKey, - ruleIdParam); - return stylesJsonMapper.mapPropertiesToJson(rule.getProperties()); - } - - /** - * Retrieves a specific {@link CssProperty} from a {@link Rule} assigned to - * the {@link Styles} entity of a {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which the - * {@link Rule} belongs. - * @param ruleIdParam The ID of the {@link Rule} to which the - * {@link CssProperty} is assigned. - * @param propertyIdParam The ID of the {@link CssProperty} to retrieve. - * - * @return The JSON representation of the {@link CssProperty}. - */ - @GET - @Path(PROPERTY_PATH) - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject getProperty( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.RULE_ID) final String ruleIdParam, - @PathParam(PROPERTY_ID) final String propertyIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(propertyIdParam); - - final Rule rule = stylesRs.findRule(appPath, - pageModelName, - containerKey, - ruleIdParam); - - return stylesJsonMapper - .mapCssPropertyToJson(findProperty(rule, - propertyIdParam)); - } - - /** - * Creates a new {@link CssProperty} for a {@link Rule} assigned to the - * {@link Styles} entity of a {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which the - * {@link Rule} belongs. - * @param ruleIdParam The ID of the {@link Rule} to which the - * {@link CssProperty} is assigned. - * @param propertyData The data used to create the new {@link CssProperty}. - * - * @return The JSON representation of the new {@link CssProperty}. - */ - @POST - @Path(PROPERTIES_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject createProperty( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.RULE_ID) final String ruleIdParam, - final JsonObject propertyData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(propertyData); - - final Rule rule = stylesRs.findRule(appPath, - pageModelName, - containerKey, - ruleIdParam); - - final CssProperty property = new CssProperty(); - setCssPropertyData(property, propertyData); - stylesManager.addCssPropertyToRule(property, rule); - - return stylesJsonMapper.mapCssPropertyToJson(property); - } - - /** - * Updates an existing {@link CssProperty} for a {@link Rule} assigned to - * the {@link Styles} entity of a {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which the - * {@link Rule} belongs. - * @param ruleIdParam The ID of the {@link Rule} to which the - * {@link CssProperty} is assigned. - * @param propertyIdParam The ID of the {@link CssProperty} to update. - * @param propertyData The data used to update the {@link CssProperty}. - * - * @return The JSON representation of the updated {@link CssProperty}. - */ - @PUT - @Path(PROPERTY_PATH) - @Consumes("application/json; charset=utf-8") - @Produces("application/json; charset=utf-8") - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public JsonObject updateProperty( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.RULE_ID) final String ruleIdParam, - @PathParam(PROPERTY_ID) final String propertyIdParam, - final JsonObject propertyData) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(propertyIdParam); - Objects.requireNonNull(propertyData); - - final Rule rule = stylesRs.findRule(appPath, - pageModelName, - containerKey, - ruleIdParam); - - final CssProperty property = findProperty(rule, propertyIdParam); - setCssPropertyData(property, propertyData); - stylesRepo.saveCssProperty(property); - - return stylesJsonMapper.mapCssPropertyToJson(property); - } - - /** - * Deletes{@link CssProperty} for a {@link Rule} assigned to the - * {@link Styles} entity of a {@link ContainerModel}. - * - * @param appPath The primary URL of the {@link CcmApplication} to - * which the {@link PageModel} belongs. - * @param pageModelName The name of the {@link PageModel} to which the - * {@link ContainerModel} belongs. - * @param containerKey The key of the {@link ContainerModel} to which the - * {@link Rule} belongs. - * @param ruleIdParam The ID of the {@link Rule} to which the - * {@link CssProperty} is assigned. - * @param propertyIdParam The ID of the {@link CssProperty} to delete. - */ - @DELETE - @Path(PROPERTY_PATH) - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteProperty( - @PathParam(PageModelsApp.APP_NAME) final String appPath, - @PathParam(PageModelsApp.PAGE_MODEL_NAME) final String pageModelName, - @PathParam(PageModelsApp.CONTAINER_KEY) final String containerKey, - @PathParam(StylesRs.RULE_ID) final String ruleIdParam, - @PathParam(PROPERTY_ID) final String propertyIdParam) { - - Objects.requireNonNull(appPath); - Objects.requireNonNull(pageModelName); - Objects.requireNonNull(containerKey); - Objects.requireNonNull(ruleIdParam); - Objects.requireNonNull(propertyIdParam); - - final Rule rule = stylesRs.findRule(appPath, - pageModelName, - containerKey, - ruleIdParam); - - final CssProperty property = findProperty(rule, propertyIdParam); - stylesManager.removeCssPropertyFromRule(property, rule); - stylesRepo.deleteCssProperty(property); - } - - /** - * Helper method for finding a {@link CssProperty} assigned to {@link Rule}. - * - * @param rule The {@link Rule}. - * @param propertyIdParam The ID of the {@link CssProperty} to find. - * - * @return The {@link CssProperty} identified by {@code propertyIdParam}. - */ - private CssProperty findProperty(final Rule rule, - final String propertyIdParam) { - - Objects.requireNonNull(rule); - Objects.requireNonNull(propertyIdParam); - - final long propertyId; - try { - propertyId = Long.parseLong(propertyIdParam); - } catch (NumberFormatException ex) { - throw new WebApplicationException(ex); - } - - return rule - .getProperties() - .stream() - .filter(property -> propertyId == property.getPropertyId()) - .findAny() - .orElseThrow(() -> new NotFoundException()); - } - - /** - * Helper method for updating a {@link CssProperty} object with data from - * its JSON representation. - * - * @param property The {@link CssProperty}. - * @param propertyData The data. - */ - private void setCssPropertyData(final CssProperty property, - final JsonObject propertyData) { - - Objects.requireNonNull(property); - Objects.requireNonNull(propertyData); - - property.setName(propertyData.getString("name")); - property.setValue(propertyData.getString("value")); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/package-info.java b/ccm-core/src/main/java/org/libreccm/pagemodel/rs/package-info.java deleted file mode 100644 index a18589a62..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/rs/package-info.java +++ /dev/null @@ -1,25 +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 - */ - -/** - * The classes in this package provide a RESTful API as backend for PageModel - * editors. - * - */ -package org.libreccm.pagemodel.rs; diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/CssProperty.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/CssProperty.java deleted file mode 100644 index 87f4400d3..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/CssProperty.java +++ /dev/null @@ -1,145 +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 org.libreccm.pagemodel.styles; - -import org.libreccm.core.CoreConstants; - -import java.io.Serializable; -import java.util.Objects; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -/** - * A single CSS property like {@code font-weight: bold}. - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "STYLE_PROPERTIES", schema = CoreConstants.DB_SCHEMA) -public class CssProperty implements Serializable { - - private static final long serialVersionUID = -4697757123207731769L; - - /** - * ID of the CSS property - */ - @Id - @Column(name = "PROPERTY_ID") - @GeneratedValue(strategy = GenerationType.AUTO) - private long propertyId; - - /** - * The name of the property. - */ - @Column(name = "NAME", length = 256) - private String name; - - /** - * The value of the property. - */ - @Column(name = "PROPERTY_VALUE", length = 4096) - private String value; - - public long getPropertyId() { - return propertyId; - } - - protected void setPropertyId(long propertyId) { - this.propertyId = propertyId; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public String getValue() { - return value; - } - - public void setValue(final String value) { - this.value = value; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 17 * hash + (int) (propertyId ^ (propertyId >>> 32)); - hash = 17 * hash + Objects.hashCode(name); - hash = 17 * hash + Objects.hashCode(value); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof CssProperty)) { - return false; - } - final CssProperty other = (CssProperty) obj; - if (!other.canEqual(this)) { - return false; - } - if (!Objects.equals(name, other.getName())) { - return false; - } - return Objects.equals(value, other.getValue()); - } - - public boolean canEqual(final Object obj) { - return obj instanceof CssProperty; - } - - @Override - public String toString() { - return toString(""); - } - - public String toString(final String data) { - return String.format("%s{ " - + "name = \"%s\", " - + "value = \"%s\"%s" - + " }", - super.toString(), - name, - value, - data); - } - - public String toCss() { - return String.format("%s: %s", - name, - value); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Dimension.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Dimension.java deleted file mode 100644 index cb915dc24..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Dimension.java +++ /dev/null @@ -1,120 +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 org.libreccm.pagemodel.styles; - -import java.io.Serializable; -import java.util.Objects; - -import javax.persistence.Column; -import javax.persistence.Embeddable; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@Embeddable -public class Dimension implements Serializable { - - private static final long serialVersionUID = 44299305931240403L; - - @Column(name = "DIMENSION_VALUE") - private double value; - - @Column(name = "UNIT") - @Enumerated(EnumType.STRING) - private Unit unit; - - public double getValue() { - return value; - } - - public void setValue(final double value) { - this.value = value; - } - - public Unit getUnit() { - return unit; - } - - public void setUnit(final Unit unit) { - this.unit = unit; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 37 * hash - + (int) (Double.doubleToLongBits(value) - ^ (Double.doubleToLongBits(value) >>> 32)); - hash = 37 * hash + Objects.hashCode(unit); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof Dimension)) { - return false; - } - final Dimension other = (Dimension) obj; - if (!other.canEqual(this)) { - return false; - } - - if (Double.doubleToLongBits(value) - != Double.doubleToLongBits(other.getValue())) { - return false; - } - return unit == other.getUnit(); - } - - public boolean canEqual(final Object obj) { - return obj instanceof Dimension; - } - - public String toString(final String data) { - return String.format("%s{ " - + "value = %f, " - + "unit = \"%s\"%s" - + " }", - super.toString(), - value, - Objects.toString(unit), - data); - } - - @Override - public final String toString() { - - return toString(""); - } - - public String toCss() { - return String.format("%s%s", value, unit.toString().toLowerCase()); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaQuery.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaQuery.java deleted file mode 100644 index 475781879..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaQuery.java +++ /dev/null @@ -1,200 +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 org.libreccm.pagemodel.styles; - -import org.libreccm.core.CoreConstants; - -import java.io.Serializable; -import java.util.Objects; - -import javax.persistence.AttributeOverride; -import javax.persistence.AttributeOverrides; -import javax.persistence.Column; -import javax.persistence.Embedded; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "STYLE_MEDIA_QUERIES", schema = CoreConstants.DB_SCHEMA) -public class MediaQuery implements Serializable { - - private static final long serialVersionUID = 8047120379515301590L; - - @Id - @Column(name = "MEDIA_QUERY_ID") - @GeneratedValue(strategy = GenerationType.AUTO) - private long mediaQueryId; - - @Column(name = "MEDIA_TYPE") - @Enumerated(EnumType.STRING) - private MediaType mediaType; - - @Embedded - @AttributeOverrides({ - @AttributeOverride(name = "value", - column = @Column(name = "MIN_WIDTH_VALUE")) - , - @AttributeOverride(name = "unit", - column = @Column(name = "MIN_WIDTH_UNIT")) - }) - private Dimension minWidth; - - @Embedded - @AttributeOverrides({ - @AttributeOverride(name = "value", - column = @Column(name = "MAX_WIDTH_VALUE")) - , - @AttributeOverride(name = "unit", - column = @Column(name = "MAX_WIDTH_UNIT")) - }) - private Dimension maxWidth; - - public long getMediaQueryId() { - return mediaQueryId; - } - - protected void setMediaQueryId(long mediaQueryId) { - this.mediaQueryId = mediaQueryId; - } - - public MediaType getMediaType() { - return mediaType; - } - - public void setMediaType(final MediaType mediaType) { - this.mediaType = mediaType; - } - - public Dimension getMinWidth() { - return minWidth; - } - - public void setMinWidth(final Dimension minWidth) { - this.minWidth = minWidth; - } - - public Dimension getMaxWidth() { - return maxWidth; - } - - public void setMaxWidth(final Dimension maxWidth) { - this.maxWidth = maxWidth; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 31 * hash + (int) (mediaQueryId ^ (mediaQueryId >>> 32)); - hash = 31 * hash + Objects.hashCode(mediaType); - hash = 31 * hash + Objects.hashCode(minWidth); - hash = 31 * hash + Objects.hashCode(maxWidth); - return hash; - } - - @Override - public boolean equals(final Object obj) { - - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof MediaQuery)) { - return false; - } - final MediaQuery other = (MediaQuery) obj; - if (!other.canEqual(this)) { - return false; - } - if (mediaQueryId != other.getMediaQueryId()) { - return false; - } - if (mediaType != other.getMediaType()) { - return false; - } - if (!Objects.equals(minWidth, other.getMinWidth())) { - return false; - } - return Objects.equals(maxWidth, other.getMaxWidth()); - } - - public boolean canEqual(final Object obj) { - return obj instanceof MediaQuery; - } - - public String toString(final String data) { - - return String.format("%s{ " - + "mediaQueryId = %d, " - + "mediaType = \"%s\", " - + "minWidth = %s, " - + "maxWidth = %s%s" - + " }", - super.toString(), - mediaQueryId, - Objects.toString(mediaType), - Objects.toString(minWidth), - Objects.toString(maxWidth), - data); - } - - @Override - public final String toString() { - return toString(""); - } - - public String toCss() { - - final StringBuilder builder = new StringBuilder("@media"); - - if (mediaType != null) { - builder.append(" ").append(mediaType.toString()).append(" "); - } - - if (minWidth != null) { - if (builder.length() > "@media".length()) { - builder.append(" and "); - } - - builder.append(String.format("(min-width: %s", minWidth.toCss())); - } - - if (maxWidth != null) { - if (builder.length() > "@media".length()) { - builder.append(" and "); - } - - builder.append(String.format("(max-width: %s", maxWidth.toCss())); - } - - - return builder.toString(); - } -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaRule.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaRule.java deleted file mode 100644 index d7ddae3a7..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaRule.java +++ /dev/null @@ -1,170 +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 org.libreccm.pagemodel.styles; - -import org.hibernate.annotations.Cascade; -import org.hibernate.annotations.CascadeType; -import org.libreccm.core.CoreConstants; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.OneToOne; -import javax.persistence.Table; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "STYLE_MEDIA_RULES", schema = CoreConstants.DB_SCHEMA) -public class MediaRule implements Serializable { - - private static final long serialVersionUID = -5776387865481417402L; - - @Id - @Column(name = "MEDIA_RULE_ID") - @GeneratedValue(strategy = GenerationType.AUTO) - private long mediaRuleId; - - @OneToOne - @JoinColumn(name = "MEDIA_QUERY_ID") - @Cascade(CascadeType.ALL) - private MediaQuery mediaQuery; - - @OneToMany - @JoinColumn(name = "STYLE_ID") - @Cascade(CascadeType.ALL) - private List rules; - - public long getMediaRuleId() { - return mediaRuleId; - } - - protected void setMediaRuleId(final long mediaRuleId) { - this.mediaRuleId = mediaRuleId; - } - - public MediaQuery getMediaQuery() { - return mediaQuery; - } - - public void setMediaQuery(final MediaQuery mediaQuery) { - this.mediaQuery = mediaQuery; - } - - public List getRules() { - return Collections.unmodifiableList(rules); - } - - public void setRules(final List rules) { - this.rules = new ArrayList<>(rules); - } - - public void addRule(final Rule rule) { - rules.add(rule); - } - - public void removeRule(final Rule rule) { - rules.remove(rule); - } - - @Override - public int hashCode() { - int hash = 7; - hash = 67 * hash + (int) (mediaRuleId ^ (mediaRuleId >>> 32)); - hash = 67 * hash + Objects.hashCode(mediaQuery); - hash = 67 * hash + Objects.hashCode(rules); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof MediaRule)) { - return false; - } - final MediaRule other = (MediaRule) obj; - if (!other.canEqual(this)) { - return false; - } - if (mediaRuleId != other.getMediaRuleId()) { - return false; - } - if (!Objects.equals(mediaQuery, other.getMediaQuery())) { - return false; - } - return Objects.equals(rules, other.getRules()); - } - - public boolean canEqual(final Object obj) { - return obj instanceof MediaRule; - } - - public String toString(final String data) { - - return String.format("%s{ " - + "mediaRuleId = %d, " - + "mediaQuery = %s, " - + "rules = %s%s" - + " }", - super.toString(), - mediaRuleId, - Objects.toString(mediaQuery), - Objects.toString(rules), - data); - } - - @Override - public final String toString() { - return toString(""); - } - - public String toCss() { - - final String rulesCss = rules - .stream() - .map(Rule::toCss) - .collect(Collectors.joining(";\n%t")); - - return String.format("%s {%n" - + "%s%n" - + "}%n", - mediaQuery.toCss(), - rulesCss); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaType.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaType.java deleted file mode 100644 index 4246be04e..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/MediaType.java +++ /dev/null @@ -1,33 +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 org.libreccm.pagemodel.styles; - -/** - * Media types for CSS. Only the well supported ones are supported - * - * @author Jens Pelzetter - */ -@Deprecated -public enum MediaType { - - ALL, - PRINT, - SCREEN, - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Rule.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Rule.java deleted file mode 100644 index bce018231..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Rule.java +++ /dev/null @@ -1,170 +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 org.libreccm.pagemodel.styles; - -import org.hibernate.annotations.Cascade; -import org.hibernate.annotations.CascadeType; -import org.libreccm.core.CoreConstants; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "STYLE_RULES", schema = CoreConstants.DB_SCHEMA) -public class Rule implements Serializable { - - private static final long serialVersionUID = -4027217790520373364L; - - @Id - @Column(name = "RULE_ID") - @GeneratedValue(strategy = GenerationType.AUTO) - private long ruleId; - - @Column(name = "SELECTOR", length = 2048) - private String selector; - - @OneToMany - @JoinColumn(name = "RULE_ID") - @Cascade({CascadeType.ALL}) - private List properties; - - public Rule() { - properties = new ArrayList<>(); - } - - public long getRuleId() { - return ruleId; - } - - protected void setRuleId(long ruleId) { - this.ruleId = ruleId; - } - - public String getSelector() { - return selector; - } - - public void setSelector(final String selector) { - this.selector = selector; - } - - public List getProperties() { - return Collections.unmodifiableList(properties); - } - - public void setProperties(final List properties) { - this.properties = new ArrayList<>(properties); - } - - public void addProperty(final CssProperty property) { - properties.add(property); - } - - public void removeProperties(final CssProperty property) { - properties.remove(property); - } - - @Override - public int hashCode() { - int hash = 7; - hash = 29 * hash + (int) (ruleId ^ (ruleId >>> 32)); - hash = 29 * hash + Objects.hashCode(selector); - hash = 29 * hash + Objects.hashCode(properties); - return hash; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof Rule)) { - return false; - } - final Rule other = (Rule) obj; - if (!other.canEqual(this)) { - return false; - } - if (ruleId != other.getRuleId()) { - return false; - } - if (!Objects.equals(selector, other.getSelector())) { - return false; - } - return Objects.equals(properties, other.getProperties()); - } - - public boolean canEqual(final Object obj) { - return obj instanceof Rule; - } - - @Override - public final String toString() { - return toString(""); - } - - public String toString(final String data) { - return String.format("%s{ " - + "ruleId = %d, " - + "selector = \"%s\", " - + "properties = %s%s" - + " }", - super.toString(), - ruleId, - selector, - Objects.toString(properties), - data); - } - - public String toCss() { - - final String propertiesCss = properties - .stream() - .map(CssProperty::toCss) - .collect(Collectors.joining(";\n\t")); - - return String.format("%s {%n" - + "%s%n" - + "}%n", - selector, - propertiesCss); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Styles.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Styles.java deleted file mode 100644 index 3401b559b..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Styles.java +++ /dev/null @@ -1,197 +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 org.libreccm.pagemodel.styles; - -import org.hibernate.annotations.Cascade; -import org.hibernate.annotations.CascadeType; -import org.libreccm.core.CoreConstants; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToMany; -import javax.persistence.Table; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@Entity -@Table(name = "STYLES", schema = CoreConstants.DB_SCHEMA) -public class Styles implements Serializable { - - private static final long serialVersionUID = -6166372396205730453L; - - @Id - @Column(name = "STYLE_ID") - @GeneratedValue(strategy = GenerationType.AUTO) - private long styleId; - - @Column(name = "STYLENAME") - private String styleName; - - @OneToMany - @JoinColumn(name = "STYLE_ID") - @Cascade(CascadeType.ALL) - private List rules; - - @OneToMany - @JoinColumn(name = "STYLE_ID") - @Cascade(CascadeType.ALL) - private List mediaRules; - - public long getStyleId() { - return styleId; - } - - public void setStyleId(long styleId) { - this.styleId = styleId; - } - - public String getStyleName() { - return styleName; - } - - public void setStyleName(final String styleName) { - this.styleName = styleName; - } - - public List getRules() { - return Collections.unmodifiableList(rules); - } - - public void setRules(final List rules) { - this.rules = new ArrayList<>(rules); - } - - public void addRule(final Rule rule) { - rules.add(rule); - } - - public void removeRule(final Rule rule) { - rules.remove(rule); - } - - public List getMediaRules() { - return Collections.unmodifiableList(mediaRules); - } - - public void setMediaRules(final List mediaRules) { - this.mediaRules = new ArrayList<>(mediaRules); - } - - public void addMediaRule(final MediaRule mediaRule) { - mediaRules.add(mediaRule); - } - - public void removeMediaRule(final MediaRule mediaRule) { - mediaRules.remove(mediaRule); - } - - @Override - public int hashCode() { - int hash = 5; - hash = 97 * hash + (int) (styleId ^ (styleId >>> 32)); - hash = 97 * hash + Objects.hashCode(styleName); - hash = 97 * hash + Objects.hashCode(rules); - hash = 97 * hash + Objects.hashCode(mediaRules); - return hash; - } - - @Override - public boolean equals(final Object obj) { - - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (!(obj instanceof Styles)) { - return false; - } - final Styles other = (Styles) obj; - if (!other.canEqual(this)) { - return false; - } - - if (styleId != other.getStyleId()) { - return false; - } - if (!Objects.equals(styleName, other.getStyleName())) { - return false; - } - return Objects.equals(rules, other.getRules()); - } - - public boolean canEqual(final Object obj) { - return obj instanceof Styles; - } - - @Override - public final String toString() { - return toString(""); - } - - public String toString(final String data) { - return String.format("%s{ " - + "styleId = %d, " - + "styleName = \"%s\", " - + "rules = %s, " - + "mediaRules = %s%s" - + " }", - super.toString(), - styleId, - styleName, - Objects.toString(rules), - Objects.toString(mediaRules), - data); - } - - public String toCss() { - - final String rulesCss = rules - .stream() - .map(Rule::toCss) - .collect(Collectors.joining(";\n\n")); - final String mediaRulesCss = mediaRules - .stream() - .map(MediaRule::toCss) - .collect(Collectors.joining(";\n\n")); - - final StringBuilder builder = new StringBuilder(); - - return builder - .append(rulesCss) - .append(mediaRulesCss) - .toString(); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/StylesManager.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/StylesManager.java deleted file mode 100644 index f3dd577a9..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/StylesManager.java +++ /dev/null @@ -1,150 +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 org.libreccm.pagemodel.styles; - -import org.libreccm.core.CoreConstants; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; - -import java.io.Serializable; -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class StylesManager implements Serializable { - - private static final long serialVersionUID = -2906584926633549611L; - - @Inject - private StylesRepository stylesRepo; - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - - public void addCssPropertyToRule(final CssProperty property, - final Rule rule) { - - Objects.requireNonNull(property); - Objects.requireNonNull(rule); - - rule.addProperty(property); - stylesRepo.saveRule(rule); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void removeCssPropertyFromRule(final CssProperty property, - final Rule rule) { - - Objects.requireNonNull(property); - Objects.requireNonNull(rule); - - rule.removeProperties(property); - stylesRepo.saveRule(rule); - stylesRepo.deleteCssProperty(property); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void addMediaRuleToStyles(final MediaRule mediaRule, - final Styles styles) { - - Objects.requireNonNull(styles); - Objects.requireNonNull(mediaRule); - - styles.addMediaRule(mediaRule); - stylesRepo.saveStyles(styles); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void removeMediaRuleFromStyles(final MediaRule mediaRule, - final Styles styles) { - - Objects.requireNonNull(styles); - Objects.requireNonNull(mediaRule); - - styles.removeMediaRule(mediaRule); - stylesRepo.saveStyles(styles); - stylesRepo.deleteMediaRule(mediaRule); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void addRuleToMediaRule(final Rule rule, final MediaRule mediaRule) { - - Objects.requireNonNull(rule); - Objects.requireNonNull(mediaRule); - - mediaRule.addRule(rule); - stylesRepo.saveMediaRule(mediaRule); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void removeRuleFromMediaRule(final Rule rule, - final MediaRule mediaRule) { - - Objects.requireNonNull(rule); - Objects.requireNonNull(mediaRule); - - mediaRule.removeRule(rule); - stylesRepo.saveMediaRule(mediaRule); - stylesRepo.deleteRule(rule); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void addRuleToStyles(final Rule rule, final Styles styles) { - - Objects.requireNonNull(rule); - Objects.requireNonNull(styles); - - styles.addRule(rule); - stylesRepo.saveStyles(styles); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void removeRuleFromStyles(final Rule rule, final Styles styles) { - - Objects.requireNonNull(rule); - Objects.requireNonNull(styles); - - styles.removeRule(rule); - stylesRepo.deleteRule(rule); - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/StylesRepository.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/StylesRepository.java deleted file mode 100644 index 2969f11f6..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/StylesRepository.java +++ /dev/null @@ -1,169 +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 org.libreccm.pagemodel.styles; - -import org.libreccm.core.CoreConstants; -import org.libreccm.security.AuthorizationRequired; -import org.libreccm.security.RequiresPrivilege; - -import java.io.Serializable; -import java.util.Objects; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.transaction.Transactional; - -/** - * - * @author Jens Pelzetter - */ -@Deprecated -@RequestScoped -public class StylesRepository implements Serializable { - - private static final long serialVersionUID = 8350984709496516542L; - - @Inject - private EntityManager entityManager; - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void saveCssProperty(final CssProperty cssProperty) { - - Objects.requireNonNull(cssProperty); - - if (cssProperty.getPropertyId() == 0) { - entityManager.persist(cssProperty); - } else { - entityManager.merge(cssProperty); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteCssProperty(final CssProperty cssProperty) { - - Objects.requireNonNull(cssProperty); - - entityManager.remove(cssProperty); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void saveMediaQuery(final MediaQuery mediaQuery) { - - Objects.requireNonNull(mediaQuery); - - if (mediaQuery.getMediaQueryId() == 0) { - entityManager.persist(mediaQuery); - } else { - entityManager.merge(mediaQuery); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteMediaQuery(final MediaQuery mediaQuery){ - - Objects.requireNonNull(mediaQuery); - - entityManager.remove(mediaQuery); - - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void saveMediaRule(final MediaRule mediaRule) { - - Objects.requireNonNull(mediaRule); - - if (mediaRule.getMediaRuleId() == 0) { - entityManager.persist(mediaRule); - } else { - entityManager.merge(mediaRule); - } - - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteMediaRule(final MediaRule mediaRule) { - - Objects.requireNonNull(mediaRule); - - entityManager.remove(mediaRule); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void saveRule(final Rule rule) { - - Objects.requireNonNull(rule); - - if (rule.getRuleId() == 0) { - entityManager.persist(rule); - } else { - entityManager.merge(rule); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteRule(final Rule rule) { - - Objects.requireNonNull(rule); - - entityManager.remove(rule); - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void saveStyles(final Styles styles) { - - Objects.requireNonNull(styles); - - if (styles.getStyleId() == 0) { - entityManager.persist(styles); - } else { - entityManager.merge(styles); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - @AuthorizationRequired - @RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN) - public void deleteStyles(final Styles styles) { - - Objects.requireNonNull(styles); - - entityManager.remove(styles); - - } - -} diff --git a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Unit.java b/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Unit.java deleted file mode 100644 index 5ea6e0e36..000000000 --- a/ccm-core/src/main/java/org/libreccm/pagemodel/styles/Unit.java +++ /dev/null @@ -1,37 +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 org.libreccm.pagemodel.styles; - -/** - * Common units used in CSS for length values. - * - * @author Jens Pelzetter - */ -@Deprecated -public enum Unit { - - EM, - EX, - PERCENT, - PX, - REM, - VH, - VW, - -} diff --git a/ccm-core/src/main/java/org/libreccm/theming/Themes.java b/ccm-core/src/main/java/org/libreccm/theming/Themes.java index f393c5929..d051d3056 100644 --- a/ccm-core/src/main/java/org/libreccm/theming/Themes.java +++ b/ccm-core/src/main/java/org/libreccm/theming/Themes.java @@ -21,7 +21,6 @@ package org.libreccm.theming; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.libreccm.core.UnexpectedErrorException; -import org.libreccm.pagemodel.PageModel; import java.io.InputStream; import java.io.Serializable; @@ -206,7 +205,7 @@ public class Themes implements Serializable { } /** - * Creates HTML from the result of rendering a {@link PageModel}. + * Creates HTML from the result of rendering a model. * * @param page The page to convert to HTML. * @param theme The theme to use. diff --git a/ccm-core/src/main/resources/db/migrations/org/libreccm/ccm_core/h2/V7_0_0_38__remove_page_model_entities.sql b/ccm-core/src/main/resources/db/migrations/org/libreccm/ccm_core/h2/V7_0_0_38__remove_page_model_entities.sql new file mode 100644 index 000000000..901fc4fa4 --- /dev/null +++ b/ccm-core/src/main/resources/db/migrations/org/libreccm/ccm_core/h2/V7_0_0_38__remove_page_model_entities.sql @@ -0,0 +1,10 @@ +drop table CCM_CORE.STYLE_PROPERTIES; +drop table CCM_CORE.STYLE_RULES; +drop table CCM_CORE.STYLE_MEDIA_RULES; +drop table CCM_CORE.STYLE_MEDIA_QUERIES; +drop table CCM_CORE.PAGE_MODEL_COMPONENT_MODELS; +drop table CCM_CORE.PAGE_MODEL_CONTAINER_MODELS; +drop table CCM_CORE.STYLES; +drop table CCM_CORE.PAGE_MODEL_DESCRIPTIONS; +drop table CCM_CORE.PAGE_MODEL_TITLES; +drop table CCM_CORE.PAGE_MODELS; diff --git a/ccm-core/src/main/resources/db/migrations/org/libreccm/ccm_core/pgsql/V7_0_0_38__remove_page_model_entities.sql b/ccm-core/src/main/resources/db/migrations/org/libreccm/ccm_core/pgsql/V7_0_0_38__remove_page_model_entities.sql new file mode 100644 index 000000000..901fc4fa4 --- /dev/null +++ b/ccm-core/src/main/resources/db/migrations/org/libreccm/ccm_core/pgsql/V7_0_0_38__remove_page_model_entities.sql @@ -0,0 +1,10 @@ +drop table CCM_CORE.STYLE_PROPERTIES; +drop table CCM_CORE.STYLE_RULES; +drop table CCM_CORE.STYLE_MEDIA_RULES; +drop table CCM_CORE.STYLE_MEDIA_QUERIES; +drop table CCM_CORE.PAGE_MODEL_COMPONENT_MODELS; +drop table CCM_CORE.PAGE_MODEL_CONTAINER_MODELS; +drop table CCM_CORE.STYLES; +drop table CCM_CORE.PAGE_MODEL_DESCRIPTIONS; +drop table CCM_CORE.PAGE_MODEL_TITLES; +drop table CCM_CORE.PAGE_MODELS;