private void addXMLEntry(Node entryNode, XML_FIELD xmlField, List<XMLEntry> entries) { XMLEntry entry = new XMLEntry(); entry.setValue(entryNode); entry.setXMLField(xmlField); entries.add(entry); }
public void create(List<Field> xmlFields, Node contextNode, List<XMLEntry> values, Field lastUpdatedField, DocumentPreservationPolicy docPresPolicy, CoreAbstractSession session) { List itemsToWrite = new ArrayList(); for(int i = 0, size = values.size(); i < size; i++) { XMLEntry nextEntry = values.get(i); itemsToWrite.add(nextEntry.getValue()); if(i == (values.size() -1) || values.get(i+1).getXMLField() != nextEntry.getXMLField()) { create(nextEntry.getXMLField(), contextNode, itemsToWrite, lastUpdatedField, docPresPolicy, session); itemsToWrite = new ArrayList(); lastUpdatedField = nextEntry.getXMLField(); } } }
public List<XMLEntry> getValuesIndicatingNoEntry(List<DatabaseField> keys, boolean shouldReturnNodes) { List<XMLField> xmlFields = convertToXMLField(keys); List<XMLEntry> values = UnmarshalXPathEngine.getInstance().selectNodes(dom, xmlFields, xmlFields.get(0).getNamespaceResolver()); if(shouldReturnNodes) { return values; } for(XMLEntry next:values) { Node nextNode = (Node)next.getValue(); if(!(nextNode.getNodeType() == Node.ELEMENT_NODE)) { Object value = getValueFromElement((Element)nextNode.getParentNode(), nextNode, next.getXMLField()); next.setValue(value); } else { next.setValue(buildNestedRow((Element)nextNode)); } } return values; }
/** * INTERNAL: * Convert the value which may be a direct value, nested record, or set of nested records, * to a node value usable with the XPathEngine. */ private Object convertToNodeValue(Object value) { if (value instanceof List) { List values = (List)value; Vector nodeValues = new Vector(values.size()); for (int index = 0; index < values.size(); index++) { Object nestedValue = values.get(index); nodeValues.add(convertToNodeValue(nestedValue)); } return nodeValues; } else if (value instanceof DOMRecord) { return ((DOMRecord)value).getDOM(); } else if (value != null && value.getClass() == XMLEntry.class) { XMLEntry entry = (XMLEntry)value; entry.setValue(convertToNodeValue(entry.getValue())); return entry; } else { return value; } }
public List<XMLEntry> replaceCollection(List<Field> xmlFields, List<XMLEntry> values, Node contextNode, DocumentPreservationPolicy docPresPolicy, Field lastUpdatedField, CoreAbstractSession session) { List<XMLEntry> oldNodes = unmarshalXPathEngine.selectNodes(contextNode, xmlFields, getNamespaceResolverForField(xmlFields.get(0))); if(oldNodes == null || oldNodes.size() == 0) { return oldNodes; } Iterator<XMLEntry> oldValues = oldNodes.iterator(); //Remove all the old values, and then call create to add them back in. while(oldValues.hasNext()) { XMLEntry entry = oldValues.next(); Node nextNode = (Node)entry.getValue(); Node parent = nextNode.getParentNode(); parent.removeChild(nextNode); while(parent != contextNode) { if(parent.getChildNodes().getLength() == 0) { nextNode = parent; parent = nextNode.getParentNode(); parent.removeChild(nextNode); } else { break; } } } create(xmlFields, contextNode, values, lastUpdatedField, xmlBinderPolicy, session); return oldNodes; } public NodeList replaceCollection(Field xmlField, Node parent, Collection values, CoreAbstractSession session) throws XMLMarshalException {
public List<XMLEntry> getValuesIndicatingNoEntry(List<DatabaseField> keys, boolean shouldReturnNodes) { List<XMLField> xmlFields = convertToXMLField(keys); List<XMLEntry> values = UnmarshalXPathEngine.getInstance().selectNodes(dom, xmlFields, xmlFields.get(0).getNamespaceResolver()); if(shouldReturnNodes) { return values; } for(XMLEntry next:values) { Node nextNode = (Node)next.getValue(); if(!(nextNode.getNodeType() == Node.ELEMENT_NODE)) { Object value = getValueFromElement((Element)nextNode.getParentNode(), nextNode, next.getXMLField()); next.setValue(value); } else { next.setValue(buildNestedRow((Element)nextNode)); } } return values; }
/** * INTERNAL: * Convert the value which may be a direct value, nested record, or set of nested records, * to a node value usable with the XPathEngine. */ private Object convertToNodeValue(Object value) { if (value instanceof List) { List values = (List)value; Vector nodeValues = new Vector(values.size()); for (int index = 0; index < values.size(); index++) { Object nestedValue = values.get(index); nodeValues.add(convertToNodeValue(nestedValue)); } return nodeValues; } else if (value instanceof DOMRecord) { return ((DOMRecord)value).getDOM(); } else if (value != null && value.getClass() == XMLEntry.class) { XMLEntry entry = (XMLEntry)value; entry.setValue(convertToNodeValue(entry.getValue())); return entry; } else { return value; } }
public List<XMLEntry> replaceCollection(List<Field> xmlFields, List<XMLEntry> values, Node contextNode, DocumentPreservationPolicy docPresPolicy, Field lastUpdatedField, CoreAbstractSession session) { List<XMLEntry> oldNodes = unmarshalXPathEngine.selectNodes(contextNode, xmlFields, getNamespaceResolverForField(xmlFields.get(0))); if(oldNodes == null || oldNodes.size() == 0) { return oldNodes; } Iterator<XMLEntry> oldValues = oldNodes.iterator(); //Remove all the old values, and then call create to add them back in. while(oldValues.hasNext()) { XMLEntry entry = oldValues.next(); Node nextNode = (Node)entry.getValue(); Node parent = nextNode.getParentNode(); parent.removeChild(nextNode); while(parent != contextNode) { if(parent.getChildNodes().getLength() == 0) { nextNode = parent; parent = nextNode.getParentNode(); parent.removeChild(nextNode); } else { break; } } } create(xmlFields, contextNode, values, lastUpdatedField, xmlBinderPolicy, session); return oldNodes; } public NodeList replaceCollection(Field xmlField, Node parent, Collection values, CoreAbstractSession session) throws XMLMarshalException {
private void addXMLEntry(Node entryNode, XML_FIELD xmlField, List<XMLEntry> entries) { XMLEntry entry = new XMLEntry(); entry.setValue(entryNode); entry.setXMLField(xmlField); entries.add(entry); }
public List<XMLEntry> getValuesIndicatingNoEntry(List<DatabaseField> keys, boolean shouldReturnNodes) { List<XMLField> xmlFields = convertToXMLField(keys); List<XMLEntry> values = UnmarshalXPathEngine.getInstance().selectNodes(dom, xmlFields, xmlFields.get(0).getNamespaceResolver()); if(shouldReturnNodes) { return values; } for(XMLEntry next:values) { Node nextNode = (Node)next.getValue(); if(!(nextNode.getNodeType() == Node.ELEMENT_NODE)) { Object value = getValueFromElement((Element)nextNode.getParentNode(), nextNode, next.getXMLField()); next.setValue(value); } else { next.setValue(buildNestedRow((Element)nextNode)); } } return values; }
public void create(List<Field> xmlFields, Node contextNode, List<XMLEntry> values, Field lastUpdatedField, DocumentPreservationPolicy docPresPolicy, CoreAbstractSession session) { List itemsToWrite = new ArrayList(); for(int i = 0, size = values.size(); i < size; i++) { XMLEntry nextEntry = values.get(i); itemsToWrite.add(nextEntry.getValue()); if(i == (values.size() -1) || values.get(i+1).getXMLField() != nextEntry.getXMLField()) { create(nextEntry.getXMLField(), contextNode, itemsToWrite, lastUpdatedField, docPresPolicy, session); itemsToWrite = new ArrayList(); lastUpdatedField = nextEntry.getXMLField(); } } }
/** * INTERNAL: * Convert the value which may be a direct value, nested record, or set of nested records, * to a node value usable with the XPathEngine. */ private Object convertToNodeValue(Object value) { if (value instanceof List) { List values = (List)value; Vector nodeValues = new Vector(values.size()); for (int index = 0; index < values.size(); index++) { Object nestedValue = values.get(index); nodeValues.add(convertToNodeValue(nestedValue)); } return nodeValues; } else if (value instanceof DOMRecord) { return ((DOMRecord)value).getDOM(); } else if (value != null && value.getClass() == XMLEntry.class) { XMLEntry entry = (XMLEntry)value; entry.setValue(convertToNodeValue(entry.getValue())); return entry; } else { return value; } }
public List<XMLEntry> replaceCollection(List<XMLField> xmlFields, List<XMLEntry> values, Node contextNode, DocumentPreservationPolicy docPresPolicy, XMLField lastUpdatedField, AbstractSession session) { List<XMLEntry> oldNodes = unmarshalXPathEngine.selectNodes(contextNode, xmlFields, getNamespaceResolverForField(xmlFields.get(0))); if(oldNodes == null || oldNodes.size() == 0) { return oldNodes; } Iterator<XMLEntry> oldValues = oldNodes.iterator(); //Remove all the old values, and then call create to add them back in. while(oldValues.hasNext()) { XMLEntry entry = (XMLEntry)oldValues.next(); Node nextNode = (Node)entry.getValue(); Node parent = nextNode.getParentNode(); parent.removeChild(nextNode); while(parent != contextNode) { if(parent.getChildNodes().getLength() == 0) { nextNode = parent; parent = nextNode.getParentNode(); parent.removeChild(nextNode); } else { break; } } } create(xmlFields, contextNode, values, lastUpdatedField, xmlBinderPolicy, session); return oldNodes; } public NodeList replaceCollection(XMLField xmlField, Node parent, Collection values, AbstractSession session) throws XMLMarshalException {
private void addXMLEntry(Node entryNode, XMLField xmlField, List<XMLEntry> entries) { XMLEntry entry = new XMLEntry(); entry.setValue(entryNode); entry.setXMLField(xmlField); entries.add(entry); }
public void create(List<XMLField> xmlFields, Node contextNode, List<XMLEntry> values, XMLField lastUpdatedField, DocumentPreservationPolicy docPresPolicy, AbstractSession session) { List itemsToWrite = new ArrayList(); for(int i = 0, size = values.size(); i < size; i++) { XMLEntry nextEntry = values.get(i); itemsToWrite.add(nextEntry.getValue()); if(i == (values.size() -1) || values.get(i+1).getXMLField() != nextEntry.getXMLField()) { create(nextEntry.getXMLField(), contextNode, itemsToWrite, lastUpdatedField, docPresPolicy, session); itemsToWrite = new ArrayList(); lastUpdatedField = nextEntry.getXMLField(); } } }
for(XMLField next:sourceFields) { fieldValue = ((XMLCollectionReferenceMapping)xmlMapping).buildFieldValue(value, next, session); XMLEntry entry = new XMLEntry(); entry.setValue(fieldValue); entry.setXMLField(next); nestedRows.add(entry); XMLEntry entry = new XMLEntry(); entry.setValue(fieldValue); entry.setXMLField(associatedField); nestedRows.add(entry);
public Object valueFromRow(AbstractRecord row, JoinedAttributeManager joinManager, ObjectBuildingQuery sourceQuery, CacheKey cacheKey, AbstractSession executionSession, boolean isTargetProtected, Boolean[] wasCacheUsed) throws DatabaseException { List<XMLEntry> values = ((DOMRecord)row).getValuesIndicatingNoEntry(this.getFields()); Object container = getContainerPolicy().containerInstance(values.size()); for(XMLEntry next:values) { Field valueField = next.getXMLField(); DatabaseMapping nextMapping = (DatabaseMapping)this.choiceElementMappings.get(valueField); if(nextMapping.isAbstractCompositeCollectionMapping()) { XMLCompositeCollectionMapping xmlMapping = (XMLCompositeCollectionMapping)nextMapping; Object value = xmlMapping.buildObjectFromNestedRow((AbstractRecord)next.getValue(), joinManager, sourceQuery, executionSession, isTargetProtected); value = convertDataValueToObjectValue(value, executionSession, ((XMLRecord) row).getUnmarshaller()); getContainerPolicy().addInto(value, container, executionSession); } else if(nextMapping instanceof XMLCompositeDirectCollectionMapping){ XMLCompositeDirectCollectionMapping xmlMapping = (XMLCompositeDirectCollectionMapping)nextMapping; Object value = next.getValue(); value = convertDataValueToObjectValue(value, executionSession, ((XMLRecord) row).getUnmarshaller()); getContainerPolicy().addInto(value, container, executionSession); } } ArrayList<XMLMapping> processedMappings = new ArrayList<XMLMapping>(); for(XMLMapping mapping:choiceElementMappings.values()) { if(((DatabaseMapping)mapping).isObjectReferenceMapping() && ((DatabaseMapping)mapping).isCollectionMapping() && !(processedMappings.contains(mapping))) { ((XMLCollectionReferenceMapping)mapping).readFromRowIntoObject(row, joinManager, ((XMLRecord)row).getCurrentObject(), cacheKey, sourceQuery, executionSession, isTargetProtected, container); processedMappings.add(mapping); } } return container; }
for(XMLField next:sourceFields) { fieldValue = ((XMLCollectionReferenceMapping)xmlMapping).buildFieldValue(value, next, session); XMLEntry entry = new XMLEntry(); entry.setValue(fieldValue); entry.setXMLField(next); nestedRows.add(entry); XMLEntry entry = new XMLEntry(); entry.setValue(fieldValue); entry.setXMLField(associatedField); nestedRows.add(entry);
public Object valueFromRow(AbstractRecord row, JoinedAttributeManager joinManager, ObjectBuildingQuery sourceQuery, CacheKey cacheKey, AbstractSession executionSession, boolean isTargetProtected, Boolean[] wasCacheUsed) throws DatabaseException { List<XMLEntry> values = ((DOMRecord)row).getValuesIndicatingNoEntry(this.getFields()); Object container = getContainerPolicy().containerInstance(values.size()); for(XMLEntry next:values) { Field valueField = next.getXMLField(); DatabaseMapping nextMapping = (DatabaseMapping)this.choiceElementMappings.get(valueField); if(nextMapping.isAbstractCompositeCollectionMapping()) { XMLCompositeCollectionMapping xmlMapping = (XMLCompositeCollectionMapping)nextMapping; Object value = xmlMapping.buildObjectFromNestedRow((AbstractRecord)next.getValue(), joinManager, sourceQuery, executionSession, isTargetProtected); value = convertDataValueToObjectValue(value, executionSession, ((XMLRecord) row).getUnmarshaller()); getContainerPolicy().addInto(value, container, executionSession); } else if(nextMapping instanceof XMLCompositeDirectCollectionMapping){ XMLCompositeDirectCollectionMapping xmlMapping = (XMLCompositeDirectCollectionMapping)nextMapping; Object value = next.getValue(); value = convertDataValueToObjectValue(value, executionSession, ((XMLRecord) row).getUnmarshaller()); getContainerPolicy().addInto(value, container, executionSession); } } ArrayList<XMLMapping> processedMappings = new ArrayList<XMLMapping>(); for(XMLMapping mapping:choiceElementMappings.values()) { if(((DatabaseMapping)mapping).isObjectReferenceMapping() && ((DatabaseMapping)mapping).isCollectionMapping() && !(processedMappings.contains(mapping))) { ((XMLCollectionReferenceMapping)mapping).readFromRowIntoObject(row, joinManager, ((XMLRecord)row).getCurrentObject(), cacheKey, sourceQuery, executionSession, isTargetProtected, container); processedMappings.add(mapping); } } return container; }
fieldValue = ((XMLCompositeCollectionMapping)xmlMapping).buildCompositeRow(fieldValue, session, row); XMLEntry entry = new XMLEntry(); entry.setValue(fieldValue); entry.setXMLField(associatedField); nestedRows.add(entry);