Search in sources :

Example 46 with Branch

use of com.enonic.xp.branch.Branch in project xp by enonic.

the class DeleteContentCommand method deleteNodeInDraftAndMaster.

private void deleteNodeInDraftAndMaster(final NodeId nodeToDelete, final DeleteContentsResult.Builder result) {
    final Context draftContext = ContextAccessor.current();
    final Context masterContext = ContextBuilder.from(draftContext).branch(ContentConstants.BRANCH_MASTER).build();
    final Node draftRootNode = nodeService.getById(nodeToDelete);
    final NodeIds draftNodes = deleteNodeInContext(nodeToDelete, draftContext);
    final NodeIds masterNodes = deleteNodeInContext(nodeToDelete, masterContext);
    result.addDeleted(ContentIds.from(draftNodes.getAsStrings()));
    result.addUnpublished(ContentIds.from(masterNodes.getAsStrings()));
    final NodeIds masterIdsByDraftPath = masterContext.callWith(() -> this.nodeService.findByParent(FindNodesByParentParams.create().parentPath(draftRootNode.path()).recursive(true).build()).getNodeIds());
    Stream.concat(masterIdsByDraftPath.stream(), draftNodes.stream()).filter(id -> !masterNodes.contains(id)).forEach(id -> {
        deleteNodeInContext(id, masterContext);
        result.addUnpublished(ContentId.from(id.toString()));
    });
}
Also used : Context(com.enonic.xp.context.Context) RefreshMode(com.enonic.xp.node.RefreshMode) ContentConstants(com.enonic.xp.content.ContentConstants) Node(com.enonic.xp.node.Node) NodeComparison(com.enonic.xp.node.NodeComparison) Branch(com.enonic.xp.branch.Branch) DeleteContentParams(com.enonic.xp.content.DeleteContentParams) ContentId(com.enonic.xp.content.ContentId) ContextAccessor(com.enonic.xp.context.ContextAccessor) ContextBuilder(com.enonic.xp.context.ContextBuilder) ContentAccessException(com.enonic.xp.content.ContentAccessException) NodePath(com.enonic.xp.node.NodePath) ContentNotFoundException(com.enonic.xp.content.ContentNotFoundException) NodeId(com.enonic.xp.node.NodeId) SetNodeStateParams(com.enonic.xp.node.SetNodeStateParams) Stream(java.util.stream.Stream) NodeState(com.enonic.xp.node.NodeState) ContentIds(com.enonic.xp.content.ContentIds) DeleteNodeListener(com.enonic.xp.node.DeleteNodeListener) FindNodesByParentResult(com.enonic.xp.node.FindNodesByParentResult) NodeAccessException(com.enonic.xp.node.NodeAccessException) Preconditions(com.google.common.base.Preconditions) Context(com.enonic.xp.context.Context) FindNodesByParentParams(com.enonic.xp.node.FindNodesByParentParams) DeleteContentsResult(com.enonic.xp.content.DeleteContentsResult) NodeIds(com.enonic.xp.node.NodeIds) CompareStatus(com.enonic.xp.content.CompareStatus) NodeIds(com.enonic.xp.node.NodeIds) Node(com.enonic.xp.node.Node)

Example 47 with Branch

use of com.enonic.xp.branch.Branch in project xp by enonic.

the class ProjectContentEventListener method doHandleContentEvent.

