public void formatMultiValue( final Iterator<?> iIterator, final StringWriter buffer, final String format) throws IOException { if (iIterator != null) { int counter = 0; String objectJson; while (iIterator.hasNext()) { final Object entry = iIterator.next(); if (entry != null) { if (counter++ > 0) buffer.append(", "); if (entry instanceof OIdentifiable) { ORecord<?> rec = ((OIdentifiable) entry).getRecord(); try { objectJson = rec.getRecord().toJSON(format); buffer.append(objectJson); } catch (Exception e) { OLogManager.instance() .error(this, "Error transforming record " + rec.getIdentity() + " to JSON", e); } } else if (OMultiValue.isMultiValue(entry)) formatMultiValue(OMultiValue.getMultiValueIterator(entry), buffer, format); else buffer.append(OJSONWriter.writeValue(entry, format)); } } } }
@SuppressWarnings("unchecked") public void writeResult(Object iResult, final String iFormat) throws InterruptedException, IOException { if (iResult == null) send( OHttpUtils.STATUS_OK_NOCONTENT_CODE, "", OHttpUtils.CONTENT_TEXT_PLAIN, null, null, true); else { if (iResult instanceof Map<?, ?>) { iResult = ((Map<?, ?>) iResult).entrySet().iterator(); } else if (OMultiValue.isMultiValue(iResult) && (OMultiValue.getSize(iResult) > 0 && !(OMultiValue.getFirstValue(iResult) instanceof OIdentifiable))) { final List<OIdentifiable> resultSet = new ArrayList<OIdentifiable>(); resultSet.add(new ODocument().field("value", iResult)); iResult = resultSet.iterator(); } else if (iResult instanceof OIdentifiable) { // CONVERT SIGLE VALUE IN A COLLECTION final List<OIdentifiable> resultSet = new ArrayList<OIdentifiable>(); resultSet.add((OIdentifiable) iResult); iResult = resultSet.iterator(); } else if (iResult instanceof Iterable<?>) iResult = ((Iterable<OIdentifiable>) iResult).iterator(); else if (OMultiValue.isMultiValue(iResult)) iResult = OMultiValue.getMultiValueIterator(iResult); else { final List<OIdentifiable> resultSet = new ArrayList<OIdentifiable>(); resultSet.add(new ODocument().field("value", iResult)); iResult = resultSet.iterator(); } if (iResult == null) send( OHttpUtils.STATUS_OK_NOCONTENT_CODE, "", OHttpUtils.CONTENT_TEXT_PLAIN, null, null, true); else if (iResult instanceof Iterator<?>) writeRecords((Iterator<OIdentifiable>) iResult, null, iFormat); } }