/** Resolves the closest inherited {@link ObjectMapper} that is nested. */ public ObjectMapper resolveClosestNestedObjectMapper(String fieldName) { int indexOf = fieldName.lastIndexOf('.'); if (indexOf == -1) { return null; } else { do { String objectPath = fieldName.substring(0, indexOf); ObjectMappers objectMappers = objectMapper(objectPath); if (objectMappers == null) { return null; } if (objectMappers.hasNested()) { for (ObjectMapper objectMapper : objectMappers) { if (objectMapper.nested().isNested()) { return objectMapper; } } } indexOf = objectPath.lastIndexOf('.'); } while (indexOf != -1); } return null; }
private void removeObjectAndFieldMappers(DocumentMapper docMapper) { // we need to remove those mappers MapBuilder<String, FieldMappers> nameFieldMappers = newMapBuilder(this.nameFieldMappers); MapBuilder<String, FieldMappers> indexNameFieldMappers = newMapBuilder(this.indexNameFieldMappers); MapBuilder<String, FieldMappers> fullNameFieldMappers = newMapBuilder(this.fullNameFieldMappers); for (FieldMapper mapper : docMapper.mappers()) { FieldMappers mappers = nameFieldMappers.get(mapper.names().name()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { nameFieldMappers.remove(mapper.names().name()); } else { nameFieldMappers.put(mapper.names().name(), mappers); } } mappers = indexNameFieldMappers.get(mapper.names().indexName()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { indexNameFieldMappers.remove(mapper.names().indexName()); } else { indexNameFieldMappers.put(mapper.names().indexName(), mappers); } } mappers = fullNameFieldMappers.get(mapper.names().fullName()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { fullNameFieldMappers.remove(mapper.names().fullName()); } else { fullNameFieldMappers.put(mapper.names().fullName(), mappers); } } } this.nameFieldMappers = nameFieldMappers.map(); this.indexNameFieldMappers = indexNameFieldMappers.map(); this.fullNameFieldMappers = fullNameFieldMappers.map(); MapBuilder<String, ObjectMappers> fullPathObjectMappers = newMapBuilder(this.fullPathObjectMappers); for (ObjectMapper mapper : docMapper.objectMappers().values()) { ObjectMappers mappers = fullPathObjectMappers.get(mapper.fullPath()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { fullPathObjectMappers.remove(mapper.fullPath()); } else { fullPathObjectMappers.put(mapper.fullPath(), mappers); } } } this.fullPathObjectMappers = fullPathObjectMappers.map(); }
private void removeObjectFieldMappers(DocumentMapper docMapper) { // we need to remove those mappers for (FieldMapper mapper : docMapper.mappers()) { FieldMappers mappers = nameFieldMappers.get(mapper.names().name()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { nameFieldMappers = newMapBuilder(nameFieldMappers).remove(mapper.names().name()).immutableMap(); } else { nameFieldMappers = newMapBuilder(nameFieldMappers).put(mapper.names().name(), mappers).immutableMap(); } } mappers = indexNameFieldMappers.get(mapper.names().indexName()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { indexNameFieldMappers = newMapBuilder(indexNameFieldMappers) .remove(mapper.names().indexName()) .immutableMap(); } else { indexNameFieldMappers = newMapBuilder(indexNameFieldMappers) .put(mapper.names().indexName(), mappers) .immutableMap(); } } mappers = fullNameFieldMappers.get(mapper.names().fullName()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { fullNameFieldMappers = newMapBuilder(fullNameFieldMappers).remove(mapper.names().fullName()).immutableMap(); } else { fullNameFieldMappers = newMapBuilder(fullNameFieldMappers) .put(mapper.names().fullName(), mappers) .immutableMap(); } } } for (ObjectMapper mapper : docMapper.objectMappers().values()) { ObjectMappers mappers = objectMappers.get(mapper.fullPath()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { objectMappers = newMapBuilder(objectMappers).remove(mapper.fullPath()).immutableMap(); } else { objectMappers = newMapBuilder(objectMappers).put(mapper.fullPath(), mappers).immutableMap(); } } } }
@Override public void objectMapper(ObjectMapper objectMapper) { ObjectMappers mappers = objectMappers.get(objectMapper.fullPath()); if (mappers == null) { mappers = new ObjectMappers(objectMapper); } else { mappers = mappers.concat(objectMapper); } objectMappers = newMapBuilder(objectMappers).put(objectMapper.fullPath(), mappers).immutableMap(); // update the hasNested flag if (objectMapper.nested().isNested()) { hasNested = true; } }
public SmartNameObjectMapper smartNameObjectMapper(String smartName) { int dotIndex = smartName.indexOf('.'); if (dotIndex != -1) { String possibleType = smartName.substring(0, dotIndex); DocumentMapper possibleDocMapper = mappers.get(possibleType); if (possibleDocMapper != null) { String possiblePath = smartName.substring(dotIndex + 1); ObjectMapper mapper = possibleDocMapper.objectMappers().get(possiblePath); if (mapper != null) { return new SmartNameObjectMapper(mapper, possibleDocMapper); } } } ObjectMappers mappers = objectMapper(smartName); if (mappers != null) { return new SmartNameObjectMapper(mappers.mapper(), null); } return null; }
private void addObjectMappers(ObjectMapper[] objectMappers) { synchronized (mutex) { MapBuilder<String, ObjectMappers> fullPathObjectMappers = newMapBuilder(this.fullPathObjectMappers); for (ObjectMapper objectMapper : objectMappers) { ObjectMappers mappers = fullPathObjectMappers.get(objectMapper.fullPath()); if (mappers == null) { mappers = new ObjectMappers(objectMapper); } else { mappers = mappers.concat(objectMapper); } fullPathObjectMappers.put(objectMapper.fullPath(), mappers); // update the hasNested flag if (objectMapper.nested().isNested()) { hasNested = true; } } this.fullPathObjectMappers = fullPathObjectMappers.map(); } }
private void removeObjectAndFieldMappers(DocumentMapper docMapper) { synchronized (mappersMutex) { fieldMappers.removeMappers(docMapper.mappers()); ImmutableOpenMap.Builder<String, ObjectMappers> fullPathObjectMappers = ImmutableOpenMap.builder(this.fullPathObjectMappers); for (ObjectMapper mapper : docMapper.objectMappers().values()) { ObjectMappers mappers = fullPathObjectMappers.get(mapper.fullPath()); if (mappers != null) { mappers = mappers.remove(mapper); if (mappers.isEmpty()) { fullPathObjectMappers.remove(mapper.fullPath()); } else { fullPathObjectMappers.put(mapper.fullPath(), mappers); } } } this.fullPathObjectMappers = fullPathObjectMappers.build(); } }