restructucting project into gradle subprojects for testablity.