@Override public List<?> extractResults(SerializationContext serializationContext) throws IOException { List<Object> unwrappedResults; if (projectionSize > 0) { unwrappedResults = new ArrayList<>(results.size() / projectionSize); Iterator<WrappedMessage> it = results.iterator(); while (it.hasNext()) { Object[] row = new Object[projectionSize]; for (int i = 0; i < row.length; i++) { row[i] = it.next().getValue(); } unwrappedResults.add(row); } } else { unwrappedResults = new ArrayList<>(results.size()); for (WrappedMessage r : results) { Object o = r.getValue(); if (serializationContext != null && o instanceof byte[]) { o = ProtobufUtil.fromWrappedByteArray(serializationContext, (byte[]) o); } unwrappedResults.add(o); } } return unwrappedResults; }
@Override public void writeObject(ObjectOutput output, QueryResponse queryResponse) throws IOException { output.writeInt(queryResponse.getNumResults()); output.writeInt(queryResponse.getProjectionSize()); List<WrappedMessage> wrappedResults = queryResponse.getResults(); List<Object> results = new ArrayList<>(wrappedResults.size()); for (WrappedMessage o : wrappedResults) { results.add(o.getValue()); } output.writeObject(results); output.writeLong(queryResponse.getTotalResults()); }
@Override public FilterResult readFrom(ProtoStreamReader reader) throws IOException { byte[] instance = reader.readBytes("instance"); List<WrappedMessage> projection = reader.readCollection("projection", new ArrayList<>(), WrappedMessage.class); List<WrappedMessage> sortProjection = reader.readCollection("sortProjection", new ArrayList<>(), WrappedMessage.class); Object i = null; if (instance != null) { i = ProtobufUtil.fromWrappedByteArray(reader.getSerializationContext(), instance); } Object[] p = null; if (!projection.isEmpty()) { p = new Object[projection.size()]; int j = 0; for (WrappedMessage m : projection) { p[j++] = m.getValue(); } } Comparable[] sp = null; if (!sortProjection.isEmpty()) { sp = new Comparable[sortProjection.size()]; int j = 0; for (WrappedMessage m : sortProjection) { sp[j++] = (Comparable) m.getValue(); } } return new FilterResult(i, p, sp); }
@Override public NamedParameter readFrom(ProtoStreamReader reader) throws IOException { String name = reader.readString("name"); WrappedMessage value = reader.readObject("value", WrappedMessage.class); return new NamedParameter(name, value.getValue()); }
@Override public ContinuousQueryResult readFrom(ProtoStreamReader reader) throws IOException { ResultType type = reader.readObject("resultType", ResultType.class); byte[] key = reader.readBytes("key"); byte[] value = reader.readBytes("value"); List<WrappedMessage> projection = reader.readCollection("projection", new ArrayList<>(), WrappedMessage.class); Object[] p = null; if (!projection.isEmpty()) { p = new Object[projection.size()]; int j = 0; for (WrappedMessage m : projection) { p[j++] = m.getValue(); } } return new ContinuousQueryResult(type, key, value, p); }