| Products | Versions |
|---|---|
| TIBCO Streaming | - |
How to modify a specific element in a list of tuple in a custom function or operator?
package com.sb.support;
import java.util.ArrayList;
import java.util.List;
import com.streambase.sb.CompleteDataType;
import com.streambase.sb.Tuple;
import com.streambase.sb.TupleException;
import com.streambase.sb.client.CustomFunctionResolver;
public class ModifyUtils {
@SuppressWarnings("unchecked")
@CustomFunctionResolver("doModCustomFunctionResolver0")
public static Tuple doMod(Tuple arg0, Double arg1) {
//Modify portfolioSch.holdings.transform.dbls (multiply all double values by a scaling factor)
try {
// Don't modify an empty list field
if (!arg0.isNull("holdings")) {
List<Tuple> holdings = (List<Tuple>) arg0.getList("holdings");
(c1) for (int ind_holdings = 0; ind_holdings<holdings.size(); ind_holdings++) {
// Don't modify null elements and Don't modify an empty list field
if ((holdings.get(ind_holdings) != null) && (!holdings.get(ind_holdings).isNull("transform"))) {
List<Tuple> transforms = (List<Tuple>) holdings.get(ind_holdings).getList("transform");
(c2) for (int ind_transforms = 0; ind_transforms<transforms.size(); ind_transforms++) {
// Don't modify null elements and Don't modify an empty list field
if ((transforms.get(ind_transforms) != null) && (!transforms.get(ind_transforms).isNull("dbls"))) {
// Make modifiable copy of the list
ArrayList<Double> dbls = new ArrayList<Double>();
(b) dbls.addAll( (List<Double>) transforms.get(ind_transforms).getList("dbls") );
for (int ind_dbls = 0; ind_dbls<dbls.size(); ind_dbls++) {
// Don't modify null elements
if (dbls.get(ind_dbls) != null) {
dbls.set(ind_dbls, dbls.get(ind_dbls)*arg1);
}
} // loop
// Set the tuple field with updated value
(a) transforms.get(ind_transforms).setList("dbls", dbls);
}
} // loop through transforms elements
}
} // loop through holdings elements
}
} catch (TupleException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
return arg0;
}
public static CompleteDataType doModCustomFunctionResolver0(
CompleteDataType arg0, CompleteDataType arg1) {
return arg0;
}
}