示例#1
0
  @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;
  }