/** * Collection support is limited to value types and resolving ids. */ public static Object decode(EntitySource source, Class<?> type, Class<?> elementType, String jsonPayload) { Splittable split = StringQuoter.split(jsonPayload); return decode(source, type, elementType, split); }
toReturn.append("null"); } else { toReturn.append(encode(source, val).getPayload()); (String) mapKey : encode(source, mapKey).getPayload(); sb.append(StringQuoter.quote(encodedKey)); sb.append(":"); sb.append(encode(source, mapValue).getPayload()); sb.append(encode(source, keys).getPayload()); sb.append(","); sb.append(encode(source, values).getPayload()); sb.append("]");
/** * Handles instance invocations as the instance at the 0th parameter. */ private List<Object> decodeInvocationArguments(RequestState source, List<Splittable> parameters, Class<?>[] contextArgs, Type[] genericArgs) { if (parameters == null) { // Can't return Collections.emptyList() because this must be mutable return new ArrayList<Object>(); } assert parameters.size() == contextArgs.length; List<Object> args = new ArrayList<Object>(contextArgs.length); for (int i = 0, j = contextArgs.length; i < j; i++) { Class<?> type = contextArgs[i]; Class<?> elementType = null; Splittable split; if (Collection.class.isAssignableFrom(type)) { elementType = TypeUtils.ensureBaseType(TypeUtils.getSingleParameterization(Collection.class, genericArgs[i])); split = parameters.get(i); } else { split = parameters.get(i); } Object arg = EntityCodex.decode(source, type, elementType, split); arg = source.getResolver().resolveDomainValue(arg, !EntityProxyId.class.equals(contextArgs[i])); args.add(arg); } return args; }
/** * Create an InvocationMessage for each remote method call being made by the context. */ private List<InvocationMessage> makePayloadInvocations() { MessageFactory f = MessageFactoryHolder.FACTORY; List<InvocationMessage> invocationMessages = new ArrayList<InvocationMessage>(); for (AbstractRequest<?, ?> invocation : state.invocations) { // RequestData is produced by the generated subclass RequestData data = invocation.getRequestData(); InvocationMessage message = f.invocation().as(); // Operation; essentially a method descriptor message.setOperation(data.getOperation()); // The arguments to the with() calls Set<String> refsToSend = data.getPropertyRefs(); if (!refsToSend.isEmpty()) { message.setPropertyRefs(refsToSend); } // Parameter values or references List<Splittable> parameters = new ArrayList<Splittable>(data.getOrderedParameters().length); for (Object param : data.getOrderedParameters()) { parameters.add(EntityCodex.encode(this, param)); } if (!parameters.isEmpty()) { message.setParameters(parameters); } invocationMessages.add(message); } return invocationMessages; }
void onSuccess(Splittable split) { // The user may not have called to() if (receiver != null) { @SuppressWarnings("unchecked") T result = (T) EntityCodex.decode(requestContext, requestData.getReturnType(), requestData .getElementType(), split); receiver.onSuccess(result); } }
results.add(EntityCodex.encode(returnState, returnValue)); } else { results.add((Splittable) returnValue);
value = ValueCodex.decode(valueType, valueSplit); } else { value = decode(source, valueType, null, valueSplit); throw new UnsupportedOperationException(); List<?> keys = (List<?>) decode(source, List.class, keyType, split.get(0)); List<?> values = (List<?>) decode(source, List.class, valueType, split.get(1)); if (keys.size() != values.size()) { throw new UnsupportedOperationException();
Collections.<String> emptySet()); encodedValues.add(EntityCodex.encode(state, clientValue));
@Override public boolean visitReferenceProperty(String propertyName, AutoBean<?> value, PropertyContext ctx) { if (ctx.canSet()) { if (properties.containsKey(propertyName)) { Splittable raw = properties.get(propertyName); Object decoded = null; if (ctx.getType() == Map.class) { MapPropertyContext mapCtx = (MapPropertyContext) ctx; Class<?> keyType = mapCtx.getKeyType(); Class<?> valueType = mapCtx.getValueType(); decoded = EntityCodex.decode(AbstractRequestContext.this, mapCtx.getType(), keyType, valueType, raw); } else { Class<?> elementType = ctx instanceof CollectionPropertyContext ? ((CollectionPropertyContext) ctx) .getElementType() : null; decoded = EntityCodex.decode(AbstractRequestContext.this, ctx.getType(), elementType, raw); } ctx.set(decoded); } } return false; }
Map<String, Splittable> propertyMap = new HashMap<String, Splittable>(); for (Map.Entry<String, Object> entry : diff.entrySet()) { propertyMap.put(entry.getKey(), EntityCodex.encode(this, entry.getValue()));
collection.add(null); } else { Object element = decode(source, elementType, null, split.get(i)); collection.add(element);
Object value = d.getValue(); if (value != null) { propertyMap.put(d.getKey(), EntityCodex.encode(returnState, value));
@Override public boolean visitReferenceProperty(String propertyName, AutoBean<?> value, PropertyContext ctx) { // containsKey to distinguish null from unknown if (flatValueMap.containsKey(propertyName)) { Object resolved = null; // The null check on getKeyType() is necessary as some of the given PropertyContext's // implement both MapPropertyContext and CollectionPropertyContext. if (ctx.getType() == Map.class) { MapPropertyContext mapCtx = (MapPropertyContext) ctx; Class<?> keyType = mapCtx.getKeyType(); Class<?> valueType = mapCtx.getValueType(); Object newValue = EntityCodex.decode(state, mapCtx.getType(), keyType, valueType, flatValueMap.get(propertyName)); resolved = state.getResolver().resolveDomainValue(newValue, false); } else { Class<?> elementType = ctx instanceof CollectionPropertyContext ? ((CollectionPropertyContext) ctx) .getElementType() : null; Object newValue = EntityCodex.decode(state, ctx.getType(), elementType, flatValueMap .get(propertyName)); resolved = state.getResolver().resolveDomainValue(newValue, false); } service.setProperty(domain, propertyName, service.resolveDomainClass(ctx.getType()), resolved); } return false; }
toReturn.append("null"); } else { toReturn.append(encode(source, val).getPayload()); (String) mapKey : encode(source, mapKey).getPayload(); sb.append(StringQuoter.quote(encodedKey)); sb.append(":"); sb.append(encode(source, mapValue).getPayload()); sb.append(encode(source, keys).getPayload()); sb.append(","); sb.append(encode(source, values).getPayload()); sb.append("]");
/** * Collection support is limited to value types and resolving ids. */ public static Object decode(EntitySource source, Class<?> type, Class<?> elementType, String jsonPayload) { Splittable split = StringQuoter.split(jsonPayload); return decode(source, type, elementType, split); }
toReturn.append("null"); } else { toReturn.append(encode(source, val).getPayload()); (String) mapKey : encode(source, mapKey).getPayload(); sb.append(StringQuoter.quote(encodedKey)); sb.append(":"); sb.append(encode(source, mapValue).getPayload()); sb.append(encode(source, keys).getPayload()); sb.append(","); sb.append(encode(source, values).getPayload()); sb.append("]");
/** * Collection support is limited to value types and resolving ids. */ public static Object decode(EntitySource source, Class<?> type, Class<?> elementType, String jsonPayload) { Splittable split = StringQuoter.split(jsonPayload); return decode(source, type, elementType, split); }
toReturn.append("null"); } else { toReturn.append(encode(source, val).getPayload()); (String) mapKey : encode(source, mapKey).getPayload(); sb.append(StringQuoter.quote(encodedKey)); sb.append(":"); sb.append(encode(source, mapValue).getPayload()); sb.append(encode(source, keys).getPayload()); sb.append(","); sb.append(encode(source, values).getPayload()); sb.append("]");
/** * Collection support is limited to value types and resolving ids. */ public static Object decode(EntitySource source, Class<?> type, Class<?> elementType, String jsonPayload) { Splittable split = StringQuoter.split(jsonPayload); return decode(source, type, elementType, split); }
/** * Create an InvocationMessage for each remote method call being made by the context. */ private List<InvocationMessage> makePayloadInvocations() { MessageFactory f = MessageFactoryHolder.FACTORY; List<InvocationMessage> invocationMessages = new ArrayList<InvocationMessage>(); for (AbstractRequest<?, ?> invocation : state.invocations) { // RequestData is produced by the generated subclass RequestData data = invocation.getRequestData(); InvocationMessage message = f.invocation().as(); // Operation; essentially a method descriptor message.setOperation(data.getOperation()); // The arguments to the with() calls Set<String> refsToSend = data.getPropertyRefs(); if (!refsToSend.isEmpty()) { message.setPropertyRefs(refsToSend); } // Parameter values or references List<Splittable> parameters = new ArrayList<Splittable>(data.getOrderedParameters().length); for (Object param : data.getOrderedParameters()) { parameters.add(EntityCodex.encode(this, param)); } if (!parameters.isEmpty()) { message.setParameters(parameters); } invocationMessages.add(message); } return invocationMessages; }