public static Object getPrimitiveValue(final Class<?> type) { if (defaultValues.isEmpty()) { defaultValues.put(boolean.class.getName(), false); defaultValues.put(byte.class.getName(), (byte)0); defaultValues.put(short.class.getName(), (short)0); defaultValues.put(char.class.getName(), '\0'); defaultValues.put(int.class.getName(), 0); defaultValues.put(long.class.getName(), 0L); defaultValues.put(float.class.getName(), 0f); defaultValues.put(double.class.getName(), 0.); } return defaultValues.get(type.getName()); }
@Override public Model setProperty(final String key, final Object value) { try { map.put(key, value); } catch (final Throwable e) { X_Log.error(e); } return this; }
public ModelModule addManifest(final ModelManifest manifest) { manifests.put(manifest.getType(), manifest); return this; }
@SuppressWarnings({ "rawtypes", "unchecked" }) public void fillMap(String name, MappedTemplate template, StringTo map, Object val) { if ("".equals(name)) { for (String key : childKeys()) { String k = key.startsWith("$") ? key : "${"+key+"}"; if (template.hasKey(k)) { map.put(k, getValue(key, "", val)); } k = "${"+key+".name()}"; if (template.hasKey(k)) { map.put(k, key); } } } else { val = getValue(name, "", val); map.put("$value", val); map.put("$name", name); map.put("${"+name+"}", val); map.put("${"+name+".name()}", name); // We should also have a means to do deep name resolving on rebased bean items... } }
@Override public String register(final Class<? extends Model> model) { final String typeName = getTypeName(model); classToTypeName.put(model, typeName); typeNameToClass.put(typeName, model); final ModelSerializer serializer = getSerializer(typeName); serializers.put(typeName, serializer); return typeName; }
@Override public void cacheModel(Model model, SuccessHandler<Model> callback) { models.put(model.getKey().toString(), model); callback.onSuccess(model); }
@Override public void saveModel(Model model, SuccessHandler<Model> callback) { models.put(model.getKey().toString(), model); callback.onSuccess(model); }
public ModelField getOrMakeField(final String field) { assert field.length() > 0 : "Cannot have a field named \"\""; ModelField f = fields.get(field); if (f == null) { f = new ModelField(field); fields.put(field, f); } return f; }
@Override public Model child(final String propName) { Object existing = map.get(propName); assert existing == null || existing instanceof Model : "You requested a child model with property name "+propName+", but an object of type " +existing.getClass()+" already existed in this location: "+existing; if (existing == null){ final AbstractModel child = createNew();//ensures subclasses can control child classes. child.parent = this; existing = child; map.put(propName, existing); } return (Model) existing; }
protected String getTypeName(final Class<? extends Model> cls) { String known = classToTypeName.get(cls); if (known != null) { return known; } if (!cls.isInterface()) { // For non-interfaces, lets look for the most specfic Model interface Class<?> winner = cls; for (final Class<?> iface : cls.getInterfaces()) { if (Model.class.isAssignableFrom(iface)) { if (winner == cls || winner.isAssignableFrom(iface)) { winner = iface; } } } if (winner != cls) { known = classToTypeName.get(winner); if (known != null) { classToTypeName.put(cls, known); typeNameToClass.put(known, cls); return known; } } } final String name = ModelUtil.guessModelType(cls); classToTypeName.put(cls, name); typeNameToClass.put(name, cls); return name; }
@Override @MagicMethod(doNotVisit=true, documentation="This magic method re-routes to the same provider as X_Inject.instance()") public <T extends Model> T create(final Class<T> key) { // GWT dev will make it here, and it can handle non-class-literal injection. // GWT prod requires magic method injection here. final T instance = X_Inject.instance(key); if (instance == null) { return null; } typeNameToClass.put(instance.getType(), key); classToTypeName.put(key, instance.getType()); return instance; }
@Override public String serializeString(final String s) { // Null handling remains the same if (s == null) { return super.serializeInt(-1); } Integer position = strings.get(s); if (position == null) { position = strings.size(); strings.put(s, position); out.append(super.serializeString(s)); size.clear(); size.append(serializeInt(position+1)); } return super.serializeInt(position); } @Override
while (manifests --> 0) { final ModelManifest manifest = ModelManifest.deserialize(chars, primitives); module.manifests.put(manifest.getType(), manifest);