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()));
});
}
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()));
}
});
}
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());
}
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);
}
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);
}
Aggregations