Model driven development of context aware software systems