Search in sources :

Example 46 with Event

use of com.enonic.xp.event.Event in project xp by enonic.

the class ClusterEventReceiver method onMessage.

@Override
public void onMessage(final Message<Event> message) {
    final Member publishingMember = message.getPublishingMember();
    if (publishingMember == null || !publishingMember.localMember()) {
        final Event forwardedEvent = Event.create(message.getMessageObject()).distributed(false).localOrigin(false).build();
        this.eventPublisher.publish(forwardedEvent);
    }
}
Also used : Event(com.enonic.xp.event.Event) Member(com.hazelcast.core.Member)

Example 47 with Event

use of com.enonic.xp.event.Event in project xp by enonic.

the class NodeEventListenerTest method node_renamed_event.

@Test
public void node_renamed_event() throws Exception {
    final NodeId nodeId = NodeId.from("node1");
    final NodePath nodePath = NodePath.create(NodePath.ROOT, "nodeName").build();
    final Node sourceNode = Node.create().id(nodeId).parentPath(nodePath.getParentPath()).name(nodePath.getLastElement().toString()).build();
    final Node movedNode = Node.create(sourceNode).parentPath(NodePath.create("newParent").build()).build();
    final Event localEvent = NodeEvents.renamed(sourceNode.path(), movedNode);
    nodeEventListener.onEvent(Event.create(localEvent).localOrigin(false).build());
    final NodeMovedParams nodeMovedParams = new NodeMovedParams(sourceNode.path(), movedNode.path(), sourceNode.id());
    Mockito.verify(nodeStorageService, Mockito.times(1)).handleNodeMoved(Mockito.eq(nodeMovedParams), Mockito.isA(InternalContext.class));
}
Also used : InternalContext(com.enonic.xp.repo.impl.InternalContext) Node(com.enonic.xp.node.Node) NodeId(com.enonic.xp.node.NodeId) Event(com.enonic.xp.event.Event) NodeMovedParams(com.enonic.xp.repo.impl.storage.NodeMovedParams) NodePath(com.enonic.xp.node.NodePath) Test(org.junit.jupiter.api.Test)

Example 48 with Event

use of com.enonic.xp.event.Event 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<String> repoNames = nodes.stream().map(map -> map.get("repo")).distinct().collect(Collectors.toList());
        if (repoNames.size() != 1) {
            throw new IllegalArgumentException(repoNames.size() > 1 ? "An event cannot contain nodes from different repositories" : "An event must contain 'repo' property");
        }
        final ProjectName currentProjectName = ProjectName.from(RepositoryId.from(repoNames.get(0)));
        if (currentProjectName == null) {
            return;
        }
        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)

Aggregations

Event (com.enonic.xp.event.Event)48 Test (org.junit.jupiter.api.Test)46 Node (com.enonic.xp.node.Node)12 NodeId (com.enonic.xp.node.NodeId)7 NodePath (com.enonic.xp.node.NodePath)7 InternalContext (com.enonic.xp.repo.impl.InternalContext)7 EventListener (com.enonic.xp.event.EventListener)6 TaskInfo (com.enonic.xp.task.TaskInfo)6 NodeBranchEntry (com.enonic.xp.node.NodeBranchEntry)3 ScriptEventListener (com.enonic.xp.script.event.ScriptEventListener)3 Branch (com.enonic.xp.branch.Branch)2 PushNodeEntries (com.enonic.xp.node.PushNodeEntries)2 NodeMovedParams (com.enonic.xp.repo.impl.storage.NodeMovedParams)2 RepositoryId (com.enonic.xp.repository.RepositoryId)2 JsonMapGenerator (com.enonic.xp.script.serializer.JsonMapGenerator)2 MapSerializable (com.enonic.xp.script.serializer.MapSerializable)2 AuthenticationInfo (com.enonic.xp.security.auth.AuthenticationInfo)2 Member (com.hazelcast.core.Member)2 Message (com.hazelcast.core.Message)2 List (java.util.List)2