use of org.webpieces.router.api.extensions.EntityLookup in project webpieces by deanhiller.
the class ParamToObjectTranslatorImpl method translate.
private XFuture<Object> translate(RouterRequest req, Method method, ParamNode valuesToUse, Meta fieldMeta, Validation validator) {
Class<?> fieldClass = fieldMeta.getFieldClass();
ObjectStringConverter<?> converter = objectTranslator.getConverter(fieldClass);
if (converter != null) {
Object convert = convert(req, method, valuesToUse, fieldMeta, converter, validator);
return XFuture.completedFuture(convert);
} else if (fieldClass.isArray()) {
throw new UnsupportedOperationException("not done yet...let me know and I will do it=" + fieldMeta);
} else if (fieldClass.isEnum()) {
throw new UnsupportedOperationException("You need to install a " + ObjectStringConverter.class.getSimpleName() + " for this enum " + fieldClass + " meta class=" + fieldMeta.getFieldClass() + ". This\n" + "can be done like so in one of your guice modules....\n" + "\t\tMultibinder<ObjectStringConverter> conversionBinder = Multibinder.newSetBinder(binder, ObjectStringConverter.class);\n" + "\t\tconversionBinder.addBinding().to({YOUR_ENUM}.WebConverter.class);");
} else if (List.class.isAssignableFrom(fieldClass)) {
if (valuesToUse == null)
return XFuture.completedFuture(new ArrayList<>());
else if (valuesToUse instanceof ArrayNode) {
List<ParamNode> paramNodes = ((ArrayNode) valuesToUse).getList();
return createList(req, method, fieldMeta, validator, paramNodes);
} else if (valuesToUse instanceof ValueNode) {
List<ParamNode> paramNodes = new ArrayList<>();
paramNodes.add(valuesToUse);
return createList(req, method, fieldMeta, validator, paramNodes);
}
throw new IllegalArgumentException("Found List on field or param=" + fieldMeta + " but did not find ArrayNode type");
} else if (valuesToUse instanceof ArrayNode) {
throw new IllegalArgumentException("Incoming array need a type List but instead found type=" + fieldClass + " on field=" + fieldMeta);
} else if (valuesToUse instanceof ValueNode) {
ValueNode v = (ValueNode) valuesToUse;
String fullName = v.getFullName();
throw new IllegalArgumentException("Could not convert incoming value=" + v.getValue() + " of key name=" + fullName + " field=" + fieldMeta);
} else if (valuesToUse == null) {
// validate if null is ok or not
fieldMeta.validateNullValue();
return XFuture.completedFuture(null);
} else if (!(valuesToUse instanceof ParamTreeNode)) {
throw new IllegalStateException("Bug, must be missing a case. v=" + valuesToUse + " type to field=" + fieldMeta);
}
ParamTreeNode tree = (ParamTreeNode) valuesToUse;
EntityLookup pluginLookup = fetchPluginLoader(fieldClass);
XFuture<Object> future = null;
if (pluginLookup != null) {
future = pluginLookup.find(fieldMeta, tree, c -> createBean(c));
if (future == null)
throw new IllegalStateException("plugin=" + pluginLookup.getClass() + " failed to create bean. This is a plugin bug");
} else {
Object newBean = createBean(fieldClass);
future = XFuture.completedFuture(newBean);
}
return future.thenCompose(bean -> {
return fillBeanIn(bean, tree, req, method, validator);
});
}
use of org.webpieces.router.api.extensions.EntityLookup in project webpieces by deanhiller.
the class PluginSetup method wireInPluginPoints.
/**
* This is where we wire in all plugin points EXCEPT the Startup one
* we can't inject them :(
*/
@SuppressWarnings("rawtypes")
public void wireInPluginPoints(Injector appInjector) {
Key<Set<EntityLookup>> key = Key.get(new TypeLiteral<Set<EntityLookup>>() {
});
Set<EntityLookup> lookupHooks = appInjector.getInstance(key);
translator.install(lookupHooks);
Key<Set<ObjectStringConverter>> key3 = Key.get(new TypeLiteral<Set<ObjectStringConverter>>() {
});
Set<ObjectStringConverter> converters = appInjector.getInstance(key3);
translation.install(converters);
Key<Set<BodyContentBinder>> key2 = Key.get(new TypeLiteral<Set<BodyContentBinder>>() {
});
Set<BodyContentBinder> bodyBinders = appInjector.getInstance(key2);
bodyContentChecker.install(bodyBinders);
Key<Set<HtmlTagCreator>> key4 = Key.get(new TypeLiteral<Set<HtmlTagCreator>>() {
});
Set<HtmlTagCreator> htmlTagCreators = appInjector.getInstance(key4);
// Guice circular dependency we could not work around quite yet. figure out later maybe
TemplateApi api = templateApi.get();
api.installCustomTags(htmlTagCreators);
}
Aggregations