Skip to content

Commit

Permalink
Allow for a fallback sync strategy in child bundles.
Browse files Browse the repository at this point in the history
  • Loading branch information
Sylinsic committed Jan 28, 2024
1 parent 778fbad commit 9dea69c
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,10 @@ public enum SearchScope {

private Class<? extends LdapSyncStrategy> syncStrategyClass = null;

private Class<? extends LdapSyncStrategy> fallbackSyncStrategyClass = SunDSChangeLogSyncStrategy.class;

private Class<? extends LdapConnection> connectionClass = LdapConnection.class;

/**
* The SearchScope for user objects
*/
Expand Down Expand Up @@ -1033,6 +1037,22 @@ public Class<? extends LdapSyncStrategy> getSyncStrategyClass() {
return syncStrategyClass;
}

protected Class<? extends LdapSyncStrategy> getFallbackSyncStrategyClass() {
return fallbackSyncStrategyClass;
}

protected void setFallbackSyncStrategyClass(Class<? extends LdapSyncStrategy> fallbackSyncStrategyClass) {
this.fallbackSyncStrategyClass = fallbackSyncStrategyClass;
}

protected Class<? extends LdapConnection> getConnectionClass() {
return connectionClass;
}

protected void setConnectionClass(Class<? extends LdapConnection> connectionClass) {
this.connectionClass = connectionClass;
}

// Getters and setters for configuration properties end here.
public List<LdapName> getBaseContextsAsLdapNames() {
if (baseContextsAsLdapNames == null) {
Expand Down
26 changes: 21 additions & 5 deletions src/main/java/net/tirasa/connid/bundles/ldap/LdapConnector.java
Original file line number Diff line number Diff line change
Expand Up @@ -87,15 +87,31 @@ public Configuration getConfiguration() {
@Override
public void init(Configuration cfg) {
config = (LdapConfiguration) cfg;
conn = new LdapConnection(config);

Class<? extends LdapSyncStrategy> syncStrategyClass = config.getSyncStrategyClass();
Class<? extends LdapConnection> connectionClass = config.getConnectionClass();

try {
conn = connectionClass.getConstructor(LdapConfiguration.class).newInstance(config);
} catch (Exception e) {
LOG.error(e, "Could not instantiate the configured connection class implementation {0}, reverting to {1}",
connectionClass.getName(), LdapConnection.class.getName());
conn = new LdapConnection(config);
}

try {
syncStrategy = syncStrategyClass.getConstructor(LdapConnection.class).newInstance(conn);
syncStrategy = syncStrategyClass.getConstructor(connectionClass).newInstance(conn);
} catch (Exception e) {
Class<? extends LdapSyncStrategy> fallbackSyncStrategyClass = config.getFallbackSyncStrategyClass();
LOG.error(e, "Could not instantiate the configured {0} implementation, reverting to {1}",
LdapSyncStrategy.class.getName(), SunDSChangeLogSyncStrategy.class.getName());
syncStrategy = new SunDSChangeLogSyncStrategy(conn);
LdapSyncStrategy.class.getName(), fallbackSyncStrategyClass.getName());
try {
syncStrategy = config.getFallbackSyncStrategyClass().getConstructor(connectionClass)
.newInstance(conn);
} catch (Exception ex) {
LOG.error(e, "Could not instantiate the configured fallback {0} imeplementation, falling back to {1}",
LdapSyncStrategy.class.getName(), SunDSChangeLogSyncStrategy.class);
syncStrategy = new SunDSChangeLogSyncStrategy(conn);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ public static LdapConfiguration newConfiguration(final boolean readSchema) {
config.setPrincipal(ADMIN_DN);
config.setCredentials(ADMIN_PASSWORD);
config.setReadSchema(readSchema);
config.validate();
return config;
}

Expand Down

0 comments on commit 9dea69c

Please sign in to comment.