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(); }