summaryrefslogtreecommitdiff
path: root/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandCallbackWithResponseBase.java
blob: aad3023ad340a1b36c0a3aa3ad2fdaa3a5343122 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package org.jetbrains.rpc;

import com.intellij.openapi.util.ActionCallback;
import org.jetbrains.annotations.Nullable;

abstract class CommandCallbackWithResponseBase<SUCCESS_RESPONSE, C extends ActionCallback, RESULT, ERROR_DETAILS>
  extends AsyncResultCallbackBase<SUCCESS_RESPONSE, C, ERROR_DETAILS> {
  private final String methodName;

  public CommandCallbackWithResponseBase(C callback, String methodName, @Nullable ErrorConsumer<C, ERROR_DETAILS> errorConsumer) {
    super(callback, errorConsumer);
    
    this.methodName = methodName;

  }

  @Override
  public final void onSuccess(SUCCESS_RESPONSE response, ResultReader<SUCCESS_RESPONSE> resultReader) {
    try {
      onSuccess(resultReader.<RESULT>readResult(methodName, response));
    }
    catch (Throwable e) {
      MessageManager.LOG.error(e);
      callback.reject(e.getMessage());
    }
  }

  protected abstract void onSuccess(RESULT result);
}