@Override @SuppressWarnings("unchecked") // The class key is always checked for us... public <V> IORequestBuilder<V> request(final Class<V> classLit, final String id) { return this.<V>createRequestBuilder() .setUrl(toUrl(classLit, id)) .setDeserializer(ConvertsValue.class.cast(deserializers.get(classLit))) .setSerializer(ConvertsValue.class.cast(serializers.get(classLit))) ; }
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; }
protected ModelManifest getOrMakeModelManifest(final Class<? extends Model> cls) { final ModelModule module = currentModule.get(); if (module != null) { final String typeName = getTypeName(cls); return module.getManifest(typeName); } ModelManifest manifest = modelManifests.get(cls); if (manifest == null) { manifest = ModelUtil.createManifest(cls); modelManifests.put(cls, manifest); } return manifest; }
/** * @see xapi.model.impl.AbstractModelService#create(java.lang.Class) */ @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public <M extends Model> M create(final Class<M> key) { ProvidesValue factory = modelFactories.get(key); if (factory == null) { factory = createModelFactory(key); modelFactories.put(key, factory); } return (M)factory.get(); }