private void doHandleContentEvent(final List<Map<String, String>> nodes, final String type) {
    createAdminContext().runWith(() -> {
        final Branch branch = Branch.from(nodes.stream().findAny().orElseThrow(() -> new IllegalArgumentException("nodes cannot be empty")).get("branch"));
        if (!ContentConstants.BRANCH_DRAFT.equals(branch)) {
            return;
        }
        final List<ContentId> contentIds = nodes.stream().map(map -> ContentId.from(map.get("id"))).collect(Collectors.toList());
        final List<ProjectName> projectNames = nodes.stream().map(map -> map.get("repo")).distinct().map(repo -> ProjectName.from(RepositoryId.from(repo))).collect(Collectors.toList());
        if (projectNames.size() != 1) {
            throw new IllegalArgumentException(projectNames.size() > 1 ? "An event cannot contain nodes from different repositories" : "An event must contain 'repo' property");
        }
        final ProjectName currentProjectName = projectNames.get(0);
        final Project sourceProject = this.projectService.list().stream().filter(project -> currentProjectName.equals(project.getName())).findAny().orElseThrow(() -> new ProjectNotFoundException(currentProjectName));
        this.projectService.list().stream().filter(project -> currentProjectName.equals(project.getParent())).forEach(targetProject -> {
            final ContentEventsSyncParams.Builder paramsBuilder = ContentEventsSyncParams.create().addContentIds(contentIds).sourceProject(sourceProject.getName()).targetProject(targetProject.getName());
            switch(type) {
                case "node.created":
                case "node.duplicated":
                    paramsBuilder.syncEventType(ContentSyncEventType.CREATED);
                    break;
                case "node.updated":
                case "node.pushed":
                    paramsBuilder.syncEventType(ContentSyncEventType.UPDATED);
                    break;
                case "node.manualOrderUpdated":
                    paramsBuilder.syncEventType(ContentSyncEventType.MANUAL_ORDER_UPDATED);
                    break;
                case "node.sorted":
                    paramsBuilder.syncEventType(ContentSyncEventType.SORTED);
                    break;
                case "node.renamed":
                    paramsBuilder.syncEventType(ContentSyncEventType.RENAMED);
                    break;
                case "node.moved":
                    paramsBuilder.syncEventType(ContentSyncEventType.MOVED);
                    break;
                case "node.deleted":
                    paramsBuilder.syncEventType(ContentSyncEventType.DELETED);
                    break;
                default:
                    LOG.debug("Ignoring node type: {}", type);
                    break;
            }
            final ContentEventsSyncParams params = paramsBuilder.build();
            if (params.getSyncType() != null) {
                contentSynchronizer.sync(params);
            }
        });
        if (sourceProject.getParent() != null && "node.deleted".equals(type)) {
            this.projectService.list().stream().filter(project -> project.getName().equals(sourceProject.getParent())).forEach(parentProject -> contentSynchronizer.sync(ContentSyncParams.create().addContentIds(contentIds).sourceProject(parentProject.getName()).targetProject(sourceProject.getName()).build()));
        }
    });
}
Also used : EventListener(com.enonic.xp.event.EventListener) ContentConstants(com.enonic.xp.content.ContentConstants) LoggerFactory(org.slf4j.LoggerFactory) Branch(com.enonic.xp.branch.Branch) ContentId(com.enonic.xp.content.ContentId) Component(org.osgi.service.component.annotations.Component) RepositoryId(com.enonic.xp.repository.RepositoryId) ContextAccessor(com.enonic.xp.context.ContextAccessor) Duration(java.time.Duration) Map(java.util.Map) ProjectName(com.enonic.xp.project.ProjectName) Activate(org.osgi.service.component.annotations.Activate) ContextBuilder(com.enonic.xp.context.ContextBuilder) Event(com.enonic.xp.event.Event) User(com.enonic.xp.security.User) ProjectService(com.enonic.xp.project.ProjectService) Logger(org.slf4j.Logger) Deactivate(org.osgi.service.component.annotations.Deactivate) AuthenticationInfo(com.enonic.xp.security.auth.AuthenticationInfo) Project(com.enonic.xp.project.Project) Collectors(java.util.stream.Collectors) Executors(java.util.concurrent.Executors) List(java.util.List) ProjectNotFoundException(com.enonic.xp.project.ProjectNotFoundException) PrincipalKey(com.enonic.xp.security.PrincipalKey) SimpleExecutor(com.enonic.xp.core.internal.concurrent.SimpleExecutor) RoleKeys(com.enonic.xp.security.RoleKeys) Context(com.enonic.xp.context.Context) Reference(org.osgi.service.component.annotations.Reference) Project(com.enonic.xp.project.Project) ProjectNotFoundException(com.enonic.xp.project.ProjectNotFoundException) ProjectName(com.enonic.xp.project.ProjectName) Branch(com.enonic.xp.branch.Branch) ContentId(com.enonic.xp.content.ContentId)

Example 48 with Branch

use of com.enonic.xp.branch.Branch in project xp by enonic.

the class ResolveContentsToBePublishedCommand method getWorkResult.

