/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client.model.store; import com.eas.client.metadata.Field; import com.eas.client.metadata.Fields; import com.eas.client.model.QueryDocument; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; /** * * @author mg */ public class QueryDocument2XmlDom { protected DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); protected DocumentBuilder documentBuilder; protected QueryDocument2XmlDom() throws Exception { super(); documentBuilder = builderFactory.newDocumentBuilder(); } public static Document transformOutHints(List<QueryDocument.StoredFieldMetadata> outFieldsHints, Fields aHintedFields) throws Exception { QueryDocument2XmlDom transformer = new QueryDocument2XmlDom(); return transformer.queryOutHints2XmlDom(outFieldsHints, aHintedFields); } protected Document queryOutHints2XmlDom(List<QueryDocument.StoredFieldMetadata> outFieldsHints, Fields aHintedFields) throws Exception { Document queryDom = documentBuilder.newDocument(); queryDom.setXmlStandalone(true); Node outputFieldsNode = queryDom.createElement(QueryDocument.OUTPUT_FIELDS_TAG_NAME); saveOutputFields(outFieldsHints, aHintedFields, queryDom, outputFieldsNode); queryDom.appendChild(outputFieldsNode); queryDom.normalizeDocument(); return queryDom; } private static boolean saveOutputFields(List<QueryDocument.StoredFieldMetadata> outFieldsHints, Fields aHintedFields, Document queryDom, Node outputFields) { boolean processed = false; for (QueryDocument.StoredFieldMetadata additionalField : outFieldsHints) { if (needToStoreOutputFieldAddition(aHintedFields, additionalField)) { Node outputFieldNode = queryDom.createElement(QueryDocument.OUTPUT_FIELD_TAG_NAME); NamedNodeMap attrs = outputFieldNode.getAttributes(); Node bindedColAttr = queryDom.createAttribute(QueryDocument.FIELD_NAME_ATTRIBUTE_NAME), descAttr = queryDom.createAttribute(QueryDocument.FIELD_DESCRIPTION_ATTRIBUTE_NAME), typeAttr = queryDom.createAttribute(QueryDocument.FIELD_TYPE_ATTRIBUTE_NAME); bindedColAttr.setTextContent(additionalField.getBindedColumn()); attrs.setNamedItem(bindedColAttr); Field queryField = aHintedFields != null ? aHintedFields.get(additionalField.getBindedColumn()) : null; if (additionalField.getDescription() != null && (queryField == null || !additionalField.getDescription().equals(queryField.getDescription()))) { descAttr.setTextContent(additionalField.getDescription()); attrs.setNamedItem(descAttr); } if (additionalField.getType() != null && (queryField == null || !additionalField.getType().equals(queryField.getType()))) { typeAttr.setTextContent(additionalField.getType()); attrs.setNamedItem(typeAttr); } outputFields.appendChild(outputFieldNode); processed = true; } } return processed; } private static boolean needToStoreOutputFieldAddition(Fields hintedFields, QueryDocument.StoredFieldMetadata aAdditionalField) { if (hintedFields != null) { Field queryField = hintedFields.get(aAdditionalField.getBindedColumn()); if (queryField != null) { if (aAdditionalField.getDescription() != null && !aAdditionalField.getDescription().equals(queryField.getDescription())) { return true; } if (aAdditionalField.getType() != null && !aAdditionalField.getType().equals(queryField.getType())) { return true; } } return false; } else { return true; } } }