forked from community/device-mgt-plugins
parent
3a7536f1f6
commit
9dc836928c
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.carbon.device.mgt.input.adapter.extension.transformer;
|
||||||
|
|
||||||
|
import com.jayway.jsonpath.JsonPath;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
import org.wso2.carbon.device.mgt.input.adapter.extension.ContentTransformer;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This holds the default implementation of ContentTransformer
|
||||||
|
*/
|
||||||
|
public class MQTTContentTransformer implements ContentTransformer {
|
||||||
|
private static final String MQTT_CONTENT_TRANSFORMER = "iot-mqtt";
|
||||||
|
private static final String TOPIC = "topic";
|
||||||
|
private static String JSON_ARRAY_START_CHAR = "[";
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(MQTTContentTransformer.class);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getType() {
|
||||||
|
return MQTT_CONTENT_TRANSFORMER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object transform(Object messagePayload, Map<String, Object> dynamicProperties) {
|
||||||
|
String topic = (String) dynamicProperties.get(TOPIC);
|
||||||
|
String topics[] = topic.split("/");
|
||||||
|
String deviceId = topics[2];
|
||||||
|
String deviceType = topics[1];
|
||||||
|
String message = (String) messagePayload;
|
||||||
|
try {
|
||||||
|
if (message.startsWith(JSON_ARRAY_START_CHAR)) {
|
||||||
|
return processMultipleEvents(message, deviceId, deviceType);
|
||||||
|
} else {
|
||||||
|
return processSingleEvent(message, deviceId, deviceType);
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
log.error("Invalid input " + message, e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String processSingleEvent(String msg, String deviceIdFromTopic, String deviceIdJsonPath)
|
||||||
|
throws ParseException {
|
||||||
|
JSONParser parser = new JSONParser();
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("deviceId", deviceIdFromTopic);
|
||||||
|
JSONObject eventObject = new JSONObject();
|
||||||
|
eventObject.put("payloadData", parser.parse(msg));
|
||||||
|
eventObject.put("metaData", jsonObject);
|
||||||
|
JSONObject event = new JSONObject();
|
||||||
|
event.put("event", eventObject);
|
||||||
|
return event.toJSONString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String processMultipleEvents(String msg, String deviceIdFromTopic, String deviceIdJsonPath)
|
||||||
|
throws ParseException {
|
||||||
|
JSONParser jsonParser = new JSONParser();
|
||||||
|
JSONArray jsonArray = (JSONArray) jsonParser.parse(msg);
|
||||||
|
JSONArray eventsArray = new JSONArray();
|
||||||
|
for (int i = 0; i < jsonArray.size(); i++) {
|
||||||
|
eventsArray.add(i, processSingleEvent(jsonArray.get(i).toString(), deviceIdFromTopic, deviceIdJsonPath));
|
||||||
|
}
|
||||||
|
return eventsArray.toJSONString();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue