package org.oliot.epcis.service.subscription;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.http.ConnectionReuseStrategy;
import org.apache.http.HttpEntity;
import org.apache.http.HttpException;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.InputStreamEntity;
import org.apache.http.impl.DefaultBHttpClientConnection;
import org.apache.http.impl.DefaultConnectionReuseStrategy;
import org.apache.http.message.BasicHttpEntityEnclosingRequest;
import org.apache.http.protocol.HttpCoreContext;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.HttpProcessorBuilder;
import org.apache.http.protocol.HttpRequestExecutor;
import org.apache.http.protocol.RequestConnControl;
import org.apache.http.protocol.RequestContent;
import org.apache.http.protocol.RequestExpectContinue;
import org.apache.http.protocol.RequestTargetHost;
import org.apache.http.protocol.RequestUserAgent;
import org.apache.log4j.Level;
import org.bson.BsonArray;
import org.bson.BsonBoolean;
import org.bson.BsonDocument;
import org.bson.BsonDouble;
import org.bson.BsonInt32;
import org.bson.BsonInt64;
import org.bson.BsonString;
import org.bson.BsonType;
import org.bson.BsonValue;
import org.oliot.epcis.configuration.Configuration;
import org.oliot.model.epcis.SubscriptionType;
public class TriggerEngine {
private static Map<String, SubscriptionType> triggerSubscriptionMap = new HashMap<String, SubscriptionType>();
private static final Object syncObject = new Object();
public static Map<String, SubscriptionType> getTriggerSubscriptionMap() {
synchronized (syncObject) {
return triggerSubscriptionMap;
}
}
public static void setTriggerSubscriptionMap(Map<String, SubscriptionType> triggerSubscriptionMap) {
synchronized (syncObject) {
TriggerEngine.triggerSubscriptionMap = triggerSubscriptionMap;
}
}
public static void addTriggerSubscription(String subscriptionID, SubscriptionType subscription) {
synchronized (syncObject) {
triggerSubscriptionMap.put(subscriptionID, subscription);
}
}
public static void removeTriggerSubscription(String subscriptionID) {
synchronized (syncObject) {
triggerSubscriptionMap.remove(subscriptionID);
}
}
/**
*
* @param subscription
* @return if true, the event is triggered
*/
public static boolean examineAndFire(String eventType, BsonDocument bsonDocument) {
synchronized (syncObject) {
for (String subID : triggerSubscriptionMap.keySet()) {
SubscriptionType sub = triggerSubscriptionMap.get(subID);
try {
if (isPassed(eventType, bsonDocument, sub)) {
sendPost(new URL(sub.getDest()), bsonDocument.toString().getBytes());
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
return false;
}
}
public static boolean isPassed(String eventType, BsonDocument bsonDocument, SubscriptionType subscription) {
if (subscription.getEventType() != null) {
if (!eventType.equals(subscription.getEventType()))
return false;
}
if (subscription.getGE_eventTime() != null) {
if (!bsonDocument.containsKey("eventTime"))
return false;
long eventTime = bsonDocument.getInt64("eventTime").getValue();
long cond = getTimeMillis(subscription.getGE_eventTime());
if (eventTime < cond)
return false;
}
if (subscription.getLT_eventTime() != null) {
if (!bsonDocument.containsKey("eventTime"))
return false;
long eventTime = bsonDocument.getInt64("eventTime").getValue();
long cond = getTimeMillis(subscription.getLT_eventTime());
if (eventTime >= cond)
return false;
}
if (subscription.getGE_recordTime() != null) {
if (!bsonDocument.containsKey("recordTime"))
return false;
long recordTime = bsonDocument.getInt64("recordTime").getValue();
long cond = getTimeMillis(subscription.getGE_recordTime());
if (recordTime < cond)
return false;
}
if (subscription.getLT_recordTime() != null) {
if (!bsonDocument.containsKey("recordTime"))
return false;
long recordTime = bsonDocument.getInt64("recordTime").getValue();
long cond = getTimeMillis(subscription.getLT_recordTime());
if (recordTime >= cond)
return false;
}
if (subscription.getEQ_action() != null) {
if (!bsonDocument.containsKey("action"))
return false;
if (!bsonDocument.getString("action").getValue().equals(subscription.getEQ_action()))
return false;
}
if (subscription.getEQ_disposition() != null) {
if (!bsonDocument.containsKey("disposition"))
return false;
if (!bsonDocument.getString("disposition").getValue().equals(subscription.getEQ_disposition()))
return false;
}
if (subscription.getEQ_bizStep() != null) {
if (!bsonDocument.containsKey("bizStep"))
return false;
if (!bsonDocument.getString("bizStep").getValue().equals(subscription.getEQ_bizStep()))
return false;
}
if (subscription.getEQ_readPoint() != null) {
if (!bsonDocument.containsKey("readPoint"))
return false;
BsonDocument readPoint = bsonDocument.getDocument("readPoint");
if (!readPoint.containsKey("id"))
return false;
if (!readPoint.getString("id").getValue().equals(subscription.getEQ_readPoint()))
return false;
}
if (subscription.getEQ_bizLocation() != null) {
if (!bsonDocument.containsKey("bizLocation"))
return false;
BsonDocument bizLocation = bsonDocument.getDocument("bizLocation");
if (!bizLocation.containsKey("id"))
return false;
if (!bizLocation.getString("id").getValue().equals(subscription.getEQ_bizLocation()))
return false;
}
if (subscription.getEQ_transformationID() != null) {
if (!bsonDocument.containsKey("transformationID"))
return false;
if (!bsonDocument.getString("transformationID").getValue().equals(subscription.getEQ_transformationID()))
return false;
}
if (subscription.getMATCH_epc() != null) {
if (!bsonDocument.containsKey("epcList") && !bsonDocument.containsKey("childEPCs"))
return false;
Set<String> epcSet = new HashSet<String>();
if (bsonDocument.containsKey("epcList")) {
epcSet = addEPCtoSet(epcSet, bsonDocument.getArray("epcList"));
}
if (bsonDocument.containsKey("childEPCs")) {
epcSet = addEPCtoSet(epcSet, bsonDocument.getArray("childEPCs"));
}
if (!epcSet.contains(subscription.getMATCH_epc()))
return false;
}
if (subscription.getMATCH_parentID() != null) {
if (!bsonDocument.containsKey("parentID"))
return false;
if (!bsonDocument.getString("parentID").getValue().equals(subscription.getMATCH_parentID()))
return false;
}
if (subscription.getMATCH_inputEPC() != null) {
if (!bsonDocument.containsKey("inputEPCList"))
return false;
Set<String> epcSet = new HashSet<String>();
if (bsonDocument.containsKey("inputEPCList")) {
epcSet = addEPCtoSet(epcSet, bsonDocument.getArray("inputEPCList"));
}
if (!epcSet.contains(subscription.getMATCH_inputEPC()))
return false;
}
if (subscription.getMATCH_outputEPC() != null) {
if (!bsonDocument.containsKey("outputEPCList"))
return false;
Set<String> epcSet = new HashSet<String>();
if (bsonDocument.containsKey("outputEPCList")) {
epcSet = addEPCtoSet(epcSet, bsonDocument.getArray("outputEPCList"));
}
if (!epcSet.contains(subscription.getMATCH_outputEPC()))
return false;
}
if (subscription.getMATCH_anyEPC() != null) {
if (!bsonDocument.containsKey("epcList") && !bsonDocument.containsKey("childEPCs")
&& !bsonDocument.containsKey("inputEPCList") && !bsonDocument.containsKey("outputEPCList")
&& !bsonDocument.containsKey("parentID"))
return false;
Set<String> epcSet = new HashSet<String>();
if (bsonDocument.containsKey("epcList")) {
epcSet = addEPCtoSet(epcSet, bsonDocument.getArray("epcList"));
}
if (bsonDocument.containsKey("childEPCs")) {
epcSet = addEPCtoSet(epcSet, bsonDocument.getArray("childEPCs"));
}
if (bsonDocument.containsKey("inputEPCList")) {
epcSet = addEPCtoSet(epcSet, bsonDocument.getArray("inputEPCList"));
}
if (bsonDocument.containsKey("outputEPCList")) {
epcSet = addEPCtoSet(epcSet, bsonDocument.getArray("outputEPCList"));
}
if (bsonDocument.containsKey("parentID")) {
epcSet.add(bsonDocument.getString("parentID").getValue());
}
if (!epcSet.contains(subscription.getMATCH_anyEPC()))
return false;
}
if (subscription.getMATCH_epcClass() != null) {
if (!bsonDocument.containsKey("extension")) {
BsonDocument extension = bsonDocument.getDocument("extension");
if (!extension.containsKey("quantityList") && !extension.containsKey("childQuantityList"))
return false;
Set<String> epcSet = new HashSet<String>();
if (extension.containsKey("quantityList")) {
epcSet = addEPCClasstoSet(epcSet, extension.getArray("quantityList"));
}
if (extension.containsKey("childQuantityList")) {
epcSet = addEPCClasstoSet(epcSet, extension.getArray("childQuantityList"));
}
if (!epcSet.contains(subscription.getMATCH_epcClass()))
return false;
}
}
if (subscription.getMATCH_inputEPCClass() != null) {
if (!bsonDocument.containsKey("inputQuantityList"))
return false;
Set<String> epcSet = new HashSet<String>();
if (bsonDocument.containsKey("inputQuantityList")) {
epcSet = addEPCClasstoSet(epcSet, bsonDocument.getArray("inputQuantityList"));
}
if (!epcSet.contains(subscription.getMATCH_inputEPCClass()))
return false;
}
if (subscription.getMATCH_outputEPCClass() != null) {
if (!bsonDocument.containsKey("outputQuantityList"))
return false;
Set<String> epcSet = new HashSet<String>();
if (bsonDocument.containsKey("outputQuantityList")) {
epcSet = addEPCClasstoSet(epcSet, bsonDocument.getArray("outputQuantityList"));
}
if (!epcSet.contains(subscription.getMATCH_outputEPCClass()))
return false;
}
if (subscription.getMATCH_epcClass() != null) {
if (!bsonDocument.containsKey("inputQuantityList") && !bsonDocument.containsKey("outputQuantityList")
&& !bsonDocument.containsKey("extension"))
return false;
Set<String> epcSet = new HashSet<String>();
if (bsonDocument.containsKey("inputQuantityList")) {
epcSet = addEPCClasstoSet(epcSet, bsonDocument.getArray("inputQuantityList"));
}
if (bsonDocument.containsKey("outputQuantityList")) {
epcSet = addEPCClasstoSet(epcSet, bsonDocument.getArray("outputQuantityList"));
}
BsonDocument extension = bsonDocument.getDocument("extension");
if (!extension.containsKey("quantityList") && !extension.containsKey("childQuantityList")
&& epcSet.isEmpty() == true)
return false;
if (extension.containsKey("quantityList")) {
epcSet = addEPCClasstoSet(epcSet, extension.getArray("quantityList"));
}
if (extension.containsKey("childQuantityList")) {
epcSet = addEPCClasstoSet(epcSet, extension.getArray("childQuantityList"));
}
if (!epcSet.contains(subscription.getMATCH_anyEPCClass()))
return false;
}
if (subscription.getParamMap() != null) {
Map<String, String> paramMap = subscription.getParamMap();
Iterator<String> paramIter = paramMap.keySet().iterator();
while (paramIter.hasNext()) {
String paramName = paramIter.next();
String paramValues = paramMap.get(paramName);
if (paramName.contains("EQ_bizTransaction_")) {
if (!bsonDocument.containsKey("bizTransactionList"))
return false;
BsonArray bizTransactionList = bsonDocument.getArray("bizTransactionList");
String type = paramName.substring(18, paramName.length());
boolean contains = false;
Iterator<BsonValue> bizTransactionIterator = bizTransactionList.iterator();
while (bizTransactionIterator.hasNext()) {
BsonDocument bizTransaction = bizTransactionIterator.next().asDocument();
if (bizTransaction.containsKey(type)) {
if (bizTransaction.getString(type).getValue().equals(paramValues))
contains = true;
}
}
if (contains == false) {
return false;
}
}
if (paramName.contains("EQ_source_")) {
String type = paramName.substring(10, paramName.length());
if (eventType.equals("AggregationEvent") || eventType.equals("ObjectEvent")
|| eventType.equals("TransactionEvent")) {
if (!bsonDocument.containsKey("extension")
|| !bsonDocument.getDocument("extension").containsKey("sourceList"))
return false;
BsonArray sourceList = bsonDocument.getDocument("extension").getArray("sourceList");
boolean contains = false;
Iterator<BsonValue> sourceIterator = sourceList.iterator();
while (sourceIterator.hasNext()) {
BsonDocument source = sourceIterator.next().asDocument();
if (source.containsKey(type)) {
if (source.getString(type).getValue().equals(paramValues))
contains = true;
}
}
if (contains == false) {
return false;
}
}
if (eventType.equals("TransformationEvent")) {
if (!bsonDocument.containsKey("sourceList"))
return false;
BsonArray sourceList = bsonDocument.getArray("sourceList");
boolean contains = false;
Iterator<BsonValue> sourceIterator = sourceList.iterator();
while (sourceIterator.hasNext()) {
BsonDocument source = sourceIterator.next().asDocument();
if (source.containsKey(type)) {
if (source.getString(type).getValue().equals(paramValues))
contains = true;
}
}
if (contains == false) {
return false;
}
}
}
if (paramName.contains("EQ_destination_")) {
String type = paramName.substring(15, paramName.length());
if (eventType.equals("AggregationEvent") || eventType.equals("ObjectEvent")
|| eventType.equals("TransactionEvent")) {
if (!bsonDocument.containsKey("extension")
|| !bsonDocument.getDocument("extension").containsKey("destinationList"))
return false;
BsonArray destinationList = bsonDocument.getDocument("extension").getArray("destinationList");
boolean contains = false;
Iterator<BsonValue> destinationIterator = destinationList.iterator();
while (destinationIterator.hasNext()) {
BsonDocument destination = destinationIterator.next().asDocument();
if (destination.containsKey(type)) {
if (destination.getString(type).getValue().equals(paramValues))
contains = true;
}
}
if (contains == false) {
return false;
}
}
if (eventType.equals("TransformationEvent")) {
if (!bsonDocument.containsKey("sourceList"))
return false;
BsonArray destinationList = bsonDocument.getArray("destinationList");
boolean contains = false;
Iterator<BsonValue> destinationIterator = destinationList.iterator();
while (destinationIterator.hasNext()) {
BsonDocument destination = destinationIterator.next().asDocument();
if (destination.containsKey(type)) {
if (destination.getString(type).getValue().equals(paramValues))
contains = true;
}
}
if (contains == false) {
return false;
}
}
}
boolean isExtraParam = isExtraParameter(paramName);
if (isExtraParam == true) {
if (paramName.startsWith("EQ_")) {
String type = paramName.substring(3, paramName.length());
if (!bsonDocument.containsKey("any"))
return false;
BsonDocument extensionField = bsonDocument.getDocument("any");
boolean contains = false;
Object conversedParamValue = converseType(paramValues);
for (String key : extensionField.keySet()) {
if (type.equals(key)) {
if (conversedParamValue instanceof String
&& extensionField.get(key).getBsonType().equals(BsonType.STRING)) {
String stringValue = (String) conversedParamValue;
String compValue = extensionField.getString(key).getValue();
if (stringValue.equals(compValue))
contains = true;
} else if (conversedParamValue instanceof Integer
&& extensionField.get(key).getBsonType().equals(BsonType.INT32)) {
int intValue = (Integer) conversedParamValue;
int compValue = extensionField.getInt32(key).getValue();
if (intValue == compValue)
contains = true;
} else if (conversedParamValue instanceof Long
&& extensionField.get(key).getBsonType().equals(BsonType.INT64)) {
long longValue = (Long) conversedParamValue;
long compValue = extensionField.getInt64(key).getValue();
if (longValue == compValue)
contains = true;
} else if (conversedParamValue instanceof Double
&& extensionField.get(key).getBsonType().equals(BsonType.DOUBLE)) {
double doubleValue = (Double) conversedParamValue;
double compValue = extensionField.getDouble(key).getValue();
if (doubleValue == compValue)
contains = true;
} else if (conversedParamValue instanceof Boolean
&& extensionField.get(key).getBsonType().equals(BsonType.BOOLEAN)) {
boolean boolValue = (Boolean) conversedParamValue;
boolean compValue = extensionField.getBoolean(key).getValue();
if (boolValue == compValue)
contains = true;
}
}
}
if (contains == false)
return false;
}
if (paramName.startsWith("GT_") || paramName.startsWith("GE_") || paramName.startsWith("LT_")
|| paramName.startsWith("LE_")) {
String type = paramName.substring(3, paramName.length());
if (!bsonDocument.containsKey("any"))
return false;
BsonDocument extensionField = bsonDocument.getDocument("any");
boolean contains = false;
Object conversedParamValue = converseType(paramValues);
for (String key : extensionField.keySet()) {
if (type.equals(key)) {
if (conversedParamValue instanceof String
&& extensionField.get(key).getBsonType().equals(BsonType.STRING)) {
String stringValue = (String) conversedParamValue;
String compValue = extensionField.getString(key).getValue();
if (paramName.startsWith("GT_")) {
if (compValue.compareTo(stringValue) > 0)
contains = true;
} else if (paramName.startsWith("GE_")) {
if (compValue.compareTo(stringValue) >= 0)
contains = true;
} else if (paramName.startsWith("LT_")) {
if (compValue.compareTo(stringValue) < 0)
contains = true;
} else if (paramName.startsWith("LE_")) {
if (compValue.compareTo(stringValue) <= 0)
contains = true;
}
} else if (conversedParamValue instanceof Integer
&& extensionField.get(key).getBsonType().equals(BsonType.INT32)) {
int intValue = (Integer) conversedParamValue;
int compValue = extensionField.getInt32(key).getValue();
if (paramName.startsWith("GT_")) {
if (compValue > intValue)
contains = true;
} else if (paramName.startsWith("GE_")) {
if (compValue >= intValue)
contains = true;
} else if (paramName.startsWith("LT_")) {
if (compValue < intValue)
contains = true;
} else if (paramName.startsWith("LE_")) {
if (compValue <= intValue)
contains = true;
}
} else if (conversedParamValue instanceof Long
&& extensionField.get(key).getBsonType().equals(BsonType.INT64)) {
long longValue = (Long) conversedParamValue;
long compValue = extensionField.getInt64(key).getValue();
if (paramName.startsWith("GT_")) {
if (compValue > longValue)
contains = true;
} else if (paramName.startsWith("GE_")) {
if (compValue >= longValue)
contains = true;
} else if (paramName.startsWith("LT_")) {
if (compValue < longValue)
contains = true;
} else if (paramName.startsWith("LE_")) {
if (compValue <= longValue)
contains = true;
}
} else if (conversedParamValue instanceof Double
&& extensionField.get(key).getBsonType().equals(BsonType.DOUBLE)) {
double doubleValue = (Double) conversedParamValue;
double compValue = extensionField.getDouble(key).getValue();
if (paramName.startsWith("GT_")) {
if (compValue > doubleValue)
contains = true;
} else if (paramName.startsWith("GE_")) {
if (compValue >= doubleValue)
contains = true;
} else if (paramName.startsWith("LT_")) {
if (compValue < doubleValue)
contains = true;
} else if (paramName.startsWith("LE_")) {
if (compValue <= doubleValue)
contains = true;
}
} else if (conversedParamValue instanceof Boolean
&& extensionField.get(key).getBsonType().equals(BsonType.BOOLEAN)) {
boolean boolValue = (Boolean) conversedParamValue;
boolean compValue = extensionField.getBoolean(key).getValue();
if (paramName.startsWith("GT_")) {
if (compValue != boolValue && compValue == true)
contains = true;
} else if (paramName.startsWith("GE_")) {
if (compValue == true)
contains = true;
} else if (paramName.startsWith("LT_")) {
if (compValue != boolValue && compValue == false)
contains = true;
} else if (paramName.startsWith("LE_")) {
if (compValue == false)
contains = true;
}
}
}
}
if (contains == false)
return false;
}
}
}
}
return true;
}
/**
*
* @param address
* @param port
* @param remainingURL
* start with /
* @param message
* @throws IOException
*/
private static void sendPost(URL captureURL, byte[] bytes) {
HttpProcessor httpproc = HttpProcessorBuilder.create().add(new RequestContent()).add(new RequestTargetHost())
.add(new RequestConnControl()).add(new RequestUserAgent("Test/1.1"))
.add(new RequestExpectContinue(true)).build();
HttpRequestExecutor httpexecutor = new HttpRequestExecutor();
HttpCoreContext coreContext = HttpCoreContext.create();
HttpHost host = new HttpHost(captureURL.getHost(), captureURL.getPort());
coreContext.setTargetHost(host);
DefaultBHttpClientConnection conn = new DefaultBHttpClientConnection(8 * 1024);
ConnectionReuseStrategy connStrategy = DefaultConnectionReuseStrategy.INSTANCE;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
baos.write(bytes);
baos.flush();
baos.close();
HttpEntity[] requestBodies = {
new InputStreamEntity(new ByteArrayInputStream(baos.toByteArray()), ContentType.TEXT_PLAIN) };
for (int i = 0; i < requestBodies.length; i++) {
if (!conn.isOpen()) {
Socket socket = new Socket(host.getHostName(), host.getPort());
conn.bind(socket);
}
BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST",
captureURL.getPath());
request.setEntity(requestBodies[i]);
System.out.println(">> Request URI: " + request.getRequestLine().getUri());
httpexecutor.preProcess(request, httpproc, coreContext);
HttpResponse response = httpexecutor.execute(request, conn, coreContext);
httpexecutor.postProcess(response, httpproc, coreContext);
// System.out.println("<< Response: " +
// response.getStatusLine());
// System.out.println(EntityUtils.toString(response.getEntity()));
// System.out.println("==============");
if (!connStrategy.keepAlive(response, coreContext)) {
conn.close();
} else {
// System.out.println("Connection kept alive...");
}
}
} catch (IOException e) {
} catch (HttpException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static long getTimeMillis(String standardDateString) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
GregorianCalendar eventTimeCalendar = new GregorianCalendar();
eventTimeCalendar.setTime(sdf.parse(standardDateString));
return eventTimeCalendar.getTimeInMillis();
} catch (ParseException e) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
GregorianCalendar eventTimeCalendar = new GregorianCalendar();
eventTimeCalendar.setTime(sdf.parse(standardDateString));
return eventTimeCalendar.getTimeInMillis();
} catch (ParseException e1) {
Configuration.logger.log(Level.ERROR, e1.toString());
}
}
// Never Happened
return 0;
}
private static Set<String> addEPCtoSet(Set<String> epcSet, BsonArray epcList) {
Iterator<BsonValue> epcIterator = epcList.iterator();
while (epcIterator.hasNext()) {
BsonDocument epcDocument = epcIterator.next().asDocument();
epcSet.add(epcDocument.getString("epc").getValue());
}
return epcSet;
}
private static Set<String> addEPCClasstoSet(Set<String> epcSet, BsonArray epcList) {
Iterator<BsonValue> epcIterator = epcList.iterator();
while (epcIterator.hasNext()) {
BsonDocument epcDocument = epcIterator.next().asDocument();
epcSet.add(epcDocument.getString("epcClass").getValue());
}
return epcSet;
}
private static boolean isExtraParameter(String paramName) {
if (paramName.contains("eventTime"))
return false;
if (paramName.contains("recordTime"))
return false;
if (paramName.contains("action"))
return false;
if (paramName.contains("bizStep"))
return false;
if (paramName.contains("disposition"))
return false;
if (paramName.contains("readPoint"))
return false;
if (paramName.contains("bizLocation"))
return false;
if (paramName.contains("bizTransaction"))
return false;
if (paramName.contains("source"))
return false;
if (paramName.contains("destination"))
return false;
if (paramName.contains("transformationID"))
return false;
return true;
}
private static BsonValue converseType(String value) {
String[] valArr = value.split("\\^");
if (valArr.length != 2) {
return new BsonString(value);
}
try {
String type = valArr[1];
if (type.equals("int")) {
return new BsonInt32(Integer.parseInt(valArr[0]));
} else if (type.equals("long")) {
return new BsonInt64(Long.parseLong(valArr[0]));
} else if (type.equals("double")) {
return new BsonDouble(Double.parseDouble(valArr[0]));
} else if (type.equals("boolean")) {
return new BsonBoolean(Boolean.parseBoolean(valArr[0]));
} else {
return new BsonString(value);
}
} catch (NumberFormatException e) {
return new BsonString(value);
}
}
}