Related JIRA issues:
Jira |
---|
server | Magnolia - Issue tracker |
---|
columns | key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution |
---|
serverId | 500b06a6-e204-3125-b989-2d75b973d05f |
---|
key | DEV-884 |
---|
|
Jira |
---|
server | Magnolia - Issue tracker |
---|
columns | key,summary,type,created,updated,due,assignee,reporter,priority,status,resolution |
---|
serverId | 500b06a6-e204-3125-b989-2d75b973d05f |
---|
key | DEV-885 |
---|
|
Current state overview
Framework should help the developers to build their apps with Magnolia faster, get access to the components and features, framework though should not be all the time in the way of the developer.
...
Code Pro |
---|
|
@Singleton
public class DatasourceSupport {
private final Map<Class, DatasourceBundle> bundles;
@Inject
public DatasourceSupport(Set<DatasourceBundle> bundles) {
this.bundles = bundles
.stream()
.collect(toMap(
DatasourceBundle::supportedDataSourceType,
identity()));
}
@SuppressWarnings("unchecked")
public <DEF> DatasourceBundle<DEF> getDatasourceBundle(DEF def) {
Objects.requireNonNull(def);
return Optional.ofNullable(bundles.get(def.getClass())).orElseThrow(() -> new IllegalArgumentException("No such bundle for the type " + def.getClass()));
}
}
@Multibinding
public abstract class DatasourceBundle<DEF> {
private final Class<DEF> type;
public DatasourceBundle(Class<DEF> type) {
this.type = type;
}
public Class<DEF> supportedDataSourceType() {
return this.type;
}
public abstract <T> T lookup(Class<T> type, DEF definition);
}
|
Code Pro |
---|
language | java |
---|
title | Provisioning of datasource components |
---|
|
public class DatasourceComponentParameterResolver implements ParameterResolver {
private final DatasourceSupport datasourceSupport;
private final Object datasourceDefinition;
public DatasourceComponentParameterResolver(DatasourceSupport datasourceSupport, Object datasourceDefinition) {
this.datasourceSupport = datasourceSupport;
this.datasourceDefinition = datasourceDefinition;
}
@Override
public Object resolveParameter(ParameterInfo parameter) {
boolean isDatasourceComponent = Stream.of(parameter.getParameterAnnotations()).anyMatch(DatasourceComponent.class::isInstance);
if (isDatasourceComponent) {
return datasourceSupport
.getDatasourceBundle(datasourceDefinition)
.lookup(parameter.getParameterType(), datasourceDefinition);
}
return UNRESOLVED;
}
}
|
...
- It is pretty clear that DataProvider and PropertySet domain-specific implementaions are required. But what else?
- optional HierarchicalDataProvider and potentially additional Hierarchy support for parent resolution (not covered by HDP interface in Vaadin).
- utilities to "serialise"/"deserialise" items to and from URL fragments.
- utility to "describe" the items (for status purposes and such).
Databinding in Grids
- Datasource support introduction might be a nice matching for the grid databinding requirements, since what is mostly required is the DataProvider (to fetch the row data) and the PropertySet (for the column rendering).
- Apparently it is possible to pass the PropertySet instance directly into the Grid making it aware of the underlying datasource properties, then configuration of the columns is just about assigning the captions and renderers.