@Override public void processMessage(final WebSocketMessage webSocketData) { final GraphObject obj = getGraphObject(webSocketData.getId()); String key = (String) webSocketData.getNodeData().get("key"); if (obj != null) { PropertyKey propertyKey = StructrApp.getConfiguration().getPropertyKeyForJSONName(obj.getClass(), key); PropertyConverter converter = propertyKey.inputConverter(getWebSocket().getSecurityContext()); Object value = obj.getProperty(propertyKey); if (converter != null) { try { value = converter.revert(value); } catch (FrameworkException ex) { getWebSocket() .send(MessageBuilder.status().code(400).message(ex.getMessage()).build(), true); } } webSocketData.setNodeData(key, value); // send only over local connection (no broadcast) getWebSocket().send(webSocketData, true); } else { getWebSocket().send(MessageBuilder.status().code(404).build(), true); } }
@Override public T getProperty( final SecurityContext securityContext, final GraphObject obj, final boolean applyConverter, final Predicate<GraphObject> predicate) { Object value = null; final PropertyContainer propertyContainer = obj.getPropertyContainer(); if (propertyContainer != null) { // this may throw a java.lang.IllegalStateException: Relationship[<id>] has been deleted in // this tx if (propertyContainer.hasProperty(dbName())) { value = propertyContainer.getProperty(dbName()); } } if (applyConverter) { // apply property converters PropertyConverter converter = databaseConverter(securityContext, obj); if (converter != null) { try { value = converter.revert(value); } catch (Throwable t) { logger.warn( "Unable to convert property {} of type {}: {}", new Object[] {dbName(), getClass().getSimpleName(), t}); logger.warn("", t); } } } // no value found, use schema default if (value == null) { value = defaultValue(); } return (T) value; }