class PromotionReportView extends View {

    public void compute() {
        /* Order the module to promote */
        final Comparator<String> promotionPlanComparator = new PromotionPlanComparator(dependencyReports);
        Collections.sort(unPromotedDependencies, promotionPlanComparator);

        /* Identify the mismatch versions */
        // Collect all the modules names and versions
        for (final PromotionReportView promotionReport : getAllDependencyReport()) {
            final Module module = promotionReport.getRootModule();

            if(null == module) {
                LOG.warn("No root module found. Aborting compute().");
                return;
            }

            final List<String> versions = mismatchVersions.get(module.getName());

            if (versions == null) {
                mismatchVersions.put(module.getName(), Lists.newArrayList(module.getVersion()));
            } else if (!versions.contains(module.getVersion())) {
                versions.add(module.getVersion());
            }
        }

        // Remove the modules that appears in only one version
        final Iterator<String> moduleNames = mismatchVersions.keySet().iterator();
        while (moduleNames.hasNext()) {
            final String moduleName = moduleNames.next();
            final List<String> versions = mismatchVersions.get(moduleName);
            if (versions.size() == 1) {
                moduleNames.remove();
            }
        }
    }

    public  PromotionReportView();

}