private Map<FieldMetadata<?, ?>, TypeHandler> getFieldHandlerMap(ClassMetadata<?, ?> type) { Map<FieldMetadata<?, ?>, TypeHandler> handlerMap = Maps.newHashMap(); for (FieldMetadata<?, ?> field : type.getFields()) { TypeHandler<?> handler = getHandlerFor(field.getField().getGenericType()); if (handler != null) { handlerMap.put(field, handler); } else { logger.info("Unsupported field: '{}.{}'", type.getUri(), field.getName()); } } return handlerMap; }
private <T> Map<Class<? extends T>, Integer> generateIds(ClassLibrary<T> classLibrary) { Map<Class<? extends T>, Integer> result = Maps.newHashMap(); for (ClassMetadata<? extends T, ?> metadata : classLibrary) { int index = result.size(); result.put(metadata.getType(), index); int fieldId = 0; for (FieldMetadata<?, ?> field : metadata.getFields()) { if (fieldId >= 256) { logger.error("Class {} has too many fields (>255), serialization will be incomplete", metadata.getUri()); break; } field.setId((byte) fieldId); fieldId++; } } return result; }
/** * Deserializes a Collection of name-values onto an object * * @param target The object to deserialize onto * @param values The collection of values to apply to the object * @param check A check to filter which fields to deserialize */ public void deserializeOnto(Object target, PersistedDataMap values, DeserializeFieldCheck check, DeserializationContext context) { for (Map.Entry<String, PersistedData> field : values.entrySet()) { FieldMetadata<?, ?> fieldInfo = classMetadata.getField(field.getKey()); if (fieldInfo != null && check.shouldDeserialize(classMetadata, fieldInfo)) { deserializeOnto(target, fieldInfo, field.getValue(), context); } else if (fieldInfo == null) { logger.warn("Cannot deserialize unknown field '{}' onto '{}'", field.getKey(), classMetadata.getUri()); } } }
public AbstractClassLibrary(AbstractClassLibrary<T> factory, CopyStrategyLibrary copyStrategies) { this.reflectFactory = factory.reflectFactory; this.copyStrategyLibrary = copyStrategies; for (Table.Cell<Name, Name, ClassMetadata<? extends T, ?>> cell: factory.uriLookup.cellSet()) { Name objectName = cell.getRowKey(); Name moduleName = cell.getColumnKey(); ClassMetadata<? extends T, ?> oldMetaData = cell.getValue(); Class<? extends T> clazz = oldMetaData.getType(); SimpleUri uri = oldMetaData.getUri(); ClassMetadata<? extends T, ?> metadata = createMetadata(clazz, factory.reflectFactory, copyStrategies, uri); if (metadata != null) { classLookup.put(clazz, metadata); uriLookup.put(objectName, moduleName, metadata); } else { throw new RuntimeException("Failed to create copy of class library"); } } }
FieldMetadata<?, ?> fieldMetadata = elementMetadata.getField(ID_FIELD); if (fieldMetadata == null) { logger.warn("UIWidget type {} lacks id field", elementMetadata.getUri()); } else { fieldMetadata.setValue(element, id);