/** * Writes empty array : <code>[]</code>. */ default JsonWriter emptyArray() { return startArray().endArray(); }
/** * Writes an array use writer function. */ default <T> JsonWriter array(T[] a, Consumer<T> itemWriter) { startArray(); if(null != a) { for(int i=0;i<a.length;i++) { T item = a[i]; if(i > 0) { separator(); } itemWriter.accept(item); } } endArray(); return this; }
/** * Writes an array use writer function. */ default <T> JsonWriter array(Iterable<T> a, Consumer<T> itemWriter) { startArray(); if(null != a) { int i = 0; for(T item : a) { if(i > 0) { separator(); }else{ i++; } itemWriter.accept(item); } } endArray(); return this; }
/** * Writes an array property. */ default JsonWriter propertyJsonable(String key, Iterable<? extends JsonStringable> iterable) { key(key).startArray(); if(null != iterable) { Iterator<? extends JsonStringable> iterator = iterable.iterator(); while (iterator.hasNext()){ JsonStringable o = iterator.next(); o.toJson(this); if(iterator.hasNext()){ this.separator(); } } } return endArray(); }
/** * Writes an array property. */ default JsonWriter propertyJsonable(String key, JsonStringable... array) { key(key).startArray(); if(null != array) { int i = 0; for(JsonStringable o : array){ o.toJson(this); if(i < array.length - 1) { this.separator(); } i++; } } return endArray(); }
@Override protected void writeInternal(Object o, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { try (OutputStream os = outputMessage.getBody()){ try (OutputStreamWriter writer = new OutputStreamWriter(os, getCharset(outputMessage))) { JsonWriter jsonWriter = JSON.writer(writer).create(); if(o == null) { jsonWriter.null_(); return; } if(o.getClass().isArray()) { Object[] a = (Object[])o; jsonWriter.startArray(); for(Object item : a) { ((JsonStringable)item).toJson(jsonWriter); } jsonWriter.endArray(); }else { ((JsonStringable)o).toJson(jsonWriter); } } } }
@Override public void write(Object o, Type type, MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { if(type instanceof Class) { writeInternal(o, outputMessage); }else { try (OutputStream os = outputMessage.getBody()){ try (OutputStreamWriter writer = new OutputStreamWriter(os, getCharset(outputMessage))) { JsonWriter jsonWriter = JSON.writer(writer).create(); if(null == o) { jsonWriter.startArray().endArray(); return; } Collection c = (Collection)o; jsonWriter.array(c, item -> { ((JsonStringable)item).toJson(jsonWriter); }); } } } }
protected void writeDefaultSecurity(WriteContext context, ApiMetadata m, JsonWriter w) { if(null == context.defaultSecurity){ return; } w.property(SECURITY, () -> { w.startArray(); w.startObject(); w.property(context.defaultSecurity, () -> { w.array(m.getPermissions(), (p) -> w.value(p.getValue())); }); w.endObject(); w.endArray(); }); }
protected void writeModelWithinObject(WriteContext context, ApiMetadata m, JsonWriter w, MApiModel model) { if(!model.hasBaseModel()) { w.property(TYPE, OBJECT); } if(model.isEntity()) { w.property(X_ENTITY, true); } writeExtension(w, model.getExtension()); w.propertyOptional(TITLE, model.getTitle()); w.propertyOptional(SUMMARY, model.getSummary()); w.propertyOptional(DESCRIPTION, model.getDescription()); if(!model.hasBaseModel()) { writeModelProperties(context, m, w, model); }else{ w.property(ALL_OF, () -> { w.startArray(); //item1 : the base model. w.startObject() .property(REF, ref(model.getBaseName())) .endObject(); w.separator(); //item2 : self w.startObject() .property(TYPE, OBJECT); writeModelProperties(context, m, w, model); w.endObject(); w.endArray(); }); } }