private boolean isNullIdField( XmlObject field ) { return field.getName().getLocalPart().equalsIgnoreCase( "ID" ) && field.getValue() == null; }
public static XmlObject[] getChildren( SObject object ) { List<String> reservedFieldNames = Arrays.asList( "type", "fieldsToNull" ); if ( object == null ) { return null; } List<XmlObject> children = new ArrayList<>(); Iterator<XmlObject> iterator = object.getChildren(); while ( iterator.hasNext() ) { XmlObject child = iterator.next(); if ( child.getName().getNamespaceURI().equals( Constants.PARTNER_SOBJECT_NS ) && reservedFieldNames.contains( child.getName().getLocalPart() ) ) { continue; } children.add( child ); } if ( children.size() == 0 ) { return null; } return children.toArray( new XmlObject[children.size()] ); } }
@SuppressWarnings( "unchecked" ) private JSONObject buildJSONSObject( SObject sobject ) { JSONObject jsonObject = new JSONObject(); for ( XmlObject element : getChildren( sobject ) ) { Object object = element.getValue(); if ( object != null && object instanceof SObject ) { jsonObject.put( element.getName(), buildJSONSObject( (SObject) object ) ); } else { jsonObject.put( element.getName(), element.getValue() ); } } return jsonObject; }
/** * Drill down the SObject hierarchy based on the given field hierarchy until either null or the correct MessageElement * is found */ private XmlObject getMessageElementForHierarchy( SObject con, String[] fieldHierarchy ) { final int lastIndex = fieldHierarchy.length - 1; SObject currentSObject = con; for ( int index = 0; index <= lastIndex; index++ ) { for ( XmlObject element : getChildren( currentSObject ) ) { if ( element.getName().getLocalPart().equals( fieldHierarchy[index] ) ) { if ( index == lastIndex ) { return element; } else { if ( element instanceof SObject ) { // Found the next level, keep going currentSObject = (SObject) element; } break; } } } } return null; }
void setFieldInSObject( SObject sobjPass, XmlObject element ) { Iterator<XmlObject> children = element.getChildren(); String name = element.getName().getLocalPart(); if ( !children.hasNext() ) { sobjPass.setSObjectField( name, element.getValue() ); } else { SObject child = new SObject(); child.setName( new QName( name ) ); while ( children.hasNext() ) { setFieldInSObject( child, children.next() ); } sobjPass.setSObjectField( name, child ); } }
void addFields( String prefix, Set<String> fieldNames, XmlObject field ) { //Salesforce SOAP Api sends IDs always in the response, even if we don't request it in SOQL query and //the id's value is null in this case. So, do not add this Id to the fields list if ( isNullIdField( field ) ) { return; } String fieldname = prefix + field.getName().getLocalPart(); if ( field instanceof SObject ) { SObject sobject = (SObject) field; for ( XmlObject element : SalesforceConnection.getChildren( sobject ) ) { addFields( fieldname + ".", fieldNames, element ); } } else { addField( fieldname, fieldNames, (String) field.getValue() ); } }
if ( updatefields.size() > 0 ) { for ( XmlObject element : updatefields ) { sobjPass.setSObjectField( element.getName().getLocalPart(), element.getValue() );
sobjPass.setSObjectField( element.getName().getLocalPart(), element.getValue() );
private XmlObject findField(String name) { XmlObject item = null; for (XmlObject child : children) { if (child.getName().getLocalPart().equals(name)) { item = child; break; } } return item; }
private XmlObject findField(String name) { XmlObject item = null; for (XmlObject child : children) { if (child.getName().getLocalPart().equals(name)) { item = child; break; } } return item; }
public Iterator<XmlObject> getChildren(String name) { ArrayList<XmlObject> result = new ArrayList<XmlObject>(); for (XmlObject child : children) { if (child.getName().getLocalPart().equals(name)) { result.add(child); } } return result.iterator(); }
public Iterator<XmlObject> getChildren(String name) { ArrayList<XmlObject> result = new ArrayList<XmlObject>(); for (XmlObject child : children) { if (child.getName().getLocalPart().equals(name)) { result.add(child); } } return result.iterator(); }
/** * Load the map of response field names to index. * @param fields * @throws TranslatorException */ private void logAndMapFields(String sObjectName, List<XmlObject> fields) throws TranslatorException { if (!sObjectToResponseField.containsKey(sObjectName)) { logFields(sObjectName, fields); Map<String, Integer> responseFieldToIndexMap = new HashMap<String, Integer>(); for (int x = 0; x < fields.size(); x++) { XmlObject element = fields.get(x); responseFieldToIndexMap.put(element.getName().getLocalPart(), x); } sObjectToResponseField.put(sObjectName, responseFieldToIndexMap); } }
public SObjectIndexedRecord(SObject value) { rootType = value.getType(); Iterator<XmlObject> fields = value.getChildren(); while (fields.hasNext()) { XmlObject field = fields.next(); if (valueMap != null && (valueMap.containsKey(field.getName().getLocalPart()) || valueMap.containsKey(rootType + schema.getProp(SalesforceSchemaConstants.COLUMNNAME_DELIMTER) + field.getName().getLocalPart()))) { continue; } else { processXmlObject(field, rootType); } } }
private void getFieldNameList(SObject[] sObjects, boolean createFieldNameExpressions, List<String> fieldNameList, List<Expression> fieldNameExprs) { Iterator<XmlObject> fieldIter = sObjects[0].getChildren(); /** * Skip the first two items. First item is "type" and second is "id". * If we have selected id then it will show up again in the list. */ for (int i = 0; fieldIter.hasNext(); i++) { XmlObject xo = fieldIter.next(); String name = xo.getName().getLocalPart(); if (i < 2) continue; fieldNameList.add(name); if (createFieldNameExpressions) { fieldNameExprs.add(new PrimaryExpression(Arrays.asList(name))); } } }
private void getFieldNameList(SObject[] sObjects, boolean createFieldNameExpressions, List<String> fieldNameList, List<Expression> fieldNameExprs) { Iterator<XmlObject> fieldIter = sObjects[0].getChildren(); /** * Skip the first two items. First item is "type" and second is "id". * If we have selected id then it will show up again in the list. */ for (int i = 0; fieldIter.hasNext(); i++) { XmlObject xo = fieldIter.next(); String name = xo.getName().getLocalPart(); if (i < 2) continue; fieldNameList.add(name); if (createFieldNameExpressions) { fieldNameExprs.add(new PrimaryExpression(Arrays.asList(name))); } } }
private List<List<Object>> loadBatch(QueryResult queryResult) { List<List<Object>> batch = new ArrayList<List<Object>>(); for(SObject sObject : queryResult.getRecords()) { Iterator<XmlObject> fields = sObject.getChildren(); List<Object> row = new ArrayList<Object>(); while (fields.hasNext()) { XmlObject elem = fields.next(); if (elem.getName().getLocalPart().equals("type")) { //$NON-NLS-1$ continue; } Object value = elem.getValue(); row.add(value); } batch.add(row); } return batch; }
/** * TODO: the logic here should be aware of xsi:type information and use a standard conversion * library. Conversion to teiid types should then be a secondary effort - and will be automatically handled above here. */ private Object getCellDatum(String name, Class<?> type, XmlObject elem) throws TranslatorException { if(!name.equals(elem.getName().getLocalPart())) { throw new TranslatorException(SalesForcePlugin.Util.getString("SalesforceQueryExecutionImpl.column.mismatch1") + name + SalesForcePlugin.Util.getString("SalesforceQueryExecutionImpl.column.mismatch2") + elem.getName().getLocalPart()); //$NON-NLS-1$ //$NON-NLS-2$ } Object value = elem.getValue(); return convertValue(type, value); }
public SObjectIndexedRecord(SObject value) { rootType = value.getType(); isAggregateResult = "AggregateResult".equals(rootType); init(); Iterator<XmlObject> fields = value.getChildren(); // Ignore "type" element when find firstly int typeCount = 0; while (fields.hasNext()) { XmlObject field = fields.next(); if (valueMap != null && (valueMap.containsKey(field.getName().getLocalPart()) || valueMap.containsKey(rootType + schema.getProp(SalesforceSchemaConstants.COLUMNNAME_DELIMTER) + field.getName().getLocalPart()))) { continue; } else { if ("type".equals(field.getName().getLocalPart()) && typeCount == 0) { typeCount++; continue; } processXmlObject(field, rootType, null); } } }
private void logFields(String sObjectName, List<XmlObject> fields) { if (!LogManager.isMessageToBeRecorded(LogConstants.CTX_CONNECTOR, MessageLevel.DETAIL)) { return; } LogManager.logDetail(LogConstants.CTX_CONNECTOR, "SalesForce Object Name = " + sObjectName); //$NON-NLS-1$ LogManager.logDetail(LogConstants.CTX_CONNECTOR, "FieldCount = " + fields.size()); //$NON-NLS-1$ for(int i = 0; i < fields.size(); i++) { XmlObject element = fields.get(i); LogManager.logDetail(LogConstants.CTX_CONNECTOR, "Field # " + i + " is " + element.getName().getLocalPart()); //$NON-NLS-1$ //$NON-NLS-2$ } }