private Configuration buildConfiguration(
      final ExporterAttributes attributes, ConsoleConfiguration cc, IWorkspaceRoot root) {
    final boolean reveng = attributes.isReverseEngineer();
    final String reverseEngineeringStrategy = attributes.getRevengStrategy();
    final boolean preferBasicCompositeids = attributes.isPreferBasicCompositeIds();
    final IResource revengres = PathHelper.findMember(root, attributes.getRevengSettings());

    if (reveng) {
      Configuration configuration = null;
      if (cc.hasConfiguration()) {
        configuration = cc.getConfiguration();
      } else {
        configuration = cc.buildWith(null, false);
      }

      final JDBCMetaDataConfiguration cfg = new JDBCMetaDataConfiguration();
      Properties properties = configuration.getProperties();
      cfg.setProperties(properties);
      cc.buildWith(cfg, false);

      cfg.setPreferBasicCompositeIds(preferBasicCompositeids);

      cc.execute(
          new Command() { // need to execute in the consoleconfiguration to let it handle classpath
                          // stuff!

            public Object execute() {
              // todo: factor this setup of revengstrategy to core
              ReverseEngineeringStrategy res = new DefaultReverseEngineeringStrategy();

              OverrideRepository repository = null;

              if (revengres != null) {
                File file = PathHelper.getLocation(revengres).toFile();
                repository = new OverrideRepository();
                repository.addFile(file);
              }

              if (repository != null) {
                res = repository.getReverseEngineeringStrategy(res);
              }

              if (reverseEngineeringStrategy != null
                  && reverseEngineeringStrategy.trim().length() > 0) {
                res = loadreverseEngineeringStrategy(reverseEngineeringStrategy, res);
              }

              ReverseEngineeringSettings qqsettings =
                  new ReverseEngineeringSettings(res)
                      .setDefaultPackageName(attributes.getPackageName())
                      .setDetectManyToMany(attributes.detectManyToMany())
                      .setDetectOneToOne(attributes.detectOneToOne())
                      .setDetectOptimisticLock(attributes.detectOptimisticLock());

              res.setSettings(qqsettings);

              cfg.setReverseEngineeringStrategy(res);

              cfg.readFromJDBC();
              cfg.buildMappings();
              return null;
            }
          });

      return cfg;
    } else {
      cc.build();
      cc.buildMappings();
      return cc.getConfiguration();
    }
  }