package org.milyn.templating.xslt;
import org.milyn.delivery.dom.DOMElementVisitor;
import org.milyn.container.ExecutionContext;
import org.milyn.cdr.annotation.ConfigParam;
import org.milyn.xml.DomUtils;
import org.milyn.SmooksException;
import org.w3c.dom.Element;
import java.util.List;
import java.util.ArrayList;
/**
* Transform the order-item node using the current populated OrderItem bean.
* @author <a href="mailto:tom.fennelly@gmail.com">tom.fennelly@gmail.com</a>
*/
public class TransformOrderItem implements DOMElementVisitor {
@ConfigParam(defaultVal = "false")
private boolean removeItem;
public void visitBefore(Element element, ExecutionContext executionContext) throws SmooksException {
}
public void visitAfter(Element orderItemElement, ExecutionContext executionContext) throws SmooksException {
OrderItem orderItem = (OrderItem) executionContext.getBeanContext().getBean("order-item");
// Remove the order items child content
DomUtils.removeChildren(orderItemElement);
// Readd the order item data in the form required by the target
orderItem.addToElement(orderItemElement);
if(removeItem) {
// Remove the order item from the message
DomUtils.removeElement(orderItemElement, false);
// cache the order item - readded to the OrderLines at the end.
cacheOrderItem(orderItemElement, executionContext);
}
}
private static final String KEY = TransformOrderItem.class.getName() + "#order-items";
private void cacheOrderItem(Element orderItemElement, ExecutionContext containerRequest) {
List<Element> orderItems = getOrderItems(containerRequest);
orderItems.add(orderItemElement);
}
public static List<Element> getOrderItems(ExecutionContext containerRequest) {
List<Element> orderItems = (List<Element>) containerRequest.getAttribute(KEY);
if(orderItems == null) {
orderItems = new ArrayList<Element>();
containerRequest.setAttribute(KEY, orderItems);
}
return orderItems;
}
}