Model-driven development of platform-independent mobile applications supporting role-based app variability