public Directory buildCrowdDirectory(CrowdDirectoryConfiguration configuration) {
    ImmutableDirectory.Builder builder = createBuilder();
    builder.setAllowedOperations(configuration.getCrowdPermissionOption().getAllowedOperations());
    builder.setActive(configuration.isActive());
    builder.setId(configuration.getDirectoryId());
    builder.setImplementationClass(RemoteCrowdDirectory.class.getName());
    builder.setName(configuration.getName());
    builder.setType(DirectoryType.CROWD);

    CrowdDirectoryAttributes attributes = new CrowdDirectoryAttributes();
    BeanUtils.copyProperties(
        configuration, attributes); // ignores attributes that don't exist in the target - perfect!
    // Convert polling interval from minutes to seconds to store in crowd
    attributes.setCrowdServerSynchroniseIntervalInSeconds(
        Long.toString(configuration.getCrowdServerSynchroniseIntervalInMin() * 60));
    builder.setAttributes(attributes.toAttributesMap());

    return builder.toDirectory();
  }