private ResolveSyncWorkResult getWorkResult(final ContentId contentId) {
    final NodeIds nodeIds = excludedContentIds != null ? NodeIds.from(excludedContentIds.stream().map(id -> NodeId.from(id.toString())).collect(Collectors.toList())) : NodeIds.empty();
    final boolean includeChildren = excludeChildrenIds == null || !this.excludeChildrenIds.contains(contentId);
    return nodeService.resolveSyncWork(SyncWorkResolverParams.create().includeChildren(includeChildren).includeDependencies(this.includeDependencies).nodeId(NodeId.from(contentId.toString())).excludedNodeIds(nodeIds).branch(this.target).statusesToStopDependenciesSearch(Set.of(CompareStatus.EQUAL)).build());
}
Also used : ContentId(com.enonic.xp.content.ContentId) ResolveSyncWorkResult(com.enonic.xp.node.ResolveSyncWorkResult) ContentIds(com.enonic.xp.content.ContentIds) Set(java.util.Set) Preconditions(com.google.common.base.Preconditions) Collectors(java.util.stream.Collectors) Branch(com.enonic.xp.branch.Branch) NodeIds(com.enonic.xp.node.NodeIds) CompareContentResults(com.enonic.xp.content.CompareContentResults) CompareStatus(com.enonic.xp.content.CompareStatus) NodeId(com.enonic.xp.node.NodeId) SyncWorkResolverParams(com.enonic.xp.node.SyncWorkResolverParams) NodeIds(com.enonic.xp.node.NodeIds)

Example 49 with Branch

use of com.enonic.xp.branch.Branch in project xp by enonic.

the class GetActiveVersionHandler method execute.

@Override
public Object execute() {
    final NodeId nodeId = getNodeId(key);
    if (nodeId == null) {
        return null;
    }
    final Branch branch = ContextAccessor.current().getBranch();
    final GetActiveNodeVersionsParams params = GetActiveNodeVersionsParams.create().nodeId(nodeId).branches(Branches.from(branch)).build();
    final NodeVersionMetadata nodeVersionMetadata = nodeService.getActiveVersions(params).getNodeVersions().get(branch);
    if (nodeVersionMetadata == null) {
        return null;
    }
    return new NodeVersionMapper(nodeVersionMetadata);
}
Also used : Branch(com.enonic.xp.branch.Branch) NodeVersionMetadata(com.enonic.xp.node.NodeVersionMetadata) NodeId(com.enonic.xp.node.NodeId) GetActiveNodeVersionsParams(com.enonic.xp.node.GetActiveNodeVersionsParams)

Example 50 with Branch

use of com.enonic.xp.branch.Branch in project xp by enonic.

the class DeleteBranchHandler method doDeleteBranch.

private BranchMapper doDeleteBranch() {
    final RepositoryId repositoryId = ContextAccessor.current().getRepositoryId();
    if (isProtectedBranch(repositoryId, Branch.from(this.branchId))) {
        throw new RepositoryExeption("No allowed to delete branch [" + this.branchId + "] in repository [" + repositoryId + "]");
    }
    final DeleteBranchParams deleteBranchParams = DeleteBranchParams.from(branchId);
    final Branch deletedBranch = repositoryServiceSupplier.get().deleteBranch(deleteBranchParams);
    return deletedBranch == null ? null : new BranchMapper(deletedBranch);
}
Also used : RepositoryExeption(com.enonic.xp.repository.RepositoryExeption) Branch(com.enonic.xp.branch.Branch) RepositoryId(com.enonic.xp.repository.RepositoryId) DeleteBranchParams(com.enonic.xp.repository.DeleteBranchParams) BranchMapper(com.enonic.xp.lib.repo.mapper.BranchMapper)

Aggregations

Branch (com.enonic.xp.branch.Branch)52 Test (org.junit.jupiter.api.Test)19 Node (com.enonic.xp.node.Node)13 RepositoryId (com.enonic.xp.repository.RepositoryId)12 Context (com.enonic.xp.context.Context)10 NodeId (com.enonic.xp.node.NodeId)8 AbstractNodeTest (com.enonic.xp.repo.impl.node.AbstractNodeTest)8 Repository (com.enonic.xp.repository.Repository)7 ContextAccessor (com.enonic.xp.context.ContextAccessor)5 ContextBuilder (com.enonic.xp.context.ContextBuilder)5 ContentId (com.enonic.xp.content.ContentId)4 PropertyTree (com.enonic.xp.data.PropertyTree)4 CreateBranchParams (com.enonic.xp.repository.CreateBranchParams)4 ContentConstants (com.enonic.xp.content.ContentConstants)3 CreateNodeParams (com.enonic.xp.node.CreateNodeParams)3 FindNodesByParentResult (com.enonic.xp.node.FindNodesByParentResult)3 GetActiveNodeVersionsResult (com.enonic.xp.node.GetActiveNodeVersionsResult)3 NodeIds (com.enonic.xp.node.NodeIds)3 NodePath (com.enonic.xp.node.NodePath)3 NodeVersionMetadata (com.enonic.xp.node.NodeVersionMetadata)3