diff --git a/api/src/main/java/run/halo/app/event/post/PostDeletedEvent.java b/api/src/main/java/run/halo/app/event/post/PostDeletedEvent.java new file mode 100644 index 000000000..7330f8efa --- /dev/null +++ b/api/src/main/java/run/halo/app/event/post/PostDeletedEvent.java @@ -0,0 +1,24 @@ +package run.halo.app.event.post; + +import run.halo.app.core.extension.content.Post; +import run.halo.app.plugin.SharedEvent; + +@SharedEvent +public class PostDeletedEvent extends PostEvent { + + private final Post post; + + public PostDeletedEvent(Object source, Post post) { + super(source, post.getMetadata().getName()); + this.post = post; + } + + /** + * Get original post. + * + * @return original post. + */ + public Post getPost() { + return post; + } +} diff --git a/api/src/main/java/run/halo/app/event/post/PostEvent.java b/api/src/main/java/run/halo/app/event/post/PostEvent.java new file mode 100644 index 000000000..1d672b220 --- /dev/null +++ b/api/src/main/java/run/halo/app/event/post/PostEvent.java @@ -0,0 +1,27 @@ +package run.halo.app.event.post; + +import org.springframework.context.ApplicationEvent; + +/** + * An abstract class for post events. + * + * @author johnniang + */ +public abstract class PostEvent extends ApplicationEvent { + + private final String name; + + public PostEvent(Object source, String name) { + super(source); + this.name = name; + } + + /** + * Gets post metadata name. + * + * @return post metadata name + */ + public String getName() { + return name; + } +} diff --git a/api/src/main/java/run/halo/app/event/post/PostPublishedEvent.java b/api/src/main/java/run/halo/app/event/post/PostPublishedEvent.java new file mode 100644 index 000000000..0c446d864 --- /dev/null +++ b/api/src/main/java/run/halo/app/event/post/PostPublishedEvent.java @@ -0,0 +1,12 @@ +package run.halo.app.event.post; + +import run.halo.app.plugin.SharedEvent; + +@SharedEvent +public class PostPublishedEvent extends PostEvent { + + public PostPublishedEvent(Object source, String postName) { + super(source, postName); + } + +} diff --git a/api/src/main/java/run/halo/app/event/post/PostUnpublishedEvent.java b/api/src/main/java/run/halo/app/event/post/PostUnpublishedEvent.java new file mode 100644 index 000000000..52c1c03e3 --- /dev/null +++ b/api/src/main/java/run/halo/app/event/post/PostUnpublishedEvent.java @@ -0,0 +1,12 @@ +package run.halo.app.event.post; + +import run.halo.app.plugin.SharedEvent; + +@SharedEvent +public class PostUnpublishedEvent extends PostEvent { + + public PostUnpublishedEvent(Object source, String postName) { + super(source, postName); + } + +} diff --git a/api/src/main/java/run/halo/app/event/post/PostUpdatedEvent.java b/api/src/main/java/run/halo/app/event/post/PostUpdatedEvent.java new file mode 100644 index 000000000..74c9123d5 --- /dev/null +++ b/api/src/main/java/run/halo/app/event/post/PostUpdatedEvent.java @@ -0,0 +1,12 @@ +package run.halo.app.event.post; + +import run.halo.app.plugin.SharedEvent; + +@SharedEvent +public class PostUpdatedEvent extends PostEvent { + + public PostUpdatedEvent(Object source, String postName) { + super(source, postName); + } + +} diff --git a/api/src/main/java/run/halo/app/event/post/PostVisibleChangedEvent.java b/api/src/main/java/run/halo/app/event/post/PostVisibleChangedEvent.java new file mode 100644 index 000000000..c3579f847 --- /dev/null +++ b/api/src/main/java/run/halo/app/event/post/PostVisibleChangedEvent.java @@ -0,0 +1,30 @@ +package run.halo.app.event.post; + +import org.springframework.lang.Nullable; +import run.halo.app.core.extension.content.Post; +import run.halo.app.plugin.SharedEvent; + +@SharedEvent +public class PostVisibleChangedEvent extends PostEvent { + + @Nullable + private final Post.VisibleEnum oldVisible; + + private final Post.VisibleEnum newVisible; + + public PostVisibleChangedEvent(Object source, String postName, + @Nullable Post.VisibleEnum oldVisible, Post.VisibleEnum newVisible) { + super(source, postName); + this.oldVisible = oldVisible; + this.newVisible = newVisible; + } + + @Nullable + public Post.VisibleEnum getOldVisible() { + return oldVisible; + } + + public Post.VisibleEnum getNewVisible() { + return newVisible; + } +} diff --git a/application/src/main/java/run/halo/app/plugin/SharedEvent.java b/api/src/main/java/run/halo/app/plugin/SharedEvent.java similarity index 82% rename from application/src/main/java/run/halo/app/plugin/SharedEvent.java rename to api/src/main/java/run/halo/app/plugin/SharedEvent.java index 3174c5e43..a62026c9d 100644 --- a/application/src/main/java/run/halo/app/plugin/SharedEvent.java +++ b/api/src/main/java/run/halo/app/plugin/SharedEvent.java @@ -9,8 +9,7 @@ import java.lang.annotation.Target; /** *

It is a symbolic annotation.

*

When the event marked with {@link SharedEvent} annotation is published, it will be - * broadcast to the application context of the plugin by - * {@link PluginApplicationEventBridgeDispatcher}.

+ * broadcast to the application context of the plugin. * * @author guqing * @since 2.0.0 diff --git a/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java b/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java index 3aa197002..2c36d022b 100644 --- a/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java +++ b/application/src/main/java/run/halo/app/core/extension/reconciler/PostReconciler.java @@ -15,6 +15,7 @@ import com.google.common.hash.Hashing; import java.time.Duration; import java.time.Instant; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -88,7 +89,7 @@ public class PostReconciler implements Reconciler { @Override public Result reconcile(Request request) { - var events = new HashSet(); + var events = new LinkedHashSet(); client.fetch(Post.class, request.name()) .ifPresent(post -> { if (ExtensionOperator.isDeleted(post)) { @@ -104,7 +105,7 @@ public class PostReconciler implements Reconciler { } addFinalizers(post.getMetadata(), Set.of(FINALIZER_NAME)); - populateLabels(post); + populateLabels(post, events); schedulePublishIfNecessary(post); @@ -195,7 +196,7 @@ public class PostReconciler implements Reconciler { return Result.doNotRetry(); } - private void populateLabels(Post post) { + private void populateLabels(Post post, Set events) { var labels = nullSafeLabels(post); labels.put(Post.DELETED_LABEL, String.valueOf(isTrue(post.getSpec().getDeleted()))); @@ -203,8 +204,7 @@ public class PostReconciler implements Reconciler { var oldVisible = VisibleEnum.from(labels.get(Post.VISIBLE_LABEL)); if (!Objects.equals(oldVisible, expectVisible)) { var postName = post.getMetadata().getName(); - eventPublisher.publishEvent( - new PostVisibleChangedEvent(postName, oldVisible, expectVisible)); + events.add(new PostVisibleChangedEvent(this, postName, oldVisible, expectVisible)); } labels.put(Post.VISIBLE_LABEL, expectVisible.toString()); diff --git a/application/src/main/java/run/halo/app/event/post/PostDeletedEvent.java b/application/src/main/java/run/halo/app/event/post/PostDeletedEvent.java deleted file mode 100644 index 37e9c9755..000000000 --- a/application/src/main/java/run/halo/app/event/post/PostDeletedEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package run.halo.app.event.post; - -import lombok.Getter; -import org.springframework.context.ApplicationEvent; -import run.halo.app.core.extension.content.Post; - -@Getter -public class PostDeletedEvent extends ApplicationEvent implements PostEvent { - - private final Post post; - - public PostDeletedEvent(Object source, Post post) { - super(source); - this.post = post; - } - - @Override - public String getName() { - return post.getMetadata().getName(); - } -} diff --git a/application/src/main/java/run/halo/app/event/post/PostEvent.java b/application/src/main/java/run/halo/app/event/post/PostEvent.java deleted file mode 100644 index 62a6071cd..000000000 --- a/application/src/main/java/run/halo/app/event/post/PostEvent.java +++ /dev/null @@ -1,7 +0,0 @@ -package run.halo.app.event.post; - -public interface PostEvent { - - String getName(); - -} diff --git a/application/src/main/java/run/halo/app/event/post/PostPublishedEvent.java b/application/src/main/java/run/halo/app/event/post/PostPublishedEvent.java deleted file mode 100644 index f1fa9997b..000000000 --- a/application/src/main/java/run/halo/app/event/post/PostPublishedEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package run.halo.app.event.post; - -import org.springframework.context.ApplicationEvent; -import run.halo.app.plugin.SharedEvent; - -@SharedEvent -public class PostPublishedEvent extends ApplicationEvent implements PostEvent { - - private final String postName; - - public PostPublishedEvent(Object source, String postName) { - super(source); - this.postName = postName; - } - - @Override - public String getName() { - return postName; - } - -} diff --git a/application/src/main/java/run/halo/app/event/post/PostUnpublishedEvent.java b/application/src/main/java/run/halo/app/event/post/PostUnpublishedEvent.java deleted file mode 100644 index b674658ea..000000000 --- a/application/src/main/java/run/halo/app/event/post/PostUnpublishedEvent.java +++ /dev/null @@ -1,19 +0,0 @@ -package run.halo.app.event.post; - -import org.springframework.context.ApplicationEvent; - -public class PostUnpublishedEvent extends ApplicationEvent implements PostEvent { - - private final String postName; - - public PostUnpublishedEvent(Object source, String postName) { - super(source); - this.postName = postName; - } - - @Override - public String getName() { - return postName; - } - -} diff --git a/application/src/main/java/run/halo/app/event/post/PostUpdatedEvent.java b/application/src/main/java/run/halo/app/event/post/PostUpdatedEvent.java deleted file mode 100644 index a17d8677c..000000000 --- a/application/src/main/java/run/halo/app/event/post/PostUpdatedEvent.java +++ /dev/null @@ -1,18 +0,0 @@ -package run.halo.app.event.post; - -import org.springframework.context.ApplicationEvent; - -public class PostUpdatedEvent extends ApplicationEvent implements PostEvent { - - private final String postName; - - public PostUpdatedEvent(Object source, String postName) { - super(source); - this.postName = postName; - } - - @Override - public String getName() { - return postName; - } -} diff --git a/application/src/main/java/run/halo/app/event/post/PostVisibleChangedEvent.java b/application/src/main/java/run/halo/app/event/post/PostVisibleChangedEvent.java deleted file mode 100644 index 6e2d1c2fb..000000000 --- a/application/src/main/java/run/halo/app/event/post/PostVisibleChangedEvent.java +++ /dev/null @@ -1,29 +0,0 @@ -package run.halo.app.event.post; - -import lombok.Data; -import org.springframework.lang.Nullable; -import run.halo.app.core.extension.content.Post; - -@Data -public class PostVisibleChangedEvent implements PostEvent { - - private final String postName; - - @Nullable - private final Post.VisibleEnum oldVisible; - - private final Post.VisibleEnum newVisible; - - public PostVisibleChangedEvent(String postName, Post.VisibleEnum oldVisible, - Post.VisibleEnum newVisible) { - this.postName = postName; - this.oldVisible = oldVisible; - this.newVisible = newVisible; - } - - @Override - public String getName() { - return postName; - } - -}