private String getSortKey(Object value) { if (value instanceof PrestoTopic) { PrestoTopic topic = (PrestoTopic) value; return topic.getName(field); } else { return value == null ? null : value.toString(); } }
@Override public void create(PrestoTopic topic) { String topicId = topic.getId(); String typeId = topic.getTypeId(); if (topicId == null) { ObjectNode data = ((JacksonTopic) topic).getData(); topicId = identityStrategy.generateId(typeId, data); data.put("_id", topicId); } if (topics.containsKey(topicId)) { throw new RuntimeException("Topic with id '" + topicId + "' already created."); } else { if (topicId == null) { throw new NullPointerException(); } topics.put(topicId, topic); } }
@Override public void update(PrestoTopic topic) { String topicId = topic.getId(); if (topicId == null) { throw new NullPointerException(); } if (topics.containsKey(topicId)) { topics.put(topicId, topic); } else { throw new RuntimeException("Topic with id '" + topicId + "' not an existing topic."); } }
private ValueFieldConfig getValueFieldConfig(PrestoTopic valueTopic, String valueFieldId) { String valueTypeId = valueTopic.getTypeId(); ValueFieldConfig valueFieldConfig = valueFieldConfigCache.get(valueTypeId); if (valueFieldConfig == null) { PrestoDataProvider dataProvider = presto.getDataProvider(); PrestoSchemaProvider schemaProvider = presto.getSchemaProvider(); PrestoType valueType = schemaProvider.getTypeById(valueTypeId); PrestoField valueField = valueType.getFieldById(valueFieldId); Comparator<Object> valueComparator = null; ObjectNode extra = ExtraUtils.getFieldExtraNode(valueField); if (extra != null) { JsonNode handlerNode = extra.path("valueComparator"); if (handlerNode.isObject()) { FieldValueComparator handler = AbstractHandler.getHandler( dataProvider, schemaProvider, FieldValueComparator.class, (ObjectNode) handlerNode); if (handler != null) { handler.setPresto(presto); } valueComparator = handler; } } if (valueComparator == null) { valueComparator = new FieldComparator(valueField, false); } valueFieldConfig = new ValueFieldConfig(presto, rules, field, valueField, valueComparator); valueFieldConfigCache.put(valueTypeId, valueFieldConfig); } return valueFieldConfig; }
@Override public boolean delete(PrestoTopic topic) { String topicId = topic.getId(); return topics.remove(topicId) != null; }