diff --git a/OpenICF-csvfile-connector/src/main/java/org/forgerock/openicf/csvfile/CSVFileConfiguration.java b/OpenICF-csvfile-connector/src/main/java/org/forgerock/openicf/csvfile/CSVFileConfiguration.java index 8105d2e6..012d0126 100644 --- a/OpenICF-csvfile-connector/src/main/java/org/forgerock/openicf/csvfile/CSVFileConfiguration.java +++ b/OpenICF-csvfile-connector/src/main/java/org/forgerock/openicf/csvfile/CSVFileConfiguration.java @@ -12,6 +12,7 @@ * own identifying information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2015-2016 ForgeRock AS. + * Portions Copyright 2026 3A Systems, LLC. */ package org.forgerock.openicf.csvfile; @@ -142,6 +143,7 @@ public void setSyncFileRetentionCount(int syncFileRetentionCount) { /** * {@inheritDoc} */ + @Override public void validate() { log.ok("begin"); diff --git a/OpenICF-csvfile-connector/src/main/java/org/forgerock/openicf/csvfile/CSVFileConnector.java b/OpenICF-csvfile-connector/src/main/java/org/forgerock/openicf/csvfile/CSVFileConnector.java index f0a2b0a2..ba77891c 100644 --- a/OpenICF-csvfile-connector/src/main/java/org/forgerock/openicf/csvfile/CSVFileConnector.java +++ b/OpenICF-csvfile-connector/src/main/java/org/forgerock/openicf/csvfile/CSVFileConnector.java @@ -14,6 +14,7 @@ * Copyright 2015-2016 ForgeRock AS * Portions Copyright 2011 Viliam Repan * Portions Copyright 2011 Radovan Semancik + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.csvfile; @@ -177,6 +178,7 @@ public class CSVFileConnector implements Connector, BatchOp, AuthenticateOp, Cre * * @return The current {@link Configuration} */ + @Override public Configuration getConfiguration() { return this.config; } @@ -188,6 +190,7 @@ public Configuration getConfiguration() { * the new {@link Configuration} * @see org.identityconnectors.framework.spi.Connector#init(org.identityconnectors.framework.spi.Configuration) */ + @Override public void init(final Configuration config) { this.config = (CSVFileConfiguration) config; csvPreference = new CsvPreference.Builder( @@ -229,6 +232,7 @@ public void init(final Configuration config) { * * @see org.identityconnectors.framework.spi.Connector#dispose() */ + @Override public void dispose() { config = null; } @@ -243,6 +247,7 @@ public void dispose() { /** * {@inheritDoc} */ + @Override public Uid authenticate(final ObjectClass objectClass, final String userName, final GuardedString password, final OperationOptions options) { isAccount(objectClass); @@ -255,6 +260,7 @@ public Uid authenticate(final ObjectClass objectClass, final String userName, fi /** * {@inheritDoc} */ + @Override public Uid resolveUsername(final ObjectClass objectClass, final String userName, final OperationOptions options) { isAccount(objectClass); return testCredentials(userName, null, options); @@ -274,6 +280,7 @@ private Uid testCredentials(String name, GuardedString password, OperationOption /** * {@inheritDoc} */ + @Override public Uid create(final ObjectClass objectClass, final Set createAttributes, final OperationOptions options) { isAccount(objectClass); @@ -283,6 +290,7 @@ public Uid create(final ObjectClass objectClass, final Set createAttr /** * {@inheritDoc} */ + @Override public void delete(final ObjectClass objectClass, final Uid uid, final OperationOptions options) { isAccount(objectClass); doDelete(uid, options); @@ -291,6 +299,7 @@ public void delete(final ObjectClass objectClass, final Uid uid, final Operation /** * {@inheritDoc} */ + @Override public Schema schema() { final String[] header = getHeader(); ObjectClassInfoBuilder objClassBuilder = new ObjectClassInfoBuilder(); @@ -320,6 +329,7 @@ public Schema schema() { /** * {@inheritDoc} */ + @Override public FilterTranslator createFilterTranslator(ObjectClass objectClass, OperationOptions options) { isAccount(objectClass); return CSVFilterTranslator.INSTANCE; @@ -328,6 +338,7 @@ public FilterTranslator createFilterTranslator(ObjectClass objectClass, /** * {@inheritDoc} */ + @Override public void executeQuery(ObjectClass objectClass, Filter query, ResultsHandler handler, OperationOptions options) { isAccount(objectClass); if (handler == null) { @@ -430,6 +441,7 @@ public void executeQuery(ObjectClass objectClass, Filter query, ResultsHandler h /** * {@inheritDoc} */ + @Override public void sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler, OperationOptions options) { isAccount(objectClass); if (handler == null) { @@ -569,6 +581,7 @@ public void sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler ha /** * {@inheritDoc} */ + @Override public SyncToken getLatestSyncToken(ObjectClass objectClass) { isAccount(objectClass); @@ -599,6 +612,7 @@ public SyncToken getLatestSyncToken(ObjectClass objectClass) { /** * {@inheritDoc} */ + @Override public void test() { config.validate(); @@ -611,6 +625,7 @@ public void test() { /** * {@inheritDoc} */ + @Override public Uid update(ObjectClass objectClass, Uid uid, Set attributes, OperationOptions options) { isAccount(objectClass); return doUpdate(UpdateType.UPDATE, uid, attributes, options); @@ -619,6 +634,7 @@ public Uid update(ObjectClass objectClass, Uid uid, Set attributes, O /** * {@inheritDoc} */ + @Override public Uid addAttributeValues(ObjectClass objectClass, Uid uid, Set attributes, OperationOptions options) { isAccount(objectClass); @@ -628,6 +644,7 @@ public Uid addAttributeValues(ObjectClass objectClass, Uid uid, Set a /** * {@inheritDoc} */ + @Override public Uid removeAttributeValues(ObjectClass objectClass, Uid uid, Set attributes, OperationOptions options) { isAccount(objectClass); @@ -637,6 +654,7 @@ public Uid removeAttributeValues(ObjectClass objectClass, Uid uid, Set batchTasks, Observer observer, OperationOptions operationOptions) { if (observer == null) { @@ -655,12 +673,15 @@ public Subscription executeBatch(List batchTasks, Observer observer, OperationOptions operationOptions) { return null; @@ -730,6 +755,7 @@ private Uid findAccount(final Uid uid, final GuardedString password, } final Map finalEntry = entry; password.access(new GuardedString.Accessor() { + @Override public void access(char[] chars) { if (!new String(chars).equals(finalEntry.get(config.getHeaderPassword()))) { throw new InvalidPasswordException("Invalid username and/or password."); @@ -1216,6 +1242,7 @@ public OptionalTrim(final StringCellProcessor next) { /** * {@inheritDoc} */ + @Override public Object execute(final Object value, final CsvContext context) { Object result = value; if (value != null) { diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConnector.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConnector.java index ed3722c3..9cab6b5d 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConnector.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConnector.java @@ -175,6 +175,7 @@ public class DatabaseTableConnector implements PoolableConnector, CreateOp, Sear /** * {@inheritDoc} */ + @Override public Configuration getConfiguration() { return this.config; } @@ -183,6 +184,7 @@ public Configuration getConfiguration() { * Init the connector * {@inheritDoc} */ + @Override public void init(Configuration cfg) { log.info("init DatabaseTable connector"); this.config = (DatabaseTableConfiguration) cfg; @@ -195,6 +197,7 @@ public void init(Configuration cfg) { /** * {@inheritDoc} */ + @Override public void checkAlive() { log.info("checkAlive DatabaseTable connector"); try { @@ -230,6 +233,7 @@ DatabaseTableConnection getConn() { * Disposes of the {@link DatabaseTableConnector}'s resources. * {@inheritDoc} */ + @Override public void dispose() { log.info("dispose DatabaseTable connector"); if ( conn != null ) { @@ -245,6 +249,7 @@ public void dispose() { * Creates a row in the database representing an account. * {@inheritDoc} */ + @Override public Uid create(ObjectClass oclass, Set attrs, OperationOptions options) { log.info("create account, check the ObjectClass"); if(oclass == null || (!oclass.equals(ObjectClass.ACCOUNT))) { @@ -355,6 +360,7 @@ private boolean isToBeEmpty(final String columnName, Object value) { * Deletes a row from the table. * {@inheritDoc} */ + @Override public void delete(final ObjectClass oclass, final Uid uid, final OperationOptions options) { log.info("delete account, check the ObjectClass"); @@ -414,6 +420,7 @@ public void delete(final ObjectClass oclass, final Uid uid, final OperationOptio * Update the database row with the data provided. * {@inheritDoc} */ + @Override public Uid update(ObjectClass oclass, Uid uid, Set attrs, OperationOptions options) { log.info("update account, check the ObjectClass"); @@ -501,6 +508,7 @@ public Uid update(ObjectClass oclass, Uid uid, Set attrs, OperationOp * Creates a Database Table filter translator. * {@inheritDoc} */ + @Override public FilterTranslator createFilterTranslator(ObjectClass oclass, OperationOptions options) { log.info("check the ObjectClass"); if(oclass == null || (!oclass.equals(ObjectClass.ACCOUNT))) { @@ -514,6 +522,7 @@ public FilterTranslator createFilterTranslator(ObjectClass o * Search for rows * {@inheritDoc} */ + @Override public void executeQuery(ObjectClass oclass, FilterWhereBuilder where, ResultsHandler handler, OperationOptions options) { log.info("check the ObjectClass and result handler"); @@ -573,6 +582,7 @@ public void executeQuery(ObjectClass oclass, FilterWhereBuilder where, ResultsHa /** * {@inheritDoc} */ + @Override public void sync(ObjectClass oclass, SyncToken token, SyncResultsHandler handler, OperationOptions options) { log.info("check the ObjectClass and result handler"); // Contract tests @@ -654,6 +664,7 @@ public void sync(ObjectClass oclass, SyncToken token, SyncResultsHandler handler /** * {@inheritDoc} */ + @Override public SyncToken getLatestSyncToken(ObjectClass oclass) { log.info("check the ObjectClass"); final String SQL_SELECT = "SELECT MAX( {0} ) FROM {1}"; @@ -717,6 +728,7 @@ public SyncToken getLatestSyncToken(ObjectClass oclass) { /** * {@inheritDoc} */ + @Override public Schema schema() { try { openConnection(); @@ -741,6 +753,7 @@ public Schema schema() { * Test the configuration and connection * {@inheritDoc} */ + @Override public void test() { log.info("test"); try { @@ -781,6 +794,7 @@ private void commit() throws SQLException { * Attempts to authenticate the given username combination * {@inheritDoc} */ + @Override public Uid authenticate(ObjectClass oclass, String username, GuardedString password, OperationOptions options) { @@ -853,6 +867,7 @@ public Uid authenticate(ObjectClass oclass, String username, GuardedString passw * Attempts to resolve the given username * {@inheritDoc} */ + @Override public Uid resolveUsername(ObjectClass oclass, String username, OperationOptions options) { final String SQL_AUTH_QUERY = "SELECT {0} FROM {1} WHERE ( {0} = ? )"; diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableSQLUtil.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableSQLUtil.java index cf18ebe7..2e49e085 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableSQLUtil.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableSQLUtil.java @@ -153,6 +153,7 @@ static void setGuardedStringParam(final MappingStrategy sms, final PreparedState final String name = param.getName(); try { guard.access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { try { //Never use setString, the DB2 database will fail for secured columns diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/AttributeConvertor.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/AttributeConvertor.java index e0f83fea..9629404e 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/AttributeConvertor.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/AttributeConvertor.java @@ -55,6 +55,7 @@ public AttributeConvertor(MappingStrategy delegate) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLParam(java.sql.ResultSet, int, int) */ + @Override public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int sqlType) throws SQLException { // Convert all types to attribute supported types final SQLParam param = delegate.getSQLParam(resultSet, i,name, sqlType); @@ -64,6 +65,7 @@ public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int s /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLAttributeType(int) */ + @Override public Class getSQLAttributeType(int sqlType) { return delegate.getSQLAttributeType(sqlType); } @@ -71,6 +73,7 @@ public Class getSQLAttributeType(int sqlType) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#setSQLParam(java.sql.PreparedStatement, int, org.identityconnectors.dbcommon.SQLParam) */ + @Override public void setSQLParam(final PreparedStatement stmt, final int idx, SQLParam parm) throws SQLException { delegate.setSQLParam(stmt, idx, parm); } diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/DefaultStrategy.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/DefaultStrategy.java index bf2e05e0..ba0ee2e3 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/DefaultStrategy.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/DefaultStrategy.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.databasetable.mapping; @@ -46,6 +47,7 @@ public DefaultStrategy() { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLParam(java.sql.ResultSet, int, int) */ + @Override public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int sqlType) throws SQLException { return SQLUtil.getSQLParam(resultSet, i, name, sqlType); } @@ -53,6 +55,7 @@ public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int s /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLAttributeType(int) */ + @Override public Class getSQLAttributeType(int sqlType) { return SQLUtil.getSQLAttributeType(sqlType); } @@ -60,6 +63,7 @@ public Class getSQLAttributeType(int sqlType) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#setSQLParam(java.sql.PreparedStatement, int, org.identityconnectors.dbcommon.SQLParam) */ + @Override public void setSQLParam(final PreparedStatement stmt, final int idx, SQLParam parm) throws SQLException { SQLUtil.setSQLParam(stmt, idx, parm); } diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/JdbcConvertor.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/JdbcConvertor.java index 94ef7ca8..99d2ac4b 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/JdbcConvertor.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/JdbcConvertor.java @@ -55,6 +55,7 @@ public JdbcConvertor(MappingStrategy delegate) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLParam(java.sql.ResultSet, int, int) */ + @Override public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int sqlType) throws SQLException { //Default processing otherwise return delegate.getSQLParam(resultSet, i, name, sqlType); @@ -63,6 +64,7 @@ public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int s /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLAttributeType(int) */ + @Override public Class getSQLAttributeType(int sqlType) { return delegate.getSQLAttributeType(sqlType); } @@ -70,6 +72,7 @@ public Class getSQLAttributeType(int sqlType) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#setSQLParam(java.sql.PreparedStatement, int, org.identityconnectors.dbcommon.SQLParam) */ + @Override public void setSQLParam(final PreparedStatement stmt, final int idx, SQLParam parm) throws SQLException { final Object val = SQLUtil.attribute2jdbcValue(parm.getValue(), parm.getSqlType()); delegate.setSQLParam(stmt, idx, new SQLParam(parm.getName(), val, parm.getSqlType())); diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/NativeTimestampsStrategy.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/NativeTimestampsStrategy.java index 88014cec..8a993bc0 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/NativeTimestampsStrategy.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/NativeTimestampsStrategy.java @@ -55,6 +55,7 @@ public NativeTimestampsStrategy(MappingStrategy delegate) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLParam(java.sql.ResultSet, int, int) */ + @Override public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int sqlType) throws SQLException { switch (sqlType) { case Types.TIMESTAMP: @@ -67,6 +68,7 @@ public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int s /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLAttributeType(int) */ + @Override public Class getSQLAttributeType(int sqlType) { return delegate.getSQLAttributeType(sqlType); } @@ -74,6 +76,7 @@ public Class getSQLAttributeType(int sqlType) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#setSQLParam(java.sql.PreparedStatement, int, org.identityconnectors.dbcommon.SQLParam) */ + @Override public void setSQLParam(final PreparedStatement stmt, final int idx, SQLParam parm) throws SQLException { delegate.setSQLParam(stmt, idx, parm); } diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/StringStrategy.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/StringStrategy.java index b4bbd661..bce8e4aa 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/StringStrategy.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/StringStrategy.java @@ -58,6 +58,7 @@ public StringStrategy(MappingStrategy delegate) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLParam(java.sql.ResultSet, int, int) */ + @Override public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int sqlType) throws SQLException { //Is it expected to be string, read as a string. if( delegate.getSQLAttributeType(sqlType).isAssignableFrom(String.class)) { @@ -70,6 +71,7 @@ public SQLParam getSQLParam(ResultSet resultSet, int i, String name, final int s /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#getSQLAttributeType(int) */ + @Override public Class getSQLAttributeType(int sqlType) { return delegate.getSQLAttributeType(sqlType); } @@ -77,6 +79,7 @@ public Class getSQLAttributeType(int sqlType) { /* (non-Javadoc) * @see org.identityconnectors.databasetable.MappingStrategy#setSQLParam(java.sql.PreparedStatement, int, org.identityconnectors.dbcommon.SQLParam) */ + @Override public void setSQLParam(final PreparedStatement stmt, final int idx, SQLParam parm) throws SQLException { // Write all internal string as a string and left conversion to the database if( delegate.getSQLAttributeType(parm.getSqlType()).isAssignableFrom(String.class)) { diff --git a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/ExpectProxy.java b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/ExpectProxy.java index 3d3d8fa4..226a101f 100644 --- a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/ExpectProxy.java +++ b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/ExpectProxy.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.dbcommon; @@ -103,6 +104,7 @@ public boolean isDone() { /** * The InvocationHandler method. */ + @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String ext = ""; if (methodNames.size() > count) { diff --git a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/SQLUtil.java b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/SQLUtil.java index 6aef2ed8..869db0e8 100644 --- a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/SQLUtil.java +++ b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/SQLUtil.java @@ -111,6 +111,7 @@ public static Connection getDatasourceConnection(final String datasourceName, final DataSource ds = (DataSource) ic.lookup(datasourceName); final Connection[] ret = new Connection[1]; password.access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { try { ret[0] = ds.getConnection(user, new String(clearChars)); @@ -220,6 +221,7 @@ public static Connection getDriverMangerConnection(final String driver, final St } if (password != null) { password.access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { info.put("password", new String(clearChars)); } @@ -997,6 +999,7 @@ public static void setGuardedStringParam(final PreparedStatement stmt, final int GuardedString guard) throws SQLException { try { guard.access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { try { // Never use setString, the DB2 database will fail for diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/crest/AbstractRemoteConnection.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/crest/AbstractRemoteConnection.java index 2c4e38cf..3cef467c 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/crest/AbstractRemoteConnection.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/crest/AbstractRemoteConnection.java @@ -654,6 +654,7 @@ public QueryResultResponseHandler(final QueryResourceHandler handler) { * If the response was unsuccessful (>= 300 status code), throws an * {@link org.apache.http.client.HttpResponseException}. */ + @Override public QueryResponse buildResult(HttpContext context) throws Exception { return parseQueryResponse(response, handler); @@ -681,6 +682,7 @@ public class ResourceResponseHandler extends AbstractJsonValueResponseHandler, Vi public static final CRESTFilterVisitor VISITOR = new CRESTFilterVisitor(); + @Override public QueryFilter visitAndFilter(VisitorParameter parameter, AndFilter subFilters) { final Collection> filters = new ArrayList>(subFilters.getFilters().size()); @@ -63,6 +65,7 @@ public QueryFilter visitAndFilter(VisitorParameter parameter, AndFilter subFilte return QueryFilter.and(filters); } + @Override public QueryFilter visitOrFilter(VisitorParameter parameter, OrFilter subFilters) { final Collection> filters = new ArrayList>(subFilters.getFilters().size()); @@ -72,6 +75,7 @@ public QueryFilter visitOrFilter(VisitorParameter parameter, OrFilter subFilters return QueryFilter.or(filters); } + @Override public QueryFilter visitNotFilter(VisitorParameter parameter, NotFilter subFilter) { return QueryFilter.not(subFilter.getFilter().accept(this, parameter)); } @@ -88,12 +92,14 @@ public QueryFilter visitNotFilter(VisitorParameter parameter, NotFilter subFilte // AttributeFilter + @Override public QueryFilter visitEqualsFilter(VisitorParameter parameter, EqualsFilter filter) { // TODO: Support other then Single values return QueryFilter.equalTo(parameter.translateName(filter.getName()), parameter .convertValue(filter.getAttribute())); } + @Override public QueryFilter visitContainsAllValuesFilter(VisitorParameter parameter, ContainsAllValuesFilter filter) { // TODO: Support other then Single values @@ -103,16 +109,19 @@ public QueryFilter visitContainsAllValuesFilter(VisitorParameter parameter, // StringFilter + @Override public QueryFilter visitContainsFilter(VisitorParameter parameter, ContainsFilter filter) { return QueryFilter.contains(parameter.translateName(filter.getName()), parameter .convertValue(filter.getAttribute())); } + @Override public QueryFilter visitStartsWithFilter(VisitorParameter parameter, StartsWithFilter filter) { return QueryFilter.startsWith(parameter.translateName(filter.getName()), parameter .convertValue(filter.getAttribute())); } + @Override public QueryFilter visitEndsWithFilter(VisitorParameter parameter, EndsWithFilter filter) { return QueryFilter.comparisonFilter(parameter.translateName(filter.getName()), EW, parameter.convertValue(filter.getAttribute())); @@ -120,28 +129,33 @@ public QueryFilter visitEndsWithFilter(VisitorParameter parameter, EndsWithFilte // ComparableAttributeFilter + @Override public QueryFilter visitGreaterThanFilter(VisitorParameter parameter, GreaterThanFilter filter) { return QueryFilter.greaterThan(parameter.translateName(filter.getName()), parameter .convertValue(filter.getAttribute())); } + @Override public QueryFilter visitGreaterThanOrEqualFilter(VisitorParameter parameter, GreaterThanOrEqualFilter filter) { return QueryFilter.greaterThanOrEqualTo(parameter.translateName(filter.getName()), parameter.convertValue(filter.getAttribute())); } + @Override public QueryFilter visitLessThanFilter(VisitorParameter parameter, LessThanFilter filter) { return QueryFilter.lessThan(parameter.translateName(filter.getName()), parameter .convertValue(filter.getAttribute())); } + @Override public QueryFilter visitLessThanOrEqualFilter(VisitorParameter parameter, LessThanOrEqualFilter filter) { return QueryFilter.lessThanOrEqualTo(parameter.translateName(filter.getName()), parameter .convertValue(filter.getAttribute())); } + @Override public QueryFilter visitExtendedFilter(VisitorParameter visitorParameter, Filter filter) { throw new UnsupportedOperationException("Filter type is not supported: " + filter.getClass()); diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/MapFilterVisitor.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/MapFilterVisitor.java index 0d804980..fd54d653 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/MapFilterVisitor.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/MapFilterVisitor.java @@ -87,6 +87,7 @@ private Map createMap(String operation, AttributeFilter filter) return map; } + @Override public Map visitAndFilter(Void parameter, AndFilter subFilters) { Map map = new LinkedHashMap(3); map.put("operation", "AND"); @@ -95,48 +96,58 @@ public Map visitAndFilter(Void parameter, AndFilter subFilters) return map; } + @Override public Map visitContainsAllValuesFilter(Void parameter, ContainsAllValuesFilter filter) { throw new UnsupportedOperationException( "ContainsAllValuesFilter transformation is not supported"); } + @Override public Map visitContainsFilter(Void parameter, ContainsFilter filter) { return createMap("CONTAINS", filter); } + @Override public Map visitEndsWithFilter(Void parameter, EndsWithFilter filter) { return createMap("ENDSWITH", filter); } + @Override public Map visitEqualsFilter(Void parameter, EqualsFilter filter) { return createMap("EQUALS", filter); } + @Override public Map visitGreaterThanFilter(Void parameter, GreaterThanFilter filter) { return createMap("GREATERTHAN", filter); } + @Override public Map visitGreaterThanOrEqualFilter(Void parameter, GreaterThanOrEqualFilter filter) { return createMap("GREATERTHANOREQUAL", filter); } + @Override public Map visitLessThanFilter(Void parameter, LessThanFilter filter) { return createMap("LESSTHAN", filter); } + @Override public Map visitLessThanOrEqualFilter(Void parameter, LessThanOrEqualFilter filter) { return createMap("LESSTHANOREQUAL", filter); } + @Override public Map visitNotFilter(Void parameter, NotFilter subFilter) { Map map = subFilter.getFilter().accept(this, null); map.put("not", true); return map; } + @Override public Map visitOrFilter(Void parameter, OrFilter subFilters) { Map map = new LinkedHashMap(3); map.put("operation", "OR"); @@ -145,10 +156,12 @@ public Map visitOrFilter(Void parameter, OrFilter subFilters) { return map; } + @Override public Map visitStartsWithFilter(Void parameter, StartsWithFilter filter) { return createMap("STARTSWITH", filter); } + @Override public Map visitExtendedFilter(Void aVoid, Filter filter) { throw new UnsupportedOperationException("Filter type is not supported: " + filter.getClass()); diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedConfiguration.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedConfiguration.java index 8ea122ba..2ad15f92 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedConfiguration.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedConfiguration.java @@ -656,6 +656,7 @@ public ConcurrentMap getPropertyBag() { // Interface Implementation // ======================================================================= + @Override public void release() { synchronized (this) { Closure c = getReleaseClosure(); @@ -675,6 +676,7 @@ public void release() { /** * {@inheritDoc} */ + @Override public void validate() { logger.info("Load and compile configured scripts"); if (getScriptRoots() == null || getScriptRoots().length < 1) { diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/GroovyDataProvider.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/GroovyDataProvider.java index 0263c309..af963452 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/GroovyDataProvider.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/GroovyDataProvider.java @@ -624,6 +624,7 @@ private String concatenate(Object value, List successors) { /** * {@inheritDoc} */ + @Override public Object get(Class dataTypeName, String name, String componentName, int sequenceNumber, boolean isMultivalue) { // put the parameters in the Map ... this will fail if called @@ -692,6 +693,7 @@ public Object get(Class dataTypeName, String name, String componentName, /** * {@inheritDoc} */ + @Override public Object get(Class dataTypeName, String name, String componentName) { return get(dataTypeName, name, componentName, SINGLE_VALUE_MARKER, false); @@ -700,6 +702,7 @@ public Object get(Class dataTypeName, String name, String componentName) { /** * {@inheritDoc} */ + @Override public String getString(String name, String componentName, int sequenceNumber) { return (String) get(String.class, name, componentName, @@ -709,6 +712,7 @@ public String getString(String name, String componentName, /** * {@inheritDoc} */ + @Override public String getString(String name, String componentName) { return (String) get(String.class, name, componentName); } @@ -716,6 +720,7 @@ public String getString(String name, String componentName) { /** * {@inheritDoc} */ + @Override public Object getTestSuiteAttribute(String propName) { return get("testsuite." + propName, null, false); @@ -724,6 +729,7 @@ public Object getTestSuiteAttribute(String propName) { /** * {@inheritDoc} */ + @Override public Object getTestSuiteAttribute(String propName, String testName) { return get("testsuite." + testName + "." + propName, null, false); } @@ -731,6 +737,7 @@ public Object getTestSuiteAttribute(String propName, String testName) { /** * {@inheritDoc} */ + @Override public Object getConnectorAttribute(String propName) { return get("connector." + propName, null, false); @@ -739,6 +746,7 @@ public Object getConnectorAttribute(String propName) { /** * {@inheritDoc} */ + @Override public Object get(String name) { Object result = get(name, null, false); if (result instanceof Map) { @@ -752,6 +760,7 @@ public Object get(String name) { /** * {@inheritDoc} */ + @Override public Object generate(String pattern, Class clazz) { return RandomGenerator.generate(pattern, clazz); } @@ -759,6 +768,7 @@ public Object generate(String pattern, Class clazz) { /** * {@inheritDoc} */ + @Override public Object generate(String pattern) { return RandomGenerator.generate(pattern); } @@ -766,6 +776,7 @@ public Object generate(String pattern) { /** * {@inheritDoc} */ + @Override public Object get(String name, int sequenceNumber) { String resolvedName = String.format("i%s%s%s", sequenceNumber, PROPERTY_SEPARATOR, name); @@ -789,6 +800,7 @@ private Map getPropertyMap(final String setName) { * {@code account.create} * @return the {@code Set} built from the entries of the given property submap */ + @Override public Set getAttributeSet(final String propertySetName) { Map propMap = getPropertyMap(propertySetName); assertNotNull(propMap); @@ -822,6 +834,7 @@ public Set getAttributeSet(final String propertySetName) { * @throws SecurityException if reflective access to the configuration's setter * method is denied */ + @Override public void loadConfiguration(final String configName, Configuration cfg) { Map propMap = getPropertyMap(configName); assertNotNull(propMap); @@ -1177,6 +1190,7 @@ private String flattenMap(Object obj) { return svalue; } + @Override public void dispose() { writeDataToFile(); writeQueriedDumpToFile(); diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/AttributeTests.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/AttributeTests.java index 8c0ffdaf..5dbad14a 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/AttributeTests.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/AttributeTests.java @@ -704,6 +704,7 @@ public ObjectClass getOc() { return oc; } + @Override public String toString() { return " \n ObjectClass: " + oc.toString() + "\n AttributeSet: " + attrSet.toString(); } diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ConnectorHelper.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ConnectorHelper.java index ae9be004..39bde5b0 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ConnectorHelper.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ConnectorHelper.java @@ -282,6 +282,7 @@ static ConnectorObject findObjectByName(ConnectorFacade connectorFacade, final List foundObjects = new ArrayList(); connectorFacade.search(objClass, nameFilter, new ResultsHandler() { + @Override public boolean handle(ConnectorObject obj) { foundObjects.add(obj); return false; @@ -304,6 +305,7 @@ public static List search(ConnectorFacade connectorFacade, Obje final List foundObjects = new ArrayList(); connectorFacade.search(objClass, filter, new ResultsHandler() { + @Override public boolean handle(ConnectorObject obj) { foundObjects.add(obj); return true; @@ -320,6 +322,7 @@ public static Map search2Map(ConnectorFacade connectorFaca final Map foundObjects = new Hashtable(); connectorFacade.search(objClass, filter, new ResultsHandler() { + @Override public boolean handle(ConnectorObject obj) { foundObjects.put(obj.getUid(), obj); return true; @@ -337,6 +340,7 @@ public static List sync(ConnectorFacade connectorFacade, ObjectClass final List returnedDeltas = new ArrayList(); connectorFacade.sync(objClass, token, new SyncResultsHandler() { + @Override public boolean handle(SyncDelta delta) { returnedDeltas.add(delta); return true; diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/FrameworkModule.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/FrameworkModule.java index cb8a182e..a7fa7841 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/FrameworkModule.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/FrameworkModule.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.contract.test; @@ -49,6 +50,7 @@ public FrameworkModule(DataProvider dataProvider) { this.dataProvider = dataProvider; } + @Override protected void configure() { bind(DataProvider.class).annotatedWith(Names.named("DataProvider")).toInstance(dataProvider); } diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ObjectClassRunner.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ObjectClassRunner.java index 2afec7a7..ecb37bbe 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ObjectClassRunner.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ObjectClassRunner.java @@ -77,6 +77,7 @@ public abstract class ObjectClassRunner extends ContractTestBase { * Dispose the test environment, do the cleanup */ @AfterTest + @Override public void dispose() { _objectClassInfo = null; super.dispose(); diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/SyncApiOpTests.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/SyncApiOpTests.java index bcc2098d..f4cf85f1 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/SyncApiOpTests.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/SyncApiOpTests.java @@ -21,6 +21,7 @@ * ==================== * * Portions Copyrighted 2012 ForgeRock AS + * Portions Copyrighted 2026 3A Systems, LLC * */ package org.identityconnectors.contract.test; @@ -258,6 +259,7 @@ && canSyncAfterOp(CreateApiOp.class)) { final LinkedList deltas = new LinkedList(); getConnectorFacade().sync(objectClass, latestToken, new SyncResultsHandler() { + @Override public boolean handle(SyncDelta delta) { deltas.add(delta); return true; @@ -277,6 +279,7 @@ public boolean handle(SyncDelta delta) { // should return one change this time getConnectorFacade().sync(objectClass, latestToken, new SyncResultsHandler() { + @Override public boolean handle(SyncDelta delta) { deltas.add(delta); return true; diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ValidateApiOpTests.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ValidateApiOpTests.java index 14b851a6..b32c353c 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ValidateApiOpTests.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/ValidateApiOpTests.java @@ -21,6 +21,7 @@ * ==================== * * Portions Copyrighted 2012 ForgeRock AS + * Portions Copyrighted 2026 3A Systems, LLC * */ package org.identityconnectors.contract.test; @@ -103,14 +104,17 @@ public Iterator createData(final ITestContext context, Method method) final Iterator wrongConfigList = ((List) o).iterator(); return new Iterator() { + @Override public boolean hasNext() { return wrongConfigList.hasNext(); } + @Override public Object[] next() { return new Object[]{wrongConfigList.next()}; } + @Override public void remove() { wrongConfigList.remove(); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/logging/impl/JDKLogger.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/logging/impl/JDKLogger.java index 5d77a41f..1f9f2a9f 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/logging/impl/JDKLogger.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/logging/impl/JDKLogger.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common.logging.impl; @@ -46,6 +47,7 @@ public class JDKLogger implements LogSpi { * * @see LogSpi#log(Class, String, Level, String, Throwable) */ + @Override public void log(Class clazz, String methodName, Level level, String message, Throwable ex) { // uses different call if the exception is not null.. String clazzName = clazz.getName(); @@ -63,6 +65,7 @@ public void log(Class clazz, String methodName, Level level, String message, * * @see LogSpi#log(Class, StackTraceElement, Level, String, Throwable) */ + @Override public void log(final Class clazz, final StackTraceElement caller, final Level level, final String message, final Throwable ex) { String methodName = null; @@ -83,10 +86,12 @@ public void log(final Class clazz, final StackTraceElement caller, final Leve /** * Use the internal JDK logger to determine if the level is worthy of logging. */ + @Override public boolean isLoggable(Class clazz, Level level) { return getJDKLogger(clazz.getName()).isLoggable(getJDKLevel(level)); } + @Override public boolean needToInferCaller(Class clazz, Level level) { // JDK Logger does it always so better to fetch the correct caller by ICF Log class. return true; diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/logging/impl/NoOpLogger.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/logging/impl/NoOpLogger.java index 5585fdb9..81cd2e81 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/logging/impl/NoOpLogger.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/logging/impl/NoOpLogger.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common.logging.impl; @@ -38,10 +39,12 @@ public class NoOpLogger implements LogSpi { /** * Logs nothing. Its a black hole command. */ + @Override public void log(Class clazz, String methodName, Level level, String message, Throwable ex) { } + @Override public void log(Class clazz, StackTraceElement method, Level level, String message, Throwable ex) { } @@ -49,10 +52,12 @@ public void log(Class clazz, StackTraceElement method, Level level, /** * Always returns false because there nothing to do. */ + @Override public boolean isLoggable(Class clazz, Level level) { return false; } + @Override public boolean needToInferCaller(Class clazz, Level level) { return false; } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/script/groovy/GroovyScriptExecutorFactory.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/script/groovy/GroovyScriptExecutorFactory.java index e0124ed2..017593b8 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/script/groovy/GroovyScriptExecutorFactory.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/script/groovy/GroovyScriptExecutorFactory.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common.script.groovy; @@ -64,6 +65,7 @@ public GroovyScriptExecutor(ClassLoader loader, String script) { groovyScript = new GroovyShell(loader).parse(script); } + @Override public Object execute(Map arguments) throws Exception { Map args = CollectionUtil.nullAsEmpty(arguments); groovyScript.setBinding(new Binding(args)); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/script/javascript/JavaScriptExecutorFactory.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/script/javascript/JavaScriptExecutorFactory.java index df61fac1..5873108d 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/script/javascript/JavaScriptExecutorFactory.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/script/javascript/JavaScriptExecutorFactory.java @@ -97,6 +97,7 @@ public CompiledJavaScriptExecutor(ClassLoader loader, CompiledScript compiled) { this.compiled = compiled; } + @Override public Object execute(Map arguments) throws Exception { Map args = CollectionUtil.nullAsEmpty(arguments); ScriptContext newContext = new SimpleScriptContext(); @@ -116,6 +117,7 @@ public JavaScriptExecutor(ClassLoader loader, String script) { this.script = script; } + @Override public Object execute(Map arguments) throws Exception { Map args = CollectionUtil.nullAsEmpty(arguments); ScriptEngine engine = manager.getEngineByName(JAVA_SCRIPT); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/security/impl/EncryptorImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/security/impl/EncryptorImpl.java index 17d5fa3b..598dff82 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/security/impl/EncryptorImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/common/security/impl/EncryptorImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2016 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common.security.impl; @@ -71,6 +72,7 @@ public EncryptorImpl(boolean defaultKey) { } } + @Override public byte[] decrypt(byte[] bytes) { try { Cipher cipher = Cipher.getInstance(FULL_ALGORITHM); @@ -83,6 +85,7 @@ public byte[] decrypt(byte[] bytes) { } } + @Override public byte[] encrypt(byte[] bytes) { try { Cipher cipher = Cipher.getInstance(FULL_ALGORITHM); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/APIConfigurationImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/APIConfigurationImpl.java index 2bb8eebe..5a2bd06a 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/APIConfigurationImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/APIConfigurationImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -162,6 +163,7 @@ public boolean isSupportedOperation(Class api) { /** * {@inheritDoc} */ + @Override public boolean isConnectorPoolingSupported() { return isConnectorPoolingSupported; } @@ -169,6 +171,7 @@ public boolean isConnectorPoolingSupported() { /** * {@inheritDoc} */ + @Override public ObjectPoolConfiguration getConnectorPoolConfiguration() { if (connectorPoolConfiguration == null) { connectorPoolConfiguration = new ObjectPoolConfiguration(); @@ -179,6 +182,7 @@ public ObjectPoolConfiguration getConnectorPoolConfiguration() { /** * {@inheritDoc} */ + @Override public ConfigurationPropertiesImpl getConfigurationProperties() { return configurationProperties; } @@ -186,6 +190,7 @@ public ConfigurationPropertiesImpl getConfigurationProperties() { /** * {@inheritDoc} */ + @Override public int getTimeout(Class operation) { Integer ret = this.timeoutMap.get(operation); if (ret == null || ret < APIOperation.NO_TIMEOUT) { @@ -198,6 +203,7 @@ public int getTimeout(Class operation) { /** * {@inheritDoc} */ + @Override public Set> getSupportedOperations() { return CollectionUtil.newReadOnlySet(supportedOperations); } @@ -205,6 +211,7 @@ public Set> getSupportedOperations() { /** * {@inheritDoc} */ + @Override public void setTimeout(Class operation, int timeout) { this.timeoutMap.put(operation, timeout); } @@ -212,6 +219,7 @@ public void setTimeout(Class operation, int timeout) { /** * {@inheritDoc} */ + @Override public void setProducerBufferSize(int size) { this.bufferSize = size; } @@ -219,6 +227,7 @@ public void setProducerBufferSize(int size) { /** * {@inheritDoc} */ + @Override public int getProducerBufferSize() { return this.bufferSize; } @@ -226,6 +235,7 @@ public int getProducerBufferSize() { /** * {@inheritDoc} */ + @Override public ResultsHandlerConfiguration getResultsHandlerConfiguration() { if (null == resultsHandlerConfiguration) { resultsHandlerConfiguration = new ResultsHandlerConfiguration(); @@ -237,6 +247,7 @@ public void setResultsHandlerConfiguration(ResultsHandlerConfiguration config) { this.resultsHandlerConfiguration = config; } + @Override public void setChangeListener(ConfigurationPropertyChangeListener changeListener) { configurationChangeListener = changeListener; } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/AbstractConnectorFacade.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/AbstractConnectorFacade.java index da84877d..1c665262 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/AbstractConnectorFacade.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/AbstractConnectorFacade.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2015 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -149,6 +150,7 @@ public AbstractConnectorFacade(final String facadeAlias, * return an instance of the operation. * @see org.identityconnectors.framework.api.ConnectorFacade#getOperation(java.lang.Class) */ + @Override public final APIOperation getOperation(Class api) { if (!configuration.isSupportedOperation(api)) { return null; @@ -165,6 +167,7 @@ public final APIOperation getOperation(Class api) { * * @return identifier of this ConnectorFacade instance. */ + @Override public final String getConnectorFacadeKey() { return connectorFacadeKey; } @@ -172,6 +175,7 @@ public final String getConnectorFacadeKey() { /** * {@inheritDoc} */ + @Override public final Set> getSupportedOperations() { return configuration.getSupportedOperations(); } @@ -182,6 +186,7 @@ public final Set> getSupportedOperations() { /** * {@inheritDoc} */ + @Override public final Subscription executeBatch(List tasks, Observer observer, OperationOptions options) { return ((BatchApiOp) getOperationCheckSupported(BatchApiOp.class)) .executeBatch(tasks, observer, options); @@ -190,6 +195,7 @@ public final Subscription executeBatch(List tasks, Observer observer, OperationOptions options) { return ((BatchApiOp) getOperationCheckSupported(BatchApiOp.class)) .queryBatch(token, observer, options); @@ -198,6 +204,7 @@ public final Subscription queryBatch(BatchToken token, Observer obs /** * {@inheritDoc} */ + @Override public final Schema schema() { return ((SchemaApiOp) this.getOperationCheckSupported(SchemaApiOp.class)).schema(); } @@ -205,6 +212,7 @@ public final Schema schema() { /** * {@inheritDoc} */ + @Override public final Uid create(final ObjectClass objectClass, final Set createAttributes, final OperationOptions options) { return ((CreateApiOp) getOperationCheckSupported(CreateApiOp.class)).create(objectClass, @@ -214,6 +222,7 @@ public final Uid create(final ObjectClass objectClass, final Set crea /** * {@inheritDoc} */ + @Override public final void delete(final ObjectClass objectClass, final Uid uid, final OperationOptions options) { ((DeleteApiOp) this.getOperationCheckSupported(DeleteApiOp.class)).delete(objectClass, uid, @@ -223,6 +232,7 @@ public final void delete(final ObjectClass objectClass, final Uid uid, /** * {@inheritDoc} */ + @Override public final SearchResult search(final ObjectClass objectClass, final Filter filter, final ResultsHandler handler, final OperationOptions options) { return ((SearchApiOp) this.getOperationCheckSupported(SearchApiOp.class)).search( @@ -232,6 +242,7 @@ public final SearchResult search(final ObjectClass objectClass, final Filter fil /** * {@inheritDoc} */ + @Override public Subscription subscribe(final ObjectClass objectClass, final Filter eventFilter, final Observer handler, final OperationOptions operationOptions) { return ((ConnectorEventSubscriptionApiOp) this.getOperationCheckSupported(ConnectorEventSubscriptionApiOp.class)).subscribe( @@ -241,6 +252,7 @@ public Subscription subscribe(final ObjectClass objectClass, final Filter eventF /** * {@inheritDoc} */ + @Override public Subscription subscribe(final ObjectClass objectClass,final SyncToken token,final Observer handler, final OperationOptions operationOptions) { return ((SyncEventSubscriptionApiOp) this.getOperationCheckSupported(SyncEventSubscriptionApiOp.class)).subscribe( @@ -250,6 +262,7 @@ public Subscription subscribe(final ObjectClass objectClass,final SyncToken toke /** * {@inheritDoc} */ + @Override public final Uid update(final ObjectClass objectClass, final Uid uid, final Set attrs, final OperationOptions options) { return ((UpdateApiOp) this.getOperationCheckSupported(UpdateApiOp.class)).update( @@ -259,6 +272,7 @@ public final Uid update(final ObjectClass objectClass, final Uid uid, /** * {@inheritDoc} */ + @Override public final Uid addAttributeValues(final ObjectClass objclass, final Uid uid, final Set attrs, final OperationOptions options) { return ((UpdateApiOp) this.getOperationCheckSupported(UpdateApiOp.class)) @@ -268,6 +282,7 @@ public final Uid addAttributeValues(final ObjectClass objclass, final Uid uid, /** * {@inheritDoc} */ + @Override public final Uid removeAttributeValues(final ObjectClass objclass, final Uid uid, final Set attrs, final OperationOptions options) { return ((UpdateApiOp) this.getOperationCheckSupported(UpdateApiOp.class)) @@ -277,6 +292,7 @@ public final Uid removeAttributeValues(final ObjectClass objclass, final Uid uid /** * {@inheritDoc} */ + @Override public final Uid authenticate(final ObjectClass objectClass, final String username, final GuardedString password, final OperationOptions options) { return ((AuthenticationApiOp) this.getOperationCheckSupported(AuthenticationApiOp.class)) @@ -286,6 +302,7 @@ public final Uid authenticate(final ObjectClass objectClass, final String userna /** * {@inheritDoc} */ + @Override public final Uid resolveUsername(final ObjectClass objectClass, final String username, final OperationOptions options) { return ((ResolveUsernameApiOp) this.getOperationCheckSupported(ResolveUsernameApiOp.class)) @@ -295,6 +312,7 @@ public final Uid resolveUsername(final ObjectClass objectClass, final String use /** * {@inheritDoc} */ + @Override public final Object runScriptOnConnector(ScriptContext request, OperationOptions options) { return ((ScriptOnConnectorApiOp) this .getOperationCheckSupported(ScriptOnConnectorApiOp.class)).runScriptOnConnector( @@ -304,6 +322,7 @@ public final Object runScriptOnConnector(ScriptContext request, OperationOptions /** * {@inheritDoc} */ + @Override public final Object runScriptOnResource(ScriptContext request, OperationOptions options) { return ((ScriptOnResourceApiOp) this .getOperationCheckSupported(ScriptOnResourceApiOp.class)).runScriptOnResource( @@ -313,6 +332,7 @@ public final Object runScriptOnResource(ScriptContext request, OperationOptions /** * {@inheritDoc} */ + @Override public final ConnectorObject getObject(ObjectClass objectClass, Uid uid, OperationOptions options) { return ((GetApiOp) this.getOperationCheckSupported(GetApiOp.class)).getObject(objectClass, @@ -322,6 +342,7 @@ public final ConnectorObject getObject(ObjectClass objectClass, Uid uid, /** * {@inheritDoc} */ + @Override public final void test() { ((TestApiOp) this.getOperationCheckSupported(TestApiOp.class)).test(); } @@ -329,6 +350,7 @@ public final void test() { /** * {@inheritDoc} */ + @Override public final void validate() { ((ValidateApiOp) this.getOperationCheckSupported(ValidateApiOp.class)).validate(); } @@ -336,6 +358,7 @@ public final void validate() { /** * {@inheritDoc} */ + @Override public final SyncToken sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler, OperationOptions options) { return ((SyncApiOp) this.getOperationCheckSupported(SyncApiOp.class)).sync(objectClass, @@ -345,6 +368,7 @@ public final SyncToken sync(ObjectClass objectClass, SyncToken token, /** * {@inheritDoc} */ + @Override public final SyncToken getLatestSyncToken(ObjectClass objectClass) { return ((SyncApiOp) this.getOperationCheckSupported(SyncApiOp.class)) .getLatestSyncToken(objectClass); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/AbstractConnectorInfo.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/AbstractConnectorInfo.java index 283e2171..c1ba75cc 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/AbstractConnectorInfo.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/AbstractConnectorInfo.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -44,6 +45,7 @@ protected AbstractConnectorInfo() { } + @Override public final ConnectorMessages getMessages() { return messages; } @@ -52,6 +54,7 @@ public final void setMessages(ConnectorMessages messages) { this.messages = messages; } + @Override public final String getConnectorDisplayName() { return messages.format(connectorDisplayNameKey, connectorKey.getConnectorName()); } @@ -64,6 +67,7 @@ public final void setConnectorDisplayNameKey(String name) { connectorDisplayNameKey = name; } + @Override public final String getConnectorCategory() { return messages.format(connectorCategoryKey, null); } @@ -76,6 +80,7 @@ public final void setConnectorCategoryKey(String key) { connectorCategoryKey = key; } + @Override public final ConnectorKey getConnectorKey() { return connectorKey; } @@ -84,6 +89,7 @@ public final void setConnectorKey(ConnectorKey key) { connectorKey = key; } + @Override public final APIConfiguration createDefaultAPIConfiguration() { APIConfigurationImpl rv = (APIConfigurationImpl) SerializerUtil.cloneObject(defaultAPIConfiguration); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/BufferedResultsProxy.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/BufferedResultsProxy.java index 5b490bd6..59362051 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/BufferedResultsProxy.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/BufferedResultsProxy.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -82,6 +83,7 @@ public BufferedResultsHandler(Method method, Object target, Object[] arguments, this.timeoutMillis = timeoutMillis; } + @Override public boolean handle(final Object obj) { if (isStopped()) { return false; @@ -213,6 +215,7 @@ private Object getResult() { } } + @Override public Object invoke(final Object proxy, final Method method, Object[] arguments) throws Throwable { // do not buffer/timeout equals, hashCode, toString diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConfigurationPropertiesImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConfigurationPropertiesImpl.java index e5d9da6b..0f03785f 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConfigurationPropertiesImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConfigurationPropertiesImpl.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -68,6 +69,7 @@ private static class PropertyComparator implements Comparator getProperties() { /** * {@inheritDoc} */ + @Override public ConfigurationProperty getProperty(String name) { return properties.get(name); } @@ -107,6 +110,7 @@ public ConfigurationProperty getProperty(String name) { /** * {@inheritDoc} */ + @Override public List getPropertyNames() { List names = new ArrayList(properties.keySet()); return CollectionUtil.newReadOnlyList(names); @@ -117,6 +121,7 @@ public List getPropertyNames() { /** * {@inheritDoc} */ + @Override public void setPropertyValue(String name, Object value) { ConfigurationPropertyImpl property = properties.get(name); if (property == null) { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConfigurationPropertyImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConfigurationPropertyImpl.java index 49419271..5721d97e 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConfigurationPropertyImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConfigurationPropertyImpl.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -146,10 +147,12 @@ public void setParent(ConfigurationPropertiesImpl parent) { this.parent = parent; } + @Override public Set> getOperations() { return operations; } + @Override public boolean isRequired() { return required; } @@ -192,6 +195,7 @@ private String formatMessage(String key, String dflt, Object... args) { /** * {@inheritDoc} */ + @Override public boolean isConfidential() { return confidential; } @@ -199,6 +203,7 @@ public boolean isConfidential() { /** * {@inheritDoc} */ + @Override public String getName() { return name; } @@ -206,6 +211,7 @@ public String getName() { /** * {@inheritDoc} */ + @Override public Class getType() { return type; } @@ -213,6 +219,7 @@ public Class getType() { /** * {@inheritDoc} */ + @Override public Object getValue() { return value; } @@ -220,6 +227,7 @@ public Object getValue() { /** * {@inheritDoc} */ + @Override public void setValue(Object value) { this.value = value; } @@ -227,6 +235,7 @@ public void setValue(Object value) { /** * {@inheritDoc} */ + @Override public String getHelpMessage(String def) { return formatMessage(helpMessageKey, def); } @@ -234,6 +243,7 @@ public String getHelpMessage(String def) { /** * {@inheritDoc} */ + @Override public String getDisplayName(String def) { return formatMessage(displayMessageKey, def); } @@ -241,6 +251,7 @@ public String getDisplayName(String def) { /** * {@inheritDoc} */ + @Override public String getGroup(String def) { return formatMessage(groupMessageKey, def); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConnectorMessagesImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConnectorMessagesImpl.java index bcb996bd..0f2bf62a 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConnectorMessagesImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/ConnectorMessagesImpl.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -46,6 +47,7 @@ public class ConnectorMessagesImpl implements ConnectorMessages { public ConnectorMessagesImpl() { } + @Override public String format(String key, String dflt, Object... args) { if (key == null) { return dflt; diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/DelegatingTimeoutProxy.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/DelegatingTimeoutProxy.java index 3b9118f0..3e14ec26 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/DelegatingTimeoutProxy.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/DelegatingTimeoutProxy.java @@ -65,6 +65,7 @@ public DelegatingTimeoutProxy(Object target, long timeoutMillis, int bufferSize) this.bufferSize = bufferSize; } + @Override public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/LoggingProxy.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/LoggingProxy.java index f8d2e221..67a0a1bc 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/LoggingProxy.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/LoggingProxy.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -51,6 +52,7 @@ public LoggingProxy(Class api, Object target) { /** * {@inheritDoc} */ + @Override public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { // do not log equals, hashCode, toString diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/MethodTimeoutProxy.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/MethodTimeoutProxy.java index dd2707d1..e1d8c826 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/MethodTimeoutProxy.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/MethodTimeoutProxy.java @@ -78,6 +78,7 @@ public MethodTimeoutProxy(Object target, long timeoutMillis) { this.timeoutMillis = timeoutMillis; } + @Override public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { @@ -90,6 +91,7 @@ public Object invoke(final Object proxy, final Method method, final Object[] arg Callable callable = new Callable() { + @Override public Object call() throws Exception { try { try { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/StreamHandlerUtil.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/StreamHandlerUtil.java index c825730a..0bf59aaf 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/StreamHandlerUtil.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/StreamHandlerUtil.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api; @@ -41,6 +42,7 @@ public ResultsHandlerAdapter(final ObjectStreamHandler target) { this.target = target; } + @Override public boolean handle(final ConnectorObject obj) { return target.handle(obj); } @@ -56,6 +58,7 @@ public SyncResultsHandlerAdapter(final ObjectStreamHandler target) { this.target = target; } + @Override public boolean handle(final SyncDelta obj) { return target.handle(obj); } @@ -82,6 +85,7 @@ public ObjectStreamHandlerAdapter(Class targetInterface, Object target) { this.target = target; } + @Override public boolean handle(final Object obj) { if (targetInterface == ResultsHandler.class) { return ((ResultsHandler) target).handle((ConnectorObject) obj); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/BundleLibSorter.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/BundleLibSorter.java index 4bedb897..abdfbcb9 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/BundleLibSorter.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/BundleLibSorter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2013 ConnId + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local; @@ -36,6 +37,7 @@ public class BundleLibSorter implements Comparator, Serializable { private static final long serialVersionUID = 1885450684185821535L; + @Override public int compare(final File arg0, final File arg1) { final String name1 = arg0.getName(); final String name2 = arg1.getName(); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ConnectorPoolManager.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ConnectorPoolManager.java index d580a08e..dd30a1af 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ConnectorPoolManager.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ConnectorPoolManager.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local; @@ -94,6 +95,7 @@ public InternalConfigurationChangeHandler(final APIConfigurationImpl apiConfigur this.configuration = configuration; } + @Override public void notifyUpdate() { try { final ConfigurationPropertyChangeListener listener = @@ -131,6 +133,7 @@ public ConnectorPoolHandler(final APIConfigurationImpl apiConfiguration, } } + @Override public ObjectPoolConfiguration validate(ObjectPoolConfiguration original) { ObjectPoolConfiguration configuration = (ObjectPoolConfiguration) SerializerUtil.cloneObject(original); @@ -138,6 +141,7 @@ public ObjectPoolConfiguration validate(ObjectPoolConfiguration original) { return configuration; } + @Override public PoolableConnector makeObject() { // setup classloader for constructor and // initialization of config bean and connector @@ -179,6 +183,7 @@ public PoolableConnector makeObject() { } } + @Override public void testObject(PoolableConnector object) { ThreadClassLoaderManager.getInstance().pushClassLoader( localConnectorInfo.getConnectorClass().getClassLoader()); @@ -189,6 +194,7 @@ public void testObject(PoolableConnector object) { } } + @Override public void disposeObject(PoolableConnector object) { ThreadClassLoaderManager.getInstance().pushClassLoader( localConnectorInfo.getConnectorClass().getClassLoader()); @@ -199,6 +205,7 @@ public void disposeObject(PoolableConnector object) { } } + @Override public void shutdown() { if (null != context) { context.dispose(); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/LocalConnectorFacadeImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/LocalConnectorFacadeImpl.java index 9d9aede6..e660c17e 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/LocalConnectorFacadeImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/LocalConnectorFacadeImpl.java @@ -215,6 +215,7 @@ protected APIOperation getOperationImplementation(final Class c return paths; } + @Override public ConnectorInfo findConnectorInfo(final ConnectorKey key) { for (ConnectorInfo info : connectorInfos) { if (info.getConnectorKey().equals(key)) { @@ -431,6 +433,7 @@ public ConnectorInfo findConnectorInfo(final ConnectorKey key) { return null; } + @Override public List getConnectorInfos() { return Collections.unmodifiableList(connectorInfos); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPool.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPool.java index 9a880eb2..3e14dcab 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPool.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPool.java @@ -100,10 +100,12 @@ public PooledObject(final T object) { touch(); } + @Override public T getPooledObject() { return object; } + @Override public void close() throws IOException { try { returnObject(this); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPoolEntry.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPoolEntry.java index 8c6f30c3..d8aa9c25 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPoolEntry.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPoolEntry.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local; @@ -45,6 +46,7 @@ public interface ObjectPoolEntry extends Closeable { * Release the pooled object and puts back to the pool where is was borrowed * from. */ + @Override public void close() throws IOException; } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/AuthenticationImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/AuthenticationImpl.java index 47c80b8c..f0a33d12 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/AuthenticationImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/AuthenticationImpl.java @@ -50,6 +50,7 @@ public AuthenticationImpl(final ConnectorOperationalContext context, * Delegates to the connector's {@link AuthenticateOp#authenticate} implementation * after validating that the object class, username and password are supplied. */ + @Override public Uid authenticate(final ObjectClass objectClass, final String username, final GuardedString password, OperationOptions options) { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/BatchImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/BatchImpl.java index 026ae46d..744f0e21 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/BatchImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/BatchImpl.java @@ -73,6 +73,7 @@ public BatchImpl(final ConnectorOperationalContext context, final Connector conn /** * {@inheritDoc} */ + @Override public Subscription executeBatch(final List tasks, final Observer observer, final OperationOptions options) { if (tasks == null || tasks.size() == 0) { @@ -113,6 +114,7 @@ public Subscription executeBatch(final List tasks, final Observer observer, final OperationOptions options) { Assertions.nullCheck(batchToken, "batchToken"); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/BatchTaskExecutorImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/BatchTaskExecutorImpl.java index 1cb339b1..33bae872 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/BatchTaskExecutorImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/BatchTaskExecutorImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -44,17 +45,20 @@ public BatchTaskExecutorImpl(Connector connector, ConnectorOperationalContext co this.context = context; } + @Override public Uid execute(CreateBatchTask task) { return new CreateImpl(context, connector).create( task.getObjectClass(), task.getCreateAttributes(), task.getOptions()); } + @Override public BatchEmptyResult execute(DeleteBatchTask task) { new DeleteImpl(context, connector).delete( task.getObjectClass(), task.getUid(), task.getOptions()); return new BatchEmptyResult("Delete of " + task.getObjectClass() + " " + task.getUid() + " successful"); } + @Override public Uid execute(UpdateBatchTask task) { UpdateImpl runner = new UpdateImpl(context, connector); switch (task.getUpdateType()) { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/CaseNormalizer.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/CaseNormalizer.java index 77082bb1..56ea41bf 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/CaseNormalizer.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/CaseNormalizer.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2013-2014 Evolveum + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -36,6 +37,7 @@ */ public class CaseNormalizer implements AttributeNormalizer { + @Override public Attribute normalizeAttribute(ObjectClass oclass, Attribute attribute) { Attribute rv = attribute; boolean converted = false; diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ConnectorAPIOperationRunnerProxy.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ConnectorAPIOperationRunnerProxy.java index ad5ba971..42064c45 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ConnectorAPIOperationRunnerProxy.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ConnectorAPIOperationRunnerProxy.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2015 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -75,6 +76,7 @@ protected APIOperationRunner getApiOperationRunner(final ConnectorOperationalCon return runnerImplConstructor.newInstance(operationalContext, connector); } + @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //do not proxy equals, hashCode, toString @@ -165,6 +167,7 @@ public DeferredSubscriptionDisposer(final Subscription subscription, this.poolEntry = poolEntry; } + @Override public void close() { try { subscription.close(); @@ -175,10 +178,12 @@ public void close() { } } + @Override public boolean isUnsubscribed() { return subscription.isUnsubscribed(); } + @Override public Object getReturnValue() { return subscription.getReturnValue(); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/CreateImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/CreateImpl.java index 5d6a6f80..0eded518 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/CreateImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/CreateImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -54,6 +55,7 @@ public CreateImpl(final ConnectorOperationalContext context, final Connector con * java.util.Set, * org.identityconnectors.framework.common.objects.OperationOptions) */ + @Override public Uid create(final ObjectClass objectClass, final Set createAttributes, OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/DeleteImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/DeleteImpl.java index 0252ab3d..3cbd9f0c 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/DeleteImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/DeleteImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -46,6 +47,7 @@ public DeleteImpl(final ConnectorOperationalContext context, * * @see org.identityconnectors.framework.api.operations.CreateApiOp#create(org.identityconnectors.framework.common.objects.ObjectClass, java.util.Set, org.identityconnectors.framework.common.objects.OperationOptions) */ + @Override public void delete(final ObjectClass objectClass, final Uid uid, OperationOptions options) { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/DuplicateFilteringResultsHandler.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/DuplicateFilteringResultsHandler.java index 473a5c79..20f4874c 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/DuplicateFilteringResultsHandler.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/DuplicateFilteringResultsHandler.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -59,6 +60,7 @@ public DuplicateFilteringResultsHandler(final SearchResultsHandler handler) { this.handler = handler; } + @Override public boolean handle(ConnectorObject object) { String uid = object.getUid().getUidValue(); if (!visitedUIDs.add(uid)) { @@ -70,6 +72,7 @@ public boolean handle(ConnectorObject object) { return stillHandling; } + @Override public void handleResult(final SearchResult result) { handler.handleResult(result); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/FilteredResultsHandler.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/FilteredResultsHandler.java index f2a3b4a4..330c51db 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/FilteredResultsHandler.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/FilteredResultsHandler.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -57,6 +58,7 @@ public FilteredResultsHandler(ResultsHandler handler, Filter filter) { this.filter = filter == null ? new PassThroughFilter() : filter; } + @Override public boolean handle(ConnectorObject object) { if (filter.accept(object)) { return handler.handle(object); @@ -70,10 +72,12 @@ public boolean handle(ConnectorObject object) { */ public static class PassThroughFilter implements Filter { + @Override public boolean accept(ConnectorObject obj) { return true; } + @Override public R accept(FilterVisitor v, P p) { return v.visitExtendedFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/GetImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/GetImpl.java index 8cfabfc3..7ffd0496 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/GetImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/GetImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -56,6 +57,7 @@ public Connector getConnector() { return ((SearchImpl)op).getConnector(); } + @Override public ConnectorObject getObject(ObjectClass objectClass, Uid uid, OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); if (ObjectClass.ALL.equals(objectClass)) { @@ -71,6 +73,7 @@ public ConnectorObject getObject(ObjectClass objectClass, Uid uid, OperationOpti Filter filter = FilterBuilder.equalTo(uid); op.search(objectClass, filter, new ResultsHandler() { + @Override public boolean handle(ConnectorObject obj) { list.add(obj); return false; diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/NormalizingResultsHandler.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/NormalizingResultsHandler.java index 2984d289..adf73d8d 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/NormalizingResultsHandler.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/NormalizingResultsHandler.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -38,6 +39,7 @@ public NormalizingResultsHandler(ResultsHandler target, ObjectNormalizerFacade n this.normalizer = normalizer; } + @Override public boolean handle(ConnectorObject obj) { ConnectorObject normalized = normalizer.normalizeObject(obj); return target.handle(normalized); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/NormalizingSyncResultsHandler.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/NormalizingSyncResultsHandler.java index 99f7a224..cc169e64 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/NormalizingSyncResultsHandler.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/NormalizingSyncResultsHandler.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -42,6 +43,7 @@ public NormalizingSyncResultsHandler(SyncResultsHandler target, this.normalizer = normalizer; } + @Override public boolean handle(SyncDelta delta) { SyncDelta normalized = normalizer.normalizeSyncDelta(delta); return target.handle(normalized); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/OperationalContext.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/OperationalContext.java index 24cef5ed..051d3199 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/OperationalContext.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/OperationalContext.java @@ -124,6 +124,7 @@ public void dispose() { } } + @Override public void notifyUpdate() { try { final ConfigurationPropertyChangeListener listener = diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ResolveUsernameImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ResolveUsernameImpl.java index 858d2f56..4b2bf6b0 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ResolveUsernameImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ResolveUsernameImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -44,6 +45,7 @@ public ResolveUsernameImpl(final ConnectorOperationalContext context, /** * Resolve the username to an Uid. */ + @Override public Uid resolveUsername(final ObjectClass objectClass, final String username, OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SchemaImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SchemaImpl.java index ff357a34..9835b166 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SchemaImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SchemaImpl.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -41,6 +42,7 @@ public SchemaImpl(final ConnectorOperationalContext context, * * @see org.identityconnectors.framework.api.operations.SchemaApiOp#schema() */ + @Override public Schema schema() { return ((SchemaOp)getConnector()).schema(); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ScriptOnConnectorImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ScriptOnConnectorImpl.java index e1d60ee6..27642051 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ScriptOnConnectorImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ScriptOnConnectorImpl.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -46,6 +47,7 @@ public ScriptOnConnectorImpl(final ConnectorOperationalContext context, super(context,connector); } + @Override public Object runScriptOnConnector(ScriptContext request, OperationOptions options) { Assertions.nullCheck(request, "request"); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ScriptOnResourceImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ScriptOnResourceImpl.java index 8152c7bf..4661037d 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ScriptOnResourceImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ScriptOnResourceImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -39,6 +40,7 @@ public ScriptOnResourceImpl(final ConnectorOperationalContext context, final Con super(context, connector); } + @Override public Object runScriptOnResource(ScriptContext request, OperationOptions options) { Assertions.nullCheck(request, "request"); // convert null into empty diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SearchImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SearchImpl.java index d9a76b48..ae3a904f 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SearchImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SearchImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2015 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -63,6 +64,7 @@ public SearchImpl(final ConnectorOperationalContext context, final Connector con * org.identityconnectors.framework.common.objects.ResultsHandler, * org.identityconnectors.framework.common.objects.OperationOptions) */ + @Override public SearchResult search(ObjectClass objectClass, Filter originalFilter, ResultsHandler handler, OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -117,10 +119,12 @@ public SearchResult search(ObjectClass objectClass, Filter originalFilter, final AtomicReference result = new AtomicReference(null); rawSearch(search, objectClass, actualFilter, new SearchResultsHandler() { + @Override public void handleResult(final SearchResult searchResult) { result.set(searchResult); } + @Override public boolean handle(ConnectorObject connectorObject) { return handlerChain.handle(connectorObject); } @@ -201,6 +205,7 @@ public AttributesToGetSearchResultsHandler(final ResultsHandler handler, String[ /** * Handle the object w/ reduced attributes. */ + @Override public boolean handle(ConnectorObject obj) { obj = reduceToAttrsToGet(obj); return handler.handle(obj); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SubscriptionImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SubscriptionImpl.java index 8a8cee55..16da473a 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SubscriptionImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SubscriptionImpl.java @@ -88,16 +88,19 @@ public Subscription subscribe(final ObjectClass objectClass, final Filter eventF operation.subscribe(objectClass, eventFilter, observer, operationOptions); return new Subscription() { + @Override public void close() { if (observer.doRelease()) { subscription.close(); } } + @Override public boolean isUnsubscribed() { return subscription.isUnsubscribed(); } + @Override public Object getReturnValue() { return subscription.getReturnValue(); } @@ -126,16 +129,19 @@ public Subscription subscribe(final ObjectClass objectClass, final SyncToken tok operation.subscribe(objectClass, token, observer, operationOptions); return new Subscription() { + @Override public void close() { if (observer.doRelease()) { subscription.close(); } } + @Override public boolean isUnsubscribed() { return observer.isUnsubscribed() && subscription.isUnsubscribed(); } + @Override public Object getReturnValue() { return subscription.getReturnValue(); } @@ -155,16 +161,19 @@ public Subscription executeBatch(final List tasks, final Observer delegate) { this.delegate = delegate; } + @Override public void onCompleted() { if (doRelease()) { delegate.onCompleted(); } } + @Override public void onError(Throwable e) { if (doRelease()) { delegate.onError(e); } } + @Override public void onNext(final T connectorObject) { try { if (subscribed.get()) { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SyncImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SyncImpl.java index e1f937b1..b725d89d 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SyncImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/SyncImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2015 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -47,6 +48,7 @@ public SyncImpl(final ConnectorOperationalContext context, final Connector conne super(context, connector); } + @Override public SyncToken sync(final ObjectClass objectClass, final SyncToken token, SyncResultsHandler handler, OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -72,10 +74,12 @@ public SyncToken sync(final ObjectClass objectClass, final SyncToken token, // SyncTokenResultsHandler handlerChain = ((SyncOp) getConnector()).sync(objectClass, token, new SyncTokenResultsHandler() { + @Override public void handleResult(SyncToken token) { result.compareAndSet(null, token); } + @Override public boolean handle(final SyncDelta delta) { if (doAll && SyncDeltaType.DELETE.equals(delta.getDeltaType()) && null == delta.getObjectClass()) { @@ -88,6 +92,7 @@ public boolean handle(final SyncDelta delta) { return result.get(); } + @Override public SyncToken getLatestSyncToken(ObjectClass objectClass) { Assertions.nullCheck(objectClass, "objectClass"); return ((SyncOp) getConnector()).getLatestSyncToken(objectClass); @@ -108,6 +113,7 @@ public AttributesToGetSyncResultsHandler(final SyncResultsHandler handler, this.handler = handler; } + @Override public boolean handle(final SyncDelta delta) { SyncDeltaBuilder bld = new SyncDeltaBuilder(delta); if (delta.getObject() != null) { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/TestImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/TestImpl.java index 5f40a703..54f9eb87 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/TestImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/TestImpl.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -43,6 +44,7 @@ public TestImpl(ConnectorOperationalContext context, Connector connector) { /** * {@inheritDoc} */ + @Override public void test() { ((TestOp) getConnector()).test(); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ThreadClassLoaderManagerProxy.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ThreadClassLoaderManagerProxy.java index 00e16afb..8fb38543 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ThreadClassLoaderManagerProxy.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ThreadClassLoaderManagerProxy.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -56,6 +57,7 @@ public ApplicationClassLoaderHandler(final ClassLoader applicationClassLoader, this.target = target; } + @Override public boolean handle(final Object object) { ThreadClassLoaderManager.getInstance().pushClassLoader(applicationClassLoader); try { @@ -73,6 +75,7 @@ public ThreadClassLoaderManagerProxy(final ClassLoader bundleClassLoader, final this.target = target; } + @Override public Object invoke(final Object proxy, final Method method, final Object[] arguments) throws Throwable { final ClassLoader applicationClassLoader = diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/UpdateImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/UpdateImpl.java index 699c1f8f..9b4f6772 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/UpdateImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/UpdateImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -72,6 +73,7 @@ public UpdateImpl(final ConnectorOperationalContext context, final Connector con OPERATIONAL_ATTRIBUTE_NAMES.add(Name.NAME); }; + @Override public Uid update(final ObjectClass objectClass, Uid uid, Set replaceAttributes, OperationOptions options) { // validate all the parameters.. @@ -89,6 +91,7 @@ public Uid update(final ObjectClass objectClass, Uid uid, Set replace return (Uid) normalizer.normalizeAttribute(ret); } + @Override public Uid addAttributeValues(ObjectClass objclass, Uid uid, Set valuesToAdd, OperationOptions options) { // validate all the parameters.. @@ -114,6 +117,7 @@ public Uid addAttributeValues(ObjectClass objclass, Uid uid, Set valu return (Uid) normalizer.normalizeAttribute(ret); } + @Override public Uid removeAttributeValues(ObjectClass objclass, Uid uid, Set valuesToRemove, OperationOptions options) { // validate all the parameters.. diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ValidateImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ValidateImpl.java index 171bb268..bd771aea 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ValidateImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/operations/ValidateImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.local.operations; @@ -35,6 +36,7 @@ public ValidateImpl(final OperationalContext context) { /** * {@inheritDoc} */ + @Override public void validate() { getOperationalContext().getConfiguration().validate(); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteConnectorInfoManagerImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteConnectorInfoManagerImpl.java index 1518139d..d50ff0c0 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteConnectorInfoManagerImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteConnectorInfoManagerImpl.java @@ -169,6 +169,7 @@ public RemoteConnectorInfoManagerImpl derive(RemoteFrameworkConnectionInfo info) return rv; } + @Override public ConnectorInfo findConnectorInfo(ConnectorKey key) { for (ConnectorInfo info : getConnectorInfos()) { if (info.getConnectorKey().equals(key)) { @@ -178,6 +179,7 @@ public ConnectorInfo findConnectorInfo(ConnectorKey key) { return null; } + @Override public List getConnectorInfos() { List result = connectorInfoList; if (null == result) { @@ -189,6 +191,7 @@ public List getConnectorInfos() { /** * {@inheritDoc} */ + @Override public void run() { try { Map serverInfo = getServerInfo(); @@ -225,6 +228,7 @@ public void run() { /** * {@inheritDoc} */ + @Override public void addConnectorEventHandler(ConnectorEventHandler hook) { if (hook == null) { throw new NullPointerException(); @@ -243,6 +247,7 @@ public void addConnectorEventHandler(ConnectorEventHandler hook) { /** * {@inheritDoc} */ + @Override public void deleteConnectorEventHandler(ConnectorEventHandler hook) { eventHandlers.removeElement(hook); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteFrameworkConnection.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteFrameworkConnection.java index e19c570d..3f1f57a2 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteFrameworkConnection.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteFrameworkConnection.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.remote; @@ -122,6 +123,7 @@ private void init(Socket socket) throws Exception { decoder = factory.newBinaryDeserializer(inputStream); } + @Override public void close() { flush(); try { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteOperationInvocationHandler.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteOperationInvocationHandler.java index 1bd90c2e..3d55cf4b 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteOperationInvocationHandler.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteOperationInvocationHandler.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.api.remote; @@ -57,6 +58,7 @@ public RemoteOperationInvocationHandler(final RemoteConnectorInfoImpl connectorI this.operation = operation; } + @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // don't proxy toString, hashCode, or equals if (method.getDeclaringClass() == Object.class) { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/APIConfigurationHandlers.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/APIConfigurationHandlers.java index 59e938a2..106afa79 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/APIConfigurationHandlers.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/APIConfigurationHandlers.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer; @@ -50,6 +51,7 @@ class APIConfigurationHandlers { HANDLERS.add(new AbstractObjectSerializationHandler(ObjectPoolConfiguration.class, "ObjectPoolConfiguration") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ObjectPoolConfiguration rv = new ObjectPoolConfiguration(); rv.setMaxObjects(decoder.readIntField("maxObjects", rv.getMaxObjects())); @@ -61,6 +63,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { ObjectPoolConfiguration val = (ObjectPoolConfiguration) object; encoder.writeIntField("maxObjects", val.getMaxObjects()); @@ -76,6 +79,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ResultsHandlerConfiguration.class, "ResultsHandlerConfiguration") { + @Override public Object deserialize(final ObjectDecoder decoder) { ResultsHandlerConfiguration rv = new ResultsHandlerConfiguration(); rv.setEnableNormalizingResultsHandler(decoder.readBooleanField( @@ -90,6 +94,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { ResultsHandlerConfiguration val = (ResultsHandlerConfiguration) object; encoder.writeBooleanField("enableNormalizingResultsHandler", val @@ -106,6 +111,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ConfigurationPropertyImpl.class, "ConfigurationProperty") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ConfigurationPropertyImpl rv = new ConfigurationPropertyImpl(); @@ -125,6 +131,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ConfigurationPropertyImpl val = (ConfigurationPropertyImpl) object; encoder.writeIntField("order", val.getOrder()); @@ -143,6 +150,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ConfigurationPropertiesImpl.class, "ConfigurationProperties") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ConfigurationPropertiesImpl rv = new ConfigurationPropertiesImpl(); final List props = @@ -155,6 +163,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ConfigurationPropertiesImpl val = (ConfigurationPropertiesImpl) object; for (ConfigurationPropertyImpl prop : val.getProperties()) { @@ -166,6 +175,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(APIConfigurationImpl.class, "APIConfiguration") { + @Override public Object deserialize(final ObjectDecoder decoder) { final APIConfigurationImpl rv = new APIConfigurationImpl(); rv.setConnectorPoolingSupported(decoder.readBooleanField( @@ -189,6 +199,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final APIConfigurationImpl val = (APIConfigurationImpl) object; encoder.writeIntField("producerBufferSize", val.getProducerBufferSize()); @@ -208,6 +219,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ConnectorMessagesImpl.class, "ConnectorMessages") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ConnectorMessagesImpl rv = new ConnectorMessagesImpl(); @SuppressWarnings("unchecked") @@ -217,6 +229,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ConnectorMessagesImpl val = (ConnectorMessagesImpl) object; encoder.writeObjectField("catalogs", val.getCatalogs(), false); @@ -225,6 +238,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ConnectorKey.class, "ConnectorKey") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String bundleName = decoder.readStringField("bundleName", null); final String bundleVersion = decoder.readStringField("bundleVersion", null); @@ -232,6 +246,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new ConnectorKey(bundleName, bundleVersion, connectorName); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ConnectorKey val = (ConnectorKey) object; encoder.writeStringField("bundleName", val.getBundleName()); @@ -243,6 +258,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(RemoteConnectorInfoImpl.class, "ConnectorInfo") { + @Override public Object deserialize(final ObjectDecoder decoder) { RemoteConnectorInfoImpl rv = new RemoteConnectorInfoImpl(); rv.setConnectorDisplayNameKey(decoder.readStringField("connectorDisplayNameKey", @@ -257,6 +273,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final RemoteConnectorInfoImpl val = (RemoteConnectorInfoImpl) object; encoder.writeStringField("connectorDisplayNameKey", val diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/CommonObjectHandlers.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/CommonObjectHandlers.java index 252f037a..2d7b1fcf 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/CommonObjectHandlers.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/CommonObjectHandlers.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer; @@ -95,6 +96,7 @@ protected AttributeHandler(final Class clazz, final String typeName) { super(clazz, typeName); } + @Override public final Object deserialize(final ObjectDecoder decoder) { final String name = decoder.readStringField("name", null); @SuppressWarnings("unchecked") @@ -102,6 +104,7 @@ public final Object deserialize(final ObjectDecoder decoder) { return createAttribute(name, value); } + @Override public final void serialize(final Object object, final ObjectEncoder encoder) { final Attribute val = (Attribute) object; encoder.writeStringField("name", val.getName()); @@ -118,11 +121,13 @@ protected ThrowableHandler(final Class clazz, final String typeName) { super(clazz, typeName); } + @Override public Object deserialize(final ObjectDecoder decoder) { final String message = decoder.readStringField("message", null); return createException(message); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Throwable val = (Throwable) object; encoder.writeStringField("message", val.getMessage()); @@ -150,6 +155,7 @@ protected AlreadyExistsException createException(final String message) { HANDLERS.add(new ThrowableHandler(ConfigurationException.class, "ConfigurationException") { + @Override protected ConfigurationException createException(final String message) { return new ConfigurationException(message); } @@ -158,6 +164,7 @@ protected ConfigurationException createException(final String message) { HANDLERS.add(new ThrowableHandler( ConnectionBrokenException.class, "ConnectionBrokenException") { + @Override protected ConnectionBrokenException createException(final String message) { return new ConnectionBrokenException(message); } @@ -166,6 +173,7 @@ protected ConnectionBrokenException createException(final String message) { HANDLERS.add(new ThrowableHandler( ConnectionFailedException.class, "ConnectionFailedException") { + @Override protected ConnectionFailedException createException(final String message) { return new ConnectionFailedException(message); } @@ -174,6 +182,7 @@ protected ConnectionFailedException createException(final String message) { HANDLERS.add(new ThrowableHandler(ConnectorIOException.class, "ConnectorIOException") { + @Override protected ConnectorIOException createException(final String message) { return new ConnectorIOException(message); } @@ -206,6 +215,7 @@ protected PasswordExpiredException createException(final String message) { HANDLERS.add(new ThrowableHandler(InvalidPasswordException.class, "InvalidPasswordException") { + @Override protected InvalidPasswordException createException(final String message) { return new InvalidPasswordException(message); } @@ -214,6 +224,7 @@ protected InvalidPasswordException createException(final String message) { HANDLERS.add(new ThrowableHandler(UnknownUidException.class, "UnknownUidException") { + @Override protected UnknownUidException createException(final String message) { return new UnknownUidException(message); } @@ -222,6 +233,7 @@ protected UnknownUidException createException(final String message) { HANDLERS.add(new ThrowableHandler( InvalidCredentialException.class, "InvalidCredentialException") { + @Override protected InvalidCredentialException createException(final String message) { return new InvalidCredentialException(message); } @@ -230,6 +242,7 @@ protected InvalidCredentialException createException(final String message) { HANDLERS.add(new ThrowableHandler( PermissionDeniedException.class, "PermissionDeniedException") { + @Override protected PermissionDeniedException createException(final String message) { return new PermissionDeniedException(message); } @@ -238,6 +251,7 @@ protected PermissionDeniedException createException(final String message) { HANDLERS.add(new ThrowableHandler( ConnectorSecurityException.class, "ConnectorSecurityException") { + @Override protected ConnectorSecurityException createException(final String message) { return new ConnectorSecurityException(message); } @@ -246,6 +260,7 @@ protected ConnectorSecurityException createException(final String message) { HANDLERS.add(new ThrowableHandler( OperationTimeoutException.class, "OperationTimeoutException") { + @Override protected OperationTimeoutException createException(final String message) { return new OperationTimeoutException(message); } @@ -254,6 +269,7 @@ protected OperationTimeoutException createException(final String message) { HANDLERS.add(new ThrowableHandler( InvalidAttributeValueException.class, "InvalidAttributeValueException") { + @Override protected InvalidAttributeValueException createException(final String message) { return new InvalidAttributeValueException(message); } @@ -262,6 +278,7 @@ protected InvalidAttributeValueException createException(final String message) { HANDLERS.add(new ThrowableHandler( PreconditionFailedException.class, "PreconditionFailedException") { + @Override protected PreconditionFailedException createException(final String message) { return new PreconditionFailedException(message); } @@ -270,6 +287,7 @@ protected PreconditionFailedException createException(final String message) { HANDLERS.add(new ThrowableHandler( PreconditionRequiredException.class, "PreconditionRequiredException") { + @Override protected PreconditionRequiredException createException(final String message) { return new PreconditionRequiredException(message); } @@ -278,6 +296,7 @@ protected PreconditionRequiredException createException(final String message) { HANDLERS.add(new ThrowableHandler(RetryableException.class, "RetryableException") { + @Override protected RetryableException createException(final String message) { return RetryableException.wrap(message, (Throwable) null); } @@ -286,6 +305,7 @@ protected RetryableException createException(final String message) { HANDLERS.add(new AbstractObjectSerializationHandler(RemoteWrappedException.class, "RemoteWrappedException") { + @Override public Object deserialize(final ObjectDecoder decoder) { String throwableClass = decoder.readStringField(RemoteWrappedException.FIELD_CLASS, @@ -301,6 +321,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new RemoteWrappedException(throwableClass, message, cause, stackTrace); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final RemoteWrappedException val = (RemoteWrappedException) object; encoder.writeStringField(RemoteWrappedException.FIELD_CLASS, val @@ -315,6 +336,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new ThrowableHandler(ConnectorException.class, "ConnectorException") { + @Override protected ConnectorException createException(final String message) { return new ConnectorException(message); } @@ -323,6 +345,7 @@ protected ConnectorException createException(final String message) { HANDLERS.add(new ThrowableHandler(IllegalArgumentException.class, "IllegalArgumentException") { + @Override protected IllegalArgumentException createException(final String message) { return new IllegalArgumentException(message); } @@ -331,6 +354,7 @@ protected IllegalArgumentException createException(final String message) { HANDLERS.add(new ThrowableHandler(RuntimeException.class, "RuntimeException") { + @Override protected RuntimeException createException(final String message) { return new RuntimeException(message); } @@ -338,6 +362,7 @@ protected RuntimeException createException(final String message) { HANDLERS.add(new ThrowableHandler(Exception.class, "Exception") { + @Override protected Exception createException(final String message) { return new Exception(message); } @@ -345,6 +370,7 @@ protected Exception createException(final String message) { HANDLERS.add(new ThrowableHandler(Throwable.class, "Throwable") { + @Override protected Throwable createException(final String message) { return new RuntimeException(message); } @@ -352,6 +378,7 @@ protected Throwable createException(final String message) { HANDLERS.add(new AttributeHandler(Attribute.class, "Attribute") { + @Override protected Attribute createAttribute(final String name, final List value) { return AttributeBuilder.build(name, value); } @@ -361,6 +388,7 @@ protected Attribute createAttribute(final String name, final List value) HANDLERS.add(new AbstractObjectSerializationHandler(AttributeInfo.class, "AttributeInfo") { + @Override public Object deserialize(final ObjectDecoder decoder) { final AttributeInfoBuilder builder = new AttributeInfoBuilder(decoder.readStringField("name", null), decoder @@ -377,6 +405,7 @@ public Object deserialize(final ObjectDecoder decoder) { return builder.build(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final AttributeInfo val = (AttributeInfo) object; encoder.writeStringField("name", val.getName()); @@ -391,6 +420,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ConnectorObject.class, "ConnectorObject") { + @Override public Object deserialize(ObjectDecoder decoder) { final ObjectClass objectClass = (ObjectClass) decoder.readObjectField("ObjectClass", ObjectClass.class, @@ -401,6 +431,7 @@ public Object deserialize(ObjectDecoder decoder) { return new ConnectorObject(objectClass, atts); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ConnectorObject val = (ConnectorObject) object; encoder.writeObjectField("ObjectClass", val.getObjectClass(), true); @@ -410,11 +441,13 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Name.class, "Name") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String val = decoder.readStringContents(); return new Name(val); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Name val = (Name) object; encoder.writeStringContents(val.getNameValue()); @@ -423,11 +456,13 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ObjectClass.class, "ObjectClass") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String type = decoder.readStringField("type", null); return new ObjectClass(type); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ObjectClass val = (ObjectClass) object; encoder.writeStringField("type", val.getObjectClassValue()); @@ -437,6 +472,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ObjectClassInfo.class, "ObjectClassInfo") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String type = decoder.readStringField("type", null); final boolean container = decoder.readBooleanField("container", false); @@ -448,6 +484,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new ObjectClassInfo(type, attrInfo, container); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ObjectClassInfo val = (ObjectClassInfo) object; @@ -459,6 +496,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Schema.class, "Schema") { + @Override public Object deserialize(final ObjectDecoder decoder) { @SuppressWarnings("unchecked") final Set objectClasses = @@ -515,6 +553,7 @@ public Object deserialize(final ObjectDecoder decoder) { optionsByOperation); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Schema val = (Schema) object; encoder.writeObjectField("ObjectClassInfos", val.getObjectClassInfo(), true); @@ -553,6 +592,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { }); HANDLERS.add(new AbstractObjectSerializationHandler(Uid.class, "Uid") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String val = decoder.readStringField("uid", null); final String revision = decoder.readStringField("revision", null); @@ -563,6 +603,7 @@ public Object deserialize(final ObjectDecoder decoder) { } } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Uid val = (Uid) object; encoder.writeStringField("uid", val.getUidValue()); @@ -572,6 +613,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Script.class, "Script") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ScriptBuilder builder = new ScriptBuilder(); builder.setScriptLanguage(decoder.readStringField("scriptLanguage", null)); @@ -581,6 +623,7 @@ public Object deserialize(final ObjectDecoder decoder) { return builder.build(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Script val = (Script) object; encoder.writeStringField("scriptLanguage", val.getScriptLanguage()); @@ -590,6 +633,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(ScriptContext.class, "ScriptContext") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String scriptLanguage = decoder.readStringField("scriptLanguage", null); @SuppressWarnings("unchecked") @@ -602,6 +646,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new ScriptContext(scriptLanguage, scriptText, arguments); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ScriptContext val = (ScriptContext) object; encoder.writeStringField("scriptLanguage", val.getScriptLanguage()); @@ -614,6 +659,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { new AbstractObjectSerializationHandler(OperationOptions.class, "OperationOptions") { + @Override public Object deserialize(final ObjectDecoder decoder) { @SuppressWarnings("unchecked") final Map options = @@ -621,6 +667,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new OperationOptions(options); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final OperationOptions val = (OperationOptions) object; encoder.writeObjectField("options", val.getOptions(), false); @@ -633,6 +680,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { new AbstractObjectSerializationHandler(SearchResult.class, "SearchResult") { + @Override public Object deserialize(final ObjectDecoder decoder) { String pagedResultsCookie = decoder.readStringField("pagedResultsCookie", null); int totalPagedResults = decoder.readIntField("totalPagedResults", -1); @@ -644,6 +692,7 @@ public Object deserialize(final ObjectDecoder decoder) { remainingPagedResults); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final SearchResult val = (SearchResult) object; encoder.writeStringField("pagedResultsCookie", val.getPagedResultsCookie()); @@ -657,11 +706,13 @@ public void serialize(final Object object, final ObjectEncoder encoder) { new AbstractObjectSerializationHandler(SortKey.class, "SortKey") { + @Override public Object deserialize(final ObjectDecoder decoder) { return new SortKey(decoder.readStringField("field", null), decoder .readBooleanField("isAscending", true)); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final SortKey val = (SortKey) object; encoder.writeStringField("field", val.getField()); @@ -672,12 +723,14 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(OperationOptionInfo.class, "OperationOptionInfo") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String name = decoder.readStringField("name", null); Class type = decoder.readClassField("type", Class.class); return new OperationOptionInfo(name, type); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final OperationOptionInfo val = (OperationOptionInfo) object; encoder.writeStringField("name", val.getName()); @@ -689,11 +742,13 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(SyncToken.class, "SyncToken") { + @Override public Object deserialize(final ObjectDecoder decoder) { final Object value = decoder.readObjectField("value", null, null); return new SyncToken(value); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final SyncToken val = (SyncToken) object; encoder.writeObjectField("value", val.getValue(), false); @@ -702,6 +757,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(SyncDelta.class, "SyncDelta") { + @Override public Object deserialize(final ObjectDecoder decoder) { final SyncDeltaBuilder builder = new SyncDeltaBuilder(); builder.setDeltaType((SyncDeltaType) decoder.readObjectField("SyncDeltaType", @@ -717,6 +773,7 @@ public Object deserialize(final ObjectDecoder decoder) { return builder.build(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final SyncDelta val = (SyncDelta) object; encoder.writeObjectField("SyncDeltaType", val.getDeltaType(), true); @@ -730,6 +787,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(QualifiedUid.class, "QualifiedUid") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ObjectClass objectClass = (ObjectClass) decoder.readObjectField("ObjectClass", ObjectClass.class, @@ -738,6 +796,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new QualifiedUid(objectClass, uid); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final QualifiedUid val = (QualifiedUid) object; encoder.writeObjectField("ObjectClass", val.getObjectClass(), true); @@ -746,6 +805,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { }); HANDLERS.add(new AbstractObjectSerializationHandler(CreateBatchTask.class, "CreateBatchTask") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ObjectClass objectClass = (ObjectClass) decoder.readObjectField("ObjectClass", ObjectClass.class, null); @@ -756,6 +816,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new CreateBatchTask(objectClass, attributes, options); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final CreateBatchTask val = (CreateBatchTask) object; encoder.writeObjectField("ObjectClass", val.getObjectClass(), true); @@ -765,6 +826,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { }); HANDLERS.add(new AbstractObjectSerializationHandler(DeleteBatchTask.class, "DeleteBatchTask") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ObjectClass objectClass = (ObjectClass) decoder.readObjectField("ObjectClass", ObjectClass.class, null); @@ -774,6 +836,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new DeleteBatchTask(objectClass, uid, options); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final DeleteBatchTask val = (DeleteBatchTask) object; encoder.writeObjectField("ObjectClass", val.getObjectClass(), true); @@ -783,6 +846,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { }); HANDLERS.add(new AbstractObjectSerializationHandler(UpdateBatchTask.class, "UpdateBatchTask") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ObjectClass objectClass = (ObjectClass) decoder.readObjectField("ObjectClass", ObjectClass.class, null); @@ -795,6 +859,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new UpdateBatchTask(objectClass, uid, attributes, options, type); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final UpdateBatchTask val = (UpdateBatchTask) object; encoder.writeObjectField("ObjectClass", val.getObjectClass(), true); @@ -806,16 +871,19 @@ public void serialize(final Object object, final ObjectEncoder encoder) { }); HANDLERS.add(new AbstractObjectSerializationHandler(BatchEmptyResult.class, "BatchEmptyResult") { + @Override public void serialize(Object object, ObjectEncoder encoder) { encoder.writeStringField("Message", ((BatchEmptyResult) object).getMessage()); } + @Override public Object deserialize(ObjectDecoder decoder) { return new BatchEmptyResult(decoder.readStringField("Message", null)); } }); HANDLERS.add(new AbstractObjectSerializationHandler(BatchToken.class, "BatchToken") { + @Override public void serialize(Object object, ObjectEncoder encoder) { encoder.writeObjectField("token", ((BatchToken)object).getTokens(), true); encoder.writeBooleanField("queryRequired", ((BatchToken)object).isQueryRequired()); @@ -823,6 +891,7 @@ public void serialize(Object object, ObjectEncoder encoder) { encoder.writeBooleanField("returnsResults", ((BatchToken)object).returnsResults()); } + @Override public Object deserialize(ObjectDecoder decoder) { BatchToken tokens = new BatchToken(); @SuppressWarnings("unchecked") @@ -838,6 +907,7 @@ public Object deserialize(ObjectDecoder decoder) { }); HANDLERS.add(new AbstractObjectSerializationHandler(BatchResult.class, "BatchResult") { + @Override public void serialize(Object object, ObjectEncoder encoder) { BatchResult result = (BatchResult) object; encoder.writeClassField("ResultClass", result.getResult().getClass()); @@ -848,6 +918,7 @@ public void serialize(Object object, ObjectEncoder encoder) { encoder.writeBooleanField("Error", result.getError()); } + @Override public Object deserialize(ObjectDecoder decoder) { Class resultClass = decoder.readClassField("ResultClass", null); return new BatchResult( diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/EnumSerializationHandler.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/EnumSerializationHandler.java index 8f93370f..e8aef45e 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/EnumSerializationHandler.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/EnumSerializationHandler.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer; @@ -29,6 +30,7 @@ public EnumSerializationHandler(Class> clazz, String name) { } @SuppressWarnings("rawtypes") + @Override public Object deserialize(final ObjectDecoder decoder) { String val = decoder.readStringField("value", null); Class enumClass = (Class) getHandledObjectType(); @@ -37,6 +39,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { Enum e = (Enum) object; encoder.writeStringField("value", e.name()); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/FilterHandlers.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/FilterHandlers.java index 085ca164..6cb66339 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/FilterHandlers.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/FilterHandlers.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer; @@ -58,12 +59,14 @@ protected CompositeFilterHandler(final Class clazz, final String typeName) { super(clazz, typeName); } + @Override public final Object deserialize(final ObjectDecoder decoder) { final Filter left = (Filter) decoder.readObjectContents(0); final Filter right = (Filter) decoder.readObjectContents(1); return createFilter(left, right); } + @Override public final void serialize(final Object object, final ObjectEncoder encoder) { final CompositeFilter val = (CompositeFilter) object; encoder.writeObjectContents(val.getLeft()); @@ -80,12 +83,14 @@ protected AttributeFilterHandler(final Class clazz, final String typeName) { super(clazz, typeName); } + @Override public final Object deserialize(final ObjectDecoder decoder) { final Attribute attribute = (Attribute) decoder.readObjectField("attribute", null, null); return createFilter(attribute); } + @Override public final void serialize(final Object object, final ObjectEncoder encoder) { final AttributeFilter val = (AttributeFilter) object; encoder.writeObjectField("attribute", val.getAttribute(), false); @@ -131,6 +136,7 @@ protected EqualsFilter createFilter(final Attribute attribute) { HANDLERS.add(new AbstractObjectSerializationHandler(ExtendedMatchFilter.class, "ExtendedMatchFilter") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String operator = decoder.readStringField("operator", null); final Attribute attribute = @@ -138,6 +144,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new ExtendedMatchFilter(operator, attribute); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final ExtendedMatchFilter val = (ExtendedMatchFilter) object; encoder.writeStringField("operator", val.getOperator()); @@ -183,11 +190,13 @@ protected LessThanOrEqualFilter createFilter(final Attribute attribute) { HANDLERS.add(new AbstractObjectSerializationHandler(NotFilter.class, "NotFilter") { + @Override public Object deserialize(final ObjectDecoder decoder) { final Filter filter = (Filter) decoder.readObjectContents(0); return new NotFilter(filter); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final NotFilter val = (NotFilter) object; encoder.writeObjectContents(val.getFilter()); @@ -204,11 +213,13 @@ protected OrFilter createFilter(final Filter left, final Filter right) { HANDLERS.add(new AbstractObjectSerializationHandler(PresenceFilter.class, "PresenceFilter") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String name = decoder.readStringField("name", null); return new PresenceFilter(name); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final PresenceFilter val = (PresenceFilter) object; encoder.writeStringField("name", val.getName()); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/MessageHandlers.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/MessageHandlers.java index 93f2e729..a62ffbbd 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/MessageHandlers.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/MessageHandlers.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer; @@ -52,11 +53,13 @@ class MessageHandlers { HANDLERS.add(new AbstractObjectSerializationHandler(HelloRequest.class, "HelloRequest") { + @Override public Object deserialize(final ObjectDecoder decoder) { return new HelloRequest(decoder.readIntField("infoLevel", HelloRequest.CONNECTOR_INFO)); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { HelloRequest val = (HelloRequest) object; encoder.writeIntField("infoLevel", val.getInfoLevel()); @@ -65,6 +68,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(HelloResponse.class, "HelloResponse") { + @Override public Object deserialize(final ObjectDecoder decoder) { final Throwable exception = (Throwable) decoder.readObjectField("exception", null, null); @@ -81,6 +85,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new HelloResponse(exception, serverInfo, connectorKeys, connectorInfos); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final HelloResponse val = (HelloResponse) object; encoder.writeObjectField("exception", val.getException(), false); @@ -93,6 +98,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(OperationRequest.class, "OperationRequest") { + @Override public Object deserialize(final ObjectDecoder decoder) { final ConnectorKey connectorKey = (ConnectorKey) decoder.readObjectField("ConnectorKey", ConnectorKey.class, @@ -111,6 +117,7 @@ public Object deserialize(final ObjectDecoder decoder) { operationMethodName, arguments); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { OperationRequest val = (OperationRequest) object; encoder.writeClassField("operation", val.getOperation()); @@ -124,10 +131,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(OperationResponseEnd.class, "OperationResponseEnd") { + @Override public Object deserialize(final ObjectDecoder decoder) { return new OperationResponseEnd(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { } }); @@ -135,6 +144,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(OperationResponsePart.class, "OperationResponsePart") { + @Override public Object deserialize(final ObjectDecoder decoder) { final Throwable exception = (Throwable) decoder.readObjectField("exception", null, null); @@ -143,6 +153,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new OperationResponsePart(exception, result); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final OperationResponsePart val = (OperationResponsePart) object; encoder.writeObjectField("exception", val.getException(), false); @@ -153,10 +164,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(OperationRequestMoreData.class, "OperationRequestMoreData") { + @Override public Object deserialize(final ObjectDecoder decoder) { return new OperationRequestMoreData(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { } }); @@ -164,10 +177,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(OperationRequestStopData.class, "OperationRequestStopData") { + @Override public Object deserialize(final ObjectDecoder decoder) { return new OperationRequestStopData(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { } }); @@ -175,21 +190,25 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(OperationResponsePause.class, "OperationResponsePause") { + @Override public Object deserialize(final ObjectDecoder decoder) { return new OperationResponsePause(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { } }); HANDLERS.add(new AbstractObjectSerializationHandler(EchoMessage.class, "EchoMessage") { + @Override public Object deserialize(final ObjectDecoder decoder) { return new EchoMessage(decoder.readObjectField("value", null, null), (String) decoder.readObjectField("objectXml", String.class, null)); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final EchoMessage val = (EchoMessage) object; encoder.writeObjectField("value", val.getObject(), false); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/ObjectTypeMapperImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/ObjectTypeMapperImpl.java index aaf91fdb..f9c24bb4 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/ObjectTypeMapperImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/ObjectTypeMapperImpl.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer; @@ -32,14 +33,17 @@ public ObjectTypeMapperImpl(final Class handledClass, final String handledTyp this.handledType = handledType; } + @Override public final Class getHandledObjectType() { return handledClass; } + @Override public final String getHandledSerialType() { return handledType; } + @Override public boolean isMatchSubclasses() { return false; } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/Primitives.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/Primitives.java index 7c4baa34..1e350b7c 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/Primitives.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/Primitives.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer; @@ -53,10 +54,12 @@ class Primitives { HANDLERS.add(new AbstractObjectSerializationHandler(Boolean.class, "Boolean") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readBooleanContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final boolean val = (Boolean) object; encoder.writeBooleanContents(val); @@ -65,10 +68,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(boolean.class, "boolean") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readBooleanContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final boolean val = (Boolean) object; encoder.writeBooleanContents(val); @@ -77,11 +82,13 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Character.class, "Character") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String val = decoder.readStringContents(); return val.charAt(0); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Character val = (Character) object; encoder.writeStringContents(String.valueOf(val)); @@ -90,11 +97,13 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(char.class, "char") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String val = decoder.readStringContents(); return val.charAt(0); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Character val = (Character) object; encoder.writeStringContents(String.valueOf(val)); @@ -103,10 +112,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Integer.class, "Integer") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readIntContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final int val = (Integer) object; encoder.writeIntContents(val); @@ -115,10 +126,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(int.class, "int") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readIntContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final int val = (Integer) object; encoder.writeIntContents(val); @@ -127,10 +140,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Long.class, "Long") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readLongContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final long val = (Long) object; encoder.writeLongContents(val); @@ -139,10 +154,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(long.class, "long") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readLongContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final long val = (Long) object; encoder.writeLongContents(val); @@ -151,10 +168,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Float.class, "Float") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readFloatContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final float val = (Float) object; encoder.writeFloatContents(val); @@ -163,10 +182,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(float.class, "float") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readFloatContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final float val = (Float) object; encoder.writeFloatContents(val); @@ -175,10 +196,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Double.class, "Double") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readDoubleContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final double val = (Double) object; encoder.writeDoubleContents(val); @@ -187,10 +210,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(double.class, "double") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readDoubleContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final double val = (Double) object; encoder.writeDoubleContents(val); @@ -199,10 +224,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(String.class, "String") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readStringContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final String val = (String) object; encoder.writeStringContents(val); @@ -211,6 +238,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(URI.class, "URI") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String val = decoder.readStringContents(); try { @@ -220,6 +248,7 @@ public Object deserialize(final ObjectDecoder decoder) { } } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final URI val = (URI) object; encoder.writeStringContents(val.toString()); @@ -228,11 +257,13 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(File.class, "File") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String val = decoder.readStringContents(); return new File(val); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final File val = (File) object; encoder.writeStringContents(val.getPath()); @@ -241,6 +272,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(BigDecimal.class, "BigDecimal") { + @Override public Object deserialize(final ObjectDecoder decoder) { final BigInteger unscaled = new BigInteger(decoder.readStringField("unscaled", null)); @@ -248,6 +280,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new BigDecimal(unscaled, scale); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final BigDecimal val = (BigDecimal) object; encoder.writeStringField("unscaled", val.unscaledValue().toString()); @@ -257,11 +290,13 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(BigInteger.class, "BigInteger") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String val = decoder.readStringContents(); return new BigInteger(val); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final BigInteger val = (BigInteger) object; encoder.writeStringContents(val.toString()); @@ -270,10 +305,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Byte.class, "Byte") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readByteContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { byte val = (Byte) object; encoder.writeByteContents(val); @@ -282,10 +319,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(byte.class, "byte") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readByteContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { byte val = (Byte) object; encoder.writeByteContents(val); @@ -294,10 +333,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(byte[].class, "ByteArray") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readByteArrayContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final byte[] val = (byte[]) object; encoder.writeByteArrayContents(val); @@ -306,10 +347,12 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Class.class, "Class") { + @Override public Object deserialize(final ObjectDecoder decoder) { return decoder.readClassContents(); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Class val = (Class) object; encoder.writeClassContents(val); @@ -328,12 +371,14 @@ public MapEntry(Object key, Object value) { HANDLERS.add(new AbstractObjectSerializationHandler(MapEntry.class, "MapEntry") { + @Override public Object deserialize(final ObjectDecoder decoder) { final Object key = decoder.readObjectContents(0); final Object value = decoder.readObjectContents(1); return new MapEntry(key, value); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final MapEntry entry = (MapEntry) object; encoder.writeObjectContents(entry.key); @@ -343,6 +388,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(Map.class, "Map") { + @Override public Object deserialize(final ObjectDecoder decoder) { final boolean caseInsensitive = decoder.readBooleanField("caseInsensitive", false); if (caseInsensitive) { @@ -365,6 +411,7 @@ public Object deserialize(final ObjectDecoder decoder) { } } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Map map = (Map) object; // special case - for case insensitive maps @@ -390,6 +437,7 @@ public boolean isMatchSubclasses() { HANDLERS.add(new AbstractObjectSerializationHandler(List.class, "List") { + @Override public Object deserialize(final ObjectDecoder decoder) { final List rv = new ArrayList(); final int count = decoder.getNumSubObjects(); @@ -399,6 +447,7 @@ public Object deserialize(final ObjectDecoder decoder) { return rv; } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final List list = (List) object; for (Object obj : list) { @@ -414,6 +463,7 @@ public boolean isMatchSubclasses() { HANDLERS.add(new AbstractObjectSerializationHandler(Set.class, "Set") { + @Override public Object deserialize(final ObjectDecoder decoder) { final boolean caseInsensitive = decoder.readBooleanField("caseInsensitive", false); if (caseInsensitive) { @@ -433,6 +483,7 @@ public Object deserialize(final ObjectDecoder decoder) { } } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Set set = (Set) object; // special case - for case insensitive sets @@ -457,6 +508,7 @@ public boolean isMatchSubclasses() { HANDLERS.add(new AbstractObjectSerializationHandler(Locale.class, "Locale") { + @Override public Object deserialize(final ObjectDecoder decoder) { final String language = decoder.readStringField("language", ""); final String country = decoder.readStringField("country", ""); @@ -464,6 +516,7 @@ public Object deserialize(final ObjectDecoder decoder) { return new Locale(language, country, variant); } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final Locale locale = (Locale) object; encoder.writeStringField("language", locale.getLanguage()); @@ -474,6 +527,7 @@ public void serialize(final Object object, final ObjectEncoder encoder) { HANDLERS.add(new AbstractObjectSerializationHandler(GuardedString.class, "GuardedString") { + @Override public Object deserialize(final ObjectDecoder decoder) { byte[] encryptedBytes = null; byte[] clearBytes = null; @@ -492,10 +546,12 @@ public Object deserialize(final ObjectDecoder decoder) { } } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final GuardedString val = (GuardedString) object; val.access(new GuardedString.Accessor() { + @Override public void access(final char[] clearChars) { byte[] encryptedBytes = null; byte[] clearBytes = null; @@ -517,6 +573,7 @@ public void access(final char[] clearChars) { HANDLERS.add(new AbstractObjectSerializationHandler(GuardedByteArray.class, "GuardedByteArray") { + @Override public Object deserialize(final ObjectDecoder decoder) { byte[] encryptedBytes = null; byte[] clearBytes = null; @@ -532,9 +589,11 @@ public Object deserialize(final ObjectDecoder decoder) { } } + @Override public void serialize(final Object object, final ObjectEncoder encoder) { final GuardedByteArray val = (GuardedByteArray) object; val.access(new GuardedByteArray.Accessor() { + @Override public void access(byte[] clearBytes) { byte[] encryptedBytes = null; try { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/binary/BinaryObjectDecoder.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/binary/BinaryObjectDecoder.java index c3b8daf4..0a47f84a 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/binary/BinaryObjectDecoder.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/binary/BinaryObjectDecoder.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer.binary; @@ -279,6 +280,7 @@ public BinaryObjectDecoder(InputStream in) { new InternalDecoder(new DataInputStream(new BufferedInputStream(in, 4096))); } + @Override public void close() { try { internalDecoder.rootInput.close(); @@ -287,15 +289,18 @@ public void close() { } } + @Override public Object readObject() { return internalDecoder.readObject(this); } + @Override public boolean readBooleanContents() { internalDecoder.startAnonymousField(0); return internalDecoder.readBoolean(); } + @Override public boolean readBooleanField(String fieldName, boolean dflt) { if (internalDecoder.startField(fieldName)) { return internalDecoder.readBoolean(); @@ -304,21 +309,25 @@ public boolean readBooleanField(String fieldName, boolean dflt) { } } + @Override public byte readByteContents() { internalDecoder.startAnonymousField(0); return internalDecoder.readByte(); } + @Override public byte[] readByteArrayContents() { internalDecoder.startAnonymousField(0); return internalDecoder.readByteArray(); } + @Override public Class readClassContents() { internalDecoder.startAnonymousField(0); return internalDecoder.readClass(); } + @Override public Class readClassField(String fieldName, Class dflt) { if (internalDecoder.startField(fieldName)) { return internalDecoder.readClass(); @@ -327,11 +336,13 @@ public Class readClassField(String fieldName, Class dflt) { } } + @Override public double readDoubleContents() { internalDecoder.startAnonymousField(0); return internalDecoder.readDouble(); } + @Override public double readDoubleField(String fieldName, double dflt) { if (internalDecoder.startField(fieldName)) { return internalDecoder.readDouble(); @@ -340,12 +351,14 @@ public double readDoubleField(String fieldName, double dflt) { } } + @Override public float readFloatContents() { internalDecoder.startAnonymousField(0); // read as double since C# only knows how to deal with that return (float) internalDecoder.readDouble(); } + @Override public float readFloatField(String fieldName, float dflt) { if (internalDecoder.startField(fieldName)) { return (float) internalDecoder.readDouble(); @@ -354,11 +367,13 @@ public float readFloatField(String fieldName, float dflt) { } } + @Override public int readIntContents() { internalDecoder.startAnonymousField(0); return internalDecoder.readInt(); } + @Override public int readIntField(String fieldName, int dflt) { if (internalDecoder.startField(fieldName)) { return internalDecoder.readInt(); @@ -367,11 +382,13 @@ public int readIntField(String fieldName, int dflt) { } } + @Override public long readLongContents() { internalDecoder.startAnonymousField(0); return internalDecoder.readLong(); } + @Override public long readLongField(String fieldName, long dflt) { if (internalDecoder.startField(fieldName)) { return internalDecoder.readLong(); @@ -380,15 +397,18 @@ public long readLongField(String fieldName, long dflt) { } } + @Override public int getNumSubObjects() { return internalDecoder.getNumAnonymousFields(); } + @Override public Object readObjectContents(int index) { internalDecoder.startAnonymousField(index); return internalDecoder.readObject(this); } + @Override public Object readObjectField(String fieldName, Class expected, Object dflt) { if (internalDecoder.startField(fieldName)) { return readObject(); @@ -397,11 +417,13 @@ public Object readObjectField(String fieldName, Class expected, Object dflt) } } + @Override public String readStringContents() { internalDecoder.startAnonymousField(0); return internalDecoder.readString(false); } + @Override public String readStringField(String fieldName, String dflt) { if (internalDecoder.startField(fieldName)) { return internalDecoder.readString(false); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/binary/BinaryObjectEncoder.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/binary/BinaryObjectEncoder.java index fbfcb157..b49c34e6 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/binary/BinaryObjectEncoder.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/binary/BinaryObjectEncoder.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer.binary; @@ -309,6 +310,7 @@ public BinaryObjectEncoder(OutputStream output) { new InternalEncoder(new DataOutputStream(new BufferedOutputStream(output, 4096))); } + @Override public void flush() { try { internalEncoder.rootOutput.flush(); @@ -317,6 +319,7 @@ public void flush() { } } + @Override public void close() { flush(); try { @@ -326,40 +329,47 @@ public void close() { } } + @Override public void writeObject(Object o) { internalEncoder.writeObject(this, o); } + @Override public void writeBooleanContents(boolean v) { internalEncoder.startAnonymousField(); internalEncoder.writeBoolean(v); internalEncoder.endField(); } + @Override public void writeBooleanField(String fieldName, boolean v) { internalEncoder.startField(fieldName); internalEncoder.writeBoolean(v); internalEncoder.endField(); } + @Override public void writeByteContents(byte v) { internalEncoder.startAnonymousField(); internalEncoder.writeByte(v); internalEncoder.endField(); } + @Override public void writeByteArrayContents(byte[] v) { internalEncoder.startAnonymousField(); internalEncoder.writeByteArray(v); internalEncoder.endField(); } + @Override public void writeClassContents(Class v) { internalEncoder.startAnonymousField(); internalEncoder.writeClass(v); internalEncoder.endField(); } + @Override public void writeClassField(String fieldName, Class v) { if (v != null) { internalEncoder.startField(fieldName); @@ -368,18 +378,21 @@ public void writeClassField(String fieldName, Class v) { } } + @Override public void writeDoubleContents(double v) { internalEncoder.startAnonymousField(); internalEncoder.writeDouble(v); internalEncoder.endField(); } + @Override public void writeDoubleField(String fieldName, double v) { internalEncoder.startField(fieldName); internalEncoder.writeDouble(v); internalEncoder.endField(); } + @Override public void writeFloatContents(float v) { internalEncoder.startAnonymousField(); // write as double since C# only knows how to deal with that @@ -387,6 +400,7 @@ public void writeFloatContents(float v) { internalEncoder.endField(); } + @Override public void writeFloatField(String fieldName, float v) { internalEncoder.startField(fieldName); // write as double since C# only knows how to deal with that @@ -394,48 +408,56 @@ public void writeFloatField(String fieldName, float v) { internalEncoder.endField(); } + @Override public void writeIntContents(int v) { internalEncoder.startAnonymousField(); internalEncoder.writeInt(v); internalEncoder.endField(); } + @Override public void writeIntField(String fieldName, int v) { internalEncoder.startField(fieldName); internalEncoder.writeInt(v); internalEncoder.endField(); } + @Override public void writeLongContents(long v) { internalEncoder.startAnonymousField(); internalEncoder.writeLong(v); internalEncoder.endField(); } + @Override public void writeLongField(String fieldName, long v) { internalEncoder.startField(fieldName); internalEncoder.writeLong(v); internalEncoder.endField(); } + @Override public void writeObjectContents(Object object) { internalEncoder.startAnonymousField(); internalEncoder.writeObject(this, object); internalEncoder.endField(); } + @Override public void writeObjectField(String fieldName, Object object, boolean inline) { internalEncoder.startField(fieldName); internalEncoder.writeObject(this, object); internalEncoder.endField(); } + @Override public void writeStringContents(String str) { internalEncoder.startAnonymousField(); internalEncoder.writeString(str, false); internalEncoder.endField(); } + @Override public void writeStringField(String fieldName, String v) { if (v != null) { internalEncoder.startField(fieldName); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectDecoder.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectDecoder.java index 06bca197..04d1d22f 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectDecoder.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectDecoder.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer.xml; @@ -50,27 +51,33 @@ public Object readObject() { return readObjectInternal(); } + @Override public boolean readBooleanContents() { return decodeBoolean(readStringContentsInternal()); } + @Override public boolean readBooleanField(String fieldName, boolean dflt) { return decodeBoolean(readStringAttributeInternal(fieldName, XmlObjectEncoder .encodeBoolean(dflt))); } + @Override public byte readByteContents() { return decodeByte(readStringContentsInternal()); } + @Override public byte[] readByteArrayContents() { return decodeByteArray(readStringContentsInternal()); } + @Override public Class readClassContents() { return decodeClass(readStringContentsInternal()); } + @Override public Class readClassField(String name, Class dflt) { String val = readStringAttributeInternal(name, null); if (val == null) { @@ -80,40 +87,49 @@ public Class readClassField(String name, Class dflt) { } } + @Override public double readDoubleContents() { return decodeDouble(readStringContentsInternal()); } + @Override public double readDoubleField(String fieldName, double dflt) { return decodeDouble(readStringAttributeInternal(fieldName, XmlObjectEncoder .encodeDouble(dflt))); } + @Override public float readFloatContents() { return decodeFloat(readStringContentsInternal()); } + @Override public float readFloatField(String fieldName, float dflt) { return decodeFloat(readStringAttributeInternal(fieldName, XmlObjectEncoder .encodeFloat(dflt))); } + @Override public int readIntContents() { return decodeInt(readStringContentsInternal()); } + @Override public int readIntField(String fieldName, int dflt) { return decodeInt(readStringAttributeInternal(fieldName, XmlObjectEncoder.encodeInt(dflt))); } + @Override public long readLongContents() { return decodeLong(readStringContentsInternal()); } + @Override public long readLongField(String fieldName, long dflt) { return decodeLong(readStringAttributeInternal(fieldName, XmlObjectEncoder.encodeLong(dflt))); } + @Override public int getNumSubObjects() { int count = 0; for (Element subElement = XmlUtil.getFirstChildElement(node); subElement != null; subElement = @@ -123,6 +139,7 @@ public int getNumSubObjects() { return count; } + @Override public Object readObjectContents(int index) { Element subElement = XmlUtil.getFirstChildElement(node); @@ -137,6 +154,7 @@ public Object readObjectContents(int index) { return new XmlObjectDecoder(subElement, null).readObject(); } + @Override public Object readObjectField(String fieldName, Class expected, Object dflt) { Element child = XmlUtil.findImmediateChildElement(node, fieldName); if (child == null) { @@ -153,11 +171,13 @@ public Object readObjectField(String fieldName, Class expected, Object dflt) return new XmlObjectDecoder(subElement, null).readObject(); } + @Override public String readStringContents() { String rv = readStringContentsInternal(); return rv == null ? "" : rv; } + @Override public String readStringField(String fieldName, String dflt) { return readStringAttributeInternal(fieldName, dflt); } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectEncoder.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectEncoder.java index 582c2202..16650869 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectEncoder.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectEncoder.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer.xml; @@ -59,64 +60,79 @@ public String writeObject(Object o) { return writeObjectInternal(o, false); } + @Override public void writeBooleanContents(boolean v) { writeStringContentsInternal(encodeBoolean(v)); } + @Override public void writeBooleanField(String fieldName, boolean v) { writeAttributeInternal(fieldName, encodeBoolean(v)); } + @Override public void writeByteContents(byte v) { writeStringContentsInternal(encodeByte(v)); } + @Override public void writeByteArrayContents(byte[] v) { writeStringContentsInternal(encodeByteArray(v)); } + @Override public void writeClassContents(Class v) { writeStringContentsInternal(encodeClass(v)); } + @Override public void writeClassField(String name, Class v) { if (v != null) { writeAttributeInternal(name, encodeClass(v)); } } + @Override public void writeDoubleContents(double v) { writeStringContentsInternal(encodeDouble(v)); } + @Override public void writeDoubleField(String fieldName, double v) { writeAttributeInternal(fieldName, encodeDouble(v)); } + @Override public void writeFloatContents(float v) { writeStringContentsInternal(encodeFloat(v)); } + @Override public void writeFloatField(String fieldName, float v) { writeAttributeInternal(fieldName, encodeFloat(v)); } + @Override public void writeIntContents(int v) { writeStringContentsInternal(encodeInt(v)); } + @Override public void writeIntField(String fieldName, int v) { writeAttributeInternal(fieldName, encodeInt(v)); } + @Override public void writeLongContents(long v) { writeStringContentsInternal(encodeLong(v)); } + @Override public void writeLongField(String fieldName, long v) { writeAttributeInternal(fieldName, encodeLong(v)); } + @Override public void writeObjectContents(Object o) { if (outputStack.size() == 0) { throw new IllegalStateException("May not write contents on top-level object"); @@ -124,6 +140,7 @@ public void writeObjectContents(Object o) { writeObjectInternal(o, false); } + @Override public void writeObjectField(String fieldName, Object object, boolean inline) { if (outputStack.size() == 0) { throw new IllegalStateException("May not write field on top-level object"); @@ -136,10 +153,12 @@ public void writeObjectField(String fieldName, Object object, boolean inline) { endElement(); } + @Override public void writeStringContents(String str) { writeStringContentsInternal(str); } + @Override public void writeStringField(String fieldName, String str) { if (str != null) { writeAttributeInternal(fieldName, str); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectParser.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectParser.java index 78e45ff5..c4812393 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectParser.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectParser.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer.xml; @@ -101,6 +102,7 @@ private Element getCurrentElement() { } } + @Override public void characters(char[] ch, int start, int length) { Element currentElement = getCurrentElement(); if (currentElement != null) { @@ -109,9 +111,11 @@ public void characters(char[] ch, int start, int length) { } } + @Override public void endDocument() { } + @Override public void endElement(String namespaceURI, String localName, String qName) { // we don't push the top-level MULTI_OBJECT_ELEMENT on the stack if (elementStack.size() > 0) { @@ -127,9 +131,11 @@ public void endElement(String namespaceURI, String localName, String qName) { } } + @Override public void endPrefixMapping(String prefix) { } + @Override public void ignorableWhitespace(char[] ch, int start, int length) { Element currentElement = getCurrentElement(); if (currentElement != null) { @@ -138,18 +144,23 @@ public void ignorableWhitespace(char[] ch, int start, int length) { } } + @Override public void processingInstruction(String target, String data) { } + @Override public void setDocumentLocator(Locator locator) { } + @Override public void skippedEntity(String name) { } + @Override public void startDocument() { } + @Override public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { Element element = null; @@ -179,9 +190,11 @@ public void startElement(String namespaceURI, String localName, String qName, } } + @Override public void startPrefixMapping(String prefix, String uri) { } + @Override public InputSource resolveEntity(String pubid, String sysid) throws SAXException { if (XmlObjectSerializerImpl.CONNECTORS_DTD.equals(pubid)) { // stupid freakin sax parser. even if validation @@ -203,14 +216,17 @@ public InputSource resolveEntity(String pubid, String sysid) throws SAXException } } + @Override public void error(SAXParseException exception) throws SAXException { throw exception; } + @Override public void fatalError(SAXParseException exception) throws SAXException { throw exception; } + @Override public void warning(SAXParseException exception) { } } diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectSerializerImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectSerializerImpl.java index be33b6dc..57f54b84 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectSerializerImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/xml/XmlObjectSerializerImpl.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.serializer.xml; @@ -59,6 +60,7 @@ public XmlObjectSerializerImpl(Writer output, boolean includeHeader, boolean mul * if there is more than one object and this is not configured * for multi-object document. */ + @Override public void writeObject(Object object) { if (documentEnded) { throw new IllegalStateException( @@ -79,6 +81,7 @@ public void writeObject(Object object) { firstObjectWritten = true; } + @Override public void flush() { try { output.flush(); @@ -87,6 +90,7 @@ public void flush() { } } + @Override public void close(boolean closeStream) { if (!documentEnded) { if (!firstObjectWritten) { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/test/TestHelpersImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/test/TestHelpersImpl.java index a99be089..3517ab26 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/test/TestHelpersImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/test/TestHelpersImpl.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.impl.test; @@ -66,6 +67,7 @@ public class TestHelpersImpl implements TestHelpersSpi { /** * Method for convenient testing of local connectors. */ + @Override public APIConfiguration createTestConfiguration(Class clazz, Configuration config) { LocalConnectorInfoImpl info = new LocalConnectorInfoImpl(); @@ -88,6 +90,7 @@ public APIConfiguration createTestConfiguration(Class clazz /** * Method for convenient testing of local connectors. */ + @Override public APIConfiguration createTestConfiguration(Class clazz, final Set bundleContents, PropertyBag configData, String prefix) { assert null != clazz; @@ -128,6 +131,7 @@ public APIConfiguration createTestConfiguration(Class clazz return impl; } + @Override public void fillConfiguration(Configuration config, Map configData) { Map configDataCopy = new HashMap(configData); ConfigurationPropertiesImpl configProps = @@ -168,6 +172,7 @@ public void fillConfiguration(Configuration config, Map search, final ObjectClass objectClass, final Filter filter, final ResultsHandler handler, OperationOptions options) { if (options == null) { @@ -177,10 +182,12 @@ public SearchResult search(SearchOp search, final ObjectClass objectClass, SearchImpl.rawSearch(search, objectClass, filter, new SearchResultsHandler() { + @Override public void handleResult(SearchResult searchResult) { result.set(searchResult); } + @Override public boolean handle(final ConnectorObject connectorObject) { return handler.handle(connectorObject); } @@ -188,12 +195,14 @@ public boolean handle(final ConnectorObject connectorObject) { return result.get(); } + @Override public ConnectorMessages createDummyMessages() { return new DummyConnectorMessages(); } private static class DummyConnectorMessages implements ConnectorMessages { + @Override public String format(String key, String dflt, Object... args) { StringBuilder builder = new StringBuilder(); builder.append(key); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/Main.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/Main.java index b7e6c333..76887998 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/Main.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/Main.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.server; @@ -160,6 +161,7 @@ public static void main(String[] arguments) throws Exception { private static Thread beforeReadPassword() { Thread maskThread = new Thread() { + @Override public void run() { while (!interrupted()) { try { diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/impl/CCLWatchThreadFactory.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/impl/CCLWatchThreadFactory.java index f57d04dd..45d7c0ac 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/impl/CCLWatchThreadFactory.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/impl/CCLWatchThreadFactory.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.server.impl; @@ -43,6 +44,7 @@ public class CCLWatchThreadFactory implements ThreadFactory { namePrefix = "pool-" + POOL_NUMBER.getAndIncrement() + "-thread-"; } + @Override public Thread newThread(Runnable r) { Thread t = new CCLWatchThread(group, r, namePrefix + threadNumber.getAndIncrement(), 0); if (t.isDaemon()) diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/impl/ConnectionProcessor.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/impl/ConnectionProcessor.java index b08c94b9..d8e1d6ae 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/impl/ConnectionProcessor.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/impl/ConnectionProcessor.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.server.impl; @@ -79,6 +80,7 @@ public RemoteResultsHandler(RemoteFrameworkConnection conn) { connection = conn; } + @Override public boolean handle(Object obj) { try { OperationResponsePart part = new OperationResponsePart(null, obj); @@ -110,6 +112,7 @@ public ConnectionProcessor(ConnectorServer server, Socket socket) { connection = new RemoteFrameworkConnection(socket); } + @Override public void run() { try { try { diff --git a/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/Activator.java b/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/Activator.java index 9634785d..8f316790 100644 --- a/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/Activator.java +++ b/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/Activator.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.impl.api.osgi.internal; @@ -59,6 +60,7 @@ public class Activator implements BundleActivator { private ServiceRegistration connectorInfoManager; @SuppressWarnings("unchecked") + @Override public void start(BundleContext context) throws Exception { LOG.debug("OpenICF OSGi Extender - Starting"); @@ -79,6 +81,7 @@ public void start(BundleContext context) throws Exception { LOG.debug("OpenICF OSGi Extender - Started"); } + @Override public void stop(BundleContext context) throws Exception { LOG.debug("OpenICF OSGi Extender - Stopping"); connectorInfoManager.unregister(); diff --git a/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/ConnectorManifestScanner.java b/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/ConnectorManifestScanner.java index 29de1db9..269b6acc 100644 --- a/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/ConnectorManifestScanner.java +++ b/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/ConnectorManifestScanner.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.impl.api.osgi.internal; @@ -58,6 +59,7 @@ public ConnectorManifestScanner(Version version) { /** * {@inheritDoc} */ + @Override public List scan(Bundle bundle) { NullArgumentException.validateNotNull(bundle, "Bundle"); diff --git a/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/OsgiConnectorInfoManagerImpl.java b/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/OsgiConnectorInfoManagerImpl.java index 1f880590..dd9f65f6 100644 --- a/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/OsgiConnectorInfoManagerImpl.java +++ b/OpenICF-java-framework/connector-framework-osgi/src/main/java/org/forgerock/openicf/framework/impl/api/osgi/internal/OsgiConnectorInfoManagerImpl.java @@ -96,6 +96,7 @@ public class OsgiConnectorInfoManagerImpl extends ConnectorFacadeFactory impleme private final Vector eventHandlers = new Vector(); + @Override public ConnectorInfo findConnectorInfo(ConnectorKey key) { for (Pair> bundle : connectorInfoCache.values()) { for (ConnectorInfo info : bundle.second) { @@ -107,6 +108,7 @@ public ConnectorInfo findConnectorInfo(ConnectorKey key) { return null; } + @Override public List getConnectorInfos() { List result = new ArrayList(); for (Pair> info : connectorInfoCache.values()) { @@ -162,6 +164,7 @@ public ConnectorFacade newInstance(ConnectorInfo connectorInfo, String config) { return ret; } + @Override public void addingEntries(Bundle bundle, List list) { NullArgumentException.validateNotNull(bundle, "Bundle"); NullArgumentException.validateNotNull(list, "ManifestEntry"); @@ -180,6 +183,7 @@ public void addingEntries(Bundle bundle, List list) { } } + @Override public void removingEntries(Bundle bundle, List list) { NullArgumentException.validateNotNull(bundle, "Bundle"); synchronized (connectorInfoCache) { @@ -198,6 +202,7 @@ public void removingEntries(Bundle bundle, List list) { /** * {@inheritDoc} */ + @Override public void addConnectorEventHandler(ConnectorEventHandler hook) { if (hook == null) { throw new NullPointerException(); @@ -219,6 +224,7 @@ public void addConnectorEventHandler(ConnectorEventHandler hook) { /** * {@inheritDoc} */ + @Override public void deleteConnectorEventHandler(ConnectorEventHandler hook) { eventHandlers.removeElement(hook); } diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/AbstractLoadBalancingAlgorithm.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/AbstractLoadBalancingAlgorithm.java index b2c395db..16f6626f 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/AbstractLoadBalancingAlgorithm.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/AbstractLoadBalancingAlgorithm.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.common.rpc; @@ -44,6 +45,7 @@ protected AbstractLoadBalancingAlgorithm( /** * {@inheritDoc} */ + @Override public boolean isOperational() { for (RequestDistributor e : requestDistributors) if (e.isOperational()) @@ -54,6 +56,7 @@ public boolean isOperational() { /** * {@inheritDoc} */ + @Override public , V, E extends Exception> R trySubmitRequest( RemoteRequestFactory requestFactory) { return trySubmitRequest(getInitialConnectionFactoryIndex(), requestFactory); diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/FailoverLoadBalancingAlgorithm.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/FailoverLoadBalancingAlgorithm.java index 1da67281..afe19af0 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/FailoverLoadBalancingAlgorithm.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/FailoverLoadBalancingAlgorithm.java @@ -62,6 +62,7 @@ public FailoverLoadBalancingAlgorithm( super(requestDistributors); } + @Override protected int getInitialConnectionFactoryIndex() { return 0; } diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/LocalRequest.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/LocalRequest.java index 2b2521cb..bc356551 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/LocalRequest.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/LocalRequest.java @@ -121,11 +121,13 @@ public final boolean cancel() { return false; } + @Override public final void handleResult(final V result) { remoteConnectionContext.getRemoteConnectionGroup().removeRequest(getRequestId()); tryHandleResult(result); } + @Override public final void handleException(final E error) { remoteConnectionContext.getRemoteConnectionGroup().removeRequest(getRequestId()); tryHandleError(error); diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionGroup.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionGroup.java index b2b7ee9b..8736b286 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionGroup.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionGroup.java @@ -185,6 +185,7 @@ protected , V, E extends Exception> R all request = requestFactory.createRemoteRequest(getRemoteConnectionContext(), messageId, new RemoteRequestFactory.CompletionCallback() { + @Override public void complete(RemoteRequest request) { remoteRequests.remove(request.getRequestId()); } @@ -198,6 +199,7 @@ public void complete(RemoteRequest request) { // -- Pair of methods to Submit and Receive the new Request Start -- + @Override public , V, E extends Exception> R trySubmitRequest( RemoteRequestFactory requestFactory) { diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteRequest.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteRequest.java index d12f762b..700063a9 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteRequest.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteRequest.java @@ -118,6 +118,7 @@ public Function, Exception> getSendFunction() { } return new Function, Exception>() { + @Override public Promise apply(H remoteConnectionHolder) throws Exception { if (null == promise) { // Single thread should process it so it should not @@ -128,6 +129,7 @@ public Promise apply(H remoteConnectionHolder) throws Exception { promise = new PromiseImpl() { + @Override protected E tryCancel(boolean mayInterruptIfRunning) { if (mayInterruptIfRunning) { try { @@ -142,6 +144,7 @@ protected E tryCancel(boolean mayInterruptIfRunning) { }; promise.thenOnResultOrException(new Runnable() { + @Override public void run() { completionCallback.complete(RemoteRequest.this); } @@ -177,6 +180,7 @@ public void run() { } else { return new Function, Exception>() { + @Override public Promise apply(H value) throws Exception { return resultPromise; } diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RoundRobinLoadBalancingAlgorithm.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RoundRobinLoadBalancingAlgorithm.java index 6cf37123..3719c5a9 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RoundRobinLoadBalancingAlgorithm.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RoundRobinLoadBalancingAlgorithm.java @@ -58,6 +58,7 @@ public RoundRobinLoadBalancingAlgorithm( super(requestDistributors); } + @Override protected int getInitialConnectionFactoryIndex() { // A round robin pool of one connection factories is unlikely in // practice and requires special treatment. diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/ConnectorFramework.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/ConnectorFramework.java index 5186edf3..c715f72e 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/ConnectorFramework.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/ConnectorFramework.java @@ -99,6 +99,7 @@ public boolean isRunning() { return isRunning.get(); } + @Override public void close() { if (isRunning.compareAndSet(Boolean.TRUE, Boolean.FALSE)) { // Notify CloseListeners @@ -218,6 +219,7 @@ public ConnectorFacade newInstance(final APIConfiguration config) { new ConcurrentHashMap(); private final Runnable MANAGED_FACADE_CACHE_RUNNABLE = new Runnable() { + @Override public void run() { for (Map.Entry entry : MANAGED_FACADE_CACHE.entrySet()) { if (entry.getValue() instanceof LocalConnectorFacadeImpl) { @@ -401,6 +403,7 @@ public AsyncRemoteLegacyConnectorInfoManager getRemoteManager( if (rv == null) { rv = new AsyncRemoteLegacyConnectorInfoManager(info, scheduler); rv.addCloseListener(new CloseListener() { + @Override public void onClosed(AsyncRemoteLegacyConnectorInfoManager source) { remoteManagerCache.remove(key); } @@ -470,12 +473,14 @@ public synchronized RemoteConnectionInfoManagerFactory getRemoteConnectionInfoMa remoteConnectionInfoManagerFactory = new RemoteConnectionInfoManagerFactory(listener, getConnectionManagerConfig()) { + @Override public RemoteConnectorInfoManager connect( RemoteWSFrameworkConnectionInfo info) { throw new UnsupportedOperationException( REMOTE_LIBRARY_MISSING_EXCEPTION, e); } + @Override public void doClose() { } @@ -483,6 +488,7 @@ public void doClose() { } remoteConnectionInfoManagerFactory .addCloseListener(new CloseListener() { + @Override public void onClosed(RemoteConnectionInfoManagerFactory source) { remoteConnectionInfoManagerFactory = null; } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/ConnectorFrameworkFactory.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/ConnectorFrameworkFactory.java index 268410ee..95cf4d0b 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/ConnectorFrameworkFactory.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/ConnectorFrameworkFactory.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework; @@ -114,6 +115,7 @@ protected String getClientConnectionManagerFactoryClass() { : clientConnectionManagerFactoryClass; } + @Override protected void destroyInstance(ConnectorFramework instance) { try { instance.close(); @@ -122,6 +124,7 @@ protected void destroyInstance(ConnectorFramework instance) { } } + @Override protected ConnectorFramework newInstance() { return new ConnectorFramework(getDefaultConnectorBundleParentClassLoader()); } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/DelegatingAsyncConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/DelegatingAsyncConnectorInfoManager.java index ceaddd01..5950b049 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/DelegatingAsyncConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/DelegatingAsyncConnectorInfoManager.java @@ -82,6 +82,7 @@ public DelegatingAsyncConnectorInfoManager(boolean allowDeferred) { new CopyOnWriteArrayList>(); CloseListener closeListener = new CloseListener() { + @Override public void onClosed(DelegatingAsyncConnectorInfoManager source) { for (Pair promise : deferredRangePromiseCacheList) { promise.getValue().shutdown(); @@ -145,6 +146,7 @@ public void shutdown() { handleException(ManagedAsyncConnectorInfoManager.CLOSED_EXCEPTION); } + @Override protected RuntimeException tryCancel(boolean mayInterruptIfRunning) { return super.tryCancel(mayInterruptIfRunning); } @@ -169,6 +171,7 @@ public void handleException(final RuntimeException error) { } } + @Override public Promise findConnectorInfoAsync(final ConnectorKey key) { if (!isRunning.get()) { return Promises @@ -191,6 +194,7 @@ public Promise findConnectorInfoAsync(final Con if (allowDeferred && isRunning()) { if (pending) { promise.thenOnResultOrException(new Runnable() { + @Override public void run() { deferredKeyPromiseCacheList.remove(entry); } @@ -203,6 +207,7 @@ public void run() { } return promise.then(new Function() { + @Override public ConnectorInfo apply(final ConnectorInfo value) throws RuntimeException { // Replace the RemoteConnectorInfoManager with this!! return new RemoteConnectorInfoImpl(getMessageDistributor(), @@ -212,6 +217,7 @@ public ConnectorInfo apply(final ConnectorInfo value) throws RuntimeException { } } + @Override public Promise findConnectorInfoAsync( final ConnectorKeyRange keyRange) { if (!isRunning.get()) { @@ -241,6 +247,7 @@ public Promise findConnectorInfoAsync( if (allowDeferred && isRunning()) { if (pending) { promise.thenOnResultOrException(new Runnable() { + @Override public void run() { deferredRangePromiseCacheList.remove(entry); } @@ -253,6 +260,7 @@ public void run() { } return promise.then(new Function() { + @Override public ConnectorInfo apply(final ConnectorInfo value) throws RuntimeException { // Replace the RemoteConnectorInfoManager with // this!! @@ -264,6 +272,7 @@ public ConnectorInfo apply(final ConnectorInfo value) throws RuntimeException { } } + @Override public List getConnectorInfos() { final Set keys = new HashSet(); final List result = new ArrayList(); @@ -278,6 +287,7 @@ public List getConnectorInfos() { return result; } + @Override public ConnectorInfo findConnectorInfo(ConnectorKey key) { for (AsyncConnectorInfoManager group : getDelegates()) { ConnectorInfo result = group.findConnectorInfo(key); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/CloseableAsyncConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/CloseableAsyncConnectorInfoManager.java index 161ad900..c947af30 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/CloseableAsyncConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/CloseableAsyncConnectorInfoManager.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async; @@ -48,6 +49,7 @@ public boolean isRunning() { return isRunning.get(); } + @Override public final void close() { if (canCloseNow()) { try { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/AbstractRemoteOperationRequestFactory.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/AbstractRemoteOperationRequestFactory.java index b80ef595..15b1719b 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/AbstractRemoteOperationRequestFactory.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/AbstractRemoteOperationRequestFactory.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -108,11 +109,13 @@ protected abstract M getOperationResponseMessages( protected abstract void handleOperationResponseMessages( WebSocketConnectionHolder sourceConnection, M message); + @Override protected RPCMessages.RPCRequest.Builder createOperationRequest( RemoteOperationContext remoteContext) { return request; } + @Override protected boolean handleResponseMessage(final WebSocketConnectionHolder sourceConnection, final MessageLite message) { if (message instanceof OperationMessages.OperationResponse) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/AuthenticationAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/AuthenticationAsyncApiOpImpl.java index 3fd06230..86063e94 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/AuthenticationAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/AuthenticationAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -59,11 +60,13 @@ public AuthenticationAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction, timeout); } + @Override public Uid authenticate(final ObjectClass objectClass, final String username, final GuardedString password, final OperationOptions options) { return asyncTimeout(authenticateAsync(objectClass, username, password, options)); } + @Override public Promise authenticateAsync(final ObjectClass objectClass, final String username, final GuardedString password, final OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -101,6 +104,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -114,6 +118,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -133,6 +138,7 @@ public InternalRequest( } + @Override protected OperationMessages.AuthenticateOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasAuthenticateOpResponse()) { @@ -143,6 +149,7 @@ protected OperationMessages.AuthenticateOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.AuthenticateOpResponse message) { if (message.hasUid()) { @@ -171,6 +178,7 @@ protected InternalLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, Uid result) { @@ -185,6 +193,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( response)); } + @Override protected Uid executeOperation(ConnectorFacade connectorFacade, OperationMessages.AuthenticateOpRequest requestMessage) { final ObjectClass objectClass = new ObjectClass(requestMessage.getObjectClass()); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/BatchApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/BatchApiOpImpl.java index d3aeddfb..a1dbba93 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/BatchApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/BatchApiOpImpl.java @@ -98,6 +98,7 @@ public Subscription executeBatch(List tasks, final Observer() { + @Override public void handleException(RuntimeException error) { if (!(error instanceof CancellationException)) { observer.onError(error); @@ -108,14 +109,17 @@ public void handleException(RuntimeException error) { promise.getOrThrowUninterruptibly(); return new Subscription() { + @Override public void close() { promise.cancel(true); } + @Override public boolean isUnsubscribed() { return promise.isDone(); } + @Override public Object getReturnValue() { try { return promise.get(); @@ -132,6 +136,7 @@ public Subscription queryBatch(BatchToken token, final Observer obs tryQueryBatch(token, observer, options) .thenOnException( new ExceptionHandler() { + @Override public void handleException(RuntimeException error) { if (!(error instanceof CancellationException)) { observer.onError(error); @@ -142,14 +147,17 @@ public void handleException(RuntimeException error) { promise.getOrThrowUninterruptibly(); return new Subscription() { + @Override public void close() { promise.cancel(true); } + @Override public boolean isUnsubscribed() { return promise.isDone(); } + @Override public Object getReturnValue() { try { return promise.get(); @@ -263,6 +271,7 @@ public InternalRequestFactory( this.observer = observer; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -279,6 +288,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -323,6 +333,7 @@ protected BatchOpResult getOperationResponseMessages(OperationResponse message) } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, BatchOpResult message) { /** @@ -374,6 +385,7 @@ protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceC private class CompletionListener extends Thread { private final AtomicBoolean running = new AtomicBoolean(false); + @Override public void start() { // The token and "complete" responses are dispatched on pool threads and may // race here; only the first caller may actually start the thread. @@ -383,6 +395,7 @@ public void start() { super.start(); } + @Override public void run() { logger.ok("CompletionListener waiting for final result to complete."); while ((!resultChannelComplete.get() || returnToken == null || !completeEventComplete.get()) @@ -502,6 +515,7 @@ protected BatchOpResult executeOperation(ConnectorFacade connectorFacade, final OperationOptions options = MessagesUtil.deserializeLegacy(requestMessage.getOptions()); Observer observer = new Observer() { + @Override public void onCompleted() { resultChannelComplete.incrementAndGet(); if (resultChannelComplete.get() >= 2 && commandChannelComplete.get()) { @@ -511,6 +525,7 @@ public void onCompleted() { } } + @Override public void onError(Throwable error) { try { final byte[] responseMessage = @@ -521,6 +536,7 @@ public void onError(Throwable error) { } } + @Override public void onNext(BatchResult result) { if (result != null) { BatchOpResult.Builder opResult = BatchOpResult.newBuilder() @@ -648,6 +664,7 @@ private void attachSubscription(final Subscription result) { } } + @Override protected boolean tryCancel() { final Subscription current; synchronized (this) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ConnectorEventSubscriptionApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ConnectorEventSubscriptionApiOpImpl.java index 0b731297..f3fa5e6c 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ConnectorEventSubscriptionApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ConnectorEventSubscriptionApiOpImpl.java @@ -72,31 +72,37 @@ public ConnectorEventSubscriptionApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction,timeout); } + @Override public Subscription subscribe(final ObjectClass objectClass, final Filter eventFilter, final Observer handler, final OperationOptions operationOptions) { final Promise promise = trySubscribe(objectClass, eventFilter, handler, operationOptions).thenOnException( new ExceptionHandler() { + @Override public void handleException(RuntimeException error) { if (!(error instanceof CancellationException)) { handler.onError(error); } } }).thenOnResult(new ResultHandler() { + @Override public void handleResult(Void result) { handler.onCompleted(); } }); return new Subscription() { + @Override public void close() { promise.cancel(true); } + @Override public boolean isUnsubscribed() { return promise.isDone(); } + @Override public Object getReturnValue() { try { return promise.get(); @@ -143,6 +149,7 @@ public InternalRequestFactory( this.handler = handler; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -156,6 +163,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -191,6 +199,7 @@ protected ConnectorEventSubscriptionOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, ConnectorEventSubscriptionOpResponse message) { if (null != handler && message.hasConnectorObject()) { @@ -271,11 +280,13 @@ protected ConnectorEventSubscriptionOpResponse executeOperation( final Subscription result = connectorFacade.subscribe(objectClass, token, new Observer() { + @Override public void onCompleted() { handleResult(ConnectorEventSubscriptionOpResponse.newBuilder() .setCompleted(Boolean.TRUE).build()); } + @Override public void onError(Throwable error) { if (error instanceof RuntimeException) { handleException((RuntimeException) error); @@ -284,6 +295,7 @@ public void onError(Throwable error) { } } + @Override public void onNext(ConnectorObject syncDelta) { if (null != syncDelta) { tryHandleResult(ConnectorEventSubscriptionOpResponse @@ -320,6 +332,7 @@ private void attachSubscription(final Subscription result) { } } + @Override protected boolean tryCancel() { final Subscription current; synchronized (this) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/CreateAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/CreateAsyncApiOpImpl.java index c072b069..c2a47e93 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/CreateAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/CreateAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -63,11 +64,13 @@ public CreateAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction, timeout); } + @Override public Uid create(final ObjectClass objectClass, final Set createAttributes, final OperationOptions options) { return asyncTimeout(createAsync(objectClass, createAttributes, options)); } + @Override public Promise createAsync(final ObjectClass objectClass, final Set createAttributes, final OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -106,6 +109,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -118,6 +122,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -137,6 +142,7 @@ public InternalRequest( } + @Override protected OperationMessages.CreateOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasCreateOpResponse()) { @@ -147,6 +153,7 @@ protected OperationMessages.CreateOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.CreateOpResponse message) { if (message.hasUid()) { @@ -174,6 +181,7 @@ protected InternalCreateLocalOperationProcessor(long requestId, WebSocketConnect super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, Uid result) { OperationMessages.CreateOpResponse.Builder response = @@ -187,6 +195,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( OperationMessages.OperationResponse.newBuilder().setCreateOpResponse(response)); } + @Override protected Uid executeOperation(ConnectorFacade connectorFacade, OperationMessages.CreateOpRequest requestMessage) { final ObjectClass objectClass = new ObjectClass(requestMessage.getObjectClass()); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/DeleteAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/DeleteAsyncApiOpImpl.java index aaf55dff..35dabc22 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/DeleteAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/DeleteAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -57,10 +58,12 @@ public DeleteAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction,timeout); } + @Override public void delete(final ObjectClass objectClass, final Uid uid, final OperationOptions options) { asyncTimeout(deleteAsync(objectClass, uid, options)); } + @Override public Promise deleteAsync(final ObjectClass objectClass, final Uid uid, final OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -96,6 +99,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -109,6 +113,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -128,6 +133,7 @@ public InternalRequest( } + @Override protected OperationMessages.DeleteOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasDeleteOpResponse()) { @@ -138,6 +144,7 @@ protected OperationMessages.DeleteOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.DeleteOpResponse message) { getResultHandler().handleResult(null); @@ -160,6 +167,7 @@ protected InternalLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, Void result) { return RPCMessages.RPCResponse.newBuilder().setOperationResponse( @@ -167,6 +175,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( OperationMessages.DeleteOpResponse.getDefaultInstance())); } + @Override protected Void executeOperation(ConnectorFacade connectorFacade, OperationMessages.DeleteOpRequest requestMessage) { final ObjectClass objectClass = new ObjectClass(requestMessage.getObjectClass()); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/GetAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/GetAsyncApiOpImpl.java index 00f5a567..7b0c2962 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/GetAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/GetAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -58,11 +59,13 @@ public GetAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction,timeout); } + @Override public ConnectorObject getObject(final ObjectClass objectClass, final Uid uid, final OperationOptions options) { return asyncTimeout(getObjectAsync(objectClass, uid, options)); } + @Override public Promise getObjectAsync(final ObjectClass objectClass, final Uid uid, final OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -98,6 +101,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -111,6 +115,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -130,6 +135,7 @@ public InternalRequest( } + @Override protected OperationMessages.GetOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasGetOpResponse()) { @@ -140,6 +146,7 @@ protected OperationMessages.GetOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.GetOpResponse message) { if (!message.getConnectorObject().isEmpty()) { @@ -167,6 +174,7 @@ protected InternalLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, ConnectorObject result) { OperationMessages.GetOpResponse.Builder response = @@ -178,6 +186,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( OperationMessages.OperationResponse.newBuilder().setGetOpResponse(response)); } + @Override protected ConnectorObject executeOperation(ConnectorFacade connectorFacade, OperationMessages.GetOpRequest requestMessage) { final ObjectClass objectClass = new ObjectClass(requestMessage.getObjectClass()); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ResolveUsernameAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ResolveUsernameAsyncApiOpImpl.java index 1d62d69f..6170c8f0 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ResolveUsernameAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ResolveUsernameAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -58,11 +59,13 @@ public ResolveUsernameAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction,timeout); } + @Override public Uid resolveUsername(final ObjectClass objectClass, final String username, final OperationOptions options) { return asyncTimeout(resolveUsernameAsync(objectClass, username, options)); } + @Override public Promise resolveUsernameAsync(final ObjectClass objectClass, final String username, final OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -99,6 +102,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -112,6 +116,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -131,6 +136,7 @@ public InternalRequest( } + @Override protected OperationMessages.ResolveUsernameOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasResolveUsernameOpResponse()) { @@ -141,6 +147,7 @@ protected OperationMessages.ResolveUsernameOpResponse getOperationResponseMessag } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.ResolveUsernameOpResponse message) { if (message.hasUid()) { @@ -168,6 +175,7 @@ protected InternalLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, Uid result) { OperationMessages.ResolveUsernameOpResponse.Builder response = @@ -181,6 +189,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( response)); } + @Override protected Uid executeOperation(ConnectorFacade connectorFacade, OperationMessages.ResolveUsernameOpRequest requestMessage) { final ObjectClass objectClass = new ObjectClass(requestMessage.getObjectClass()); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SchemaAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SchemaAsyncApiOpImpl.java index 9c6ecbc4..935ef8fb 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SchemaAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SchemaAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -53,10 +54,12 @@ public SchemaAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction,timeout); } + @Override public Schema schema() { return asyncTimeout(schemaAsync()); } + @Override public Promise schemaAsync() { return submitRequest(new InternalRequestFactory(getConnectorKey(), getFacadeKeyFunction(), OperationMessages.OperationRequest.newBuilder().setSchemaOpRequest( @@ -75,6 +78,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -88,6 +92,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -107,6 +112,7 @@ public InternalRequest( } + @Override protected OperationMessages.SchemaOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasSchemaOpResponse()) { @@ -117,6 +123,7 @@ protected OperationMessages.SchemaOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.SchemaOpResponse message) { if (!message.getSchema().isEmpty()) { @@ -144,6 +151,7 @@ protected InternalLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, ByteString result) { @@ -156,6 +164,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( OperationMessages.OperationResponse.newBuilder().setSchemaOpResponse(response)); } + @Override protected ByteString executeOperation(ConnectorFacade connectorFacade, OperationMessages.SchemaOpRequest requestMessage) { Schema schema = connectorFacade.schema(); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ScriptOnConnectorAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ScriptOnConnectorAsyncApiOpImpl.java index 30a1128c..c52fb07c 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ScriptOnConnectorAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ScriptOnConnectorAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -57,10 +58,12 @@ public ScriptOnConnectorAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction,timeout); } + @Override public Object runScriptOnConnector(final ScriptContext request, final OperationOptions options) { return asyncTimeout(runScriptOnConnectorAsync(request, options)); } + @Override public Promise runScriptOnConnectorAsync(final ScriptContext request, final OperationOptions options) { Assertions.nullCheck(request, "request"); @@ -92,6 +95,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -105,6 +109,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -124,6 +129,7 @@ public InternalRequest( } + @Override protected OperationMessages.ScriptOnConnectorOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasScriptOnConnectorOpResponse()) { @@ -134,6 +140,7 @@ protected OperationMessages.ScriptOnConnectorOpResponse getOperationResponseMess } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.ScriptOnConnectorOpResponse message) { if (!message.getObject().isEmpty()) { @@ -162,6 +169,7 @@ protected InternalLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, ByteString result) { OperationMessages.ScriptOnConnectorOpResponse.Builder response = @@ -174,6 +182,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( .setScriptOnConnectorOpResponse(response)); } + @Override protected ByteString executeOperation(ConnectorFacade connectorFacade, OperationMessages.ScriptOnConnectorOpRequest requestMessage) { final ScriptContext request = diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ScriptOnResourceAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ScriptOnResourceAsyncApiOpImpl.java index ce61d230..db76570d 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ScriptOnResourceAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ScriptOnResourceAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -57,10 +58,12 @@ public ScriptOnResourceAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction,timeout); } + @Override public Object runScriptOnResource(final ScriptContext request, final OperationOptions options) { return asyncTimeout(runScriptOnResourceAsync(request, options)); } + @Override public Promise runScriptOnResourceAsync(final ScriptContext request, final OperationOptions options) { Assertions.nullCheck(request, "request"); @@ -92,6 +95,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -105,6 +109,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -124,6 +129,7 @@ public InternalRequest( } + @Override protected OperationMessages.ScriptOnResourceOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasScriptOnResourceOpResponse()) { @@ -134,6 +140,7 @@ protected OperationMessages.ScriptOnResourceOpResponse getOperationResponseMessa } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.ScriptOnResourceOpResponse message) { if (!message.getObject().isEmpty()) { @@ -162,6 +169,7 @@ protected InternalLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, ByteString result) { OperationMessages.ScriptOnResourceOpResponse.Builder response = @@ -174,6 +182,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( response)); } + @Override protected ByteString executeOperation(ConnectorFacade connectorFacade, OperationMessages.ScriptOnResourceOpRequest requestMessage) { final ScriptContext request = diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SearchAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SearchAsyncApiOpImpl.java index 4b5efc35..983ef395 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SearchAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SearchAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -68,6 +69,7 @@ public SearchAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction, timeout); } + @Override public SearchResult search(final ObjectClass objectClass, final Filter filter, final ResultsHandler handler, final OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -114,6 +116,7 @@ public InternalRequestFactory( this.timeout = timeout; } + @Override public InternalRequest createRemoteRequest( RemoteOperationContext context, long requestId, @@ -129,6 +132,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationRequest.Builder createOperationRequest( RemoteOperationContext remoteContext) { return operationRequest; @@ -150,6 +154,7 @@ public InternalRequest( long timeout) { super(context, requestId, completionCallback, requestBuilder); resultBuffer = new ResultBuffer(timeout) { + @Override protected boolean handle(Object result) { if (result instanceof ConnectorObject) { try { @@ -199,6 +204,7 @@ public void handleException(RuntimeException e) { return getPromise(); } + @Override public boolean check() { boolean stopped = resultBuffer.isStopped(); if (stopped) { @@ -212,6 +218,7 @@ public boolean check() { } } + @Override public void inconsistent() { if (!resultBuffer.hasLast() || !resultBuffer.hasAll()) { inconsistencyCounter++; @@ -226,6 +233,7 @@ public void inconsistent() { } } + @Override protected SearchOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasSearchOpResponse()) { @@ -236,6 +244,7 @@ protected SearchOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, SearchOpResponse message) { if (message.hasConnectorObject()) { @@ -293,6 +302,7 @@ protected SearchOpResponse.Builder executeOperation(ConnectorFacade connectorFac } final SearchResult result = connectorFacade.search(objectClass, filter, new ResultsHandler() { + @Override public boolean handle(ConnectorObject connectorObject) { if (doContinue.get() && null != connectorObject) { @@ -326,6 +336,7 @@ public boolean handle(ConnectorObject connectorObject) { return response; } + @Override protected boolean tryCancel() { doContinue.set(Boolean.FALSE); return super.tryCancel(); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SyncAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SyncAsyncApiOpImpl.java index cc7d8adb..54b12be8 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SyncAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SyncAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -65,10 +66,12 @@ public SyncAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction, timeout); } + @Override public SyncToken getLatestSyncToken(final ObjectClass objectClass) { return asyncTimeout(getLatestSyncTokenAsync(objectClass)); } + @Override public SyncToken sync(final ObjectClass objectClass, final SyncToken token, final SyncResultsHandler handler, final OperationOptions options) { Assertions.nullCheck(objectClass, "objectClass"); @@ -126,6 +129,7 @@ public InternalRequestFactory( this.timeout = timeout; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -140,6 +144,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -161,6 +166,7 @@ public InternalRequest( final SyncResultsHandler handler, long timeout) { super(context, requestId, completionCallback, requestBuilder); resultBuffer = new ResultBuffer(timeout) { + @Override protected boolean handle(Object result) { if (result instanceof SyncDelta) { try { @@ -211,6 +217,7 @@ public void handleException(RuntimeException e) { return getPromise(); } + @Override public boolean check() { boolean stopped = resultBuffer.isStopped(); if (stopped) { @@ -224,6 +231,7 @@ public boolean check() { } } + @Override public void inconsistent() { if (!resultBuffer.hasLast() || !resultBuffer.hasAll()) { inconsistencyCounter++; @@ -238,6 +246,7 @@ public void inconsistent() { } } + @Override protected OperationMessages.SyncOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasSyncOpResponse()) { @@ -248,6 +257,7 @@ protected OperationMessages.SyncOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.SyncOpResponse message) { if (message.hasLatestSyncToken()) { @@ -333,6 +343,7 @@ protected OperationMessages.SyncOpResponse.Builder executeOperation( SyncToken result = connectorFacade.sync(objectClass, token, new SyncResultsHandler() { + @Override public boolean handle(SyncDelta delta) { if (doContinue.get() && null != delta) { @@ -377,6 +388,7 @@ public boolean handle(SyncDelta delta) { return null; } + @Override protected boolean tryCancel() { doContinue.set(Boolean.FALSE); return super.tryCancel(); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SyncEventSubscriptionApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SyncEventSubscriptionApiOpImpl.java index 8cd51ec6..8f268d3e 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SyncEventSubscriptionApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/SyncEventSubscriptionApiOpImpl.java @@ -72,30 +72,36 @@ public SyncEventSubscriptionApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction, timeout); } + @Override public Subscription subscribe(final ObjectClass objectClass, final SyncToken token, final Observer handler, final OperationOptions operationOptions) { final Promise promise = trySubscribe(objectClass, token, handler, operationOptions).thenOnException( new ExceptionHandler() { + @Override public void handleException(RuntimeException error) { if (!(error instanceof CancellationException)) { handler.onError(error); } } }).thenOnResult(new ResultHandler() { + @Override public void handleResult(Void result) { handler.onCompleted(); } }); return new Subscription() { + @Override public void close() { promise.cancel(true); } + @Override public boolean isUnsubscribed() { return promise.isDone(); } + @Override public Object getReturnValue() { return null; } @@ -137,6 +143,7 @@ public InternalRequestFactory( this.handler = handler; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -150,6 +157,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -185,6 +193,7 @@ protected SyncEventSubscriptionOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, SyncEventSubscriptionOpResponse message) { if (null != handler && message.hasSyncDelta()) { @@ -263,11 +272,13 @@ protected SyncEventSubscriptionOpResponse executeOperation( final Subscription result = connectorFacade.subscribe(objectClass, token, new Observer() { + @Override public void onCompleted() { handleResult(SyncEventSubscriptionOpResponse.newBuilder().setCompleted( Boolean.TRUE).build()); } + @Override public void onError(Throwable error) { if (error instanceof RuntimeException) { handleException((RuntimeException) error); @@ -276,6 +287,7 @@ public void onError(Throwable error) { } } + @Override public void onNext(SyncDelta syncDelta) { if (null != syncDelta) { tryHandleResult(SyncEventSubscriptionOpResponse.newBuilder().setSyncDelta( @@ -309,6 +321,7 @@ private void attachSubscription(final Subscription result) { } } + @Override protected boolean tryCancel() { final Subscription current; synchronized (this) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/TestAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/TestAsyncApiOpImpl.java index 98e61719..23889c3f 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/TestAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/TestAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -54,10 +55,12 @@ public TestAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction, timeout); } + @Override public void test() { asyncTimeout(testAsync()); } + @Override public Promise testAsync() { return submitRequest(new InternalRequestFactory(getConnectorKey(), getFacadeKeyFunction(), OperationRequest.newBuilder().setTestOpRequest(TestOpRequest.getDefaultInstance()))); @@ -75,6 +78,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -88,6 +92,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -116,11 +121,13 @@ protected TestOpResponse getOperationResponseMessages(OperationResponse message) } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, TestOpResponse message) { getResultHandler().handleResult(null); } + @Override public String toString() { return "Test Request {}" + getRequestId(); } @@ -141,6 +148,7 @@ protected TestLocalOperationProcessor(long requestId, WebSocketConnectionHolder super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, Void result) { return RPCMessages.RPCResponse.newBuilder().setOperationResponse( @@ -148,6 +156,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( TestOpResponse.getDefaultInstance())); } + @Override protected Void executeOperation(ConnectorFacade connectorFacade, TestOpRequest requestMessage) { connectorFacade.test(); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/UpdateAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/UpdateAsyncApiOpImpl.java index 97643e48..3a2a25b5 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/UpdateAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/UpdateAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -61,31 +62,37 @@ public UpdateAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction, timeout); } + @Override public Uid update(final ObjectClass objectClass, final Uid uid, final Set replaceAttributes, final OperationOptions options) { return asyncTimeout(updateAsync(objectClass, uid, replaceAttributes, options)); } + @Override public Uid addAttributeValues(final ObjectClass objectClass, final Uid uid, final Set valuesToAdd, final OperationOptions options) { return asyncTimeout(addAttributeValuesAsync(objectClass, uid, valuesToAdd, options)); } + @Override public Uid removeAttributeValues(final ObjectClass objectClass, final Uid uid, final Set valuesToRemove, final OperationOptions options) { return asyncTimeout(removeAttributeValuesAsync(objectClass, uid, valuesToRemove, options)); } + @Override public Promise updateAsync(final ObjectClass objectClass, final Uid uid, final Set replaceAttributes, final OperationOptions options) { return doUpdate(objectClass, uid, UpdateType.REPLACE, replaceAttributes, options); } + @Override public Promise addAttributeValuesAsync(final ObjectClass objectClass, final Uid uid, final Set valuesToAdd, final OperationOptions options) { return doUpdate(objectClass, uid, UpdateType.ADD, valuesToAdd, options); } + @Override public Promise removeAttributeValuesAsync(final ObjectClass objectClass, final Uid uid, final Set valuesToRemove, final OperationOptions options) { return doUpdate(objectClass, uid, UpdateType.REMOVE, valuesToRemove, options); @@ -124,6 +131,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -137,6 +145,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -156,6 +165,7 @@ public InternalRequest( } + @Override protected OperationMessages.UpdateOpResponse getOperationResponseMessages( OperationMessages.OperationResponse message) { if (message.hasUpdateOpResponse()) { @@ -166,6 +176,7 @@ protected OperationMessages.UpdateOpResponse getOperationResponseMessages( } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, OperationMessages.UpdateOpResponse message) { if (message.hasUid()) { @@ -193,6 +204,7 @@ protected InternalLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCMessages.RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, Uid result) { @@ -206,6 +218,7 @@ protected RPCMessages.RPCResponse.Builder createOperationResponse( OperationMessages.OperationResponse.newBuilder().setUpdateOpResponse(response)); } + @Override protected Uid executeOperation(ConnectorFacade connectorFacade, OperationMessages.UpdateOpRequest requestMessage) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ValidateAsyncApiOpImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ValidateAsyncApiOpImpl.java index 8204af1e..25662f42 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ValidateAsyncApiOpImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/impl/ValidateAsyncApiOpImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.async.impl; @@ -55,10 +56,12 @@ public ValidateAsyncApiOpImpl( super(remoteConnection, connectorKey, facadeKeyFunction,timeout); } + @Override public void validate() { asyncTimeout(validateAsync()); } + @Override public Promise validateAsync() { return submitRequest(new InternalRequestFactory(getConnectorKey(), getFacadeKeyFunction(), OperationMessages.OperationRequest.newBuilder().setValidateOpRequest( @@ -77,6 +80,7 @@ public InternalRequestFactory( this.operationRequest = operationRequest; } + @Override public InternalRequest createRemoteRequest( final RemoteOperationContext context, final long requestId, @@ -90,6 +94,7 @@ public InternalRequest createRemoteRequest( } } + @Override protected OperationMessages.OperationRequest.Builder createOperationRequest( final RemoteOperationContext remoteContext) { return operationRequest; @@ -118,6 +123,7 @@ protected ValidateOpResponse getOperationResponseMessages(OperationResponse mess } } + @Override protected void handleOperationResponseMessages(WebSocketConnectionHolder sourceConnection, ValidateOpResponse message) { getResultHandler().handleResult(null); @@ -139,6 +145,7 @@ protected ValidateLocalOperationProcessor(long requestId, WebSocketConnectionHol super(requestId, socket, message); } + @Override protected RPCResponse.Builder createOperationResponse(RemoteOperationContext remoteContext, Void result) { return RPCResponse.newBuilder().setOperationResponse( @@ -146,6 +153,7 @@ protected RPCResponse.Builder createOperationResponse(RemoteOperationContext rem ValidateOpResponse.getDefaultInstance())); } + @Override protected Void executeOperation(ConnectorFacade connectorFacade, ValidateOpRequest requestMessage) { connectorFacade.validate(); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/ClientRemoteConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/ClientRemoteConnectorInfoManager.java index 286ab681..caad6330 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/ClientRemoteConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/ClientRemoteConnectorInfoManager.java @@ -172,6 +172,7 @@ protected void preConfigure(final Connection conn) { CONNECT_PROMISE.set(conn, socket.connectPromise); conn.addCloseListener(new CloseListener() { + @Override public void onClosed(Closeable closeable, ICloseType type) throws IOException { logger.ok("DEBUG = Connection Closed {0}", type); @@ -206,6 +207,7 @@ public void onClosed(Closeable closeable, ICloseType type) throws IOException { }; final Runnable runnable = new Runnable() { + @Override public void run() { for (final WebSocketConnectionHolder ws : privateConnections) { if (!ws.isOperational() || !isRunning.get()) { @@ -257,10 +259,12 @@ public void run() { keepConnectedFuture = future; } + @Override public String getName() { return name; } + @Override protected void doClose() { keepConnectedFuture.cancel(false); for (WebSocketConnectionGroup e : connectionGroups.values()) { @@ -284,26 +288,31 @@ public boolean isSelfManaged() { // --- + @Override public AsyncConnectorInfoManager getAsyncConnectorInfoManager() { return delegatingAsyncConnectorInfoManager; } + @Override public RequestDistributor getRequestDistributor() { return requestDistributor; } private final RequestDistributor requestDistributor = new RequestDistributor() { + @Override public , V, E extends Exception> R trySubmitRequest( final RemoteRequestFactory requestFactory) { return ClientRemoteConnectorInfoManager.this.trySubmitRequest(requestFactory); } + @Override public boolean isOperational() { return ClientRemoteConnectorInfoManager.this.isOperational(); } }; + @Override public , V, E extends Exception> R trySubmitRequest( final RemoteRequestFactory requestFactory) { // Try the existing WS Connections first @@ -335,6 +344,7 @@ public connect(boolean exp final CompletionHandler callback = new CompletionHandler() { + @Override public void cancelled() { outerPromise.cancel(false); } + @Override public void failed(Throwable throwable) { lastConnectithenOnException.set(System.currentTimeMillis()); if (throwable instanceof ConnectException) { @@ -381,11 +393,13 @@ public void failed(Throwable throwable) { logger.info(throwable, "Failed establish remote connection"); } + @Override public void completed(Connection result) { outerPromise.handleResult(CONNECT_PROMISE.get(result)); logger.ok("TCP Connection is completed"); } + @Override public void updated(Connection result) { } @@ -407,6 +421,7 @@ public void updated(Connection result) { outerPromise .thenAsync( new AsyncFunction, WebSocketConnectionHolder, RuntimeException>() { + @Override public Promise apply( final Promise value) throws RuntimeException { @@ -414,6 +429,7 @@ public Promise apply( } }).thenOnResult( new ResultHandler() { + @Override public void handleResult( final WebSocketConnectionHolder result) { if (isRunning.get()) { @@ -424,6 +440,7 @@ public void handleResult( } }).thenOnException( new ExceptionHandler() { + @Override public void handleException(RuntimeException error) { lastConnectithenOnException.set(System .currentTimeMillis()); @@ -552,14 +569,17 @@ protected void handshake(RPCMessages.HandshakeMessage message) { } } + @Override public boolean isOperational() { return isConnected(); } + @Override public RemoteOperationContext getRemoteConnectionContext() { return context; } + @Override public Future sendBytes(byte[] data) { if (isConnected()) { return protocolHandler.send(data); @@ -569,6 +589,7 @@ public Future sendBytes(byte[] data) { } } + @Override public Future sendString(String data) { if (isConnected()) { return protocolHandler.send(data); @@ -578,6 +599,7 @@ public Future sendString(String data) { } } + @Override public void sendPing(byte[] applicationData) throws Exception { if (isConnected()) { protocolHandler.send(new DataFrame(new PingFrameType(), applicationData)); @@ -586,6 +608,7 @@ public void sendPing(byte[] applicationData) throws Exception { } } + @Override public void sendPong(byte[] applicationData) throws Exception { if (isConnected()) { protocolHandler.send(new DataFrame(new PongFrameType(), applicationData)); @@ -594,6 +617,7 @@ public void sendPong(byte[] applicationData) throws Exception { } } + @Override protected void tryClose() { ICFWebSocket.this.close(); } @@ -614,6 +638,7 @@ final boolean remove(final OperationMessageListener listener) { return listeners.remove(listener); } + @Override public void onClose(DataFrame frame) { super.onClose(frame); privateConnections.remove(adapter); @@ -632,6 +657,7 @@ public void onClose(DataFrame frame) { } } + @Override public void onConnect() { super.onConnect(); for (OperationMessageListener listener : listeners) { @@ -639,6 +665,7 @@ public void onConnect() { } } + @Override public void onMessage(byte[] data) { super.onMessage(data); for (OperationMessageListener listener : listeners) { @@ -646,6 +673,7 @@ public void onMessage(byte[] data) { } } + @Override public void onMessage(String text) { super.onMessage(text); for (OperationMessageListener listener : listeners) { @@ -653,6 +681,7 @@ public void onMessage(String text) { } } + @Override public void onPing(DataFrame frame) { super.onPing(frame); for (OperationMessageListener listener : listeners) { @@ -660,6 +689,7 @@ public void onPing(DataFrame frame) { } } + @Override public void onPong(DataFrame frame) { super.onPong(frame); for (OperationMessageListener listener : listeners) { @@ -669,6 +699,7 @@ public void onPong(DataFrame frame) { SimpleBinaryMessage activeMessage = null; + @Override public void onFragment(boolean last, byte[] fragment) { super.onFragment(last, fragment); if (activeMessage == null) { @@ -710,6 +741,7 @@ public void messageComplete() { } } + @Override protected void onNewWebSocketConnectionGroup(final WebSocketConnectionGroup connectionGroup) { logger.ok("Activating new ConnectionGroup {0}:{1}", getName(), connectionGroup .getRemoteSessionId()); @@ -724,18 +756,22 @@ public RemoteDelegatingAsyncConnectorInfoManager() { super(true); } + @Override protected RequestDistributor getMessageDistributor() { return ClientRemoteConnectorInfoManager.this.getRequestDistributor(); } + @Override protected void doClose() { ClientRemoteConnectorInfoManager.this.close(); } + @Override protected Collection getDelegates() { return connectionGroups.values(); } + @Override public void onAddAsyncConnectorInfoManager(AsyncConnectorInfoManager delegate) { // Notify deferred listeners super.onAddAsyncConnectorInfoManager(delegate); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/ConnectionManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/ConnectionManager.java index 9737418a..a51d0d29 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/ConnectionManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/ConnectionManager.java @@ -11,6 +11,7 @@ * See the Apache License Version 2.0 for the specific language governing permissions and limitations there under. * ==================== * Portions Copyrighted 2015 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ /** @@ -133,6 +134,7 @@ protected void destroyInstance(ScheduledExecutorService instance) { private final ScheduledFuture groupCheckFuture; private final Runnable groupChecker = new Runnable() { + @Override public void run() { if (isRunning()) { for (WebSocketConnectionGroup group : connectionGroups.values()) { @@ -159,6 +161,7 @@ protected void init() throws Exception { clientTransport.start(); } + @Override protected void doClose() { try { groupCheckFuture.cancel(false); @@ -184,6 +187,7 @@ protected void doClose() { scheduledExecutorService.release(); } + @Override public ClientRemoteConnectorInfoManager connect(final RemoteWSFrameworkConnectionInfo info) { if (isRunning()) { ClientRemoteConnectorInfoManager manager = registry.get(info); @@ -202,6 +206,7 @@ public ClientRemoteConnectorInfoManager connect(final RemoteWSFrameworkConnectio } manager.addCloseListener(new org.forgerock.openicf.framework.CloseListener() { + @Override public void onClosed(ClientRemoteConnectorInfoManager source) { registry.remove(info); } @@ -286,6 +291,7 @@ public long getTimeout(FilterChainContext ctx) { final IdleTimeoutFilter timeoutFilter = new IdleTimeoutFilter(timeoutExecutor, timeoutResolver, new IdleTimeoutFilter.TimeoutHandler() { + @Override public void onTimeout(Connection connection) { WebSocketHolder.get(connection).webSocket.close( WebSocket.NORMAL_CLOSURE, "Idle timeout occurred"); @@ -361,6 +367,7 @@ protected SSLContextConfigurator createSSLContextConfigurator( configurator.set(new SSLContextConfigurator(false)); } clientConfig.getTrustStorePass().access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { configurator.get().setTrustStorePass(new String(clearChars)); } @@ -372,6 +379,7 @@ public void access(char[] clearChars) { configurator.set(new SSLContextConfigurator(false)); } clientConfig.getKeyStorePass().access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { configurator.get().setKeyStorePass(clearChars); } @@ -382,6 +390,7 @@ public void access(char[] clearChars) { configurator.set(new SSLContextConfigurator(false)); } clientConfig.getKeyPass().access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { configurator.get().setKeyPass(clearChars); } @@ -521,6 +530,7 @@ private static final class IC extends WebSocketClientFilter { private static final Logger logger = Grizzly.logger(WebSocketClientFilter.class); + @Override public NextAction handleRead(FilterChainContext ctx) throws IOException { // Get connection final Connection connection = ctx.getConnection(); @@ -575,6 +585,7 @@ public NextAction handleRead(FilterChainContext ctx) throws IOException { } } + @Override protected void onHandshakeFailure(final Connection connection, final HandshakeException e) { super.onHandshakeFailure(connection, e); ClientRemoteConnectorInfoManager.CONNECT_PROMISE.get(connection).handleException( diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/RemoteConnectionInfoManagerFactory.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/RemoteConnectionInfoManagerFactory.java index deffa644..6ffa602c 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/RemoteConnectionInfoManagerFactory.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/RemoteConnectionInfoManagerFactory.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.client; @@ -64,6 +65,7 @@ public boolean isRunning() { return isRunning.get(); } + @Override public final void close() { if (isRunning.compareAndSet(Boolean.TRUE, Boolean.FALSE)) { doClose(); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/RemoteConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/RemoteConnectorInfoManager.java index 5bd51a03..502c2362 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/RemoteConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/client/RemoteConnectorInfoManager.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.client; @@ -40,6 +41,7 @@ public interface RemoteConnectorInfoManager extends Closeable { RequestDistributor getRequestDistributor(); + @Override public void close(); } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/local/AsyncLocalConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/local/AsyncLocalConnectorInfoManager.java index 956dbad3..eb150e89 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/local/AsyncLocalConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/local/AsyncLocalConnectorInfoManager.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.local; @@ -60,6 +61,7 @@ public AsyncLocalConnectorInfoManager(final ClassLoader connectorBundleParentCla this.connectorBundleParentClassLoader = connectorBundleParentClassLoader; } + @Override public void addConnectorInfo(LocalConnectorInfoImpl connectorInfo) { super.addConnectorInfo(connectorInfo); } @@ -94,6 +96,7 @@ public void addConnectorBundle(URL... connectorBundleURLs) { addConnectorBundle(Arrays.asList(connectorBundleURLs)); } + @Override protected boolean canCloseNow() { doClose(); return Boolean.FALSE; diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/ConnectorManifestScanner.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/ConnectorManifestScanner.java index 698b3c83..4bfddae2 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/ConnectorManifestScanner.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/ConnectorManifestScanner.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.osgi; @@ -58,6 +59,7 @@ public ConnectorManifestScanner(Version version) { /** * {@inheritDoc} */ + @Override public List scan(Bundle bundle) { NullArgumentException.validateNotNull(bundle, "Bundle"); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/Activator.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/Activator.java index 3ad3ee12..301412e6 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/Activator.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/Activator.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.osgi.internal; @@ -65,6 +66,7 @@ public class Activator implements BundleActivator { private ConnectorFrameworkServiceFactory framework = null; @SuppressWarnings("unchecked") + @Override public void start(BundleContext context) throws Exception { logger.ok("OpenICF OSGi Extender - Starting"); @@ -88,6 +90,7 @@ public void start(BundleContext context) throws Exception { logger.ok("OpenICF OSGi Extender - Started"); } + @Override public void stop(BundleContext context) throws Exception { logger.ok("OpenICF OSGi Extender - Stopping"); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/AsyncOsgiConnectorInfoManagerImpl.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/AsyncOsgiConnectorInfoManagerImpl.java index 03b139fd..c6d65a0a 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/AsyncOsgiConnectorInfoManagerImpl.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/AsyncOsgiConnectorInfoManagerImpl.java @@ -85,6 +85,7 @@ public class AsyncOsgiConnectorInfoManagerImpl extends private final HashMap>> connectorInfoCache = new HashMap>>(); + @Override public void addingEntries(Bundle bundle, List list) { NullArgumentException.validateNotNull(bundle, "Bundle"); NullArgumentException.validateNotNull(list, "ManifestEntry"); @@ -107,6 +108,7 @@ public void addingEntries(Bundle bundle, List list) { } } + @Override public void removingEntries(Bundle bundle, List list) { NullArgumentException.validateNotNull(bundle, "Bundle"); synchronized (connectorInfoCache) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/ConnectorFrameworkServiceFactory.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/ConnectorFrameworkServiceFactory.java index dfe49929..15ca14c8 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/ConnectorFrameworkServiceFactory.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/ConnectorFrameworkServiceFactory.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.osgi.internal; @@ -55,6 +56,7 @@ public ConnectorFrameworkServiceFactory( this.connectorInfoManager = connectorInfoManager; } + @Override public ConnectorFrameworkFactory getService(Bundle bundle, ServiceRegistration registration) { @@ -67,6 +69,7 @@ public ConnectorFrameworkFactory getService(Bundle bundle, bundle.adapt(BundleWiring.class).getClassLoader(); factory = new ConnectorFrameworkFactory() { + @Override protected ConnectorFramework newInstance() { return new OsgiConnectorFramework( getDefaultConnectorBundleParentClassLoader(), @@ -101,6 +104,7 @@ protected ConnectorFramework newInstance() { return factory; } + @Override public void ungetService(Bundle bundle, ServiceRegistration registration, ConnectorFrameworkFactory service) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/OsgiConnectorFramework.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/OsgiConnectorFramework.java index 10125bcf..7600a76d 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/OsgiConnectorFramework.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/osgi/internal/OsgiConnectorFramework.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.osgi.internal; @@ -37,10 +38,12 @@ public OsgiConnectorFramework(final ClassLoader connectorBundleParentClassLoader this.connectorInfoManagerDelegate = connectorInfoManager.wrap(); } + @Override public AsyncConnectorInfoManager getOSGiConnectorInfoManager() { return connectorInfoManagerDelegate; } + @Override public boolean isOSGiEnabled() { return true; } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/AsyncRemoteConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/AsyncRemoteConnectorInfoManager.java index 3d51c6b7..d5c5aebc 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/AsyncRemoteConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/AsyncRemoteConnectorInfoManager.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -72,6 +73,7 @@ protected AsyncRemoteConnectorInfoManager( .from(loadBalancingAlgorithmFactory.getAsyncRemoteConnectorInfoManager()) .transform( new Function>() { + @Override public RequestDistributor apply(AsyncRemoteConnectorInfoManager value) { return value.getMessageDistributor(); } @@ -88,10 +90,12 @@ public RequestDistributor getMessageDistributor() { return messageDistributor; } + @Override protected void doClose() { if (null != remoteCloseable) { try { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/AsyncRemoteLegacyConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/AsyncRemoteLegacyConnectorInfoManager.java index 4c9fe08a..f9864058 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/AsyncRemoteLegacyConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/AsyncRemoteLegacyConnectorInfoManager.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -50,6 +51,7 @@ public class AsyncRemoteLegacyConnectorInfoManager private static final Log logger = Log.getLog(AsyncRemoteLegacyConnectorInfoManager.class); protected final ConnectorEventHandler handler = new ConnectorEventHandler() { + @Override public void handleEvent(final ConnectorEvent event) { if (ConnectorEvent.CONNECTOR_REGISTERED.equals(event.getTopic())) { ConnectorInfo connectorInfo = @@ -79,16 +81,19 @@ public AsyncRemoteLegacyConnectorInfoManager(final RemoteFrameworkConnectionInfo } } + @Override protected void doClose() { future.cancel(true); delegate.deleteConnectorEventHandler(handler); super.doClose(); } + @Override public List getConnectorInfos() { return delegate.getConnectorInfos(); } + @Override public ConnectorInfo findConnectorInfo(final ConnectorKey key) { return delegate.findConnectorInfo(key); } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/ConnectionPrincipal.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/ConnectionPrincipal.java index 28bbd413..8346a107 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/ConnectionPrincipal.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/ConnectionPrincipal.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -70,6 +71,7 @@ public ConnectionPrincipal(final OperationMessageListener listener, this.globalConnectionGroups = globalConnectionGroups; } + @Override public String getName() { return DEFAULT_NAME; } @@ -105,6 +107,7 @@ public OperationMessageListener getOperationMessageListener() { return listener; } + @Override public , V, E extends Exception> R trySubmitRequest( RemoteRequestFactory requestFactory) { for (WebSocketConnectionGroup e : connectionGroups.values()) { @@ -118,6 +121,7 @@ public createLoadBalancer( List> delegates) { return new FailoverLoadBalancingAlgorithm( diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/LoadBalancingConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/LoadBalancingConnectorInfoManager.java index ed8d94f3..bef00530 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/LoadBalancingConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/LoadBalancingConnectorInfoManager.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -47,6 +48,7 @@ public Promise newInstance( return findConnectorInfoAsync(key).then( new Function() { + @Override public ConnectorFacade apply(ConnectorInfo value) throws RuntimeException { if (value instanceof RemoteConnectorInfoImpl) { return new RemoteAsyncConnectorFacade((RemoteConnectorInfoImpl) value, diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/ManagedAsyncConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/ManagedAsyncConnectorInfoManager.java index b565e8bb..9e362ff4 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/ManagedAsyncConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/ManagedAsyncConnectorInfoManager.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -71,6 +72,7 @@ public class ManagedAsyncConnectorInfoManager entry : managedConnectorInfos.values()) { entry.shutdown(); @@ -135,6 +138,7 @@ protected void addConnectorInfo(final V connectorInfo) { .from(rangePromiseCacheList) .filter( new Predicate>>() { + @Override public boolean apply(Pair> value) { return value.getKey().isInRange(connectorInfo.getConnectorKey()); } @@ -149,6 +153,7 @@ public boolean test(Pair getConnectorInfos() { ArrayList resultList = new ArrayList(managedConnectorInfos.size()); @@ -160,6 +165,7 @@ public List getConnectorInfos() { return resultList; } + @Override public ConnectorInfo findConnectorInfo(ConnectorKey key) { ConnectorEntry entry = managedConnectorInfos.get(key); if (null != entry) { @@ -168,6 +174,7 @@ public ConnectorInfo findConnectorInfo(ConnectorKey key) { return null; } + @Override public Promise findConnectorInfoAsync( final ConnectorKeyRange keyRange) { if (!isRunning.get()) { @@ -188,6 +195,7 @@ public Promise findConnectorInfoAsync( rangePromiseCacheList.add(cacheEntry); cacheEntry.getValue().thenOnResultOrException(new Runnable() { + @Override public void run() { rangePromiseCacheList.remove(cacheEntry); } @@ -215,6 +223,7 @@ public void run() { } } + @Override public Promise findConnectorInfoAsync(final ConnectorKey key) { if (!isRunning.get()) { return Promises. newExceptionPromise(CLOSED_EXCEPTION); @@ -239,20 +248,24 @@ public Promise findConnectorInfoAsync(final Con public AsyncConnectorInfoManager wrap() { return new AsyncConnectorInfoManager() { + @Override public Promise findConnectorInfoAsync( final ConnectorKey key) { return ManagedAsyncConnectorInfoManager.this.findConnectorInfoAsync(key); } + @Override public Promise findConnectorInfoAsync( final ConnectorKeyRange keyRange) { return ManagedAsyncConnectorInfoManager.this.findConnectorInfoAsync(keyRange); } + @Override public List getConnectorInfos() { return ManagedAsyncConnectorInfoManager.this.getConnectorInfos(); } + @Override public ConnectorInfo findConnectorInfo(final ConnectorKey key) { return ManagedAsyncConnectorInfoManager.this.findConnectorInfo(key); } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/MessagesUtil.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/MessagesUtil.java index 6fe8c020..8f731f4e 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/MessagesUtil.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/MessagesUtil.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -240,6 +241,7 @@ public static ConnectorObjects.AttributeMessage.Builder fromAttribute( GuardedByteArray sourceValue = (GuardedByteArray) source; sourceValue.access(new GuardedByteArray.Accessor() { + @Override public void access(byte[] clearBytes) { builder.addValue(ConnectorObjects.AttributeUnionValue.newBuilder() .setGuardedByteArrayValue( @@ -251,6 +253,7 @@ public void access(byte[] clearBytes) { GuardedString sourceValue = (GuardedString) source; sourceValue.access(new GuardedString.Accessor() { + @Override public void access(char[] clearBytes) { builder.addValue(ConnectorObjects.AttributeUnionValue .newBuilder() @@ -385,6 +388,7 @@ private interface ObjectHandler { + @Override public Uid deserialize(CommonObjectMessages.Uid message) { if (StringUtil.isNotBlank(message.getRevision())) { return new Uid(message.getValue(), message.getRevision()); @@ -393,10 +397,12 @@ public Uid deserialize(CommonObjectMessages.Uid message) { } } + @Override public CommonObjectMessages.Uid serialize(Uid source) { return serializeBuilder(source).build(); } + @Override public CommonObjectMessages.Uid.Builder serializeBuilder(Uid source) { CommonObjectMessages.Uid.Builder builder = CommonObjectMessages.Uid.newBuilder().setValue(source.getUidValue()); @@ -411,15 +417,18 @@ private final static class ConnectorKeyHandler implements ObjectHandler { + @Override public ConnectorKey deserialize(CommonObjectMessages.ConnectorKey message) { return new ConnectorKey(message.getBundleName(), message.getBundleVersion(), message .getConnectorName()); } + @Override public CommonObjectMessages.ConnectorKey serialize(ConnectorKey source) { return serializeBuilder(source).build(); } + @Override public CommonObjectMessages.ConnectorKey.Builder serializeBuilder(ConnectorKey source) { return CommonObjectMessages.ConnectorKey.newBuilder().setBundleName( source.getBundleName()).setBundleVersion(source.getBundleVersion()) @@ -430,16 +439,19 @@ public CommonObjectMessages.ConnectorKey.Builder serializeBuilder(ConnectorKey s private final static class ScriptContextHandler implements ObjectHandler { + @Override public ScriptContext deserialize(CommonObjectMessages.ScriptContext message) { Map arguments = deserializeLegacy(message.getScriptArguments()); return new ScriptContext(message.getScript().getScriptLanguage(), message.getScript() .getScriptText(), null != arguments ? arguments : new HashMap()); } + @Override public CommonObjectMessages.ScriptContext serialize(ScriptContext source) { return serializeBuilder(source).build(); } + @Override public CommonObjectMessages.ScriptContext.Builder serializeBuilder(ScriptContext source) { return CommonObjectMessages.ScriptContext.newBuilder().setScript( CommonObjectMessages.Script.newBuilder().setScriptLanguage( @@ -452,6 +464,7 @@ private final static class SearchResultHandler implements ObjectHandler { + @Override public SearchResult deserialize(CommonObjectMessages.SearchResult message) { SearchResult.CountPolicy policy = SearchResult.CountPolicy.NONE; @@ -474,10 +487,12 @@ public SearchResult deserialize(CommonObjectMessages.SearchResult message) { message.getTotalPagedResults(), message.getRemainingPagedResults()); } + @Override public CommonObjectMessages.SearchResult serialize(SearchResult source) { return serializeBuilder(source).build(); } + @Override public CommonObjectMessages.SearchResult.Builder serializeBuilder(SearchResult source) { CommonObjectMessages.SearchResult.Builder builder = CommonObjectMessages.SearchResult.newBuilder().setRemainingPagedResults( @@ -506,15 +521,18 @@ private final static class ConnectorObjectHandler implements ObjectHandler { + @Override public ConnectorObject deserialize(CommonObjectMessages.ConnectorObject message) { Set attributes = deserializeLegacy(message.getAttributes()); return new ConnectorObject(new ObjectClass(message.getObjectClass()), attributes); } + @Override public CommonObjectMessages.ConnectorObject serialize(ConnectorObject source) { return serializeBuilder(source).build(); } + @Override public CommonObjectMessages.ConnectorObject.Builder serializeBuilder(ConnectorObject source) { return CommonObjectMessages.ConnectorObject.newBuilder().setObjectClass( source.getObjectClass().getObjectClassValue()).setAttributes( @@ -525,14 +543,17 @@ public CommonObjectMessages.ConnectorObject.Builder serializeBuilder(ConnectorOb private final static class LocaleHandler implements ObjectHandler { + @Override public Locale deserialize(CommonObjectMessages.Locale message) { return new Locale(message.getLanguage(), message.getCountry(), message.getVariant()); } + @Override public CommonObjectMessages.Locale serialize(Locale source) { return serializeBuilder(source).build(); } + @Override public CommonObjectMessages.Locale.Builder serializeBuilder(Locale source) { return CommonObjectMessages.Locale.newBuilder().setCountry(source.getCountry()) .setLanguage(source.getLanguage()).setVariant(source.getVariant()); @@ -543,6 +564,7 @@ private final static class SyncDeltaHandler implements ObjectHandler { + @Override public SyncDelta deserialize(CommonObjectMessages.SyncDelta message) { SyncDeltaBuilder builder = new SyncDeltaBuilder(); builder.setToken(deserializeMessage(message.getToken(), SyncToken.class)); @@ -576,10 +598,12 @@ public SyncDelta deserialize(CommonObjectMessages.SyncDelta message) { return builder.build(); } + @Override public CommonObjectMessages.SyncDelta serialize(SyncDelta source) { return serializeBuilder(source).build(); } + @Override public CommonObjectMessages.SyncDelta.Builder serializeBuilder(SyncDelta source) { CommonObjectMessages.SyncDelta.Builder builder = CommonObjectMessages.SyncDelta.newBuilder(); @@ -621,14 +645,17 @@ private final static class SyncTokenHandler implements ObjectHandler { + @Override public SyncToken deserialize(CommonObjectMessages.SyncToken message) { return new SyncToken(deserializeLegacy(message.getValue())); } + @Override public CommonObjectMessages.SyncToken serialize(SyncToken source) { return serializeBuilder(source).build(); } + @Override public CommonObjectMessages.SyncToken.Builder serializeBuilder(SyncToken source) { return CommonObjectMessages.SyncToken.newBuilder().setValue( serializeLegacy(source.getValue())); @@ -639,14 +666,17 @@ private final static class BatchEmptyResultHandler implements ObjectHandler { + @Override public BatchEmptyResult deserialize(OperationMessages.BatchEmptyResponse message) { return new BatchEmptyResult(message.getResultMessage()); } + @Override public OperationMessages.BatchEmptyResponse serialize(BatchEmptyResult source) { return serializeBuilder(source).build(); } + @Override public OperationMessages.BatchEmptyResponse.Builder serializeBuilder(BatchEmptyResult source) { return OperationMessages.BatchEmptyResponse.newBuilder().setResultMessage(source.getMessage()); } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/OpenICFServerAdapter.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/OpenICFServerAdapter.java index 3c3a5ea7..abe86b35 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/OpenICFServerAdapter.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/OpenICFServerAdapter.java @@ -100,11 +100,13 @@ public OpenICFServerAdapter(final ConnectorFramework framework, handshakeMessage = MessagesUtil.createHandshakeMessage(keyPair.getPublic()); } + @Override public void onClose(final WebSocketConnectionHolder socket, int code, String reason) { logger.info("{0} onClose({1},{2}) ", loggerName(), String.valueOf(code), String .valueOf(reason)); } + @Override public void onConnect(final WebSocketConnectionHolder socket) { if (isClient()) { logger.info("Client onConnect() - send Handshake '({0})'", handshakeMessage.build().getSessionId()); @@ -118,14 +120,17 @@ public void onConnect(final WebSocketConnectionHolder socket) { } } + @Override public void onError(Throwable t) { logger.ok(t, "Socket error"); } + @Override public void onMessage(WebSocketConnectionHolder socket, String data) { logger.warn("String message is ignored: {0}", data); } + @Override public void onMessage(final WebSocketConnectionHolder socket, final byte[] bytes) { logger.ok("{0} onMessage({1}:bytes)", loggerName(), bytes.length); @@ -135,6 +140,7 @@ public void onMessage(final WebSocketConnectionHolder socket, final byte[] bytes // Operation requests are handed off to the shared pool inside // processMessage, so operations of one socket still run concurrently. socket.executeSerially(connectorFramework.getMessageExecutor(), new Runnable() { + @Override public void run() { processMessage(socket, bytes); } @@ -261,6 +267,7 @@ protected void handleResponseMessage(final WebSocketConnectionHolder socket, lon } } + @Override public void onPing(WebSocketConnectionHolder socket, byte[] bytes) { // Nothing to do, pong response has been sent logger.info("{0} onPing()", loggerName()); @@ -272,6 +279,7 @@ public void onPing(WebSocketConnectionHolder socket, byte[] bytes) { // socket.touch(); } + @Override public void onPong(WebSocketConnectionHolder socket, byte[] bytes) { // Confirm ping response! logger.info("{0} onPong()", loggerName()); @@ -530,6 +538,7 @@ public RemoteConfigurationChangeListener(WebSocketConnectionHolder socket, this.config = config; } + @Override public void configurationPropertyChange(List changes) { try { RemoteMessage.Builder request = diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RemoteAsyncConnectorFacade.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RemoteAsyncConnectorFacade.java index eb652b4d..f5d7545b 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RemoteAsyncConnectorFacade.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RemoteAsyncConnectorFacade.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -141,6 +142,7 @@ protected RemoteAsyncConnectorFacade( facadeKeys = new ConcurrentHashMap(); facadeKeyFunction = new Function() { + @Override public ByteString apply(final RemoteOperationContext value) throws RuntimeException { ByteString facadeKey = @@ -156,17 +158,20 @@ public ByteString apply(final RemoteOperationContext value) transformer .apply(new LoadBalancingConnectorFacadeContext() { + @Override public APIConfiguration getAPIConfiguration() { return connectorInfo .createDefaultAPIConfiguration(); } + @Override public String getPrincipalName() { return value .getRemotePrincipal() .getName(); } + @Override public RemoteOperationContext getRemoteOperationContext() { return value; } @@ -207,6 +212,7 @@ public RemoteOperationContext getRemoteOperationContext() { final ByteString facadeKey = ByteString.copyFromUtf8(getConnectorFacadeKey()); facadeKeyFunction = new Function() { + @Override public ByteString apply(RemoteOperationContext context) throws RuntimeException { context.getRemoteConnectionGroup().findConnectorInfo( @@ -382,6 +388,7 @@ protected T getAsyncOperationCheckSupported(final Class return op; } + @Override protected APIOperation getOperationImplementation(Class api) { if (AuthenticationApiOp.class.isAssignableFrom(api)) { return authenticationApiOp; @@ -420,74 +427,87 @@ protected APIOperation getOperationImplementation(Class } } + @Override public Promise authenticateAsync(ObjectClass objectClass, String username, GuardedString password, OperationOptions options) { return getAsyncOperationCheckSupported(AuthenticationAsyncApiOp.class).authenticateAsync( objectClass, username, password, options); } + @Override public Promise createAsync(ObjectClass objectClass, Set createAttributes, OperationOptions options) { return getAsyncOperationCheckSupported(CreateAsyncApiOp.class).createAsync(objectClass, createAttributes, options); } + @Override public Promise deleteAsync(ObjectClass objectClass, Uid uid, OperationOptions options) { return getAsyncOperationCheckSupported(DeleteAsyncApiOp.class).deleteAsync(objectClass, uid, options); } + @Override public Promise getObjectAsync(ObjectClass objectClass, Uid uid, OperationOptions options) { return getAsyncOperationCheckSupported(GetAsyncApiOp.class).getObjectAsync(objectClass, uid, options); } + @Override public Promise resolveUsernameAsync(ObjectClass objectClass, String username, OperationOptions options) { return getAsyncOperationCheckSupported(ResolveUsernameAsyncApiOp.class) .resolveUsernameAsync(objectClass, username, options); } + @Override public Promise schemaAsync() { return getAsyncOperationCheckSupported(SchemaAsyncApiOp.class).schemaAsync(); } + @Override public Promise runScriptOnConnectorAsync(ScriptContext request, OperationOptions options) { return getAsyncOperationCheckSupported(ScriptOnConnectorAsyncApiOp.class) .runScriptOnConnectorAsync(request, options); } + @Override public Promise runScriptOnResourceAsync(ScriptContext request, OperationOptions options) { return getAsyncOperationCheckSupported(ScriptOnResourceAsyncApiOp.class) .runScriptOnResourceAsync(request, options); } + @Override public Promise testAsync() { return getAsyncOperationCheckSupported(TestAsyncApiOp.class).testAsync(); } + @Override public Promise updateAsync(ObjectClass objectClass, Uid uid, Set replaceAttributes, OperationOptions options) { return getAsyncOperationCheckSupported(UpdateAsyncApiOp.class).updateAsync(objectClass, uid, replaceAttributes, options); } + @Override public Promise addAttributeValuesAsync(ObjectClass objectClass, Uid uid, Set valuesToAdd, OperationOptions options) { return getAsyncOperationCheckSupported(UpdateAsyncApiOp.class).addAttributeValuesAsync( objectClass, uid, valuesToAdd, options); } + @Override public Promise removeAttributeValuesAsync(ObjectClass objectClass, Uid uid, Set valuesToRemove, OperationOptions options) { return getAsyncOperationCheckSupported(UpdateAsyncApiOp.class).removeAttributeValuesAsync( objectClass, uid, valuesToRemove, options); } + @Override public Promise validateAsync() { return getAsyncOperationCheckSupported(ValidateAsyncApiOp.class).validateAsync(); } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RemoteServerConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RemoteServerConnectorInfoManager.java index fe5c5b80..8c815f86 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RemoteServerConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RemoteServerConnectorInfoManager.java @@ -12,6 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2016 ForgeRock AS. + * Portions Copyright 2026 3A Systems, LLC. */ package org.forgerock.openicf.framework.remote; @@ -87,10 +88,12 @@ public void addWebSocketConnectionGroup(WebSocketConnectionGroup connectionGroup connectionGroup.addCloseListener(closeListener); } + @Override protected RequestDistributor getMessageDistributor() { return messageDistributor; } + @Override protected void doClose() { for (AsyncConnectorInfoManager next : getDelegates()) { if (next instanceof WebSocketConnectionGroup) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RoundRobinLoadBalancingAlgorithmFactory.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RoundRobinLoadBalancingAlgorithmFactory.java index 29abf9fe..b1712615 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RoundRobinLoadBalancingAlgorithmFactory.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/RoundRobinLoadBalancingAlgorithmFactory.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -36,6 +37,7 @@ public class RoundRobinLoadBalancingAlgorithmFactory extends LoadBalancingAlgorithmFactory { + @Override protected RequestDistributor createLoadBalancer( List> delegates) { return new RoundRobinLoadBalancingAlgorithm( diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/LocalOperationProcessor.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/LocalOperationProcessor.java index c418d060..dd184e48 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/LocalOperationProcessor.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/LocalOperationProcessor.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote.rpc; @@ -49,6 +50,7 @@ protected LocalOperationProcessor(long requestId, final WebSocketConnectionHolde protected abstract RPCResponse.Builder createOperationResponse( RemoteOperationContext remoteContext, V result); + @Override public boolean check() { boolean valid = inconsistencyCounter < 3; if (!valid) { @@ -60,10 +62,12 @@ public boolean check() { return valid; } + @Override public void inconsistent() { inconsistencyCounter++; } + @Override protected boolean tryHandleResult(V result) { try { final byte[] responseMessage = @@ -81,6 +85,7 @@ protected boolean tryHandleResult(V result) { return false; } + @Override protected boolean tryHandleError(RuntimeException error) { final byte[] responseMessage = MessagesUtil.createErrorResponse(getRequestId(), error).build().toByteArray(); @@ -101,6 +106,7 @@ protected WebSocketConnectionHolder trySendBytes(final byte[] responseMessage) { private WebSocketConnectionHolder trySendMessageNow(final byte[] responseMessage) { return getRemoteConnectionContext().getRemoteConnectionGroup().trySendMessage( new Function() { + @Override public WebSocketConnectionHolder apply(WebSocketConnectionHolder value) throws Exception { value.sendBytes(responseMessage).get(100, TimeUnit.MILLISECONDS); @@ -109,6 +115,7 @@ public WebSocketConnectionHolder apply(WebSocketConnectionHolder value) }); } + @Override protected boolean tryCancel() { return false; } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/RemoteOperationContext.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/RemoteOperationContext.java index 39afbbe0..b450d7e6 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/RemoteOperationContext.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/RemoteOperationContext.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote.rpc; @@ -42,6 +43,7 @@ protected RemoteOperationContext(final Principal connectionPrincipal, final WebS this.connectionGroup = connectionGroup; } + @Override public WebSocketConnectionGroup getRemoteConnectionGroup() { return connectionGroup; } diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/RemoteOperationRequest.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/RemoteOperationRequest.java index 4d4c9029..b376a90e 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/RemoteOperationRequest.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/RemoteOperationRequest.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote.rpc; @@ -61,6 +62,7 @@ protected abstract boolean handleResponseMessage(WebSocketConnectionHolder sourc protected abstract RPCRequest.Builder createOperationRequest( RemoteOperationContext remoteContext); + @Override public boolean check() { boolean valid = inconsistencyCounter < 3; if (!valid) { @@ -74,10 +76,12 @@ public boolean check() { return valid; } + @Override public void inconsistent() { inconsistencyCounter++; } + @Override public void handleIncomingMessage(WebSocketConnectionHolder sourceConnection, Object message) { if (message instanceof RPCMessages.ExceptionMessage) { handleExceptionMessage((RPCMessages.ExceptionMessage) message); @@ -92,12 +96,14 @@ public void handleIncomingMessage(WebSocketConnectionHolder sourceConnection, Ob } } + @Override protected MessageElement createMessageElement(RemoteOperationContext remoteContext, long requestId) { return MessageElement.createByteMessage(RemoteMessage.newBuilder().setMessageId(requestId) .setRequest(createOperationRequest(remoteContext)).build().toByteArray()); } + @Override protected void tryCancelRemote(RemoteOperationContext remoteContext, long requestId) { final byte[] cancelMessage = RemoteMessage.newBuilder().setMessageId(requestId).setRequest( @@ -107,6 +113,7 @@ protected void tryCancelRemote(RemoteOperationContext remoteContext, long reques trySendBytes(cancelMessage); } + @Override protected RuntimeException createCancellationException(Throwable cancellationException) { if (cancellationException instanceof Exception) return (RuntimeException) cancellationException; @@ -122,6 +129,7 @@ else if (null != cancellationException) { protected void trySendBytes(final byte[] cancelMessage) { if (null == getConnectionContext().getRemoteConnectionGroup().trySendMessage( new Function() { + @Override public Boolean apply(WebSocketConnectionHolder value) throws Exception { value.sendBytes(cancelMessage).get(); return Boolean.TRUE; diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/WebSocketConnectionGroup.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/WebSocketConnectionGroup.java index b5010290..69c5f799 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/WebSocketConnectionGroup.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/WebSocketConnectionGroup.java @@ -81,6 +81,7 @@ public class WebSocketConnectionGroup private final CloseListener closeListener = new CloseListener() { + @Override public void onClosed(final WebSocketConnectionHolder connection) { for (Pair p : webSockets) { if (connection.equals(p.getSecond())) { @@ -200,6 +201,7 @@ public boolean trySendMessage(final M message) { final byte[] messageBytes = message.toByteArray(); return Boolean.TRUE .equals(trySendMessage(new Function() { + @Override public Boolean apply(WebSocketConnectionHolder value) throws Exception { value.sendBytes(messageBytes).get(); return Boolean.TRUE; @@ -207,10 +209,12 @@ public Boolean apply(WebSocketConnectionHolder value) throws Exception { })); } + @Override protected RemoteOperationContext getRemoteConnectionContext() { return operationContext; } + @Override public boolean isOperational() { for (Pair e : webSockets) { if (e.getSecond().isOperational()) { @@ -233,6 +237,7 @@ public boolean isRunning() { return isRunning.get() && delegate.isRunning(); } + @Override public final void close() { if (canCloseNow()) { try { @@ -293,19 +298,23 @@ protected void invokeCloseListener(CloseListener close // --- AsyncConnectorInfoManager implementation --- + @Override public Promise findConnectorInfoAsync(final ConnectorKey key) { return delegate.findConnectorInfoAsync(key); } + @Override public Promise findConnectorInfoAsync( final ConnectorKeyRange keyRange) { return delegate.findConnectorInfoAsync(keyRange); } + @Override public List getConnectorInfos() { return delegate.getConnectorInfos(); } + @Override public ConnectorInfo findConnectorInfo(final ConnectorKey key) { return delegate.findConnectorInfo(key); } @@ -399,6 +408,7 @@ private static class ControlMessageRequestFactory public final EnumSet infoLevels = EnumSet.noneOf(InfoLevel.class); + @Override public ControlMessageRequest createRemoteRequest( RemoteOperationContext context, long requestId, @@ -420,6 +430,7 @@ public ControlMessageRequest( this.infoLevels = infoLevels; } + @Override protected RPCMessages.RPCRequest.Builder createOperationRequest( RemoteOperationContext remoteContext) { @@ -432,6 +443,7 @@ protected RPCMessages.RPCRequest.Builder createOperationRequest( return RPCMessages.RPCRequest.newBuilder().setControlRequest(builder); } + @Override protected boolean handleResponseMessage(WebSocketConnectionHolder sourceConnection, MessageLite message) { if (message instanceof ControlResponse) { diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/WebSocketConnectionHolder.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/WebSocketConnectionHolder.java index 4ea78edd..a91e2946 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/WebSocketConnectionHolder.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/rpc/WebSocketConnectionHolder.java @@ -129,6 +129,7 @@ public boolean isHandHooked() { return null != getRemoteConnectionContext(); } + @Override public final void close() { tryClose(); CloseListener listener; diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/security/SharedSecretPrincipal.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/security/SharedSecretPrincipal.java index 676e4671..830fbd51 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/security/SharedSecretPrincipal.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/security/SharedSecretPrincipal.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote.security; @@ -59,6 +60,7 @@ public static SharedSecretPrincipal createMutual(X509Certificate clientCertifica clientCertificate, "clientCertificate").getEncoded(), false), null); } + @Override public String getName() { return name; } @@ -71,12 +73,14 @@ public boolean verify(String hash) { return null != secret && secret.verifyBase64SHA1Hash(hash); } + @Override public String toString() { return "SharedSecretPrincipal{" + (null != secret ? "name='" + name + '\'' + ", secret=" + secret : "fingerPrint='" + name + '\'') + '}'; } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -93,6 +97,7 @@ public boolean equals(Object o) { return true; } + @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + (secret != null ? secret.hashCode() : 0); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/ConnectorKeyRange.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/ConnectorKeyRange.java index f5cd7e6e..648400f5 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/ConnectorKeyRange.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/ConnectorKeyRange.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common; @@ -74,6 +75,7 @@ private ConnectorKeyRange(String bundleName, String bundleVersion, String connec this.connectorName = connectorName; } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -87,6 +89,7 @@ public boolean equals(Object o) { && connectorName.equals(that.connectorName); } + @Override public int hashCode() { int result = bundleName.hashCode(); result = 31 * result + bundleVersionRange.hashCode(); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/Pair.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/Pair.java index af5f4749..1230dc3a 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/Pair.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/Pair.java @@ -21,6 +21,7 @@ * ==================== * Portions Copyrighted 2013 ConnId * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common; @@ -115,6 +116,7 @@ public String toString() { /** * {@inheritDoc} */ + @Override public T1 getKey() { return this.first; } @@ -122,6 +124,7 @@ public T1 getKey() { /** * {@inheritDoc} */ + @Override public T2 getValue() { return this.second; } @@ -129,6 +132,7 @@ public T2 getValue() { /** * {@inheritDoc} */ + @Override public T2 setValue(final T2 value) { this.second = value; return this.second; diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/Version.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/Version.java index 219a2bf1..709a4a7c 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/Version.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/Version.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common; @@ -189,6 +190,7 @@ public boolean equals(Object o) { return false; } + @Override public int compareTo(Version that) { for (int i = 0; i < Math.max(this.components.length, that.components.length); i++) { Integer c1 = i < this.components.length ? this.components[i] : Integer.valueOf(0); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/VersionRange.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/VersionRange.java index b2975c64..70e347ec 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/VersionRange.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/VersionRange.java @@ -257,6 +257,7 @@ private boolean isEmpty0() { return comparison > 0; // true if left > right } + @Override public boolean equals(Object obj) { if (obj == null) { return false; @@ -291,6 +292,7 @@ public int hashCode() { return result; } + @Override public String toString() { if (ceilingVersion != null) { StringBuilder sb = new StringBuilder(); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/XmlUtil.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/XmlUtil.java index 084dc5b0..0698c20e 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/XmlUtil.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/XmlUtil.java @@ -76,6 +76,7 @@ public static Document parseString(String xml) throws IOException, SAXException, private static class DummyDTDResolver implements EntityResolver { + @Override public InputSource resolveEntity(String publicID, String systemID) { if ((publicID != null && publicID.endsWith(".dtd")) || (systemID != null && systemID.endsWith(".dtd"))) { diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/logging/StdOutLogger.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/logging/StdOutLogger.java index cef9e061..a76055b9 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/logging/StdOutLogger.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/logging/StdOutLogger.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common.logging; @@ -74,6 +75,7 @@ protected DateFormat initialValue() { * * @see LogSpi#log(Class, String, Level, String, Throwable) */ + @Override public void log(final Class clazz, final String methodName, final Level level, final String message, final Throwable ex) { @@ -104,6 +106,7 @@ public void log(final Class clazz, final String methodName, final Level level } } + @Override public void log(final Class clazz, final StackTraceElement caller, final Level level, final String message, final Throwable ex) { String methodName = null; if (null != caller) { @@ -123,6 +126,7 @@ public void log(final Class clazz, final StackTraceElement caller, final Leve /** * Always returns true. */ + @Override public boolean isLoggable(final Class clazz, final Level level) { return true; } @@ -130,6 +134,7 @@ public boolean isLoggable(final Class clazz, final Level level) { /** * Always returns true. */ + @Override public boolean needToInferCaller(Class clazz, Level level) { return true; } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/SecurityUtil.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/SecurityUtil.java index 8ada0dd7..8fdc7de0 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/SecurityUtil.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/SecurityUtil.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2015 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common.security; @@ -216,6 +217,7 @@ public static String decrypt(GuardedString guardedString) { GuardedString.Accessor accessor = new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { clearText[0] = new String(clearChars); } @@ -237,6 +239,7 @@ public static byte[] decrypt(GuardedByteArray guardedByteArray) { final byte[][] clearByte = new byte[1][]; GuardedByteArray.Accessor accessor = new GuardedByteArray.Accessor() { + @Override public void access(byte[] clearBytes) { clearByte[0] = clearBytes; } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/CreateBatchTask.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/CreateBatchTask.java index a8b8be66..778d85a7 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/CreateBatchTask.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/CreateBatchTask.java @@ -72,6 +72,7 @@ public CreateBatchTask(ObjectClass objectClass, Set createAttributes, * the executor that will perform the actual create operation. * @return the {@link Uid} of the newly created object. */ + @Override public Uid execute(BatchTaskExecutor executor) { return executor.execute(this); } @@ -81,6 +82,7 @@ public Uid execute(BatchTaskExecutor executor) { * * @return the object class specified when this task was constructed. */ + @Override public ObjectClass getObjectClass() { return objectClass; } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/DeleteBatchTask.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/DeleteBatchTask.java index 19255f12..ec620459 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/DeleteBatchTask.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/DeleteBatchTask.java @@ -62,6 +62,7 @@ public DeleteBatchTask(ObjectClass objectClass, Uid uid, OperationOptions option * the executor that will perform the actual delete operation. * @return an empty result confirming the delete completed. */ + @Override public BatchEmptyResult execute(BatchTaskExecutor executor) { return executor.execute(this); } @@ -71,6 +72,7 @@ public BatchEmptyResult execute(BatchTaskExecutor executor) { * * @return the object class specified when this task was constructed. */ + @Override public ObjectClass getObjectClass() { return objectClass; } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/UpdateBatchTask.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/UpdateBatchTask.java index 0cce2e95..bd86aa07 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/UpdateBatchTask.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/batch/UpdateBatchTask.java @@ -80,6 +80,7 @@ public UpdateBatchTask(ObjectClass objectClass, Uid uid, Set replaceA * the executor that will perform the actual update operation. * @return the {@link Uid} of the updated object. */ + @Override public Uid execute(BatchTaskExecutor executor) { return executor.execute(this); } @@ -93,6 +94,7 @@ public UpdateType getUpdateType() { * * @return the object class specified when this task was constructed. */ + @Override public ObjectClass getObjectClass() { return objectClass; } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SortKey.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SortKey.java index 82afd0aa..93700f74 100755 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SortKey.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SortKey.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects; @@ -109,6 +110,7 @@ public boolean isAscendingOrder() { * * @return The string representation of this sort key. */ + @Override public String toString() { final StringBuilder builder = new StringBuilder(); builder.append(isAscendingOrder ? '+' : '-'); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Subscription.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Subscription.java index 3b10e52c..13925456 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Subscription.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Subscription.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects; @@ -46,6 +47,7 @@ public interface Subscription extends Closeable { * @see org.identityconnectors.framework.api.operations.SyncEventSubscriptionApiOp#subscribe(ObjectClass, * SyncToken, Observer, OperationOptions) */ + @Override void close(); /** diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/AbstractFilterTranslator.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/AbstractFilterTranslator.java index 1ce21d98..255fe87f 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/AbstractFilterTranslator.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/AbstractFilterTranslator.java @@ -103,6 +103,7 @@ abstract public class AbstractFilterTranslator implements FilterTranslator * possible you implement {@link #createOrExpression} * */ + @Override public final List translate(Filter filter) { if (filter == null) { return new ArrayList(); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/AndFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/AndFilter.java index 0a6c4ea8..7f3d521f 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/AndFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/AndFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -53,6 +54,7 @@ public AndFilter(final Collection filters) { * * @see Filter#accept(ConnectorObject) */ + @Override public boolean accept(final ConnectorObject obj) { boolean result = true; for (final Filter subFilter : subFilters) { @@ -64,6 +66,7 @@ public boolean accept(final ConnectorObject obj) { return result; } + @Override public R accept(FilterVisitor v, P p) { return v.visitAndFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ContainsAllValuesFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ContainsAllValuesFilter.java index 815d4b03..3c95bdab 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ContainsAllValuesFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ContainsAllValuesFilter.java @@ -60,11 +60,13 @@ public ContainsAllValuesFilter(Attribute attr) { * * {@inheritDoc} */ + @Override public boolean accept(ConnectorObject obj) { Attribute found = obj.getAttributeByName(name); return found != null && found.getValue() != null && found.getValue().containsAll(values); } + @Override public R accept(FilterVisitor v, P p) { return v.visitContainsAllValuesFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ContainsFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ContainsFilter.java index 8c00f44d..03cb3884 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ContainsFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ContainsFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -36,6 +37,7 @@ public boolean accept(String value) { return value.contains(getValue()); } + @Override public R accept(FilterVisitor v, P p) { return v.visitContainsFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/EndsWithFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/EndsWithFilter.java index 4a3c06de..ba4412fe 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/EndsWithFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/EndsWithFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -36,6 +37,7 @@ public boolean accept(String value) { return value.endsWith(getValue()); } + @Override public R accept(FilterVisitor v, P p) { return v.visitEndsWithFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/EqualsFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/EqualsFilter.java index 468cea77..07b0e45d 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/EqualsFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/EqualsFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -60,6 +61,7 @@ public EqualsFilter(Attribute attr) { * * @see Filter#accept(ConnectorObject) */ + @Override public boolean accept(ConnectorObject obj) { boolean ret = false; Attribute thisAttr = getAttribute(); @@ -70,6 +72,7 @@ public boolean accept(ConnectorObject obj) { return ret; } + @Override public R accept(FilterVisitor v, P p) { return v.visitEqualsFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ExtendedMatchFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ExtendedMatchFilter.java index be81c7c7..6e028e97 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ExtendedMatchFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/ExtendedMatchFilter.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -57,10 +58,12 @@ public String getOperator() { * Framework can not understand this filter, always return true. * {@link ConnectorObject}. */ + @Override public boolean accept(ConnectorObject obj) { return true; } + @Override public R accept(FilterVisitor v, P p) { return v.visitExtendedFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/FilteredResultsHandlerVisitor.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/FilteredResultsHandlerVisitor.java index 2137ba46..9b2bedcd 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/FilteredResultsHandlerVisitor.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/FilteredResultsHandlerVisitor.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -61,12 +62,14 @@ boolean toBoolean() { public static Filter wrapFilter(final Filter nestedFilter, final boolean caseIgnore) { return null == nestedFilter ? null : new Filter() { + @Override public boolean accept(final ConnectorObject obj) { return nestedFilter.accept( caseIgnore ? DEFAULT_CASE_IGNORE_VISITOR : DEFAULT_CASE_SENSITIVE_VISITOR, obj).toBoolean(); } + @Override public R accept(FilterVisitor v, P p) { return v.visitExtendedFilter(p, this); } @@ -79,6 +82,7 @@ public FilteredResultsHandlerVisitor(boolean caseIgnore) { this.caseIgnore = caseIgnore; } + @Override public FilterResult visitAndFilter(ConnectorObject connectorObject, AndFilter filter) { FilterResult result = FilterResult.TRUE; for (final Filter subFilter : filter.getFilters()) { @@ -93,6 +97,7 @@ public FilterResult visitAndFilter(ConnectorObject connectorObject, AndFilter fi return result; } + @Override public FilterResult visitContainsFilter(ConnectorObject connectorObject, ContainsFilter filter) { FilterResult result = FilterResult.UNDEFINED; String valueAssertion = expectSingleValue(connectorObject, filter.getName(), String.class); @@ -108,6 +113,7 @@ public FilterResult visitContainsFilter(ConnectorObject connectorObject, Contain return result; } + @Override public FilterResult visitContainsAllValuesFilter(ConnectorObject connectorObject, ContainsAllValuesFilter filter) { FilterResult result = FilterResult.UNDEFINED; @@ -157,6 +163,7 @@ public FilterResult visitContainsAllValuesFilter(ConnectorObject connectorObject return result; } + @Override public FilterResult visitEqualsFilter(ConnectorObject connectorObject, EqualsFilter filter) { FilterResult result = FilterResult.UNDEFINED; Attribute attribute = connectorObject.getAttributeByName(filter.getName()); @@ -170,6 +177,7 @@ public FilterResult visitEqualsFilter(ConnectorObject connectorObject, EqualsFil return result; } + @Override public FilterResult visitExtendedFilter(ConnectorObject connectorObject, Filter filter) { FilterResult result = FilterResult.UNDEFINED; if (filter instanceof PresenceFilter) { @@ -180,6 +188,7 @@ public FilterResult visitExtendedFilter(ConnectorObject connectorObject, Filter return result; } + @Override public FilterResult visitGreaterThanFilter(ConnectorObject connectorObject, GreaterThanFilter filter) { FilterResult result = FilterResult.UNDEFINED; @@ -212,6 +221,7 @@ public FilterResult visitGreaterThanFilter(ConnectorObject connectorObject, return result; } + @Override public FilterResult visitGreaterThanOrEqualFilter(ConnectorObject connectorObject, GreaterThanOrEqualFilter filter) { FilterResult result = FilterResult.UNDEFINED; @@ -244,6 +254,7 @@ public FilterResult visitGreaterThanOrEqualFilter(ConnectorObject connectorObjec return result; } + @Override public FilterResult visitLessThanFilter(ConnectorObject connectorObject, LessThanFilter filter) { FilterResult result = FilterResult.UNDEFINED; final Object valueAssertion = expectSingleValue(connectorObject, filter.getName()); @@ -275,6 +286,7 @@ public FilterResult visitLessThanFilter(ConnectorObject connectorObject, LessTha return result; } + @Override public FilterResult visitLessThanOrEqualFilter(ConnectorObject connectorObject, LessThanOrEqualFilter filter) { FilterResult result = FilterResult.UNDEFINED; @@ -307,6 +319,7 @@ public FilterResult visitLessThanOrEqualFilter(ConnectorObject connectorObject, return result; } + @Override public FilterResult visitNotFilter(ConnectorObject connectorObject, NotFilter filter) { switch (filter.getFilter().accept(this, connectorObject)) { case FALSE: @@ -318,6 +331,7 @@ public FilterResult visitNotFilter(ConnectorObject connectorObject, NotFilter fi } } + @Override public FilterResult visitOrFilter(ConnectorObject connectorObject, OrFilter filter) { FilterResult result = FilterResult.FALSE; for (final Filter subFilter : filter.getFilters()) { @@ -332,6 +346,7 @@ public FilterResult visitOrFilter(ConnectorObject connectorObject, OrFilter filt return result; } + @Override public FilterResult visitStartsWithFilter(ConnectorObject connectorObject, StartsWithFilter filter) { FilterResult result = FilterResult.UNDEFINED; @@ -348,6 +363,7 @@ public FilterResult visitStartsWithFilter(ConnectorObject connectorObject, return result; } + @Override public FilterResult visitEndsWithFilter(ConnectorObject connectorObject, EndsWithFilter filter) { FilterResult result = FilterResult.UNDEFINED; String valueAssertion = expectSingleValue(connectorObject, filter.getName(), String.class); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/GreaterThanFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/GreaterThanFilter.java index 77ad3d55..0d5a41e8 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/GreaterThanFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/GreaterThanFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -42,10 +43,12 @@ public GreaterThanFilter(Attribute attr) { * * @see org.identityconnectors.framework.common.objects.filter.Filter#accept(ConnectorObject) */ + @Override public boolean accept(ConnectorObject obj) { return isPresent(obj) && this.compare(obj) > 0; } + @Override public R accept(FilterVisitor v, P p) { return v.visitGreaterThanFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/GreaterThanOrEqualFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/GreaterThanOrEqualFilter.java index 3befa9b2..cad73179 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/GreaterThanOrEqualFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/GreaterThanOrEqualFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -32,10 +33,12 @@ public GreaterThanOrEqualFilter(Attribute attr) { super(attr); } + @Override public boolean accept(ConnectorObject obj) { return isPresent(obj) && this.compare(obj) >= 0; } + @Override public R accept(FilterVisitor v, P p) { return v.visitGreaterThanOrEqualFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/LessThanFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/LessThanFilter.java index 832b6769..61d9d74b 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/LessThanFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/LessThanFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -32,10 +33,12 @@ public LessThanFilter(Attribute attr) { super(attr); } + @Override public boolean accept(ConnectorObject obj) { return isPresent(obj) && compare(obj) < 0; } + @Override public R accept(FilterVisitor v, P p) { return v.visitLessThanFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/LessThanOrEqualFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/LessThanOrEqualFilter.java index 7f04aa08..e9088e4b 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/LessThanOrEqualFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/LessThanOrEqualFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -38,10 +39,12 @@ public LessThanOrEqualFilter(Attribute attr) { * * @see Filter#accept(ConnectorObject) */ + @Override public boolean accept(ConnectorObject obj) { return isPresent(obj) && this.compare(obj) <= 0; } + @Override public R accept(FilterVisitor v, P p) { return v.visitLessThanOrEqualFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/NotFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/NotFilter.java index 6d352194..7556f84a 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/NotFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/NotFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -51,10 +52,12 @@ public Filter getFilter() { * * @see Filter#accept(ConnectorObject) */ + @Override public boolean accept(ConnectorObject obj) { return !this.filter.accept(obj); } + @Override public R accept(FilterVisitor v, P p) { return v.visitNotFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/OrFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/OrFilter.java index 3e97710f..a77d6730 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/OrFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/OrFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -53,6 +54,7 @@ public OrFilter(final Collection filters) { * * @see Filter#accept(ConnectorObject) */ + @Override public boolean accept(final ConnectorObject obj) { boolean result = false; for (final Filter subFilter : subFilters) { @@ -64,6 +66,7 @@ public boolean accept(final ConnectorObject obj) { return result; } + @Override public R accept(FilterVisitor v, P p) { return v.visitOrFilter(p, this); } @@ -86,6 +89,7 @@ public Filter getRight() { } } + @Override public Collection getFilters() { return CollectionUtil.asReadOnlyList(subFilters); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/PresenceFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/PresenceFilter.java index ad949258..442c0e0b 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/PresenceFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/PresenceFilter.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -55,10 +56,12 @@ public String getName() { * Determines if the attribute provided is present in the * {@link ConnectorObject}. */ + @Override public boolean accept(ConnectorObject obj) { return obj.getAttributeByName(name) != null; } + @Override public R accept(FilterVisitor v, P p) { return v.visitExtendedFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/StartsWithFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/StartsWithFilter.java index e7bc5c5c..78c1243a 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/StartsWithFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/StartsWithFilter.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -36,6 +37,7 @@ public boolean accept(String value) { return value.startsWith(getValue()); } + @Override public R accept(FilterVisitor v, P p) { return v.visitStartsWithFilter(p, this); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/StringFilter.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/StringFilter.java index d66ffc5f..8a22f42d 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/StringFilter.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/filter/StringFilter.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -58,6 +59,7 @@ public String getValue() { * the same name as provided is not a string. * @see org.identityconnectors.framework.common.objects.filter.Filter#accept(ConnectorObject) */ + @Override public boolean accept(ConnectorObject obj) { boolean ret = false; Attribute attr = obj.getAttributeByName(getName()); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/serializer/SerializerUtil.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/serializer/SerializerUtil.java index 2d68cc9a..cf8977ae 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/serializer/SerializerUtil.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/serializer/SerializerUtil.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.serializer; @@ -135,6 +136,7 @@ public static Object deserializeXmlObject(String str, boolean validate) { final List rv = new ArrayList(); fact.deserializeXmlStream(source, new XmlObjectResultsHandler() { + @Override public boolean handle(Object o) { rv.add(o); return false; diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/AbstractConfiguration.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/AbstractConfiguration.java index e9332c7f..9dca3a25 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/AbstractConfiguration.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/AbstractConfiguration.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.spi; @@ -37,10 +38,12 @@ public interface ConfigurationChangeCallback { private ConfigurationChangeCallback callback; + @Override public final ConnectorMessages getConnectorMessages() { return connectorMessages; } + @Override public final void setConnectorMessages(ConnectorMessages messages) { connectorMessages = messages; } diff --git a/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketAddOn.java b/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketAddOn.java index eb8a14e8..045238bc 100644 --- a/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketAddOn.java +++ b/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketAddOn.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.server.grizzly; @@ -28,6 +29,7 @@ import org.glassfish.grizzly.websockets.WebSocketFilter; public class OpenICFWebSocketAddOn extends WebSocketAddOn { + @Override protected WebSocketFilter createWebSocketFilter() { return new OpenICFWebSocketFilter(getTimeoutInSeconds()); } diff --git a/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketApplication.java b/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketApplication.java index e9aab3d0..140d09ed 100644 --- a/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketApplication.java +++ b/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketApplication.java @@ -83,6 +83,7 @@ public class OpenICFWebSocketApplication extends WebSocketApplication implements protected ScheduledFuture healthChecker = executorService.scheduleWithFixedDelay( new Runnable() { + @Override public void run() { for (WebSocketConnectionGroup e : globalConnectionGroups.values()) { if (!e.checkIsActive()) { @@ -99,6 +100,7 @@ public OpenICFWebSocketApplication(final ConnectorFramework framework, final Str this.keyHash = keyHash; } + @Override public List getSupportedProtocols(List subProtocol) { if (subProtocol.contains(RemoteWSFrameworkConnectionInfo.OPENICF_PROTOCOL)) { return Arrays.asList(RemoteWSFrameworkConnectionInfo.OPENICF_PROTOCOL); @@ -135,6 +137,7 @@ public ConnectionPrincipal authenticate(Principal principal) { } } + @Override public void close() { healthChecker.cancel(false); executorService.shutdown(); @@ -160,6 +163,7 @@ public RemoteOperationContext handshake( return super.handshake(webSocketConnection, message); } + @Override protected void doClose() { } @@ -177,6 +181,7 @@ public static class OpenICFWebSocket extends DefaultWebSocket { private final WebSocketConnectionHolder adapter = new WebSocketConnectionHolder() { + @Override protected void handshake(HandshakeMessage message) { context = connectionPrincipal.handshake(this, message); if (null == context) { @@ -187,14 +192,17 @@ protected void handshake(HandshakeMessage message) { } } + @Override public boolean isOperational() { return isConnected(); } + @Override public RemoteOperationContext getRemoteConnectionContext() { return context; } + @Override public Future sendBytes(byte[] data) { if (isConnected()) { return protocolHandler.send(data); @@ -204,6 +212,7 @@ public Future sendBytes(byte[] data) { } } + @Override public Future sendString(String data) { if (isConnected()) { return protocolHandler.send(data); @@ -213,6 +222,7 @@ public Future sendString(String data) { } } + @Override public void sendPing(byte[] applicationData) throws Exception { if (isConnected()) { protocolHandler.send(new DataFrame(new PingFrameType(), applicationData)); @@ -221,6 +231,7 @@ public void sendPing(byte[] applicationData) throws Exception { } } + @Override public void sendPong(byte[] applicationData) throws Exception { if (isConnected()) { protocolHandler.send(new DataFrame(new PongFrameType(), applicationData)); @@ -229,6 +240,7 @@ public void sendPong(byte[] applicationData) throws Exception { } } + @Override protected void tryClose() { logger.finest("Closing WebSocketConnectionHolder"); OpenICFWebSocket.this.close(); @@ -253,6 +265,7 @@ public final boolean remove(final OperationMessageListener listener) { return listeners.remove(listener); } + @Override public void onClose(DataFrame frame) { super.onClose(frame); final ClosingFrame closing = (ClosingFrame) frame; @@ -269,6 +282,7 @@ public void onClose(DataFrame frame) { } } + @Override public void onConnect() { super.onConnect(); for (OperationMessageListener listener : listeners) { @@ -276,6 +290,7 @@ public void onConnect() { } } + @Override public void onMessage(byte[] data) { super.onMessage(data); for (OperationMessageListener listener : listeners) { @@ -283,6 +298,7 @@ public void onMessage(byte[] data) { } } + @Override public void onMessage(String text) { super.onMessage(text); for (OperationMessageListener listener : listeners) { @@ -290,6 +306,7 @@ public void onMessage(String text) { } } + @Override public void onPing(DataFrame frame) { super.onPing(frame); for (OperationMessageListener listener : listeners) { @@ -297,6 +314,7 @@ public void onPing(DataFrame frame) { } } + @Override public void onPong(DataFrame frame) { super.onPong(frame); for (OperationMessageListener listener : listeners) { diff --git a/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketFilter.java b/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketFilter.java index ab888429..de756d15 100644 --- a/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketFilter.java +++ b/OpenICF-java-framework/connector-server-grizzly/src/main/java/org/forgerock/openicf/framework/server/grizzly/OpenICFWebSocketFilter.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.server.grizzly; @@ -59,6 +60,7 @@ public OpenICFWebSocketFilter(long wsTimeoutInSeconds) { super(wsTimeoutInSeconds); } + @Override protected NextAction handleHandshake(final FilterChainContext ctx, final HttpContent content) throws IOException { // get HTTP request headers @@ -168,6 +170,7 @@ protected NextAction handleHandshake(final FilterChainContext ctx, final HttpCon } } + @Override protected boolean doServerUpgrade(final FilterChainContext ctx, final HttpContent requestContent) throws IOException { return WebSocketEngine.getEngine().upgrade(ctx, requestContent); diff --git a/OpenICF-java-framework/connector-server-jetty/src/main/java/org/forgerock/openicf/framework/server/jetty/OpenICFWebSocketCreator.java b/OpenICF-java-framework/connector-server-jetty/src/main/java/org/forgerock/openicf/framework/server/jetty/OpenICFWebSocketCreator.java index 2e4c5d82..45f4a071 100644 --- a/OpenICF-java-framework/connector-server-jetty/src/main/java/org/forgerock/openicf/framework/server/jetty/OpenICFWebSocketCreator.java +++ b/OpenICF-java-framework/connector-server-jetty/src/main/java/org/forgerock/openicf/framework/server/jetty/OpenICFWebSocketCreator.java @@ -95,6 +95,7 @@ public void authenticate(JettyServerUpgradeRequest request, JettyServerUpgradeRe //Cancelled in close(); also dies when executorService is shut down groupHealthChecker = executorService.scheduleWithFixedDelay(new Runnable() { + @Override public void run() { for (WebSocketConnectionGroup e : globalConnectionGroups.values()) { if (!e.checkIsActive()) { diff --git a/OpenICF-java-framework/connector-server-jetty/src/main/java/org/forgerock/openicf/framework/server/jetty/SinglePrincipal.java b/OpenICF-java-framework/connector-server-jetty/src/main/java/org/forgerock/openicf/framework/server/jetty/SinglePrincipal.java index d555b3d3..2a02e083 100644 --- a/OpenICF-java-framework/connector-server-jetty/src/main/java/org/forgerock/openicf/framework/server/jetty/SinglePrincipal.java +++ b/OpenICF-java-framework/connector-server-jetty/src/main/java/org/forgerock/openicf/framework/server/jetty/SinglePrincipal.java @@ -56,12 +56,14 @@ public String getName() { return StringUtil.isBlank(name) ? super.getName() : name; } + @Override public RemoteOperationContext handshake( final WebSocketConnectionHolder webSocketConnection, final RPCMessages.HandshakeMessage message) { return super.handshake(webSocketConnection, message); } + @Override protected void doClose() { // Per-connection resources are released by OpenICFWebSocket when the // connection closes; the principal itself holds none. diff --git a/OpenICF-java-framework/connector-test-common/src/main/java/org/identityconnectors/test/common/ToListResultsHandler.java b/OpenICF-java-framework/connector-test-common/src/main/java/org/identityconnectors/test/common/ToListResultsHandler.java index 77f33092..b21918f3 100644 --- a/OpenICF-java-framework/connector-test-common/src/main/java/org/identityconnectors/test/common/ToListResultsHandler.java +++ b/OpenICF-java-framework/connector-test-common/src/main/java/org/identityconnectors/test/common/ToListResultsHandler.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.test.common; @@ -36,6 +37,7 @@ public final class ToListResultsHandler implements ResultsHandler { private final List connectorObjects = new ArrayList(); + @Override public boolean handle(ConnectorObject object) { connectorObjects.add(object); return true; diff --git a/OpenICF-java-framework/icfl-over-slf4j/src/main/java/org/forgerock/openicf/common/logging/slf4j/SLF4JLog.java b/OpenICF-java-framework/icfl-over-slf4j/src/main/java/org/forgerock/openicf/common/logging/slf4j/SLF4JLog.java index aea98740..9447e4e0 100644 --- a/OpenICF-java-framework/icfl-over-slf4j/src/main/java/org/forgerock/openicf/common/logging/slf4j/SLF4JLog.java +++ b/OpenICF-java-framework/icfl-over-slf4j/src/main/java/org/forgerock/openicf/common/logging/slf4j/SLF4JLog.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.common.logging.slf4j; @@ -47,6 +48,7 @@ public class SLF4JLog implements LogSpi { * @see LogSpi#log(Class, String, * org.identityconnectors.common.logging.Log.Level, String, Throwable) */ + @Override public void log(final Class clazz, final String methodName, final Level level, final String message, final Throwable ex) { final String clazzName = clazz.getName(); @@ -101,6 +103,7 @@ public void log(final Class clazz, final String methodName, final Level level } } + @Override public void log(final Class clazz, final StackTraceElement method, final Level level, final String message, final Throwable ex) { log(clazz, null != method ? method.getMethodName() : null, level, message, ex); @@ -110,6 +113,7 @@ public void log(final Class clazz, final StackTraceElement method, final Leve * Use the internal SLF4J logger to determine if the level is worthy of * logging. */ + @Override public boolean isLoggable(Class clazz, Level level) { final Logger logger = LoggerFactory.getLogger(clazz); boolean ret = true; @@ -128,6 +132,7 @@ public boolean isLoggable(Class clazz, Level level) { /** * The caller is extracted only if the Level is OK (Debug). */ + @Override public boolean needToInferCaller(Class clazz, Level level) { return LoggerFactory.getLogger(clazz).isDebugEnabled(); } diff --git a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstAbstractConnector.java b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstAbstractConnector.java index 5508b468..2a93110d 100755 --- a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstAbstractConnector.java +++ b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstAbstractConnector.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.testconnector; @@ -115,6 +116,7 @@ private ResourceComparator(final SortKey... sortKeys) { this.sortKeys = Arrays.asList(sortKeys); } + @Override public int compare(final ConnectorObject r1, final ConnectorObject r2) { for (final SortKey sortKey : sortKeys) { final int result = compare(r1, r2, sortKey); @@ -161,6 +163,7 @@ private List getValuesSorted(final ConnectorObject resource, final Strin private static final Comparator VALUE_COMPARATOR = new Comparator() { + @Override public int compare(final Object o1, final Object o2) { return CollectionUtil.forceCompare(o1, o2); } @@ -177,6 +180,7 @@ public void update() { config.updateTest(); } + @Override public Uid authenticate(ObjectClass objectClass, String username, GuardedString password, OperationOptions options) { if (config.isReturnNullTest()) { @@ -186,6 +190,7 @@ public Uid authenticate(ObjectClass objectClass, String username, GuardedString } } + @Override public Subscription subscribe(final ObjectClass objectClass,final Filter eventFilter,final Observer handler, final OperationOptions operationOptions) { final ConnectorObjectBuilder builder = @@ -200,6 +205,7 @@ public Subscription subscribe(final ObjectClass objectClass,final Filter eventFi final boolean doComplete = operationOptions.getOptions().containsKey("doComplete"); final SelfAwareExecutionRunnable runnable = new SelfAwareExecutionRunnable() { + @Override protected boolean doAction(int runCount) { if (TstAbstractConnector.this.config == null){ @@ -229,20 +235,24 @@ protected boolean doAction(int runCount) { return new Subscription() { // Remotely request stop processing subscription + @Override public void close() { runnable.cancel(); } + @Override public boolean isUnsubscribed() { return !runnable.getRunning(); } + @Override public Object getReturnValue() { return null; } }; } + @Override public Subscription subscribe(final ObjectClass objectClass,final SyncToken token,final Observer handler, final OperationOptions operationOptions) { final SyncDeltaBuilder builder = @@ -260,6 +270,7 @@ public Subscription subscribe(final ObjectClass objectClass,final SyncToken toke final boolean doComplete = operationOptions.getOptions().containsKey("doComplete"); final SelfAwareExecutionRunnable runnable = new SelfAwareExecutionRunnable() { + @Override protected boolean doAction(int runCount) { if (TstAbstractConnector.this.config == null){ @@ -288,20 +299,24 @@ protected boolean doAction(int runCount) { return new Subscription() { // Remotely request stop processing subscription + @Override public void close() { runnable.cancel(); } + @Override public boolean isUnsubscribed() { return !runnable.getRunning(); } + @Override public Object getReturnValue() { return null; } }; } + @Override public Uid create(ObjectClass objectClass, Set createAttributes, OperationOptions options) { AttributesAccessor accessor = new AttributesAccessor(createAttributes); @@ -326,6 +341,7 @@ public Uid create(ObjectClass objectClass, Set createAttributes, } } + @Override public void delete(ObjectClass objectClass, Uid uid, OperationOptions options) { if (config.isReturnNullTest()) { return; @@ -343,6 +359,7 @@ public void delete(ObjectClass objectClass, Uid uid, OperationOptions options) { } } + @Override public Uid resolveUsername(ObjectClass objectClass, String username, OperationOptions options) { if (config.isReturnNullTest()) { return null; @@ -352,6 +369,7 @@ public Uid resolveUsername(ObjectClass objectClass, String username, OperationOp } @SuppressWarnings("unchecked") + @Override public Schema schema() { if (config.isReturnNullTest()) { return null; @@ -366,6 +384,7 @@ public Schema schema() { } } + @Override public Object runScriptOnResource(ScriptContext request, OperationOptions options) { if (config.isReturnNullTest()) { return null; @@ -380,16 +399,19 @@ public Object runScriptOnResource(ScriptContext request, OperationOptions option } } + @Override public FilterTranslator createFilterTranslator(ObjectClass objectClass, OperationOptions options) { return new FilterTranslator() { + @Override public List translate(Filter filter) { return Collections.singletonList(filter); } }; } + @Override public void executeQuery(ObjectClass objectClass, Filter query, ResultsHandler handler, OperationOptions options) { @@ -482,6 +504,7 @@ public void executeQuery(ObjectClass objectClass, Filter query, ResultsHandler h } + @Override public void sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler, OperationOptions options) { if (config.isReturnNullTest()) { @@ -503,6 +526,7 @@ public void sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler ha } } + @Override public SyncToken getLatestSyncToken(ObjectClass objectClass) { if (config.isReturnNullTest()) { return null; @@ -513,12 +537,14 @@ public SyncToken getLatestSyncToken(ObjectClass objectClass) { } } + @Override public void test() { if (config.getFailValidation()) { throw new ConnectorException("test failed " + CurrentLocale.get().getLanguage()); } } + @Override public Uid update(ObjectClass objectClass, Uid uid, Set replaceAttributes, OperationOptions options) { if (config.isReturnNullTest()) { @@ -556,6 +582,7 @@ private static abstract class SelfAwareExecutionRunnable implements Runnable { private volatile ScheduledFuture self; private AtomicBoolean running = new AtomicBoolean(Boolean.TRUE); + @Override public void run() { if (!doAction(runCount.incrementAndGet())) { cancel(); @@ -583,6 +610,7 @@ public Boolean getRunning() { BatchUseCase2Processor processorUseCase2 = null; BatchUseCase3Processor processorUseCase3 = null; + @Override public Subscription executeBatch(final List tasks, final Observer observer, final OperationOptions options) { if (config.isReturnNullTest()) { @@ -594,12 +622,15 @@ public Subscription executeBatch(final List tasks, final Observer observer, final OperationOptions options) { final AtomicBoolean opComplete = new AtomicBoolean(false); @@ -670,12 +708,15 @@ public Subscription queryBatch(final BatchToken batchToken, final Observer tasks, OperationOptions options) return tok; } + @Override public void run() { List tasks = BatchRemoteCache.getTasks(token); int failId = options.getOptions().containsKey("FAIL_TEST_ITERATION") @@ -825,6 +867,7 @@ public BatchToken executeBatch(List tasks, OperationOptions options, return token; } + @Override public void run() { try { List tasks = BatchRemoteCache.getTasks(token.getTokens().get(0)); diff --git a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstConnector.java b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstConnector.java index c906d729..23587657 100644 --- a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstConnector.java +++ b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstConnector.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2010-2013 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.testconnector; @@ -88,6 +89,7 @@ public TstConnector() { checkClassLoader(); } + @Override public Uid create(ObjectClass objectClass, Set createAttributes, OperationOptions options) { checkClassLoader(); Integer delay = (Integer)options.getOptions().get("delay"); @@ -103,6 +105,7 @@ public Uid create(ObjectClass objectClass, Set createAttributes, Oper } } + @Override public void init(Configuration cfg) { checkClassLoader(); _config = (TstConnectorConfig)cfg; @@ -112,10 +115,12 @@ public void init(Configuration cfg) { _myConnection = new MyTstConnection(_connectionCount++); } + @Override public Configuration getConfiguration() { return _config; } + @Override public void dispose() { checkClassLoader(); if (_myConnection != null) { @@ -124,6 +129,7 @@ public void dispose() { } } + @Override public void checkAlive() { checkClassLoader(); _myConnection.test(); @@ -144,12 +150,14 @@ public String concat(String s1, String s2) { return s1+s2; } + @Override public FilterTranslator createFilterTranslator(ObjectClass objectClass, OperationOptions options) { checkClassLoader(); //no translation - ok since this is just for tests return new AbstractFilterTranslator(){}; } + @Override public void executeQuery(ObjectClass objectClass, String query, ResultsHandler handler, OperationOptions options) { checkClassLoader(); int remaining = _config.getNumResults(); @@ -180,6 +188,7 @@ public void executeQuery(ObjectClass objectClass, String query, ResultsHandler h } } + @Override public void sync(ObjectClass objectClass, SyncToken token, SyncResultsHandler handler, OperationOptions options) { @@ -209,11 +218,13 @@ public void sync(ObjectClass objectClass, SyncToken token, } } + @Override public SyncToken getLatestSyncToken(ObjectClass objectClass) { checkClassLoader(); return new SyncToken("mylatest"); } + @Override public Schema schema() { checkClassLoader(); SchemaBuilder builder = new SchemaBuilder(TstConnector.class); @@ -230,6 +241,7 @@ public Schema schema() { BatchUseCase3Processor processorUseCase3 = null; + @Override public Subscription executeBatch(final List tasks, final Observer observer, final OperationOptions options) { checkClassLoader(); @@ -238,15 +250,18 @@ public Subscription executeBatch(final List tasks, final Observer observer, final OperationOptions options) { checkClassLoader(); @@ -318,12 +340,15 @@ public Subscription queryBatch(final BatchToken batchToken, final Observer tasks, OperationOptions options) return new BatchToken(token); } + @Override public void run() { List tasks = BatchRemoteCache.getTasks(token); int failId = options.getOptions().containsKey("FAIL_TEST_ITERATION") @@ -430,6 +456,7 @@ public BatchToken executeBatch(List tasks, OperationOptions options, return new BatchToken(token); } + @Override public void run() { List tasks = BatchRemoteCache.getTasks(token); int failId = options.getOptions().containsKey("FAIL_TEST_ITERATION") diff --git a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulConnector.java b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulConnector.java index 3a674e8e..0d2b2cd0 100755 --- a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulConnector.java +++ b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulConnector.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.testconnector; @@ -37,10 +38,12 @@ public void init(Configuration cfg) { super.init(cfg); } + @Override public Configuration getConfiguration() { return config; } + @Override public void dispose() { config = null; } diff --git a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulConnectorConfig.java b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulConnectorConfig.java index 42610c7a..d50ba011 100755 --- a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulConnectorConfig.java +++ b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulConnectorConfig.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.testconnector; @@ -131,6 +132,7 @@ public synchronized UUID getGuid() { return guid; } + @Override public void release() { guid = null; if (null != executorService) { @@ -339,11 +341,13 @@ public void delete(Uid uid) { public Iterable getIterable(final Filter filter) { final Iterable inner = objectCache.values(); return new Iterable() { + @Override public Iterator iterator() { final Iterator innerIterator = inner.iterator(); return new Iterator() { ConnectorObject nextElement = null; + @Override public boolean hasNext() { if (nextElement != null) { // fail-fast for next() or repeated hasNext() @@ -363,6 +367,7 @@ public boolean hasNext() { return false; } + @Override public ConnectorObject next() { if (!hasNext()) { // ensure hasNext() has "advanced" // the next "filtered-in" element @@ -375,6 +380,7 @@ public ConnectorObject next() { return retValue; } + @Override public void remove() { innerIterator.remove(); } diff --git a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulPoolableConnector.java b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulPoolableConnector.java index ea20828b..6777cdf2 100755 --- a/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulPoolableConnector.java +++ b/OpenICF-java-framework/testbundlev1/src/main/java/org/identityconnectors/testconnector/TstStatefulPoolableConnector.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.testconnector; @@ -37,14 +38,17 @@ public void init(Configuration cfg) { super.init(cfg); } + @Override public Configuration getConfiguration() { return config; } + @Override public void dispose() { config = null; } + @Override public void checkAlive() { } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/AppendingAttributes.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/AppendingAttributes.java index f78f8b2e..3176c613 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/AppendingAttributes.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/AppendingAttributes.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap; @@ -52,8 +53,10 @@ public AppendingAttributes(Attributes delegate) { protected abstract Attribute getAttributeToAppend(String attrID); + @Override public abstract Object clone(); + @Override public final Attribute get(String attrID) { String attrIDToAppend = getNormalizedAttributeIDToAppend(attrID); if (attrIDToAppend != null) { @@ -78,30 +81,37 @@ private String getNormalizedAttributeIDToAppend(String attrID) { return null; } + @Override public final NamingEnumeration getAll() { return new AttributeAppendingEnumeration(delegate.getAll()); } + @Override public final NamingEnumeration getIDs() { return new AttributeIDAppendingEnumeration(delegate.getIDs()); } + @Override public final boolean isCaseIgnored() { return delegate.isCaseIgnored(); } + @Override public final Attribute put(Attribute attr) { throw new UnsupportedOperationException(); } + @Override public final Attribute put(String attrID, Object val) { throw new UnsupportedOperationException(); } + @Override public final Attribute remove(String attrID) { throw new UnsupportedOperationException(); } + @Override public final int size() { int size = delegate.size(); for (String attributeIDToAppend : getAttributeIDsToAppend()) { @@ -125,14 +135,17 @@ public AppendingEnumeration(NamingEnumeration delegate) { protected abstract Enumeration getRemainingValues(); + @Override public void close() throws NamingException { delegate.close(); } + @Override public boolean hasMore() throws NamingException { return delegate.hasMore() || hasMoreRemainingValues(); } + @Override public T next() throws NamingException { if (delegate.hasMore()) { T next = delegate.next(); @@ -151,10 +164,12 @@ public T next() throws NamingException { } } + @Override public boolean hasMoreElements() { return delegate.hasMoreElements() || hasMoreRemainingValues(); } + @Override public T nextElement() { if (delegate.hasMoreElements()) { T next = delegate.nextElement(); @@ -213,10 +228,12 @@ protected Enumeration getRemainingValues() { return new Enumeration() { private final Iterator iterator = remaining.iterator(); + @Override public boolean hasMoreElements() { return iterator.hasNext(); } + @Override public Attribute nextElement() { return getAttributeToAppend(iterator.next()); } @@ -250,10 +267,12 @@ protected Enumeration getRemainingValues() { return new Enumeration() { private final Iterator iterator = remaining.iterator(); + @Override public boolean hasMoreElements() { return iterator.hasNext(); } + @Override public String nextElement() { return iterator.next(); } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/AttributeMappingConfig.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/AttributeMappingConfig.java index 5518170c..efa87f02 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/AttributeMappingConfig.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/AttributeMappingConfig.java @@ -1,3 +1,6 @@ +/* + * Portions Copyright 2026 3A Systems, LLC. + */ package org.identityconnectors.ldap; public class AttributeMappingConfig { @@ -18,10 +21,12 @@ public String getToAttribute() { return toAttribute; } + @Override public int hashCode() { return fromAttribute.hashCode() + toAttribute.hashCode(); } + @Override public boolean equals(Object o) { if (o instanceof AttributeMappingConfig) { AttributeMappingConfig that = (AttributeMappingConfig) o; diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/GroupHelper.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/GroupHelper.java index 03575083..2a8d7601 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/GroupHelper.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/GroupHelper.java @@ -21,6 +21,7 @@ * ==================== * * Portions Copyrighted 2013-2014 Forgerock + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap; @@ -233,10 +234,12 @@ public String getGroupDN() { return groupDN; } + @Override public int hashCode() { return memberRef.hashCode() ^ groupDN.hashCode(); } + @Override public boolean equals(Object o) { if (o instanceof GroupMembership) { GroupMembership that = (GroupMembership)o; @@ -319,6 +322,7 @@ private static final class ToDNHandler implements LdapSearchResultsHandler { private final List results = new ArrayList(); + @Override public boolean handle(String baseDN, SearchResult searchResult) throws NamingException { results.add(LdapEntry.create(baseDN, searchResult).getDN().toString()); return true; @@ -341,6 +345,7 @@ public void setMemberRef(String memberRef) { this.memberRef = memberRef; } + @Override public boolean handle(String baseDN, SearchResult searchResult) throws NamingException { LdapName groupDN = LdapEntry.create(baseDN, searchResult).getDN(); results.add(new GroupMembership(memberRef, groupDN.toString())); diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConfiguration.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConfiguration.java index b7dc5335..7c3f763d 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConfiguration.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConfiguration.java @@ -21,6 +21,7 @@ * ==================== * * Portions Copyrighted 2013-2016 ForgeRock AS + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap; @@ -272,6 +273,7 @@ public LdapConfiguration() { /** * {@inheritDoc} */ + @Override public void validate() { checkNotBlank(host, "host.notBlank"); @@ -344,6 +346,7 @@ private void checkNotBlank(GuardedByteArray array, String errorMessage) { final int[] length = { 0 }; if (array != null) { array.access(new Accessor() { + @Override public void access(byte[] clearBytes) { length[0] = clearBytes.length; } @@ -930,5 +933,6 @@ public ServerType getServerType() { // ======================================================================= // Interface Implementation // ======================================================================= + @Override public void release() {} } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConnection.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConnection.java index 17bb2181..8a48a209 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConnection.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConnection.java @@ -21,6 +21,7 @@ * ==================== * * Portions Copyrighted 2013-2016 ForgeRock AS + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap; @@ -215,6 +216,7 @@ private Pair createContext(String principal, env.put(Context.SECURITY_PRINCIPAL, principal); if (credentials != null) { credentials.access(new Accessor() { + @Override public void access(char[] clearChars) { env.put(Context.SECURITY_CREDENTIALS, new String(clearChars)); } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConnector.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConnector.java index 410a19c7..8faa1a6d 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConnector.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapConnector.java @@ -21,6 +21,7 @@ * ==================== * * Portions Copyrighted 2013-2014 ForgeRock AS + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap; @@ -91,10 +92,12 @@ private enum UpdateType { public LdapConnector() { } + @Override public Configuration getConfiguration() { return config; } + @Override public void init(Configuration cfg) { config = (LdapConfiguration) cfg; conn = new LdapConnection(config); @@ -111,13 +114,16 @@ public void init(Configuration cfg) { } } + @Override public void dispose() { conn.close(); } + @Override public void test() { if (loginContext != null) { Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Object run() { doTest(); return null; @@ -128,9 +134,11 @@ public Object run() { } } + @Override public void checkAlive() { if (loginContext != null) { Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Object run() { conn.checkAlive(); return null; @@ -141,9 +149,11 @@ public Object run() { } } + @Override public Schema schema() { if (loginContext != null) { return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Schema run() { return conn.getSchemaMapping().schema(); } @@ -153,9 +163,11 @@ public Schema run() { } } + @Override public Uid authenticate(final ObjectClass objectClass, final String username, final GuardedString password, final OperationOptions options) { if (loginContext != null) { return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Uid run() { return new LdapAuthenticate(conn, objectClass, username, options).authenticate(password); } @@ -165,9 +177,11 @@ public Uid run() { } } + @Override public Uid resolveUsername(final ObjectClass objectClass, final String username, final OperationOptions options) { if (loginContext != null) { return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Uid run() { return new LdapAuthenticate(conn, objectClass, username, options).resolveUsername(); } @@ -177,16 +191,19 @@ public Uid run() { } } + @Override public FilterTranslator createFilterTranslator(ObjectClass objectClass, OperationOptions options) { return new LdapFilterTranslator(conn.getSchemaMapping(), objectClass); } + @Override public void executeQuery(final ObjectClass objectClass, final LdapFilter query, final ResultsHandler handler, final OperationOptions options) { if (objectClass.is(LdapUtil.SERVER_INFO_NAME)) { LdapUtil.getServerInfo(conn, handler); } else { if (loginContext != null) { Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Object run() { new LdapSearch(conn, objectClass, query, handler, options).execute(); return null; @@ -198,9 +215,11 @@ public Object run() { } } + @Override public Uid create(final ObjectClass objectClass, final Set attrs, final OperationOptions options) { if (loginContext != null) { return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Uid run() { return new LdapCreate(conn, objectClass, attrs, options).execute(); } @@ -210,9 +229,11 @@ public Uid run() { } } + @Override public void delete(final ObjectClass objectClass, final Uid uid, final OperationOptions options) { if (loginContext != null) { Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Object run() { new LdapDelete(conn, objectClass, uid, options).execute(); return null; @@ -223,9 +244,11 @@ public Object run() { } } + @Override public Uid update(final ObjectClass objectClass, final Uid uid, final Set replaceAttributes, final OperationOptions options) { if (loginContext != null) { return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Uid run() { return new LdapUpdate(conn, objectClass, uid, options).update(replaceAttributes); } @@ -235,9 +258,11 @@ public Uid run() { } } + @Override public Uid addAttributeValues(final ObjectClass objectClass, final Uid uid, final Set valuesToAdd, final OperationOptions options) { if (loginContext != null) { return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Uid run() { return new LdapUpdate(conn, objectClass, uid, options).addAttributeValues(valuesToAdd); } @@ -247,9 +272,11 @@ public Uid run() { } } + @Override public Uid removeAttributeValues(final ObjectClass objectClass, final Uid uid, final Set valuesToRemove, final OperationOptions options) { if (loginContext != null) { return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Uid run() { return new LdapUpdate(conn, objectClass, uid, options).removeAttributeValues(valuesToRemove); } @@ -259,9 +286,11 @@ public Uid run() { } } + @Override public SyncToken getLatestSyncToken(final ObjectClass objectClass) { if (loginContext != null) { return Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public SyncToken run() { return lastSyncToken(objectClass); } @@ -271,9 +300,11 @@ public SyncToken run() { } } + @Override public void sync(final ObjectClass objectClass, final SyncToken token, final SyncResultsHandler handler, final OperationOptions options) { if (loginContext != null) { Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { + @Override public Object run() { doSync(objectClass, token, handler, options); return null; diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapUtil.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapUtil.java index e812c171..cef6824b 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapUtil.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/LdapUtil.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC * * "Portions Copyrighted 2013-2015 ForgeRock AS" */ @@ -292,94 +293,117 @@ private E cast(Object o) { return clazz.cast(o); } + @Override public boolean add(E o) { return list.add(o); } + @Override public void add(int index, E element) { list.add(index, element); } + @Override public boolean addAll(Collection c) { return list.addAll(c); } + @Override public boolean addAll(int index, Collection c) { return list.addAll(index, c); } + @Override public void clear() { list.clear(); } + @Override public boolean contains(Object o) { return list.contains(o); } + @Override public boolean containsAll(Collection c) { return list.containsAll(c); } + @Override public E get(int index) { return cast(list.get(index)); } + @Override public int indexOf(Object o) { return list.indexOf(o); } + @Override public boolean isEmpty() { return list.isEmpty(); } + @Override public Iterator iterator() { return new Itr(list.iterator()); } + @Override public int lastIndexOf(Object o) { return list.lastIndexOf(o); } + @Override public ListIterator listIterator() { return new ListItr(list.listIterator()); } + @Override public ListIterator listIterator(int index) { return new ListItr(list.listIterator(index)); } + @Override public boolean remove(Object o) { return list.remove(o); } + @Override public E remove(int index) { return cast(list.remove(index)); } + @Override public boolean removeAll(Collection c) { return list.removeAll(c); } + @Override public boolean retainAll(Collection c) { return list.retainAll(c); } + @Override public E set(int index, E element) { return cast(list.set(index, element)); } + @Override public int size() { return list.size(); } + @Override public List subList(int fromIndex, int toIndex) { return list.subList(fromIndex, toIndex); } + @Override public Object[] toArray() { return list.toArray(); } + @Override public T[] toArray(T[] a) { Object[] result = list.toArray(a); for (Object o : result) { @@ -411,14 +435,17 @@ public Itr(Iterator iter) { this.iter = iter; } + @Override public boolean hasNext() { return iter.hasNext(); } + @Override public E next() { return cast(iter.next()); } + @Override public void remove() { iter.remove(); } @@ -447,38 +474,47 @@ public ListItr(ListIterator iter) { this.iter = iter; } + @Override public void add(E o) { iter.add(o); } + @Override public boolean hasNext() { return iter.hasNext(); } + @Override public boolean hasPrevious() { return iter.hasPrevious(); } + @Override public E next() { return cast(iter.next()); } + @Override public int nextIndex() { return iter.nextIndex(); } + @Override public E previous() { return cast(iter.previous()); } + @Override public int previousIndex() { return iter.previousIndex(); } + @Override public void remove() { iter.remove(); } + @Override public void set(E o) { iter.set(o); } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/ObjectClassMappingConfig.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/ObjectClassMappingConfig.java index 5ee0caa3..5a4ae3f4 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/ObjectClassMappingConfig.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/ObjectClassMappingConfig.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap; @@ -81,10 +82,12 @@ public Set getOperationalAttributes() { return operationalAttributes; } + @Override public int hashCode() { return objectClass.hashCode(); } + @Override public boolean equals(Object o) { if (o instanceof ObjectClassMappingConfig) { ObjectClassMappingConfig that = (ObjectClassMappingConfig)o; diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/ServerNativeSchema.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/ServerNativeSchema.java index cbcf3e93..96658adc 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/ServerNativeSchema.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/ServerNativeSchema.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap; @@ -82,14 +83,17 @@ public ServerNativeSchema(LdapConnection conn) throws NamingException { } } + @Override public Set getStructuralObjectClasses() { return unmodifiableSet(structuralLdapClasses); } + @Override public Set getRequiredAttributes(String ldapClass) { return getAttributes(ldapClass, true); } + @Override public Set getOptionalAttributes(String ldapClass) { return getAttributes(ldapClass, false); } @@ -118,6 +122,7 @@ private Set getAttributes(String ldapClass, boolean required) { return result; } + @Override public Set getEffectiveObjectClasses(String ldapClass) { Set result = newCaseInsensitiveSet(); Queue classQueue = new LinkedList(); @@ -137,6 +142,7 @@ public Set getEffectiveObjectClasses(String ldapClass) { return result; } + @Override public LdapAttributeType getAttributeDescription(String ldapAttrName) { return attrName2Type.get(ldapAttrName); } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/StaticNativeSchema.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/StaticNativeSchema.java index 69f00e3a..81bbd614 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/StaticNativeSchema.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/StaticNativeSchema.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap; @@ -37,22 +38,27 @@ */ public class StaticNativeSchema implements LdapNativeSchema { + @Override public Set getStructuralObjectClasses() { return emptySet(); } + @Override public Set getRequiredAttributes(String ldapClass) { return emptySet(); } + @Override public Set getOptionalAttributes(String ldapClass) { return emptySet(); } + @Override public Set getEffectiveObjectClasses(String ldapClass) { return singleton(ldapClass); } + @Override public LdapAttributeType getAttributeDescription(String ldapAttrName) { return null; } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/modify/LdapCreate.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/modify/LdapCreate.java index 7a8932e5..d64b3252 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/modify/LdapCreate.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/modify/LdapCreate.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC * "Portions Copyrighted 2014-2015 ForgeRock AS" */ package org.identityconnectors.ldap.modify; @@ -157,6 +158,7 @@ private Uid executeImpl() throws NamingException { try { if (pwdAttr != null) { pwdAttr.access(new Accessor() { + @Override public void access(javax.naming.directory.Attribute passwordAttr) { hashPassword(passwordAttr, null); ldapAttrs.put(passwordAttr); diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/modify/LdapUpdate.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/modify/LdapUpdate.java index c26e8a6f..31b72e56 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/modify/LdapUpdate.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/modify/LdapUpdate.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC * * "Portions Copyrighted 2013-2015 Forgerock AS" */ @@ -364,6 +365,7 @@ private void modifyAttributes(final String entryDN, Pair getStructuralObjectClasses() { return newSet(OU_OBJ); } + @Override public Set getRequiredAttributes(String ldapClass) { return emptySet(); } + @Override public Set getOptionalAttributes(String ldapClass) { Set result = newCaseInsensitiveSet(); @@ -137,10 +141,12 @@ public Set getOptionalAttributes(String ldapClass) { return result; } + @Override public Set getEffectiveObjectClasses(String ldapClass) { return newSet(ldapClass); } + @Override public LdapAttributeType getAttributeDescription(String ldapAttrName) { return attrName2Type.get(ldapAttrName); } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/schema/GuardedPasswordAttribute.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/schema/GuardedPasswordAttribute.java index a55f645b..c31d0b10 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/schema/GuardedPasswordAttribute.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/schema/GuardedPasswordAttribute.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap.schema; @@ -59,8 +60,10 @@ private Simple(String attrName, GuardedString password) { this.password = password; } + @Override public void access(final Accessor accessor) { password.access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { // TODO this is still not good enough. Need a simple and reliable // way to convert UTF-16 to UTF-8 bytes. diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/schema/LdapStaticSchema.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/schema/LdapStaticSchema.java index 0da43f5a..72da5f61 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/schema/LdapStaticSchema.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/schema/LdapStaticSchema.java @@ -16,6 +16,7 @@ * applicable, add the following below the CDDL Header, with the fields enclosed * by brackets [] replaced by your own identifying information: "Portions * Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap.schema; @@ -111,6 +112,7 @@ public LdapStaticSchema() { initAttributeDescriptions(); } + @Override public Set getStructuralObjectClasses() { // we skip groupOfUniqueNames and inetOrgPerson since they are // the default object classes used for __ACCOUNT__ and __GROUP__ @@ -123,6 +125,7 @@ public Set getStructuralObjectClasses() { ); } + @Override public Set getRequiredAttributes(String ldapClass) { if (ACCOUNT.equalsIgnoreCase(ldapClass)) { return newSet("uid"); @@ -144,6 +147,7 @@ public Set getRequiredAttributes(String ldapClass) { return newSet(); } + @Override public Set getOptionalAttributes(String ldapClass) { if (ACCOUNT.equalsIgnoreCase(ldapClass)) { return newSet("description", "seeAlso", "l", "o", "ou", "host"); @@ -165,10 +169,12 @@ public Set getOptionalAttributes(String ldapClass) { return newSet(); } + @Override public Set getEffectiveObjectClasses(String ldapClass) { return newSet(ldapClass); } + @Override public LdapAttributeType getAttributeDescription(String ldapAttrName) { if (attrName2Type.get(ldapAttrName) != null) { return attrName2Type.get(ldapAttrName); diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapSearch.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapSearch.java index 5275ad4a..259f4390 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapSearch.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapSearch.java @@ -140,6 +140,7 @@ public final void execute(final ResultsHandler handler) { final Set attrsToGet = getAttributesToGet(attrsToGetOption); LdapInternalSearch search = getInternalSearch(attrsToGet); search.execute(new LdapSearchResultsHandler() { + @Override public boolean handle(String baseDN, SearchResult result) throws NamingException { return handler.handle(createConnectorObject(baseDN, result, attrsToGet, attrsToGetOption != null)); } @@ -156,6 +157,7 @@ public final ConnectorObject getSingleResult() { final ConnectorObject[] results = new ConnectorObject[]{null}; LdapInternalSearch search = getInternalSearch(attrsToGet); search.execute(new LdapSearchResultsHandler() { + @Override public boolean handle(String baseDN, SearchResult result) throws NamingException { results[0] = createConnectorObject(baseDN, result, attrsToGet, attrsToGetOption != null); return false; diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapSearches.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapSearches.java index 813df284..3f870925 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapSearches.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapSearches.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC * "Portions Copyrighted 2014 ForgeRock AS" */ package org.identityconnectors.ldap.search; @@ -136,6 +137,7 @@ public static List findObjects(LdapConnection conn, ObjectClass LdapSearch search = new LdapSearch(conn, oclass, ldapFilter, null, builder.build(), baseDN); search.execute(new ResultsHandler() { + @Override public boolean handle(ConnectorObject object) { result.add(object); return true; @@ -167,6 +169,7 @@ public static LdapEntry getEntry(LdapConnection conn, LdapName entryDN, String.. controls.setReturningAttributes(ldapAttrsToGet); LdapInternalSearch search = new LdapInternalSearch(conn, null, singletonList(entryDN.toString()), new DefaultSearchStrategy(true), controls); search.execute(new LdapSearchResultsHandler() { + @Override public boolean handle(String baseDN, SearchResult searchResult) { result.add(LdapEntry.create(baseDN, searchResult)); return false; diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/activedirectory/ActiveDirectoryChangeLogSyncStrategy.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/activedirectory/ActiveDirectoryChangeLogSyncStrategy.java index b9b6ccdd..3c7b3839 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/activedirectory/ActiveDirectoryChangeLogSyncStrategy.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/activedirectory/ActiveDirectoryChangeLogSyncStrategy.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap.sync.activedirectory; @@ -97,6 +98,7 @@ public ActiveDirectoryChangeLogSyncStrategy(LdapConnection conn, ObjectClass ocl this.oclass = oclass; } + @Override public SyncToken getLatestSyncToken() { if (oclass.is(DIRSYNC_EVENTS_OBJCLASS)) { return new SyncToken(getDirSyncCookie()); @@ -104,6 +106,7 @@ public SyncToken getLatestSyncToken() { return new SyncToken(gethighestCommittedUSN()); } + @Override public void sync(SyncToken token, final SyncResultsHandler handler, final OperationOptions options) { if (oclass.is(DIRSYNC_EVENTS_OBJCLASS)) { handleEvents(token, handler, options); @@ -137,6 +140,7 @@ public void sync(SyncToken token, final SyncResultsHandler handler, final Operat controls); try { search.execute(new LdapSearchResultsHandler() { + @Override public boolean handle(String baseDN, SearchResult result) throws NamingException { Attributes attrs = result.getAttributes(); Uid uid = conn.getSchemaMapping().createUid(conn.getConfiguration().getUidAttribute(), attrs); diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/ibm/IBMDSChangeLogSyncStrategy.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/ibm/IBMDSChangeLogSyncStrategy.java index 3e33e2f0..8207c649 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/ibm/IBMDSChangeLogSyncStrategy.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/ibm/IBMDSChangeLogSyncStrategy.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap.sync.ibm; @@ -51,6 +52,7 @@ public IBMDSChangeLogSyncStrategy(LdapConnection conn, ObjectClass oclass) { super(conn, oclass); } + @Override protected boolean filterOutByModifiersNames(Map> changes) { Set filter = conn.getConfiguration().getModifiersNamesToFilterOutAsLdapNames(); if (filter.isEmpty()) { diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/sunds/LdifParser.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/sunds/LdifParser.java index b459eb2e..95d4357b 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/sunds/LdifParser.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/sunds/LdifParser.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap.sync.sunds; @@ -35,6 +36,7 @@ public LdifParser(String ldif) { this.ldif = ldif; } + @Override public Iterator iterator() { return new LineIterator(getUnfoldedLines()); } @@ -74,6 +76,7 @@ public LineIterator(List rawLines) { this.rawLines = rawLines.iterator(); } + @Override public boolean hasNext() { if (next == null) { next = getNext(); @@ -81,6 +84,7 @@ public boolean hasNext() { return next != null; } + @Override public Line next() { if (next == null) { next = getNext(); @@ -118,6 +122,7 @@ private Line getNext() { return result; } + @Override public void remove() { throw new UnsupportedOperationException(); } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/sunds/SunDSChangeLogSyncStrategy.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/sunds/SunDSChangeLogSyncStrategy.java index fe0d78f2..1a1b1ba5 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/sunds/SunDSChangeLogSyncStrategy.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/sunds/SunDSChangeLogSyncStrategy.java @@ -19,6 +19,7 @@ * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * ==================== + * Portions Copyrighted 2026 3A Systems, LLC * "Portions Copyrighted 2014 ForgeRock AS" */ package org.identityconnectors.ldap.sync.sunds; @@ -126,10 +127,12 @@ public SunDSChangeLogSyncStrategy(LdapConnection conn, ObjectClass oclass) { this.oclass = oclass; } + @Override public SyncToken getLatestSyncToken() { return new SyncToken(getChangeLogAttributes().getLastChangeNumber()); } + @Override public void sync(SyncToken token, final SyncResultsHandler handler, final OperationOptions options) { String context = getChangeLogAttributes().getChangeLogContext(); final String changeNumberAttr = getChangeNumberAttribute(); @@ -148,6 +151,7 @@ public void sync(SyncToken token, final SyncResultsHandler handler, final Operat LdapInternalSearch search = new LdapInternalSearch(conn, filter, singletonList(context), new DefaultSearchStrategy(false), controls); search.execute(new LdapSearchResultsHandler() { + @Override public boolean handle(String baseDN, SearchResult result) throws NamingException { results[0] = true; LdapEntry entry = LdapEntry.create(baseDN, result); @@ -661,8 +665,10 @@ private Set getObjectClassesToSynchronize() { private PasswordDecryptor getPasswordDecryptor() { if (passwordDecryptor == null) { conn.getConfiguration().getPasswordDecryptionKey().access(new Accessor() { + @Override public void access(final byte[] decryptionKey) { conn.getConfiguration().getPasswordDecryptionInitializationVector().access(new Accessor() { + @Override public void access(byte[] decryptionIV) { passwordDecryptor = new PasswordDecryptor(decryptionKey, decryptionIV); } diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/timestamps/TimestampsSyncStrategy.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/timestamps/TimestampsSyncStrategy.java index 06614814..cbcdb5ab 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/timestamps/TimestampsSyncStrategy.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/sync/timestamps/TimestampsSyncStrategy.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap.sync.timestamps; @@ -91,10 +92,12 @@ public TimestampsSyncStrategy(LdapConnection conn, ObjectClass oclass) { this.server = conn.getServerType(); } + @Override public SyncToken getLatestSyncToken() { return new SyncToken(getNowTime()); } + @Override public void sync(SyncToken token, final SyncResultsHandler handler, final OperationOptions options) { // ldapsearch -h host -p 389 -b "dc=example,dc=com" -D "cn=administrator,cn=users,dc=example,dc=com" -w xxx "whenchanged>=20130214130642.0Z" // on AD @@ -133,6 +136,7 @@ public void sync(SyncToken token, final SyncResultsHandler handler, final Operat try { search.execute(new LdapSearchResultsHandler() { + @Override public boolean handle(String baseDN, SearchResult result) throws NamingException { LdapEntry entry = LdapEntry.create(baseDN, result); Attributes attrs = result.getAttributes(); diff --git a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConfigurationPropertyConverter.java b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConfigurationPropertyConverter.java index d9f64e14..38b860f1 100644 --- a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConfigurationPropertyConverter.java +++ b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConfigurationPropertyConverter.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.maven; @@ -41,18 +42,21 @@ public class ConfigurationPropertyConverter extends AbstractConfigurationConvert LogEnabled { private Logger log; + @Override public void enableLogging(final Logger logger) { assert logger != null; this.log = logger; } + @Override public boolean canConvert(final Class type) { assert type != null; return PropertyBag.class.isAssignableFrom(type); } + @Override public Object fromConfiguration(final ConverterLookup converterLookup, final PlexusConfiguration configuration, final Class type, final Class baseType, final ClassLoader classLoader, final ExpressionEvaluator expressionEvaluator, diff --git a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConnectorDocBuilder.java b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConnectorDocBuilder.java index 6562b28c..f6a84af8 100644 --- a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConnectorDocBuilder.java +++ b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConnectorDocBuilder.java @@ -242,6 +242,7 @@ protected void executeReport() throws MojoExecutionException { Set> operationSet = new TreeSet>( new Comparator>() { + @Override public int compare( Class o1, Class o2) { @@ -481,6 +482,7 @@ public ConnectorInfoManager getConnectorInfoManager() throws MojoExecutionExcept private static final Comparator> PAIR_COMPARATOR = new Comparator>() { + @Override public int compare(Pair left, Pair right) { if (left == null && right == null){ return 0; diff --git a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConnectorInfoReportMojo.java b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConnectorInfoReportMojo.java index e306b8f9..b0f547fd 100644 --- a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConnectorInfoReportMojo.java +++ b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ConnectorInfoReportMojo.java @@ -74,6 +74,7 @@ public class ConnectorInfoReportMojo extends AbstractMavenReport implements Conn @Parameter(defaultValue = "${project.build.sourceEncoding}") private String sourceEncoding; + @Override public String getSourceEncoding() { return sourceEncoding; } @@ -84,6 +85,7 @@ public String getSourceEncoding() { @Parameter(defaultValue = "${basedir}", readonly = true, required = true) protected File basedir; + @Override public File getBasedir() { return basedir; } @@ -101,6 +103,7 @@ public File getBasedir() { @Parameter(defaultValue = "${project.build.outputDirectory}", required = true, readonly = true) private File buildOutputDirectory; + @Override public File getBuildOutputDirectory() { return buildOutputDirectory; } @@ -118,6 +121,7 @@ public File getBuildOutputDirectory() { @Parameter(property = "openicf.templateDirectory", defaultValue = "org/forgerock/openicf/maven") private String templateDirectory; + @Override public String getTemplateDirectory() { return templateDirectory; } @@ -136,6 +140,7 @@ public String getTemplateDirectory() { @Parameter private String[] includes; + @Override public String[] getIncludes() { return includes; } @@ -147,6 +152,7 @@ public String[] getIncludes() { @Parameter private String[] excludes; + @Override public String[] getExcludes() { return excludes; } @@ -161,6 +167,7 @@ public String[] getExcludes() { @Parameter private PropertyBag configurationProperties; + @Override public PropertyBag getConfigurationProperties() { return configurationProperties; } @@ -168,6 +175,7 @@ public PropertyBag getConfigurationProperties() { @Parameter private RemoteFrameworkConnectionInfo remoteFrameworkConnectionInfo; + @Override public RemoteFrameworkConnectionInfo getRemoteFrameworkConnectionInfo() { return remoteFrameworkConnectionInfo; } @@ -181,6 +189,7 @@ public RemoteFrameworkConnectionInfo getRemoteFrameworkConnectionInfo() { @Component private MavenProject project; + @Override public MavenProject getMavenProject() { return project; } @@ -196,6 +205,7 @@ public MavenProject getMavenProject() { */ private I18N i18n; + @Override public I18N getI18N() { return i18n; } @@ -253,6 +263,7 @@ protected MavenProject getProject() { * * @return the output name of this report. */ + @Override public String getOutputName() { if (null == reportName) { return "openicf-report"; @@ -268,6 +279,7 @@ public String getOutputName() { * the wanted locale to return the report's name, could be null. * @return the name of this report. */ + @Override public String getName(Locale locale) { if (reportName == null) { return getBundle(locale).getString("report.openicf.name"); @@ -284,6 +296,7 @@ public String getName(Locale locale) { * null. * @return the description of this report. */ + @Override public String getDescription(Locale locale) { if (reportName == null) { return getBundle(locale).getString("report.openicf.description"); @@ -296,6 +309,7 @@ private ResourceBundle getBundle(Locale locale) { return ResourceBundle.getBundle("openicf-report", locale, this.getClass().getClassLoader()); } + @Override public void generate(ConnectorDocBuilder builder, Context context, String connectorName) throws MojoExecutionException { try { diff --git a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/CustomComponentConfigurator.java b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/CustomComponentConfigurator.java index 86e296b3..de110aef 100644 --- a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/CustomComponentConfigurator.java +++ b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/CustomComponentConfigurator.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.maven; @@ -50,6 +51,7 @@ */ @Component(role = ComponentConfigurator.class, hint = "override") public class CustomComponentConfigurator extends AbstractComponentConfigurator { + @Override public void configureComponent(Object component, PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator, ClassRealm containerRealm, ConfigurationListener listener) throws ComponentConfigurationException { diff --git a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/DocBookResourceMojo.java b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/DocBookResourceMojo.java index d7f527cd..1452ec51 100644 --- a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/DocBookResourceMojo.java +++ b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/DocBookResourceMojo.java @@ -130,6 +130,7 @@ public class DocBookResourceMojo extends AbstractMojo implements ConnectorMojoBr @Parameter(defaultValue = "${project.build.outputDirectory}", required = true, readonly = true) private File buildOutputDirectory; + @Override public File getBuildOutputDirectory() { return buildOutputDirectory; } @@ -185,6 +186,7 @@ public File getBuildOutputDirectory() { @Parameter private String[] includes; + @Override public String[] getIncludes() { return includes; } @@ -196,6 +198,7 @@ public String[] getIncludes() { @Parameter private String[] excludes; + @Override public String[] getExcludes() { return excludes; } @@ -211,6 +214,7 @@ public String[] getExcludes() { @Parameter private PropertyBag configurationProperties; + @Override public PropertyBag getConfigurationProperties() { return configurationProperties; } @@ -218,6 +222,7 @@ public PropertyBag getConfigurationProperties() { @Parameter private RemoteFrameworkConnectionInfo remoteFrameworkConnectionInfo; + @Override public RemoteFrameworkConnectionInfo getRemoteFrameworkConnectionInfo() { return remoteFrameworkConnectionInfo; } @@ -261,26 +266,32 @@ public RemoteFrameworkConnectionInfo getRemoteFrameworkConnectionInfo() { */ private I18N i18n; + @Override public File getBasedir() { return basedir; } + @Override public String getSourceEncoding() { return sourceEncoding; } + @Override public String getTemplateDirectory() { return templateDirectory; } + @Override public I18N getI18N() { return i18n; } + @Override public MavenProject getMavenProject() { return project; } + @Override public void generate(ConnectorDocBuilder builder, Context context, String connectorName) throws MojoExecutionException { try { @@ -334,6 +345,7 @@ protected String getTargetDirectoryName() { } } + @Override public void execute() throws MojoExecutionException, MojoFailureException { if (skip) { getLog().info("Skipping DocBook generation"); @@ -387,6 +399,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { org.apache.commons.io.FileUtils.copyDirectory(docbkxDirectory, rootDirectory, new FileFilter() { + @Override public boolean accept(File pathname) { return includes.contains(pathname.getPath()); } diff --git a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ReducePomMojo.java b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ReducePomMojo.java index 95739535..8e3f95dc 100644 --- a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ReducePomMojo.java +++ b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/ReducePomMojo.java @@ -87,6 +87,7 @@ public class ReducePomMojo extends AbstractMojo { /** * {@inheritDoc} */ + @Override public void execute() throws MojoExecutionException { // Check to see if we have a reduction and if so rewrite the POM. if (!skip) { diff --git a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/RemoteFrameworkConnectionInfoConverter.java b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/RemoteFrameworkConnectionInfoConverter.java index 26edf428..ac7eb474 100644 --- a/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/RemoteFrameworkConnectionInfoConverter.java +++ b/OpenICF-maven-plugin/src/main/java/org/forgerock/openicf/maven/RemoteFrameworkConnectionInfoConverter.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.maven; @@ -52,18 +53,21 @@ public class RemoteFrameworkConnectionInfoConverter extends AbstractConfiguratio implements LogEnabled { private Logger log; + @Override public void enableLogging(final Logger logger) { assert logger != null; this.log = logger; } + @Override public boolean canConvert(final Class type) { assert type != null; return RemoteFrameworkConnectionInfo.class.isAssignableFrom(type); } + @Override public Object fromConfiguration(final ConverterLookup converterLookup, final PlexusConfiguration configuration, final Class type, final Class baseType, final ClassLoader classLoader, final ExpressionEvaluator expressionEvaluator, @@ -135,14 +139,17 @@ public Object fromConfiguration(final ConverterLookup converterLookup, */ protected List getTrustManager() { return Arrays.asList((TrustManager) new X509TrustManager() { + @Override public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } + @Override public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) { } + @Override public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) { } diff --git a/OpenICF-ssh-connector/src/main/java/org/forgerock/openicf/connectors/ssh/SSHConnection.java b/OpenICF-ssh-connector/src/main/java/org/forgerock/openicf/connectors/ssh/SSHConnection.java index 2abfdce9..e8cf6381 100644 --- a/OpenICF-ssh-connector/src/main/java/org/forgerock/openicf/connectors/ssh/SSHConnection.java +++ b/OpenICF-ssh-connector/src/main/java/org/forgerock/openicf/connectors/ssh/SSHConnection.java @@ -12,6 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2016 ForgeRock AS. + * Portions Copyright 2026 3A Systems, LLC. */ package org.forgerock.openicf.connectors.ssh; @@ -102,6 +103,7 @@ protected ChannelShell createPasswordConnection(final String host, final int por final JSch jsch = new JSch(); try { configuration.getPassword().access(new GuardedString.Accessor() { + @Override public void access(char[] clearChars) { try { session = jsch.getSession(user, host, port); @@ -130,8 +132,10 @@ private ChannelShell createPubKeyConnection(final String host, final int port, f final JSch jsch = new JSch(); try { configuration.fetchPrivateKey().access(new GuardedString.Accessor() { + @Override public void access(final char[] privateKey) { configuration.getPassphrase().access(new GuardedString.Accessor() { + @Override public void access(final char[] passphrase) { try { jsch.addIdentity("SSHConnector", charsToBytes(privateKey), diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/ConcurrentXMLHandler.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/ConcurrentXMLHandler.java index 9a3716a5..bf6befb0 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/ConcurrentXMLHandler.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/ConcurrentXMLHandler.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted 2010 [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC * * $Id$ */ @@ -52,6 +53,7 @@ public ConcurrentXMLHandler(XMLConfiguration config, Schema connSchema, XSSchema proxy = new XMLHandlerImpl(config, connSchema, xsdSchemas); } + @Override public Uid create(ObjectClass objClass, Set attributes) { Uid uid = null; lock.writeLock().lock(); @@ -64,6 +66,7 @@ public Uid create(ObjectClass objClass, Set attributes) { return uid; } + @Override public Uid update(ObjectClass objClass, Uid uid, Set replaceAttributes) { Uid newUid = null; lock.writeLock().lock(); @@ -76,6 +79,7 @@ public Uid update(ObjectClass objClass, Uid uid, Set replaceAttribute return newUid; } + @Override public void delete(ObjectClass objClass, Uid uid) { lock.writeLock().lock(); try { @@ -86,6 +90,7 @@ public void delete(ObjectClass objClass, Uid uid) { } } + @Override public Collection search(String query, ObjectClass objectClass) { Collection result = null; lock.readLock().lock(); @@ -98,6 +103,7 @@ public Collection search(String query, ObjectClass objectClass) return result; } + @Override public Uid authenticate(String username, GuardedString password) { Uid result = null; lock.readLock().lock(); @@ -110,6 +116,7 @@ public Uid authenticate(String username, GuardedString password) { return result; } + @Override public XMLHandler init() { // Use the write lock so the invokers counter and proxy.init() // are not racing against a concurrent dispose() (or another init()) @@ -127,6 +134,7 @@ public XMLHandler init() { return this; } + @Override public void dispose() { // Use the write lock so that proxy.dispose() (which serializes the // shared DOM through Saxon) cannot run concurrently with itself or @@ -144,6 +152,7 @@ public void dispose() { } } + @Override public boolean isSupportUid(ObjectClass objectClass) { return proxy.isSupportUid(objectClass); } diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConfiguration.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConfiguration.java index 8bcd444d..3f8c9d37 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConfiguration.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConfiguration.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted 2010 [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC * * $Id$ */ @@ -95,6 +96,7 @@ public void setCreateFileIfNotExists(boolean createFileIfNotExists) { this.createFileIfNotExists = createFileIfNotExists; } + @Override public void validate() { if (null == xsdFilePath) { throw new IllegalArgumentException("Missing xsdFilePath property"); diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConnector.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConnector.java index f8350def..1fbe90da 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConnector.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLConnector.java @@ -65,6 +65,7 @@ public class XMLConnector implements Connector, AuthenticateOp, CreateOp, Delete * (non-Javadoc) * @see org.identityconnectors.framework.spi.Connector#getConfiguration() */ + @Override public Configuration getConfiguration() { return this.config; } @@ -73,6 +74,7 @@ public Configuration getConfiguration() { * (non-Javadoc) * @see org.identityconnectors.framework.spi.Connector#init(org.identityconnectors.framework.spi.Configuration) */ + @Override public void init(Configuration configuration) { this.config = Assertions.nullChecked((XMLConfiguration) configuration, "config"); synchronized (XMLConnector.class) { @@ -99,6 +101,7 @@ public void init(Configuration configuration) { * (non-Javadoc) * @see org.identityconnectors.framework.spi.Connector#dispose() */ + @Override public void dispose() { if (xmlInstanceHandler == null) { // init() never completed successfully (e.g. invalid XML/XSD path), @@ -125,6 +128,7 @@ private synchronized Object getLock() { return lock; } + @Override public Uid authenticate(final ObjectClass objClass, final String username, final GuardedString password, final OperationOptions options) { if (ObjectClass.ACCOUNT.is(Assertions.nullChecked(objClass, "objectClass").getObjectClassValue())) { @@ -143,6 +147,7 @@ public Uid authenticate(final ObjectClass objClass, final String username, final * (non-Javadoc) * @see org.identityconnectors.framework.spi.operations.CreateOp#create(org.identityconnectors.framework.common.objects.ObjectClass, java.util.Set, org.identityconnectors.framework.common.objects.OperationOptions) */ + @Override public Uid create(final ObjectClass objClass, final Set attributes, final OperationOptions options) { synchronized (getLock()) { Assertions.nullCheck(objClass, "objectClass"); @@ -157,6 +162,7 @@ public Uid create(final ObjectClass objClass, final Set attributes, f * (non-Javadoc) * @see org.identityconnectors.framework.spi.operations.UpdateOp#update(org.identityconnectors.framework.common.objects.ObjectClass, org.identityconnectors.framework.common.objects.Uid, java.util.Set, org.identityconnectors.framework.common.objects.OperationOptions) */ + @Override public Uid update(ObjectClass objClass, Uid uid, Set replaceAttributes, OperationOptions options) { synchronized (getLock()) { Assertions.nullCheck(objClass, "objectClass"); @@ -172,6 +178,7 @@ public Uid update(ObjectClass objClass, Uid uid, Set replaceAttribute * (non-Javadoc) * @see org.identityconnectors.framework.spi.operations.DeleteOp#delete(org.identityconnectors.framework.common.objects.ObjectClass, org.identityconnectors.framework.common.objects.Uid, org.identityconnectors.framework.common.objects.OperationOptions) */ + @Override public void delete(final ObjectClass objClass, final Uid uid, final OperationOptions options) { synchronized (getLock()) { Assertions.nullCheck(objClass, "objectClass"); @@ -185,6 +192,7 @@ public void delete(final ObjectClass objClass, final Uid uid, final OperationOpt * (non-Javadoc) * @see org.identityconnectors.framework.spi.operations.SchemaOp#schema() */ + @Override public Schema schema() { SchemaParser schemaParser = new SchemaParser(XMLConnector.class, config.getXsdFilePath()); return schemaParser.parseSchema(); @@ -194,6 +202,7 @@ public Schema schema() { * (non-Javadoc) * @see org.identityconnectors.framework.spi.operations.SearchOp#createFilterTranslator(org.identityconnectors.framework.common.objects.ObjectClass, org.identityconnectors.framework.common.objects.OperationOptions) */ + @Override public FilterTranslator createFilterTranslator(ObjectClass objClass, OperationOptions options) { return new XMLFilterTranslator(xmlInstanceHandler.isSupportUid(objClass)); } @@ -202,6 +211,7 @@ public FilterTranslator createFilterTranslator(ObjectClass objClass, Oper * (non-Javadoc) * @see org.identityconnectors.framework.spi.operations.SearchOp#executeQuery(org.identityconnectors.framework.common.objects.ObjectClass, java.lang.Object, org.identityconnectors.framework.common.objects.ResultsHandler, org.identityconnectors.framework.common.objects.OperationOptions) */ + @Override public void executeQuery(ObjectClass objClass, Query query, ResultsHandler handler, OperationOptions options) { synchronized (getLock()) { QueryBuilder queryBuilder = new QueryBuilder(query, objClass); @@ -220,6 +230,7 @@ public void executeQuery(ObjectClass objClass, Query query, ResultsHandler handl * (non-Javadoc) * @see org.identityconnectors.framework.spi.operations.TestOp#test() */ + @Override public void test() { Assertions.nullCheck(config, "configuration"); Assertions.nullCheck(xmlInstanceHandler, "xmlHandler"); diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLHandlerImpl.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLHandlerImpl.java index d5521263..604d58d3 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLHandlerImpl.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLHandlerImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted 2010 [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC * * $Id$ */ @@ -116,11 +117,13 @@ public XMLHandlerImpl(XMLConfiguration config, Schema connSchema, XSSchemaSet xs NamespaceLookupUtil.INSTANCE.initialize(icfSchema, riSchema); } + @Override public XMLHandler init() { buildDocument(); return this; } + @Override public Uid create(final ObjectClass objClass, final Set attributes) { final String method = "create"; log.info("Entry {0}", method); @@ -226,6 +229,7 @@ public Uid create(final ObjectClass objClass, final Set attributes) { return new Uid(uidValue); } + @Override public Uid update(ObjectClass objClass, Uid uid, Set replaceAttributes) { final String method = "update"; log.info("Entry {0}", method); @@ -302,6 +306,7 @@ public Uid update(ObjectClass objClass, Uid uid, Set replaceAttribute return uid; } + @Override public void delete(final ObjectClass objClass, final Uid uid) { final String method = "delete"; log.info("Entry {0}", method); @@ -319,6 +324,7 @@ public void delete(final ObjectClass objClass, final Uid uid) { log.info("Exit {0}", method); } + @Override public Collection search(String query, ObjectClass objClass) { final String method = "search"; log.info("Entry {0}", method); @@ -380,6 +386,7 @@ private boolean isExternallyModified() { return modified; } + @Override public void dispose() { final String method = "serialize"; log.info("Entry {0}", method); @@ -469,6 +476,7 @@ public void dispose() { log.info("Entry {0}", method); } + @Override public Uid authenticate(String username, GuardedString password) { final String method = "authenticate"; log.info("Entry {0}", method); @@ -508,6 +516,7 @@ public Uid authenticate(String username, GuardedString password) { return uid; } + @Override public boolean isSupportUid(ObjectClass objectClass) { ObjectClassInfo objInfo = connSchema.findObjectClassInfo(objectClass.getObjectClassValue()); if (null != objInfo) { diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/query/ContainsQuery.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/query/ContainsQuery.java index 6f7af7f0..96b9b376 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/query/ContainsQuery.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/query/ContainsQuery.java @@ -1,3 +1,6 @@ +/* + * Portions Copyright 2026 3A Systems, LLC. + */ package org.forgerock.openicf.connectors.xml.query; import org.forgerock.openicf.connectors.xml.query.abstracts.QueryPart; @@ -14,6 +17,7 @@ public ContainsQuery(String prefixedName, String value, boolean not) { this.not = not; } + @Override public String getExpression() { if (not) { return createFalseExpression(); diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/query/QueryImpl.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/query/QueryImpl.java index b6e902a8..3f56dd50 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/query/QueryImpl.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/query/QueryImpl.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted 2010 [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC * * $Id$ */ @@ -46,6 +47,7 @@ public QueryImpl() { this.parts = new LinkedList(); } + @Override public void set(QueryPart part) { if (mainPart != null && parts.contains(mainPart)) { int index = parts.indexOf(mainPart); @@ -60,10 +62,12 @@ public void set(QueryPart part) { mainPart = part; } + @Override public Iterator iterator() { return parts.iterator(); } + @Override public void and(Query part) { parts.addLast(AND); @@ -72,10 +76,12 @@ public void and(Query part) { } } + @Override public Collection getParts() { return parts; } + @Override public void or(Query part) { parts.addLast(OR); @@ -92,6 +98,7 @@ public SimplePart(String value) { this.value = value; } + @Override public String getExpression() { return this.value; } diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/util/GuardedByteArrayAccessor.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/util/GuardedByteArrayAccessor.java index f098b27e..7706d8e5 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/util/GuardedByteArrayAccessor.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/util/GuardedByteArrayAccessor.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted 2010 [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC * * $Id$ */ @@ -34,6 +35,7 @@ public class GuardedByteArrayAccessor implements GuardedByteArray.Accessor { public static final String code_id = "$Id$"; private byte[] array; + @Override public void access(byte[] clearBytes) { array = new byte[clearBytes.length]; System.arraycopy(clearBytes, 0, array, 0, array.length); diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/util/GuardedStringAccessor.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/util/GuardedStringAccessor.java index 8d3b1bce..6f38669e 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/util/GuardedStringAccessor.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/util/GuardedStringAccessor.java @@ -20,6 +20,7 @@ * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted 2010 [name of copyright owner]" + * Portions Copyrighted 2026 3A Systems, LLC * * $Id$ */ @@ -33,6 +34,7 @@ public class GuardedStringAccessor implements GuardedString.Accessor { public static final String code_id = "$Id$"; private char[] _array; + @Override public void access(char[] clearChars) { _array = new char[clearChars.length]; System.arraycopy(clearChars, 0, _array, 0, _array.length);