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; } }