diff --git a/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteComponent.java b/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteComponent.java deleted file mode 100644 index 6d51dc032..000000000 --- a/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteComponent.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2021 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package org.librecms.profilesite.pagemodel; - -import org.libreccm.pagemodel.ComponentModel; - -import javax.persistence.Entity; -import javax.persistence.Table; - -import static org.librecms.profilesite.ProfileSiteConstants.*; - -/** - * - * @author Jens Pelzetter - */ -@Entity -@Table(name = "PROFILE_SITE_COMPONENTS", schema = DB_SCHEMA) -public class ProfileSiteComponent extends ComponentModel { - - private static final long serialVersionUID = 1L; - - -} diff --git a/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteComponentRenderer.java b/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteComponentRenderer.java deleted file mode 100644 index ee8e799b6..000000000 --- a/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteComponentRenderer.java +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright (C) 2021 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package org.librecms.profilesite.pagemodel; - -import com.arsdigita.kernel.KernelConfig; - -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.configuration.ConfigurationManager; -import org.libreccm.core.CcmObject; -import org.libreccm.pagemodel.ComponentRenderer; -import org.libreccm.pagemodel.RendersComponent; -import org.libreccm.security.PermissionChecker; -import org.librecms.assets.Person; -import org.librecms.contentsection.ContentItem; -import org.librecms.contentsection.ContentItemL10NManager; -import org.librecms.contentsection.ContentItemManager; -import org.librecms.contentsection.ContentItemVersion; -import org.librecms.contentsection.privileges.ItemPrivileges; -import org.librecms.pagemodel.assets.AbstractAssetRenderer; -import org.librecms.pagemodel.assets.AssetRenderers; -import org.librecms.profilesite.ProfileSiteItem; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Instance; -import javax.inject.Inject; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; - -import static org.librecms.pages.PagesConstants.*; - -/** - * - * @author Jens Pelzetter - */ -@RequestScoped -@RendersComponent(componentModel = ProfileSiteComponent.class) -public class ProfileSiteComponentRenderer - implements ComponentRenderer { - - private static final Logger LOGGER = LogManager.getLogger( - ProfileSiteComponentRenderer.class - ); - - @Inject - private AssetRenderers assetRenderers; - - @Inject - private CategoryRepository categoryRepo; - - @Inject - private CategoryManager categoryManager; - - @Inject - private ConfigurationManager confManager; - - @Inject - private ContentItemL10NManager iteml10nManager; - - @Inject - private Instance contentRenderers; - - @Inject - private ContentItemManager itemManager; - - @Inject - private PermissionChecker permissionChecker; - - @Override - public Map renderComponent( - final ProfileSiteComponent 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.get(PARAMETER_CATEGORY) instanceof Category)) { - throw new IllegalArgumentException( - String.format( - "The parameters map passed to this ProfileSiteComponent " - + "component contains the parameter \"category\", but " - + "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 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 ProfileSiteItem)) { - LOGGER.debug( - "The index item of the category {} is not an item of " - + "the class", - ProfileSiteItem.class.getName() - ); - return Collections.emptyMap(); - } - - final ProfileSiteItem profileSiteItem = (ProfileSiteItem) indexObj - .get(); - - if (Boolean.TRUE.equals(parameters.get("showDraft"))) { - final ProfileSiteItem draftItem = itemManager - .getDraftVersion(profileSiteItem, profileSiteItem.getClass()); - - if (permissionChecker.isPermitted( - ItemPrivileges.PREVIEW, draftItem - )) { - final Map result = generateItem( - componentModel, parameters, draftItem - ); - result.put("showDraft", Boolean.TRUE); - - return result; - } else { - throw new WebApplicationException( - "You are not permitted to view the draft version of " - + "this profile site.", - Response.Status.UNAUTHORIZED - ); - } - } else { - final ProfileSiteItem liveItem = itemManager - .getLiveVersion(profileSiteItem, profileSiteItem.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 profile site.", - Response.Status.UNAUTHORIZED); - } - } - } else { - LOGGER.debug("The category {} does not have a index item.", - Objects.toString(category)); - return Collections.emptyMap(); - } - } - - protected Map generateItem( - final ProfileSiteComponent componentModel, - final Map parameters, - final ProfileSiteItem profileSiteItem - ) { - final Category category = (Category) parameters.get(PARAMETER_CATEGORY); - final String categoryName = category.getName(); - - final Optional result = contentRenderers - .stream() - .filter(renderer -> categoryName.equals(renderer.getCategoryName())) - .findAny(); - - if (result.isPresent()) { - return result.get().renderContent( - componentModel, parameters, profileSiteItem - ); - } else { - return renderProfileSiteIndexPage(parameters, profileSiteItem); - } - } - - private Map renderProfileSiteIndexPage( - final Map parameters, - final ProfileSiteItem profileSiteItem - ) { - 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(profileSiteItem, language)) { - - final Map result = new HashMap<>(); - - result.put( - "owner", renderOwner(profileSiteItem.getOwner(), language) - ); - result.put( - "position", profileSiteItem.getPosition().getValue(language) - ); - result.put( - "interests", profileSiteItem.getInterests().getValue(language) - ); - result.put( - "misc", profileSiteItem.getMisc().getValue(language) - ); - - return result; - } else { - throw new NotFoundException( - "Requested language is not available."); - } - } - - private Map renderOwner( - final Person owner, final Locale language - ) { - final AbstractAssetRenderer renderer = assetRenderers.findRenderer( - owner.getClass() - ); - - return renderer.render(owner, language); - } - -} diff --git a/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteContentRenderer.java b/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteContentRenderer.java deleted file mode 100644 index 7310d4065..000000000 --- a/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/ProfileSiteContentRenderer.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2021 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package org.librecms.profilesite.pagemodel; - -import org.librecms.profilesite.ProfileSiteItem; - -import java.util.Map; - -/** - * - * @author Jens Pelzetter - */ -public interface ProfileSiteContentRenderer { - - /** - * Provides the category name for which this renderer is responsible. - * - * @return The category name for which this renderer is responsible. - */ - String getCategoryName(); - - /** - * Renders special content for a profile site depending on the current - * category. - * - * @param componentModel - * @param parameters - * @param profileSiteItem - * - * @return - */ - Map renderContent( - ProfileSiteComponent componentModel, - Map parameters, - ProfileSiteItem profileSiteItem - ); - -} diff --git a/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/contentitem/ProfileSiteItemRenderer.java b/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/contentitem/ProfileSiteItemRenderer.java deleted file mode 100644 index 83733d668..000000000 --- a/ccm-cms-profile/src/main/java/org/librecms/profilesite/pagemodel/contentitem/ProfileSiteItemRenderer.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2021 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package org.librecms.profilesite.pagemodel.contentitem; - -import org.librecms.contentsection.ContentItem; -import org.librecms.pagemodel.assets.AssetRenderers; -import org.librecms.pagemodel.contentitems.AbstractContentItemRenderer; -import org.librecms.pagemodel.contentitems.ContentItemRenderer; -import org.librecms.profilesite.ProfileSiteItem; - -import java.util.Locale; -import java.util.Map; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; - -/** - * - * @author Jens Pelzetter - */ -@ContentItemRenderer(renders = ProfileSiteItem.class) -@RequestScoped -public class ProfileSiteItemRenderer extends AbstractContentItemRenderer { - - private static final long serialVersionUID = 1L; - - - @Inject - private AssetRenderers assetRenderers; - - @Override - protected void renderItem( - final ContentItem item, - final Locale language, - final Map result - ) { - // Nothing -// final ProfileSiteItem profileSiteItem; -// if (item instanceof ProfileSiteItem) { -// profileSiteItem = (ProfileSiteItem) item; -// } else { -// return; -// } - } - - @Override - protected AssetRenderers getAssetRenderers() { - return assetRenderers; - } - -}