package org.nate.internal.transformer; import java.util.ArrayList; import java.util.List; import org.nate.encoder.NateNode; public class TransformationSequence implements NateTransformer { private final Iterable<NateTransformer> sequence; @SuppressWarnings("unchecked") public static TransformationSequence fromObjectSequence(Iterable data) { List<NateTransformer> sequence = new ArrayList<NateTransformer>(); for (Object value : data) { NateTransformer transformer = NateTransformers.from(value); sequence.add(transformer); } return new TransformationSequence(sequence); } public TransformationSequence(Iterable<NateTransformer> sequence) { this.sequence = sequence; } @Override public void transform(NateNode node) { List<NateNode> newNodes = new ArrayList<NateNode>(); for (NateTransformer transformer : sequence) { NateNode newNode = node.copy(); transformer.transform(newNode); newNodes.add(newNode); } node.replaceWith(newNodes); } @Override public void setAttribute(String attributeName, NateNode node) { throw new IllegalArgumentException("Illegal attempt (not yet implemented) to inject list into attribute " + attributeName); } }