/** * Gets the input data and macro name and iterates over the example set while updating the current * iteration in the given macro. */ @Override public void doWork() throws OperatorException { outExtender.reset(); ExampleSet exampleSet = exampleSetInput.getData(ExampleSet.class); String iterationMacroName = getParameterAsString(PARAMETER_ITERATION_MACRO); boolean innerSinkIsConnected = exampleSetInnerSink.isConnected(); for (iteration = 1; iteration <= exampleSet.size(); iteration++) { getProcess().getMacroHandler().addMacro(iterationMacroName, String.valueOf(iteration)); // passing in clone or if connected the result from last iteration exampleSetInnerSource.deliver( innerSinkIsConnected ? exampleSet : (ExampleSet) exampleSet.clone()); getSubprocess(0).execute(); inApplyLoop(); if (innerSinkIsConnected) { exampleSet = exampleSetInnerSink.getData(ExampleSet.class); } outExtender.collect(); } getProcess().getMacroHandler().removeMacro(iterationMacroName); exampleSetOutput.deliver(exampleSet); }
@Override public void doWork() throws OperatorException { ExampleSet exampleSet = exampleSetInput.getData(ExampleSet.class); Attribute[] labels = getLabels(exampleSet); if (labels.length == 0) { throw new UserError(this, 105); } outExtender.reset(); for (int i = 0; i < labels.length; i++) { ExampleSet cloneSet = (ExampleSet) exampleSet.clone(); cloneSet.getAttributes().setLabel(labels[i]); exampleInnerSource.deliver(cloneSet); getSubprocess(0).execute(); outExtender.collect(); inApplyLoop(); } }