@SuppressWarnings({"unchecked", "rawtypes"})
  @Override
  public void addRole(final Project project, final String role) {
    ConfigGroup thisProjectConfig = findProjectConfig(project.getRootPath());

    if (thisProjectConfig == null) {
      thisProjectConfig =
          configurationFactory.newConfigGroup(
              ConfigType.PROJECT,
              project.getRootPath().toURI(),
              "Project '" + project.getProjectName() + "' configuration");
      thisProjectConfig.addConfigItem(
          configurationFactory.newConfigItem("security:roles", new ArrayList<String>()));
      configurationService.addConfiguration(thisProjectConfig);
    }

    if (thisProjectConfig != null) {
      final ConfigItem<List> roles = thisProjectConfig.getConfigItem("security:roles");
      roles.getValue().add(role);

      configurationService.updateConfiguration(thisProjectConfig);

    } else {
      throw new IllegalArgumentException("Project " + project.getProjectName() + " not found");
    }
  }
  @Override
  public OrganizationalUnit createOrganizationalUnit(final String name, final String owner) {
    final ConfigGroup groupConfig =
        configurationFactory.newConfigGroup(ConfigType.ORGANIZATIONAL_UNIT, name, "");
    groupConfig.addConfigItem(configurationFactory.newConfigItem("owner", owner));
    groupConfig.addConfigItem(
        configurationFactory.newConfigItem("repositories", new ArrayList<String>()));
    groupConfig.addConfigItem(
        configurationFactory.newConfigItem("security:roles", new ArrayList<String>()));
    configurationService.addConfiguration(groupConfig);

    final OrganizationalUnit newOrganizationalUnit =
        organizationalUnitFactory.newOrganizationalUnit(groupConfig);
    registeredOrganizationalUnits.put(newOrganizationalUnit.getName(), newOrganizationalUnit);

    newOrganizationalUnitEvent.fire(new NewOrganizationalUnitEvent(newOrganizationalUnit));

    return newOrganizationalUnit;
  }
  @Override
  public void updateOrganizationalUnitOwner(final String name, final String owner) {
    final ConfigGroup thisGroupConfig = findGroupConfig(name);

    if (thisGroupConfig != null) {
      thisGroupConfig.setConfigItem(configurationFactory.newConfigItem("owner", owner));
      configurationService.updateConfiguration(thisGroupConfig);

      final OrganizationalUnit updatedOrganizationalUnit =
          organizationalUnitFactory.newOrganizationalUnit(thisGroupConfig);
      registeredOrganizationalUnits.put(
          updatedOrganizationalUnit.getName(), updatedOrganizationalUnit);
    } else {
      throw new IllegalArgumentException("OrganizationalUnit " + name + " not found");
    }
  }