From Requirements to Java code: an Architecture-centric Approach for producing quality systems