Skip to content

Commit

Permalink
Add event bus POC
Browse files Browse the repository at this point in the history
  • Loading branch information
taldekar committed Jan 9, 2025
1 parent 7d0945c commit 65a983f
Show file tree
Hide file tree
Showing 8 changed files with 157 additions and 2 deletions.
1 change: 1 addition & 0 deletions plugin/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ Bundle-Classpath: target/classes/,
target/dependency/regions-2.28.26.jar,
target/dependency/retries-2.28.26.jar,
target/dependency/retries-spi-2.28.26.jar,
target/dependency/rxjava-1.3.8.jar,
target/dependency/sdk-core-2.28.26.jar,
target/dependency/third-party-jackson-core-2.28.26.jar,
target/dependency/utils-2.28.26.jar
7 changes: 6 additions & 1 deletion plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@
<artifactId>cognitoidentity</artifactId>
<version>${aws.java.sdk.version}</version>
</dependency>
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>1.3.8</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>auth</artifactId>
Expand Down Expand Up @@ -134,7 +139,7 @@
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependency</outputDirectory>
<includeGroupIds>software.amazon.awssdk,com.fasterxml.jackson,com.nimbusds,jakarta.inject,commons-codec,org.apache.httpcomponents,org.reactivestreams</includeGroupIds>
<includeGroupIds>io.reactivex,software.amazon.awssdk,com.fasterxml.jackson,com.nimbusds,jakarta.inject,commons-codec,org.apache.httpcomponents,org.reactivestreams</includeGroupIds>
</configuration>
</execution>
<execution>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.broker;

import rx.Observable;
import rx.Observer;
import rx.subjects.PublishSubject;

public final class EventBroker {

private static final EventBroker INSTANCE;
private final PublishSubject<Object> eventBus = PublishSubject.create();

static {
INSTANCE = new EventBroker();
}

public static EventBroker getInstance() {
return INSTANCE;
}

public void postEvent(final Object event) {
eventBus.onNext(event);
}

public <T> void subscribe(final Class<T> eventType, final Observer<T> observer) {
eventBus.ofType(eventType).subscribe(observer);
}

public <T> Observable<T> ofObservable(final Class<T> eventType) {
return eventBus.ofType(eventType);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.events;

public final class TestEvent {

private final String message;

public TestEvent(final String message) {
this.message = message;
}

public String getMessage() {
return message;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.publishers;

import software.aws.toolkits.eclipse.amazonq.broker.EventBroker;
import software.aws.toolkits.eclipse.amazonq.events.TestEvent;

public final class TestPublisher {

private final EventBroker eventBroker;

public TestPublisher() {
eventBroker = EventBroker.getInstance();

for (int i = 0; i < 10; i++) {
String message = "Test message " + i;
eventBroker.postEvent(new TestEvent(message));
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.subscribers;

import rx.Observer;
import software.aws.toolkits.eclipse.amazonq.broker.EventBroker;
import software.aws.toolkits.eclipse.amazonq.events.TestEvent;

public final class TestSubscribers {

public TestSubscribers() {
fromObserver();
fromObservable();
}

public void fromObserver() {
Observer<TestEvent> observer = new Observer<>() {
@Override
public void onNext(final TestEvent event) {
System.out.println(event.getMessage());
}

@Override
public void onError(final Throwable error) {
System.out.println(error.getMessage());
}

@Override
public void onCompleted() {
System.out.println("Completed");
}
};

// Direct subscription
EventBroker.getInstance().subscribe(TestEvent.class, observer);

// Subscribe using observable
EventBroker.getInstance().ofObservable(TestEvent.class).subscribe(observer);
}

public void fromObservable() {
EventBroker.getInstance().ofObservable(TestEvent.class).subscribe(
event -> System.out.println(event.getMessage()),
throwable -> System.out.println(throwable.getMessage()), () -> System.out.println("Complete"));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import com.fasterxml.jackson.databind.ObjectMapper;

import rx.observers.TestSubscriber;
import software.aws.toolkits.eclipse.amazonq.chat.ChatCommunicationManager;
import software.aws.toolkits.eclipse.amazonq.chat.ChatStateManager;
import software.aws.toolkits.eclipse.amazonq.chat.ChatTheme;
Expand All @@ -24,6 +25,7 @@
import software.aws.toolkits.eclipse.amazonq.lsp.model.QuickActions;
import software.aws.toolkits.eclipse.amazonq.lsp.model.QuickActionsCommandGroup;
import software.aws.toolkits.eclipse.amazonq.plugin.Activator;
import software.aws.toolkits.eclipse.amazonq.publishers.TestPublisher;
import software.aws.toolkits.eclipse.amazonq.util.ObjectMapperFactory;
import software.aws.toolkits.eclipse.amazonq.util.ThreadingUtils;
import software.aws.toolkits.eclipse.amazonq.views.actions.AmazonQCommonActions;
Expand All @@ -40,6 +42,7 @@ public class AmazonQChatWebview extends AmazonQView implements ChatUiRequestList
private final ChatTheme chatTheme;
private Browser browser;
private volatile boolean canDisposeState = false;
private final TestSubscriber testSubscriber;

public AmazonQChatWebview() {
super();
Expand All @@ -48,6 +51,7 @@ public AmazonQChatWebview() {
this.chatCommunicationManager = ChatCommunicationManager.getInstance();
this.actionHandler = new AmazonQChatViewActionHandler(chatCommunicationManager);
this.chatTheme = new ChatTheme();
testSubscriber = new TestSubscriber();
}

@Override
Expand Down Expand Up @@ -117,6 +121,8 @@ public void completed(final ProgressEvent event) {

// Check if user is authenticated and build view accordingly
onAuthStatusChanged(authState);

new TestPublisher();
}

private Browser getAndUpdateStateManager() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,27 @@
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.part.ViewPart;

import rx.Observer;
import software.aws.toolkits.eclipse.amazonq.broker.EventBroker;
import software.aws.toolkits.eclipse.amazonq.controllers.AmazonQViewController;
import software.aws.toolkits.eclipse.amazonq.events.TestEvent;
import software.aws.toolkits.eclipse.amazonq.lsp.auth.AuthStatusChangedListener;
import software.aws.toolkits.eclipse.amazonq.lsp.auth.AuthStatusProvider;
import software.aws.toolkits.eclipse.amazonq.lsp.auth.model.AuthState;
import software.aws.toolkits.eclipse.amazonq.plugin.Activator;
import software.aws.toolkits.eclipse.amazonq.util.ThemeDetector;
import software.aws.toolkits.eclipse.amazonq.views.actions.AmazonQCommonActions;

public abstract class AmazonQView extends ViewPart implements AuthStatusChangedListener {
public abstract class AmazonQView extends ViewPart implements AuthStatusChangedListener,
Observer<TestEvent> {

private AmazonQViewController viewController;
private AmazonQCommonActions amazonQCommonActions;
private static final ThemeDetector THEME_DETECTOR = new ThemeDetector();

protected AmazonQView() {
this.viewController = new AmazonQViewController();
EventBroker.getInstance().subscribe(TestEvent.class, this);
}

public final Browser getBrowser() {
Expand Down Expand Up @@ -127,4 +132,19 @@ public void dispose() {
super.dispose();
}

@Override
public final void onNext(final TestEvent event) {
System.out.println(event.getMessage());
}

@Override
public final void onError(final Throwable throwable) {
System.out.println(throwable.getMessage());
}

@Override
public final void onCompleted() {
System.out.println("Completed");
}

}

0 comments on commit 65a983f

Please sign in to comment.