typeNum <= RelevanceJSONConstants.TYPENUMBER_SET_STRING)
{
Set hs = null;
JSONArray values = jsonValues.optJSONArray(symbol);
if (values == null)
throw new JSONException("Variable "+ symbol + " does not have value.");
switch (typeNum)
{
case RelevanceJSONConstants.TYPENUMBER_SET_INT:
hs = new IntOpenHashSet();
for (int k = 0; k < values.length(); k++)
{
hs.add(values.getInt(k));
}
break;
case RelevanceJSONConstants.TYPENUMBER_SET_DOUBLE:
hs = new DoubleOpenHashSet();
for (int k = 0; k < values.length(); k++)
{
hs.add(values.getDouble(k));
}
break;
case RelevanceJSONConstants.TYPENUMBER_SET_FLOAT:
hs = new FloatOpenHashSet();
for (int k = 0; k < values.length(); k++)
{
hs.add((float) values.getDouble(k));
}
break;
case RelevanceJSONConstants.TYPENUMBER_SET_LONG:
hs = new LongOpenHashSet();
for (int k = 0; k < values.length(); k++)
{
hs.add(values.getLong(k));
}
break;
case RelevanceJSONConstants.TYPENUMBER_SET_STRING:
hs = new ObjectOpenHashSet();
for (int k = 0; k < values.length(); k++)
{
hs.add(values.getString(k));
}
break;
}
dataTable.hm_var.put(symbol, hs);
}
else if (typeNum >= RelevanceJSONConstants.TYPENUMBER_MAP_INT_INT &&
typeNum <= RelevanceJSONConstants.TYPENUMBER_MAP_STRING_STRING)
{
JSONObject values = jsonValues.optJSONObject(symbol);
if (values == null)
throw new JSONException("Variable "+ symbol + " does not have value.");
JSONArray keysList = values.names();
int keySize = keysList == null ? 0 : keysList.length();
// denote if the map is represented in a way of combination of key jsonarray and value jsonarray;
boolean isKeyValue = isKeyValueArrayMethod(values);
JSONArray keysArrayList = null, valuesArrayList = null;
int keyArraySize, valueArraySize;
if(isKeyValue)
{
keysArrayList = values.optJSONArray(RelevanceJSONConstants.KW_KEY);
valuesArrayList = values.optJSONArray(RelevanceJSONConstants.KW_VALUE);
if (keysArrayList == null)
throw new JSONException("Variable " + symbol + " is a map, but does not have a key list.");
if (valuesArrayList == null)
throw new JSONException("Variable " + symbol + "is a map, but does not have a value list.");
keyArraySize = keysArrayList.length();
valueArraySize = valuesArrayList.length();
if (keyArraySize != valueArraySize)
throw new JSONException("Variable " + symbol + ": key size is different from value size, can not convert to a map." );
keySize = keysArrayList.length();
}
Map hm = null;
switch (typeNum)
{
case RelevanceJSONConstants.TYPENUMBER_MAP_INT_INT:
hm = new Int2IntOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Int2IntOpenHashMap) hm).put(keysArrayList.getInt(j), valuesArrayList.getInt(j));
else
((Int2IntOpenHashMap) hm).put(keysList.getInt(j), values.getInt(keysList.getString(j)));
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_INT_DOUBLE:
hm = new Int2DoubleOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Int2DoubleOpenHashMap) hm).put(keysArrayList.getInt(j), valuesArrayList.getDouble(j));
else
((Int2DoubleOpenHashMap) hm).put(keysList.getInt(j), values.getDouble(keysList.getString(j)));
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_INT_FLOAT:
hm = new Int2FloatOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Int2FloatOpenHashMap) hm).put(keysArrayList.getInt(j), (float) valuesArrayList.getDouble(j));
else
((Int2FloatOpenHashMap) hm).put(keysList.getInt(j), (float) values.getDouble(keysList.getString(j)));
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_INT_LONG:
hm = new Int2LongOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Int2LongOpenHashMap) hm).put(keysArrayList.getInt(j), Long.parseLong(valuesArrayList.getString(j)));
else
((Int2LongOpenHashMap) hm).put(keysList.getInt(j), Long.parseLong(values.getString(keysList.getString(j))));
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_INT_STRING:
hm = new Int2ObjectOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Int2ObjectOpenHashMap) hm).put(keysArrayList.getInt(j), valuesArrayList.getString(j));
else
((Int2ObjectOpenHashMap) hm).put(keysList.getInt(j), values.getString(keysList.getString(j)));
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_STRING_INT:
hm = new Object2IntOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Object2IntOpenHashMap) hm).put(keysArrayList.getString(j), valuesArrayList.getInt(j));
else
{
String key = keysList.getString(j);
((Object2IntOpenHashMap) hm).put(key, values.getInt(key));
}
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_STRING_DOUBLE:
hm = new Object2DoubleOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Object2DoubleOpenHashMap) hm).put(keysArrayList.getString(j), valuesArrayList.getDouble(j));
else
{
String key = keysList.getString(j);
((Object2DoubleOpenHashMap) hm).put(key, values.getDouble(key));
}
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_STRING_FLOAT:
hm = new Object2FloatOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Object2FloatOpenHashMap) hm).put(keysArrayList.getString(j), (float) valuesArrayList.getDouble(j));
else
{
String key = keysList.getString(j);
((Object2FloatOpenHashMap) hm).put(key, (float) values.getDouble(key));
}
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_STRING_LONG:
hm = new Object2LongOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Object2LongOpenHashMap) hm).put(keysArrayList.getString(j), Long.parseLong(valuesArrayList.getString(j)));
else
{
String key = keysList.getString(j);
((Object2LongOpenHashMap) hm).put(key, Long.parseLong(values.getString(keysList.getString(j))));
}
}
break;
case RelevanceJSONConstants.TYPENUMBER_MAP_STRING_STRING:
hm = new Object2ObjectOpenHashMap();
for (int j = 0; j < keySize; j++)
{
if(isKeyValue)
((Object2ObjectOpenHashMap) hm).put(keysArrayList.getString(j), valuesArrayList.getString(j));
else
{
String key = keysList.getString(j);
((Object2ObjectOpenHashMap) hm).put(key, values.getString(key));
}
}
break;
}
dataTable.hm_var.put(symbol, hm);
}
else if (typeNum >= RelevanceJSONConstants.TYPENUMBER_INT &&
typeNum <= RelevanceJSONConstants.TYPENUMBER_STRING)
{
if (!jsonValues.has(symbol))
throw new JSONException("Symbol " + symbol + " was not assigned with a value." );
switch (typeNum)
{
case RelevanceJSONConstants.TYPENUMBER_INT:
dataTable.hm_var.put(symbol, jsonValues.getInt(symbol));
break;
case RelevanceJSONConstants.TYPENUMBER_DOUBLE:
dataTable.hm_var.put(symbol, jsonValues.getDouble(symbol));
break;
case RelevanceJSONConstants.TYPENUMBER_FLOAT:
dataTable.hm_var.put(symbol, (float) jsonValues.getDouble(symbol));
break;
case RelevanceJSONConstants.TYPENUMBER_LONG:
dataTable.hm_var.put(symbol, Long.parseLong(jsonValues.getString(symbol)));
break;
case RelevanceJSONConstants.TYPENUMBER_STRING:
dataTable.hm_var.put(symbol, jsonValues.getString(symbol));
break;
case RelevanceJSONConstants.TYPENUMBER_BOOLEAN:
dataTable.hm_var.put(symbol, jsonValues.getBoolean(symbol));
break;
}
}
else if (typeNum == RelevanceJSONConstants.TYPENUMBER_CUSTOM_OBJ)
{
Object obj = ExternalRelevanceDataStorage.getObj(symbol);
if(obj != null)
dataTable.hm_var.put(symbol, obj);
else
throw new JSONException("function parameter: " + symbol + " can not be initialized as a custom Object.");
}
}
// Check if all the parameters have been initialized
for(int i=0; i< dataTable.lls_params.size(); i++)
{
String symbol = dataTable.lls_params.get(i);
Integer typeNum = dataTable.hm_type.get(symbol);
if (typeNum < RelevanceJSONConstants.TYPENUMBER_FACET_INT ||
typeNum > RelevanceJSONConstants.TYPENUMBER_FACET_A_INT)
{
if(!dataTable.hm_var.containsKey(symbol))
throw new JSONException("function parameter: " + symbol + " was not initialized.");
}
}
} // End of initializeValues()