Fix error when remove non-numeric key intent from UI

Change-Id: I74f164c9389ca6900058468cc21eb0b8b743a8f0
This commit is contained in:
Yi Tseng 2017-02-16 14:24:28 -08:00 committed by Thomas Vachuska
parent bc30e68753
commit 3a9b01cf8d

View File

@ -431,15 +431,36 @@ public class TopologyViewMessageHandler extends TopologyViewMessageHandlerBase {
} }
private Intent findIntentByPayload(ObjectNode payload) { private Intent findIntentByPayload(ObjectNode payload) {
Intent intent;
Key key;
int appId = Integer.parseInt(string(payload, APP_ID)); int appId = Integer.parseInt(string(payload, APP_ID));
String appName = string(payload, APP_NAME); String appName = string(payload, APP_NAME);
ApplicationId applicId = new DefaultApplicationId(appId, appName); ApplicationId applicId = new DefaultApplicationId(appId, appName);
long intentKey = Long.decode(string(payload, KEY)); String stringKey = string(payload, KEY);
try {
// FIXME: If apps use different string key, but they contains
// same numeric value (e.g. "020", "0x10", "16", "#10")
// and one intent using long key (e.g. 16L)
// this function might return wrong intent.
long longKey = Long.decode(stringKey);
key = Key.of(longKey, applicId);
intent = intentService.getIntent(key);
if (intent == null) {
// Intent might using string key, not long key
key = Key.of(stringKey, applicId);
intent = intentService.getIntent(key);
}
} catch (NumberFormatException ex) {
// string key
key = Key.of(stringKey, applicId);
intent = intentService.getIntent(key);
}
Key key = Key.of(intentKey, applicId);
log.debug("Attempting to select intent by key={}", key); log.debug("Attempting to select intent by key={}", key);
return intentService.getIntent(key); return intent;
} }
private final class RemoveIntent extends RequestHandler { private final class RemoveIntent extends RequestHandler {