예제 #1
0
  public Json makeTyped(Object anything) {
    boolean isarray = anything.getClass().isArray();
    Class<?> type = isarray ? anything.getClass().getComponentType() : anything.getClass();
    JsonConverter converter = converterMap.get(type.getName());
    String typeName = shortNameMap.getY(type.getName());
    if (typeName == null) typeName = type.getName();
    if (isarray) {
      Json result = Json.array();
      Object[] A = (Object[]) anything;
      for (Object x : A) {
        if (x == null) result.add(Json.nil());
        else result.add(converter != null ? converter.to(x) : make(x));
      }
      return Json.object().set("javaArrayType", typeName).set("array", result);
    } else if (type.isEnum())
      return Json.object().set("java.lang.Enum", type.getName()).set("value", anything.toString());

    for (Class<?> abstractConv : converterFromAbstractMap.keySet())
      if (abstractConv.isAssignableFrom(type))
        return converterFromAbstractMap.get(abstractConv).to(anything);
    Json value = null;
    if (converter != null) value = converter.to(anything);
    else if (Collection.class.isAssignableFrom(type) || Map.class.isAssignableFrom(type))
      value = beanConverter.to(anything);
    else
      try {
        value = f.make(anything);
      } catch (Throwable t) {
        value = beanConverter.to(anything);
      }
    return Json.object().set("javaType", typeName).set("value", value);
  }
예제 #2
0
 /**
  * Searches a user by ID. If multiple realms are configured, each will be tried according to their
  * ordinal number configuration. Only the first found is returned.
  */
 public Json searchUserById(String id) {
   if (id == null || id.length() == 0) return Json.array();
   for (String providerName : orderedProviders()) {
     UserProvider P = provider(providerName);
     Json user = P.get(id);
     if (!user.isNull()) return user;
   }
   return Json.nil();
 }
예제 #3
0
  public Json make(Object anything) {
    if (anything == null) return Json.nil();
    else if (anything instanceof String) return f.string((String) anything);
    else if (anything instanceof Boolean) return f.bool((Boolean) anything);
    else if (anything instanceof Number) return f.number((Number) anything);
    else if (anything instanceof Json) return (Json) anything;
    else if (anything instanceof Performative) return f.make(anything.toString());

    return makeTyped(anything);
  }
예제 #4
0
 private Json makeProperty(Object value) {
   if (value == null) return Json.nil();
   Class<?> type = value.getClass();
   if (Number.class.isAssignableFrom(type)) return makeTyped(value);
   else return make(value);
 }