blob: 44b6331813d55b33db91b70c5c8043c34d124686 [file] [log] [blame]
/*
* Copyright (c) 2013 DataTorrent, Inc. ALL Rights Reserved.
*
* 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.
*/
package com.datatorrent.lib.math;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* This operator extends the AbstractXmlCartesianProduct operator and implements the node value
* as a key value pair of node name and the node's text value.
*
* @displayName Abstract XML Key Value Cartesian Product
* @category Math
* @tags cartesian product, xml, multiple products, key value
* @since 1.0.1
*/
public abstract class AbstractXmlKeyValueCartesianProduct<T> extends AbstractXmlCartesianProduct<T>
{
@Override
public String getValue(Node node)
{
return node.getNodeName() + "=" + getTextValue(node);
}
@Override
public boolean isValueNode(Node n) {
return isTextContainerNode(n);
}
private boolean isTextContainerNode(Node n)
{
boolean container = false;
NodeList childNodes = n.getChildNodes();
if (childNodes.getLength() == 1) {
Node firstChild = childNodes.item(0);
if (firstChild.getNodeType() == Node.TEXT_NODE) {
container = true;
}
}
return container;
}
protected String getTextValue(Node n)
{
String text = null;
NodeList childNodes = n.getChildNodes();
if (childNodes.getLength() == 1) {
Node firstChild = childNodes.item(0);
text = firstChild.getNodeValue();
}
return text;
}
}