Other projects
Multi DataProvider
If you are familiarized with the Kuix concept of DataProvider, you can go further and read this doc page to be able to "merge" multiple DataProvider into one.
Why multi ?
Kuix data providing is build arround two main things : DataProviders and the way to load XML screens (Kuix.loadScreen(...)) or widgets (Kuix.loadWidget(...)). But this is a little restrictive because you can only use One DataProvider per screen/widget loading.
That's why from the 1.0.1 release of Kuix, DataProvider class has gain new methods :
- addSlave(DataProvider slaveDataProvider)
- removeSlave(DataProvider slaveDataProvider)
- removeAllSlaves()
- removeFromMaster(DataProvider masterDataProvider)
- removeFromMasters()
Basicly those methods permit to consider a DataProviders as a tree made of masters and slaves. After that the root of the tree could be use in the KuixloadXXX methods as a unique DataProvider.
Example
Implements the master DataProvider :
MasterDataProvider.java
public class MasterDataProvider extends DataProvider {
protected Object getUserDefinedValue(String property) {
if ("masterProperty".equals(property)) {
return "Value from master";
}
return super.getUserDefinedValue(property);
}
}
Implements a slave DataProvider (A) :
SlaveADataProvider.java
public class SlaveADataProvider extends DataProvider {
protected Object getUserDefinedValue(String property) {
if ("slaveAProperty".equals(property)) {
return "Value from slave A";
}
return super.getUserDefinedValue(property);
}
}
Implements an other slave DataProvider (B) :
SlaveBDataProvider.java
public class SlaveBDataProvider extends DataProvider {
protected Object getUserDefinedValue(String property) {
if ("slaveBProperty".equals(property)) {
return "Value from slave B";
}
return super.getUserDefinedValue(property);
}
}
Create a basic KuixMIDlet :
MultiDataProviderMIDlet.java
public class MultiDataProviderMIDlet extends KuixMIDlet {
public void initDesktopStyles() {
}
public void initDesktopContent(Desktop desktop) {
MasterDataProvider masterDataProvider = new MasterDataProvider();
SlaveADataProvider slaveADataProvider = new SlaveADataProvider();
SlaveBDataProvider slaveBDataProvider = new SlaveBDataProvider();
masterDataProvider.addSlave(slaveADataProvider);
masterDataProvider.addSlave(slaveBDataProvider);
Kuix.loadScreen("m.xml", masterDataProvider).setCurrent();
}
}
Create the XML screen :
xml/m.xml
<screen style="layout:inlinelayout(false,fill)">
<text>${masterProperty}</text>
<text>${slaveAProperty}</text>
<text>${slaveBProperty}</text>
</screen>
Launch the application and see the result :

As you can see you are now be able to use three different DataProvider instance and display respective properties into the same Screen.
Property name conflicts
Because you can access to a DataProvider from its master, it can result some property name conflict. In this case, a chaine of priority is established. The more the DataProvider is near the tree root the higher the priority is.
Example :
- If masterDataProvider and slaveADataProvider response on the same property, the masterDataProvider is resturned.
- If slaveADataProvider and slaveBDataProvider response on the same property, the slaveADataProvider is resturned.

