/* * #%L * BroadleafCommerce Common Libraries * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ package org.broadleafcommerce.common.extensibility.context.merge.handlers; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Node; import java.util.ArrayList; import java.util.List; /** * This handler implementation provides behavior where a list of elements from the * patch document are appended to the same parent element in the source document. * * @author jfischer * */ public class InsertItems extends BaseHandler { private static final Log LOG = LogFactory.getLog(InsertItems.class); public Node[] merge(List<Node> nodeList1, List<Node> nodeList2, List<Node> exhaustedNodes) { if (CollectionUtils.isEmpty(nodeList1) || CollectionUtils.isEmpty(nodeList2)) { return null; } List<Node> usedNodes = new ArrayList<Node>(); Node node1Parent = nodeList1.get(0).getParentNode(); for (Node aNodeList2 : nodeList2) { Node tempNode = node1Parent.getOwnerDocument().importNode(aNodeList2.cloneNode(true), true); if (LOG.isDebugEnabled()) { StringBuffer sb = new StringBuffer(); sb.append("matching node for insertion: "); sb.append(tempNode.getNodeName()); int attrLength = tempNode.getAttributes().getLength(); for (int x = 0; x < attrLength; x++) { sb.append(" : ("); sb.append(tempNode.getAttributes().item(x).getNodeName()); sb.append("/"); sb.append(tempNode.getAttributes().item(x).getNodeValue()); sb.append(")"); } LOG.debug(sb.toString()); } if (LOG.isDebugEnabled()) { StringBuilder sb = new StringBuilder(); sb.append("inserting into parent: "); sb.append(node1Parent.getNodeName()); int attrLength = node1Parent.getAttributes().getLength(); for (int x = 0; x < attrLength; x++) { sb.append(" : ("); sb.append(node1Parent.getAttributes().item(x).getNodeName()); sb.append("/"); sb.append(node1Parent.getAttributes().item(x).getNodeValue()); sb.append(")"); } LOG.debug(sb.toString()); } node1Parent.appendChild(tempNode); usedNodes.add(tempNode); } Node[] response = {nodeList2.get(0).getParentNode()}; return response; } }