parent
a63147b480
commit
5adf223121
|
|
@ -54,11 +54,14 @@ import java.util.Optional;
|
|||
import org.librecms.contentsection.privileges.TypePrivileges;
|
||||
import org.librecms.dispatcher.ItemResolver;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.enterprise.inject.Instance;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaDelete;
|
||||
import javax.persistence.criteria.Root;
|
||||
|
||||
import static org.librecms.contentsection.ContentSection.*;
|
||||
|
||||
|
|
@ -675,33 +678,88 @@ public class ContentSectionManager {
|
|||
public void deleteContentSection(final ContentSection section) {
|
||||
Objects.requireNonNull(section);
|
||||
|
||||
try {
|
||||
for (final ContentType type : section.getContentTypes()) {
|
||||
@SuppressWarnings("unchecked")
|
||||
final Class<? extends ContentItem> clazz
|
||||
= (Class<? extends ContentItem>) Class.forName(
|
||||
type.getContentItemClass()
|
||||
final CriteriaBuilder criteriaBuilder = entityManager
|
||||
.getCriteriaBuilder();
|
||||
|
||||
if (!section.getContentTypes().isEmpty()) {
|
||||
final CriteriaDelete<ContentType> contentTypeDelete
|
||||
= criteriaBuilder
|
||||
.createCriteriaDelete(ContentType.class);
|
||||
final Root<ContentType> contentTypeRoot = contentTypeDelete.from(
|
||||
ContentType.class
|
||||
);
|
||||
removeContentTypeFromSection(clazz, section);
|
||||
}
|
||||
} catch (ClassNotFoundException ex) {
|
||||
throw new UnexpectedErrorException(ex);
|
||||
}
|
||||
for (final LifecycleDefinition lifecycle : section
|
||||
.getLifecycleDefinitions()) {
|
||||
removeLifecycleDefinitionFromContentSection(
|
||||
lifecycle, section
|
||||
contentTypeDelete.where(
|
||||
criteriaBuilder.equal(
|
||||
contentTypeRoot.get("contentSection"),
|
||||
section
|
||||
)
|
||||
);
|
||||
}
|
||||
for (final Role role : section.getRoles()) {
|
||||
removeRoleFromContentSection(section, role);
|
||||
}
|
||||
for (final Workflow workflow : section.getWorkflowTemplates()) {
|
||||
removeWorkflowTemplateFromContentSection(workflow, section);
|
||||
entityManager.createQuery(contentTypeDelete).executeUpdate();
|
||||
}
|
||||
|
||||
folderRepository.delete(section.getRootAssetsFolder());
|
||||
folderRepository.delete(section.getRootDocumentsFolder());
|
||||
if (!section.getLifecycleDefinitions().isEmpty()) {
|
||||
final CriteriaDelete<LifecycleDefinition> lifecycleDelete
|
||||
= criteriaBuilder
|
||||
.createCriteriaDelete(LifecycleDefinition.class);
|
||||
final Root<LifecycleDefinition> lifecycleRoot = lifecycleDelete
|
||||
.from(LifecycleDefinition.class);
|
||||
lifecycleDelete.where(
|
||||
criteriaBuilder
|
||||
.in(lifecycleRoot.get("definitionId"))
|
||||
.value(
|
||||
section
|
||||
.getLifecycleDefinitions()
|
||||
.stream()
|
||||
.map(LifecycleDefinition::getDefinitionId)
|
||||
.collect(Collectors.toSet())
|
||||
)
|
||||
);
|
||||
entityManager.createQuery(lifecycleDelete).executeUpdate();
|
||||
}
|
||||
|
||||
section.setRoles(Collections.emptyList());
|
||||
sectionRepo.save(section);
|
||||
|
||||
if (!section.getWorkflowTemplates().isEmpty()) {
|
||||
final CriteriaDelete<Workflow> workflowDelete = criteriaBuilder
|
||||
.createCriteriaDelete(Workflow.class);
|
||||
final Root<Workflow> workflowRoot = workflowDelete.from(
|
||||
Workflow.class);
|
||||
workflowDelete.where(
|
||||
criteriaBuilder
|
||||
.in(workflowRoot.get("workflowId"))
|
||||
.value(
|
||||
section
|
||||
.getWorkflowTemplates()
|
||||
.stream()
|
||||
.map(Workflow::getWorkflowId)
|
||||
.collect(Collectors.toSet())
|
||||
)
|
||||
);
|
||||
entityManager.createQuery(workflowDelete).executeUpdate();
|
||||
}
|
||||
|
||||
final Folder rootAssetsFolder = section.getRootAssetsFolder();
|
||||
final Folder rootDocumentsFolder = section.getRootDocumentsFolder();
|
||||
|
||||
section.setRootAssetsFolder(null);
|
||||
section.setRootDocumentFolder(null);
|
||||
sectionRepo.save(section);
|
||||
|
||||
folderRepository.delete(rootAssetsFolder);
|
||||
folderRepository.delete(rootDocumentsFolder);
|
||||
|
||||
if (!section.getPermissions().isEmpty()) {
|
||||
final CriteriaDelete<Permission> permissionsDelete = criteriaBuilder
|
||||
.createCriteriaDelete(Permission.class);
|
||||
final Root<Permission> permissionRoot = permissionsDelete.from(
|
||||
Permission.class
|
||||
);
|
||||
permissionsDelete.where(
|
||||
criteriaBuilder.equal(permissionRoot.get("object"), section)
|
||||
);
|
||||
entityManager.createQuery(permissionsDelete).executeUpdate();
|
||||
}
|
||||
|
||||
sectionRepo.delete(section);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import org.apache.logging.log4j.Logger;
|
|||
import org.libreccm.categorization.Category;
|
||||
import org.libreccm.core.AbstractEntityRepository;
|
||||
import org.libreccm.security.AuthorizationRequired;
|
||||
import org.libreccm.security.Permission;
|
||||
import org.libreccm.security.RequiresPrivilege;
|
||||
import org.librecms.contentsection.privileges.ItemPrivileges;
|
||||
|
||||
|
|
@ -30,10 +31,14 @@ import java.util.List;
|
|||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
import javax.persistence.TypedQuery;
|
||||
import javax.persistence.criteria.CriteriaBuilder;
|
||||
import javax.persistence.criteria.CriteriaDelete;
|
||||
import javax.persistence.criteria.Root;
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
/**
|
||||
|
|
@ -225,8 +230,8 @@ public class FolderRepository extends AbstractEntityRepository<Long, Folder> {
|
|||
@Override
|
||||
public void save(
|
||||
@RequiresPrivilege(ItemPrivileges.CREATE_NEW)
|
||||
final Folder folder) {
|
||||
|
||||
final Folder folder
|
||||
) {
|
||||
super.save(folder);
|
||||
}
|
||||
|
||||
|
|
@ -235,7 +240,30 @@ public class FolderRepository extends AbstractEntityRepository<Long, Folder> {
|
|||
@Override
|
||||
public void delete(
|
||||
@RequiresPrivilege(ItemPrivileges.CREATE_NEW)
|
||||
final Folder folder) {
|
||||
final Folder folder
|
||||
) {
|
||||
final CriteriaBuilder criteriaBuilder = getEntityManager()
|
||||
.getCriteriaBuilder();
|
||||
final CriteriaDelete<Permission> permissionsDelete = criteriaBuilder
|
||||
.createCriteriaDelete(Permission.class);
|
||||
final Root<Permission> permissionRoot = permissionsDelete.from(
|
||||
Permission.class
|
||||
);
|
||||
permissionsDelete.where(
|
||||
criteriaBuilder.equal(permissionRoot.get("object"), folder)
|
||||
);
|
||||
// permissionsDelete.where(
|
||||
// criteriaBuilder
|
||||
// .in(permissionRoot.get("permissionId"))
|
||||
// .value(
|
||||
// folder
|
||||
// .getPermissions()
|
||||
// .stream()
|
||||
// .map(Permission::getPermissionId)
|
||||
// .collect(Collectors.toSet())
|
||||
// )
|
||||
// );
|
||||
getEntityManager().createQuery(permissionsDelete).executeUpdate();
|
||||
|
||||
super.delete(folder);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue