private void processFieldProperty(IEntity currentEntity, MetaField metaField) { if (parseNode == null) { return; } IEntity bsonEntity = (IEntity) currentEntity; Map<MetaField, Map<FieldProperty, MetaAttribute>> projectFields = parseNode.getFieldPropProjectMap(); if (projectFields.containsKey(metaField)) { // set field property value to the json entity according to the faked name for (FieldProperty property : projectFields.get(metaField).keySet()) { MetaAttribute fakeAttribute = projectFields.get(metaField).get(property); Object value = bsonEntity.getFieldProperty(metaField.getName(), property.getName()); if (value != null) { // covert value using data type handler IDataTypeHandler handler = JsonDataTypeHandlerFactory.getHandler(property.getType()); JsonNode valueNode = (JsonNode) handler.write(currentEntity, value, fakeAttribute); jsonEntity.getNode().put(fakeAttribute.getName(), valueNode); } } } }
private void addFieldProjection(Map<MetaField, Map<FieldProperty, MetaAttribute>> map, ISearchField projField) { if (projField instanceof AbstractSearchField && (((AbstractSearchField)projField).getInnerProperty() != null)) { // for field property projection, construct the proper information for projection MetaField metaField = null; AbstractSearchField field = (AbstractSearchField) projField; metaField = field.getRootField(); Map<FieldProperty, MetaAttribute> sets = map.get(metaField); if (sets == null) { sets = new HashMap<FieldProperty, MetaAttribute>(); map.put(metaField, sets); } FieldProperty property = field.getInnerProperty(); String targetFieldName = field.getFieldName() + "." + field.getInnerProperty().getName(); // fake attribute to the field property MetaAttribute attribute = new MetaAttribute(true); attribute.setName(targetFieldName); attribute.setDataType(property.getType()); sets.put(property, attribute); } }
@Override public Object getFieldProperty(String fieldName, String propertyName) { FieldProperty property = FieldProperty.fromQueryName(propertyName); CheckConditions.checkNotNull(property, "Can not find field property %s!", propertyName); String propertyFullName = fieldName + PROPERTY_CONNECTOR + property.getName(); JsonNode valueNode = getNode().get(propertyFullName); if (valueNode != null) { MetaAttribute attribute = getFieldPropertyField(property, propertyFullName); IDataTypeHandler handler = JsonDataTypeHandlerFactory.getHandler(property.getType()); return handler.read(this, valueNode, attribute); } return null; }
private MetaAttribute getFieldPropertyField(FieldProperty property, String propertyFullName) { MetaAttribute attribute = new MetaAttribute(); attribute.setName(propertyFullName); attribute.setDataType(property.getType()); return attribute; }
public void setFieldProperty(String fieldName, String propertyName, Object value) { FieldProperty property = FieldProperty.fromQueryName(propertyName); String propertyFullName = fieldName + PROPERTY_CONNECTOR + propertyName; if (property != null) { MetaAttribute attribute = getFieldPropertyField(property, propertyFullName); IDataTypeHandler handler = JsonDataTypeHandlerFactory.getHandler(property.getType()); JsonNode valueNode = (JsonNode) handler.write(this, value, attribute); getNode().put(propertyFullName, valueNode); } }