// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.sdk.internal.wip;
import java.util.ArrayList;
import java.util.List;
import org.chromium.sdk.internal.BaseCommandProcessor;
import org.chromium.sdk.internal.wip.protocol.input.WipCommandResponse;
/**
* An explicit interface for a generic type {@link BaseCommandProcessor.Callback}.
*/
public interface WipCommandCallback extends BaseCommandProcessor.Callback<WipCommandResponse> {
/**
* A default implementation of the callback that separates error responses from
* success responses.
*/
abstract class Default implements WipCommandCallback {
protected abstract void onSuccess(WipCommandResponse.Success success);
protected abstract void onError(String message);
@Override
public void messageReceived(WipCommandResponse response) {
WipCommandResponse.Success asSuccess = response.asSuccess();
if (asSuccess != null) {
onSuccess(asSuccess);
} else {
String message;
WipCommandResponse.Error asError = response.asError();
if (asError == null) {
message = "Internal messaging error";
} else {
List<String> messageList = new ArrayList<String>(2);
messageList.add(asError.error().message());
List<String> data = asError.error().data();
if (data != null) {
messageList.addAll(data);
}
message = messageList.toString();
}
onError(message);
}
}
@Override
public void failure(String message) {
onError(message);
}
}
}