A Formal Architecture-Centric Model-Driven Approach for the Automatic Generation of Grid Applications