package org.openhab.habclient.wear;
import android.content.Context;
import android.util.Log;
import org.openhab.domain.IApplicationModeProvider;
import org.openhab.domain.INodeMessageHandler;
import org.openhab.domain.IDeviceCommunicator;
import org.openhab.domain.command.CommandAnalyzerResult;
import org.openhab.domain.command.ICommandAnalyzer;
import org.openhab.domain.util.StringHandler;
import org.openhab.habdroid.R;
import java.util.ArrayList;
import javax.inject.Inject;
/**
* Created by Tony Alpskog in 2015.
*/
public class WearCommandHandler implements INodeMessageHandler {
private final IApplicationModeProvider mApplicationModeProvider;
private final ICommandAnalyzer mCommandAnalyzer;
private final Context mContext;
@Inject
public WearCommandHandler(IApplicationModeProvider applicationModeProvider
, ICommandAnalyzer commandAnalyzer
, Context context) {
if(applicationModeProvider == null) throw new IllegalArgumentException("applicationModeProvider is null");
if(commandAnalyzer == null) throw new IllegalArgumentException("commandAnalyzer is null");
if(context == null) throw new IllegalArgumentException("context is null");
mApplicationModeProvider = applicationModeProvider;
mCommandAnalyzer = commandAnalyzer;
mContext = context;
}
@Override
public void handleNodeMessage(IDeviceCommunicator nodeCommunicator, String path, String message, String senderNodeId) {
if(StringHandler.isNullOrEmpty(message) || StringHandler.isNullOrEmpty(senderNodeId)) {
String commandReplyMessage = mContext.getString(R.string.empty_command);
nodeCommunicator.sendMessage(WearListenerService.WEAR_COMMAND_RESULT, commandReplyMessage, senderNodeId);
}
if(StringHandler.isNullOrEmpty(senderNodeId))
Log.w("WearCommandHandler", "Missing sender node");
ArrayList<String> commandToBeAnalyzed = new ArrayList<String>(1);
commandToBeAnalyzed.add(message);
CommandAnalyzerResult commandAnalyzerResult = mCommandAnalyzer.analyzeCommand(commandToBeAnalyzed, mApplicationModeProvider.getAppMode());
String commandReplyMessage = commandAnalyzerResult != null ? mCommandAnalyzer.getCommandReply(commandAnalyzerResult) : mContext.getString(R.string.unknown_command);
nodeCommunicator.sendMessage(WearListenerService.WEAR_COMMAND_RESULT, commandReplyMessage, senderNodeId);
}
}