Remvoed some classes still depending on PageModel

deploy_packages_to_gitea
Jens Pelzetter 2022-04-02 18:00:03 +02:00
parent 8ba0bddf04
commit f2ecb745d9
4 changed files with 0 additions and 443 deletions

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@Entity
@Table(name = "PROFILE_SITE_COMPONENTS", schema = DB_SCHEMA)
public class ProfileSiteComponent extends ComponentModel {
private static final long serialVersionUID = 1L;
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@RendersComponent(componentModel = ProfileSiteComponent.class)
public class ProfileSiteComponentRenderer
implements ComponentRenderer<ProfileSiteComponent> {
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<ProfileSiteContentRenderer> contentRenderers;
@Inject
private ContentItemManager itemManager;
@Inject
private PermissionChecker permissionChecker;
@Override
public Map<String, Object> renderComponent(
final ProfileSiteComponent componentModel,
final Map<String, Object> 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<CcmObject> 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<String, Object> 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<String, Object> generateItem(
final ProfileSiteComponent componentModel,
final Map<String, Object> parameters,
final ProfileSiteItem profileSiteItem
) {
final Category category = (Category) parameters.get(PARAMETER_CATEGORY);
final String categoryName = category.getName();
final Optional<ProfileSiteContentRenderer> 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<String, Object> renderProfileSiteIndexPage(
final Map<String, Object> 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<String, Object> 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<String, Object> renderOwner(
final Person owner, final Locale language
) {
final AbstractAssetRenderer renderer = assetRenderers.findRenderer(
owner.getClass()
);
return renderer.render(owner, language);
}
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
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<String, Object> renderContent(
ProfileSiteComponent componentModel,
Map<String, Object> parameters,
ProfileSiteItem profileSiteItem
);
}

View File

@ -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 <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@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<String, Object> result
) {
// Nothing
// final ProfileSiteItem profileSiteItem;
// if (item instanceof ProfileSiteItem) {
// profileSiteItem = (ProfileSiteItem) item;
// } else {
// return;
// }
}
@Override
protected AssetRenderers getAssetRenderers() {
return assetRenderers;
}
}