diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConfiguration.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConfiguration.java index 841974b12..180f41767 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConfiguration.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConfiguration.java @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2013 Radovan Semancik, Evolveum + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.databasetable; @@ -69,7 +70,8 @@ public String getQuoting() { /** * NameQuote Setter - * @param value + * @param value the quoting style to use for column names in SQL statements + * (for example NONE, SINGLE, DOUBLE, BRACKETS or BACKSLASH) */ public void setQuoting(String value) { this.quoting = value; @@ -94,7 +96,7 @@ public String getHost() { /** * NameQuote Setter - * @param value + * @param value the host name or IP address of the database server */ public void setHost(String value) { this.host = value; @@ -120,7 +122,7 @@ public String getPort() { /** * NameQuote Setter - * @param value + * @param value the port number on which the database server is listening */ public void setPort(String value) { this.port = value; @@ -144,7 +146,9 @@ public String getUser() { } /** - * @param value + * @param value the user name used to log in to the database; this user + * must have rights to insert, update and delete rows in the configured + * identity holder table */ public void setUser(String value) { this.user = value; @@ -168,7 +172,9 @@ public GuardedString getPassword() { } /** - * @param value + * @param value the password used to log in to the database; this user + * must have rights to insert, update and delete rows in the configured + * identity holder table */ public void setPassword(GuardedString value) { this.password = value; @@ -191,7 +197,7 @@ public String getDatabase() { } /** - * @param value + * @param value the name of the database to connect to */ public void setDatabase(String value) { this.database = value; @@ -269,8 +275,9 @@ public String getPasswordColumn() { /** * Password Column setter - * - * @param value + * + * @param value the name of the password column, or an empty string if + * the password attribute is not supported by the schema */ public void setPasswordColumn(String value) { this.passwordColumn = value; @@ -293,7 +300,8 @@ public String getJdbcDriver() { } /** - * @param value + * @param value the fully qualified class name of the JDBC driver to be + * located on the class path */ public void setJdbcDriver(String value) { this.jdbcDriver = value; @@ -317,7 +325,9 @@ public String getJdbcUrlTemplate() { } /** - * @param value + * @param value the JDBC URL template, containing the %h (host), %p + * (port) and %d (database) placeholders, used to build the database + * connection URL */ public void setJdbcUrlTemplate(String value) { this.jdbcUrlTemplate = value; @@ -446,7 +456,9 @@ public String getValidConnectionQuery() { /** * Connection validation query setter - * @param value + * @param value the SQL query used to validate that a pooled connection + * is still usable, or an empty string to rely on the default + * auto-commit true/false command instead */ public void setValidConnectionQuery(String value) { this.validConnectionQuery = value; @@ -471,7 +483,9 @@ public String getChangeLogColumn() { } /** - * @param value + * @param value the name of the change log column used to detect + * changed rows for the sync operation, or an empty string to leave + * the sync operation unsupported */ public void setChangeLogColumn(String value) { this.changeLogColumn = value; @@ -498,7 +512,8 @@ public String getDatasource() { } /** - * @param value + * @param value the JNDI name of the datasource used to connect to the + * database */ public void setDatasource(String value) { this.datasource = value; @@ -522,7 +537,8 @@ public String[] getJndiProperties() { } /** - * @param value + * @param value the JNDI environment properties, each in "name=value" + * form, used to look up the datasource */ public void setJndiProperties(String[] value) { this.jndiProperties = value; diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConnection.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConnection.java index e1c26d160..5797c1265 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConnection.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableConnection.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; @@ -168,9 +169,10 @@ private DatabaseTableConnection(Connection conn, DatabaseTableConfiguration conf /** * The strategy utility - * - * @param conn - * @param config + * + * @param conn the live JDBC connection the resulting strategy chain will operate on + * @param config the configuration used to decide which optional strategies + * (string, native timestamps) to append to the chain * @return the created strategy */ public MappingStrategy createMappingStrategy(Connection conn, DatabaseTableConfiguration config) { @@ -195,10 +197,11 @@ public MappingStrategy createMappingStrategy(Connection conn, DatabaseTableConfi /** * Get the Column Values map - * - * @param result + * + * @param result the current row of the result set to read column values from * @return the result of Column Values map - * @throws SQLException + * @throws SQLException if a database access error occurs while reading + * the result set */ public Map getColumnValues(ResultSet result) throws SQLException { return DatabaseTableSQLUtil.getColumnValues(sms, result); 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 e736dcc5c..ed3722c3b 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 @@ -21,6 +21,7 @@ * ==================== * Portions Copyrighted 2013 Radovan Semancik, Evolveum * Portions Copyrighted 2015 ForgeRock AS + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.databasetable; @@ -117,8 +118,7 @@ * This connector assumes that all account data is stored in a single database * table. The delete action is implemented to simply remove the row from the * table. - *

- * + * * @author Will Droste * @author Keith Yarbrough * @version $Revision $ @@ -945,8 +945,9 @@ public int getColumnType(String columnName) { /** * Convert the attribute name to resource specific columnName - * - * @param attributeName + * + * @param attributeName the connector attribute name (for example + * {@code Name} or {@code Password}) to translate * @return the Column Name value */ public String getColumnName(String attributeName) { diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableFilterTranslator.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableFilterTranslator.java index 10f0f233b..8ca8ac64b 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableFilterTranslator.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/DatabaseTableFilterTranslator.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; @@ -40,8 +41,9 @@ public class DatabaseTableFilterTranslator extends DatabaseFilterTranslator { DatabaseTableConnector connector; /** * @param connector the database table connector - * @param oclass - * @param options + * @param oclass the object class the produced filters apply to + * @param options options controlling how the filters are built (for + * example the attributes to fetch) */ public DatabaseTableFilterTranslator(DatabaseTableConnector connector, ObjectClass oclass, OperationOptions options) { super(oclass, options); 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 b70964c1a..cf18ebe7e 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 @@ -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; @@ -66,8 +67,8 @@ private DatabaseTableSQLUtil() { * concentrates the replacement of all params. GuardedString are handled so the password is never * visible. *

- * @param sms - * @param statement + * @param sms the mapping strategy used to bind each parameter to the statement + * @param statement the prepared statement whose "?" markers are to be bound * @param params a List of the object arguments * @throws SQLException an exception in statement */ @@ -88,8 +89,8 @@ public static void setParams(final MappingStrategy sms, final PreparedStatement * concentrates the replacement of all params. GuardedString are handled so the password is never * visible. *

- * @param sms - * @param statement + * @param sms the mapping strategy used to bind each parameter to the statement + * @param statement the callable statement whose "?" markers are to be bound * @param params a List of the object arguments * @throws SQLException an exception in statement */ @@ -121,7 +122,8 @@ static void setParam(final MappingStrategy sms, final PreparedStatement stmt, fi * @param sms a mapping strategy * @param resultSet database data * @return The transformed column values map - * @throws SQLException + * @throws SQLException if a database access error occurs while reading + * the result set */ public static Map getColumnValues(final MappingStrategy sms, ResultSet resultSet) throws SQLException { Assertions.nullCheck(resultSet,"resultSet"); 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 9b32d9bf4..e0f83fead 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 @@ -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; @@ -42,7 +43,9 @@ public class AttributeConvertor implements MappingStrategy { /** * Final sql mapping - * @param delegate + * @param delegate the next strategy in the chain to which the JDBC + * get/set calls are forwarded before their result is + * converted to an attribute-supported type */ public AttributeConvertor(MappingStrategy delegate) { Assertions.nullCheck(delegate, "MappingStrategy delegate"); 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 388b684a7..94ef7ca82 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 @@ -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; @@ -42,7 +43,9 @@ public class JdbcConvertor implements MappingStrategy { /** * Final sql mapping - * @param delegate + * @param delegate the next strategy in the chain to which the + * get/set calls are forwarded after values are converted + * back to their database (JDBC) type */ public JdbcConvertor(MappingStrategy delegate) { Assertions.nullCheck(delegate, "MappingStrategy delegate"); diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/MappingStrategy.java b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/MappingStrategy.java index 4e5fdeaa7..2e5947da5 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/MappingStrategy.java +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/MappingStrategy.java @@ -36,6 +36,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; @@ -68,10 +69,10 @@ public interface MappingStrategy { /** * Convert database type to connector supported set of attribute types - * @param stmt - * @param idx - * @param parm - * @throws SQLException + * @param stmt the prepared statement whose bind parameter is being set + * @param idx the 1-based index of the "?" marker to bind + * @param parm the parameter, carrying the value and its SQL type, to bind + * @throws SQLException if the parameter cannot be bound on the statement */ public void setSQLParam(final PreparedStatement stmt, final int idx, SQLParam parm) throws SQLException; 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 07e24ae07..88014cec9 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 @@ -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; @@ -42,7 +43,9 @@ public class NativeTimestampsStrategy implements MappingStrategy { /** * Final sql mapping - * @param delegate + * @param delegate the next strategy in the chain used for any SQL type + * other than {@link Types#TIMESTAMP}, which this strategy + * handles by reading the native {@code java.sql.Timestamp} */ public NativeTimestampsStrategy(MappingStrategy delegate) { Assertions.nullCheck(delegate, "MappingStrategy delegate"); 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 8f9ddb3c2..b4bbd6619 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 @@ -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; @@ -45,7 +46,8 @@ public class StringStrategy implements MappingStrategy { /** * The SQL get/set strategy class implementation write as a string all types mapped as a String. * Final sql mapping - * @param delegate + * @param delegate the next strategy in the chain used whenever the + * column's attribute type is not a String */ public StringStrategy(MappingStrategy delegate) { Assertions.nullCheck(delegate, "MappingStrategy delegate"); diff --git a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/package.html b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/package.html index 7fed60e5a..4a1ee382c 100644 --- a/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/package.html +++ b/OpenICF-databasetable-connector/src/main/java/org/identityconnectors/databasetable/mapping/package.html @@ -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 --> @@ -27,9 +28,9 @@ Database Table Connector Mapping Package Overview -

Database Table Connector Mapping Package Overview

+

Database Table Connector Mapping Package Overview

Database table connector use the configuration's switches to change the attribute to resource mapping.

This package provides implementation of mapping strategy.

- + diff --git a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/FilterWhereBuilder.java b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/FilterWhereBuilder.java index 7eafc5454..0c6780c5f 100644 --- a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/FilterWhereBuilder.java +++ b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/FilterWhereBuilder.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; @@ -37,7 +38,7 @@ *

* The builder can return a List of params to be used within preparedStatement * creation - *

+ *

* * @since 1.0 */ diff --git a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/LocalizedAssert.java b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/LocalizedAssert.java index 2b264eb9e..69f14b21c 100644 --- a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/LocalizedAssert.java +++ b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/LocalizedAssert.java @@ -1,3 +1,6 @@ +/* + * Portions Copyrighted 2026 3A Systems, LLC + */ package org.identityconnectors.dbcommon; import org.identityconnectors.framework.common.objects.ConnectorMessages; @@ -19,6 +22,8 @@ public class LocalizedAssert { * Creates asserts with messages. * * @param cm + * the connector messages used to look up and format the + * localized assertion failure messages * @throws IllegalArgumentException * if cm param is null */ @@ -34,6 +39,8 @@ public LocalizedAssert(final ConnectorMessages cm) { * names * * @param cm + * the connector messages used to look up and format the + * localized assertion failure messages * @param localizeArguments * the arg * @throws IllegalArgumentException @@ -61,8 +68,12 @@ private void throwException(String locKey, String argument) { * If argument is null, throws localized IllegalArgumentException * * @param + * the type of the value being checked * @param o + * the value to check for null * @param argument + * the name of the argument being validated, used to build the + * localized error message * @return o param */ public T assertNotNull(T o, String argument) { @@ -78,8 +89,12 @@ public T assertNotNull(T o, String argument) { * If argument is not null, throws localized IllegalArgumentException * * @param + * the type of the value being checked * @param o + * the value to check for null * @param argument + * the name of the argument being validated, used to build the + * localized error message * @return o */ public T assertNull(T o, String argument) { @@ -95,7 +110,11 @@ public T assertNull(T o, String argument) { * If argument is null or blank, throws localized IllegalArgumentException * * @param o + * the string to check; the assertion fails if it is null or + * has zero length * @param argument + * the name of the argument being validated, used to build the + * localized error message * @return same string */ public String assertNotBlank(String o, String argument) { @@ -111,7 +130,11 @@ public String assertNotBlank(String o, String argument) { * If argument is not blank, throws localized IllegalArgumentException * * @param s + * the string to check; the assertion fails if it is not null + * and has a non-zero length * @param argument + * the name of the argument being validated, used to build the + * localized error message * @return same string */ public String assertBlank(String s, String argument) { diff --git a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/PropertiesResolver.java b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/PropertiesResolver.java index f693d313a..78494c894 100644 --- a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/PropertiesResolver.java +++ b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/PropertiesResolver.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; @@ -28,13 +29,13 @@ import java.util.Set; /** - * Resolver of properties in UNIX/ant style.
- * Example of usage :
+ * Resolver of properties in UNIX/ant style.
+ * Example of usage :
* - * Properties p = new Properties();
- * p.setProperty("p1","value1");
- * p.setProperty("p2","Value of p1 is ${p1}");
- * p = PropertiesResolver.resolveProperties(p);
+ * Properties p = new Properties();
+ * p.setProperty("p1","value1");
+ * p.setProperty("p2","Value of p1 is ${p1}");
+ * p = PropertiesResolver.resolveProperties(p);
*
* * It is shield against recursion. @@ -69,6 +70,8 @@ public static Properties resolveProperties(Properties properties, Properties res * Resolve properties containing already known values. * * @param properties + * the properties to resolve; each value may reference other + * entries in this same set using ${propertyName} placeholders * @return resolved properties */ public static Properties resolveProperties(Properties properties) { 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 2e69f296a..6aef2ed80 100644 --- a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/SQLUtil.java +++ b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/SQLUtil.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.dbcommon; @@ -74,6 +75,7 @@ private SQLUtil() { * Get the connection from the datasource. * * @param datasourceName + * the JNDI name of the DataSource to look up * @param env * propertyHastable * @return the connection get from default jndi context @@ -93,6 +95,7 @@ public static Connection getDatasourceConnection(final String datasourceName, * Get the connection from the dataSource with specified user and password. * * @param datasourceName + * the JNDI name of the DataSource to look up * @param user * DB user * @param password @@ -129,6 +132,7 @@ public void access(char[] clearChars) { * Get the connection from the dataSource with specified user and password. * * @param datasourceName + * the JNDI name of the DataSource to look up * @param user * DB user * @param password @@ -164,6 +168,7 @@ private static javax.naming.InitialContext getInitialContext(final Hashtable * blob * @return a converted value * @throws SQLException + * if the BLOB's binary stream cannot be obtained */ public static byte[] blob2ByteArray(Blob blobValue) throws SQLException { byte[] newValue = null; @@ -554,6 +561,7 @@ public static byte[] blob2ByteArray(Blob blobValue) throws SQLException { *

* * @param statement + * the prepared statement whose "?" markers are to be bound * @param params * a List of the object arguments * @throws SQLException @@ -584,6 +592,7 @@ public static void setParams(final PreparedStatement statement, final List * * @param statement + * the callable statement whose "?" markers are to be bound * @param params * a List of the object arguments * @throws SQLException @@ -628,6 +637,8 @@ static void setParam(final PreparedStatement stmt, final int idx, SQLParam parm) * database data * @return The transformed attribute set * @throws SQLException + * if the column metadata or values cannot be read from the + * result set */ public static Map getColumnValues(ResultSet resultSet) throws SQLException { Assertions.nullCheck(resultSet, "resultSet"); @@ -889,6 +900,7 @@ public static Object jdbc2AttributeValue(final Object value) throws SQLException * the target sql type * @return the converted object value * @throws SQLException + * if the value cannot be converted to the target SQL type */ public static Object attribute2jdbcValue(final Object value, int sqlType) throws SQLException { if (value == null) { @@ -978,6 +990,8 @@ public static Object attribute2jdbcValue(final Object value, int sqlType) throws * @param guard * a GuardedString parameter * @throws SQLException + * if the guarded string's clear-text value cannot be bound to + * the statement */ public static void setGuardedStringParam(final PreparedStatement stmt, final int idx, GuardedString guard) throws SQLException { @@ -1019,6 +1033,7 @@ public void access(char[] clearChars) { * Parameters to use in statement * @return first row and first column value * @throws SQLException + * if the statement cannot be prepared or executed */ public static Object selectSingleValue(Connection conn, String sql, SQLParam... params) throws SQLException { @@ -1052,8 +1067,11 @@ public static Object selectSingleValue(Connection conn, String sql, SQLParam... * @param sql * SQL select with or without params * @param params + * the parameters to bind to the "?" markers in the SQL + * statement * @return list of selected rows * @throws SQLException + * if the statement cannot be prepared or executed */ public static List selectRows(Connection conn, String sql, SQLParam... params) throws SQLException { @@ -1090,11 +1108,17 @@ public static List selectRows(Connection conn, String sql, SQLParam... * specific statement in one call * * @param conn + * JDBC connection to execute the statement on * @param sql + * the DML statement to execute, with "?" markers for + * parameters * @param params + * the parameters to bind to the "?" markers in the SQL + * statement * @return number of rows affected as defined by * {@link PreparedStatement#executeUpdate()} * @throws SQLException + * if the statement cannot be prepared or executed */ public static int executeUpdateStatement(Connection conn, String sql, SQLParam... params) throws SQLException { diff --git a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/UpdateSetBuilder.java b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/UpdateSetBuilder.java index 03d41b839..18419d144 100644 --- a/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/UpdateSetBuilder.java +++ b/OpenICF-dbcommon/src/main/java/org/identityconnectors/dbcommon/UpdateSetBuilder.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; @@ -82,6 +83,8 @@ public String getSQL() { * Add the update value. * * @param param + * the value to register as an additional bind parameter, + * without adding it to the generated SET clause text */ public void addValue(SQLParam param) { params.add(param); diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedcrest/StreamingJsonSlurper.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedcrest/StreamingJsonSlurper.java index 523ed9832..2d8b8ec9e 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedcrest/StreamingJsonSlurper.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedcrest/StreamingJsonSlurper.java @@ -12,6 +12,8 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. + * + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.connectors.scriptedcrest; @@ -36,17 +38,18 @@ /** * JSON slurper which parses text or reader content into a data structure of lists and maps. - *

- * Example usage:

+ * 

+ * Example usage: + *

  * def slurper = new JsonSlurper()
  * def result = slurper.parseText('{"person":{"name":"Guillaume","age":33,"pets":["dog","cat"]}}')
- * 

+ * * assert result.person.name == "Guillaume" * assert result.person.age == 33 * assert result.person.pets.size() == 2 * assert result.person.pets[0] == "dog" * assert result.person.pets[1] == "cat" - *

+ *
* * @author Guillaume Laforge * @since 1.8.0 diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedrest/ScriptedRESTConnector.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedrest/ScriptedRESTConnector.java index a69aefc28..0362bf3c7 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedrest/ScriptedRESTConnector.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedrest/ScriptedRESTConnector.java @@ -20,6 +20,8 @@ * 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.connectors.scriptedrest; @@ -40,7 +42,7 @@ /** * Main implementation of the ScriptedREST Connector. * - * @author Gael Allioux + * @author Gael Allioux <gael.allioux@forgerock.com> */ @ConnectorClass(displayNameKey = "groovy.rest.connector.display", configurationClass = ScriptedRESTConfiguration.class, messageCatalogPaths = { diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedsql/ScriptedSQLConnector.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedsql/ScriptedSQLConnector.java index e20096320..defa9ad82 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedsql/ScriptedSQLConnector.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/connectors/scriptedsql/ScriptedSQLConnector.java @@ -21,6 +21,7 @@ * your own identifying information: * " Portions Copyrighted [year] [name of copyright owner]" * + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.connectors.scriptedsql; @@ -36,7 +37,7 @@ /** * Main implementation of the ScriptedSQL Connector. * - * @author Gael Allioux + * @author Gael Allioux <gael.allioux@forgerock.com> */ @ConnectorClass(displayNameKey = "groovy.sql.connector.display", configurationClass = ScriptedSQLConfiguration.class, messageCatalogPaths = { 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 a2fe6687e..2c4e38cf1 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 @@ -20,6 +20,8 @@ * 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.misc.crest; @@ -604,9 +606,9 @@ protected void releaseResources() { /** * A {@link org.apache.http.client.ResponseHandler} that returns the * response body as a JsonValue for successful (2xx) responses. If the - * response code was >= 300, the response body is consumed and an + * response code was >= 300, the response body is consumed and an * {@link HttpResponseResourceException} is thrown. - *

+ *

* If this is used with * {@link org.apache.http.client.HttpClient#execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler)} * , HttpClient may handle redirects (3xx responses) internally. @@ -617,7 +619,7 @@ public class JsonValueResponseHandler extends AbstractJsonValueResponseHandler= 300 status code), throws an + * If the response was unsuccessful (>= 300 status code), throws an * {@link org.apache.http.client.HttpResponseException}. */ @Override @@ -630,9 +632,9 @@ protected JsonValue buildResult(HttpContext context) throws Exception { /** * A {@link org.apache.http.client.ResponseHandler} that returns the * response body as a String for successful (2xx) responses. If the response - * code was >= 300, the response body is consumed and an + * code was >= 300, the response body is consumed and an * {@link org.apache.http.client.HttpResponseException} is thrown. - *

+ *

* If this is used with * {@link org.apache.http.client.HttpClient#execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler)} * , HttpClient may handle redirects (3xx responses) internally. @@ -649,7 +651,7 @@ public QueryResultResponseHandler(final QueryResourceHandler handler) { /** * Returns the response body as a String if the response was successful * (a 2xx status code). If no response body exists, this returns null. - * If the response was unsuccessful (>= 300 status code), throws an + * If the response was unsuccessful (>= 300 status code), throws an * {@link org.apache.http.client.HttpResponseException}. */ public QueryResponse buildResult(HttpContext context) throws Exception { @@ -663,9 +665,9 @@ public QueryResponse buildResult(HttpContext context) throws Exception { /** * A {@link org.apache.http.client.ResponseHandler} that returns the * response body as a Resource for successful (2xx) responses. If the - * response code was >= 300, the response body is consumed and an + * response code was >= 300, the response body is consumed and an * {@link HttpResponseResourceException} is thrown. - *

+ *

* If this is used with * {@link org.apache.http.client.HttpClient#execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.client.ResponseHandler)} * , HttpClient may handle redirects (3xx responses) internally. @@ -676,7 +678,7 @@ public class ResourceResponseHandler extends AbstractJsonValueResponseHandler= 300 status code), throws an + * If the response was unsuccessful (>= 300 status code), throws an * {@link org.apache.http.client.HttpResponseException}. */ public ResourceResponse buildResult(HttpContext context) throws Exception { @@ -690,7 +692,7 @@ public ResourceResponse buildResult(HttpContext context) throws Exception { /** * The HttpResponseResourceException wraps the {@link ResourceException} * into {@link org.apache.http.client.HttpResponseException}. - *

+ *

* This exception is used inside * {@link org.apache.http.client.ResponseHandler#handleResponse(org.apache.http.HttpResponse)}. */ diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/crest/VisitorParameter.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/crest/VisitorParameter.java index 36447e865..14aab9d8c 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/crest/VisitorParameter.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/crest/VisitorParameter.java @@ -20,6 +20,8 @@ * 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.misc.crest; @@ -36,7 +38,7 @@ public interface VisitorParameter { /** * Translates the attribute name from ICF to JSON. * - * @param name + * @param name the ICF attribute name to translate * @return the new name. */ String translateName(String name); @@ -48,7 +50,7 @@ public interface VisitorParameter { * converts to JSON Type. Number, Boolean, String, Null, Map or Array of * these. * - * @param attribute + * @param attribute the ICF attribute whose value is to be converted * @return the new value. It could be Null, String, Boolean or Number. */ Object convertValue(Attribute attribute); 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 9c5614e66..0d8049804 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 @@ -20,6 +20,8 @@ * 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.misc.scriptedcommon; @@ -50,7 +52,7 @@ * {@link org.identityconnectors.framework.common.objects.filter.Filter} to * {@link Map}. * - * @author Gael Allioux + * @author Gael Allioux <gael.allioux@forgerock.com> */ public class MapFilterVisitor implements FilterVisitor, Void> { 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 bf1e92eb7..8ea122ba8 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 @@ -20,6 +20,8 @@ * 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.misc.scriptedcommon; @@ -81,7 +83,7 @@ * Extends the {@link AbstractConfiguration} class to provide all the necessary * parameters to initialize the Scripted Connector. * - * @author Gael Allioux + * @author Gael Allioux <gael.allioux@forgerock.com> */ @ConfigurationClass(skipUnsupported = true) public class ScriptedConfiguration extends AbstractConfiguration implements StatefulConfiguration { @@ -122,7 +124,7 @@ public String getAuthenticateScriptFileName() { /** * Set the Authenticate script FileName * - * @param value + * @param value the file name of the Authenticate script, relative to one of the configured script roots */ public void setAuthenticateScriptFileName(String value) { this.authenticateScriptFileName = value; @@ -147,7 +149,7 @@ public String getCreateScriptFileName() { /** * Set the Create script FileName * - * @param value + * @param value the file name of the Create script, relative to one of the configured script roots */ public void setCreateScriptFileName(String value) { this.createScriptFileName = value; @@ -172,7 +174,7 @@ public String getUpdateScriptFileName() { /** * Set the Update script FileName * - * @param value + * @param value the file name of the Update script, relative to one of the configured script roots */ public void setUpdateScriptFileName(String value) { this.updateScriptFileName = value; @@ -197,7 +199,7 @@ public String getDeleteScriptFileName() { /** * Set the Delete script FileName * - * @param value + * @param value the file name of the Delete script, relative to one of the configured script roots */ public void setDeleteScriptFileName(String value) { this.deleteScriptFileName = value; @@ -222,7 +224,7 @@ public String getResolveUsernameScriptFileName() { /** * Set the Test script FileName * - * @param value + * @param value the file name of the ResolveUsername script, relative to one of the configured script roots */ public void setResolveUsernameScriptFileName(String value) { this.resolveUsernameScriptFileName = value; @@ -247,7 +249,7 @@ public String getScriptOnResourceScriptFileName() { /** * Set the ScriptOnResource script FileName * - * @param value + * @param value the file name of the ScriptOnResource script, relative to one of the configured script roots */ public void setScriptOnResourceScriptFileName(String value) { this.scriptOnResourceScriptFileName = value; @@ -272,7 +274,7 @@ public String getSearchScriptFileName() { /** * Set the Search script FileName * - * @param value + * @param value the file name of the Search script, relative to one of the configured script roots */ public void setSearchScriptFileName(String value) { this.searchScriptFileName = value; @@ -296,7 +298,7 @@ public String getSyncScriptFileName() { /** * Set the Sync script FileName * - * @param value + * @param value the file name of the Sync script, relative to one of the configured script roots */ public void setSyncScriptFileName(String value) { this.syncScriptFileName = value; @@ -321,7 +323,7 @@ public String getSchemaScriptFileName() { /** * Set the Schema script FileName * - * @param value + * @param value the file name of the Schema script, relative to one of the configured script roots */ public void setSchemaScriptFileName(String value) { this.schemaScriptFileName = value; @@ -345,7 +347,7 @@ public String getTestScriptFileName() { /** * Set the Test script FileName * - * @param value + * @param value the file name of the Test script, relative to one of the configured script roots */ public void setTestScriptFileName(String value) { this.testScriptFileName = value; diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedConnection.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedConnection.java index 4c008deaf..8e89f149a 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedConnection.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedConnection.java @@ -20,12 +20,14 @@ * 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.misc.scriptedcommon; /** - * @author Gael Allioux + * @author Gael Allioux <gael.allioux@forgerock.com> */ public interface ScriptedConnection { diff --git a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedFilterTranslator.java b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedFilterTranslator.java index 10ef02e1b..0adb7300e 100644 --- a/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedFilterTranslator.java +++ b/OpenICF-groovy-connector/src/main/java/org/forgerock/openicf/misc/scriptedcommon/ScriptedFilterTranslator.java @@ -20,6 +20,8 @@ * 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.misc.scriptedcommon; @@ -39,7 +41,7 @@ import static org.identityconnectors.framework.common.objects.filter.FilterBuilder.*; /** - * @author Gael Allioux + * @author Gael Allioux <gael.allioux@forgerock.com> */ public class ScriptedFilterTranslator extends AbstractFilterTranslator { diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/DataProvider.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/DataProvider.java index cbfc8c765..47923ff23 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/DataProvider.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/DataProvider.java @@ -19,6 +19,8 @@ * 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.data; @@ -39,13 +41,16 @@ public interface DataProvider { /** * Gets data value by the specified parameters * - * @param dataTypeName - * @param name - * @param componentName - * @param sequenceNumber + * @param dataTypeName the Java type that the returned value should be converted to + * @param name the name of the data item to look up + * @param componentName the name of the test component (object class, test suite, ...) + * the data belongs to + * @param sequenceNumber the iteration index to use when several values are defined + * for the same name (e.g. i0, i1, i2, ...) * @param isMultivalue switch between single and multivalue query - * @return + * @return the data value matching the given parameters, converted to {@code dataTypeName} * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if no data value matching the given parameters could be found */ public Object get(Class dataTypeName, String name, String componentName, int sequenceNumber, boolean isMultivalue); @@ -53,11 +58,13 @@ public Object get(Class dataTypeName, String name, /** * Gets data value by the specified parameters * - * @param dataTypeName - * @param name - * @param componentName - * @return + * @param dataTypeName the Java type that the returned value should be converted to + * @param name the name of the data item to look up + * @param componentName the name of the test component (object class, test suite, ...) + * the data belongs to + * @return the data value matching the given parameters, converted to {@code dataTypeName} * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if no data value matching the given parameters could be found */ public Object get(Class dataTypeName, String name, String componentName); @@ -65,11 +72,14 @@ public Object get(Class dataTypeName, String name, /** * Gets data value by the specified parameters * - * @param name - * @param componentName - * @param sequenceNumber - * @return + * @param name the name of the data item to look up + * @param componentName the name of the test component (object class, test suite, ...) + * the data belongs to + * @param sequenceNumber the iteration index to use when several values are defined + * for the same name (e.g. i0, i1, i2, ...) + * @return the {@code String} value matching the given parameters * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if no data value matching the given parameters could be found */ public String getString(String name, String componentName, int sequenceNumber); @@ -77,38 +87,47 @@ public String getString(String name, /** * Gets data value by the specified parameters * - * @param name - * @param componentName - * @return + * @param name the name of the data item to look up + * @param componentName the name of the test component (object class, test suite, ...) + * the data belongs to + * @return the {@code String} value matching the given parameters * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if no data value matching the given parameters could be found */ public String getString(String name, String componentName); /** * Gets data value by the specified parameters - * @param propName + * @param propName the name of the connector configuration property to look up, + * relative to the {@code connector} property prefix * - * @return + * @return the value configured for the given connector attribute * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if no value is configured for the given attribute name */ public Object getConnectorAttribute(String propName); /** * Gets test suite attribute - * @param propName + * @param propName the name of the test suite property to look up, relative to the + * {@code testsuite} property prefix * - * @return + * @return the value configured for the given test suite attribute * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if no value is configured for the given attribute name */ public Object getTestSuiteAttribute(String propName); /** * Gets test suite attribute - * @param propName + * @param propName the name of the test suite property to look up, relative to + * {@code testsuite.testName} + * @param testName the name of the test whose attributes are queried * - * @return + * @return the value configured for the given test suite attribute * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if no value is configured for the given attribute name */ public Object getTestSuiteAttribute(String propName, String testName); @@ -125,7 +144,7 @@ public Object getTestSuiteAttribute(String propName, * for example i1.testProperty * * @param name the suffix - * @param sequenceNumber + * @param sequenceNumber the iteration index prepended to {@code name} (e.g. 1 for i1.testProperty) * @return the property value */ public Object get(String name, int sequenceNumber); @@ -167,7 +186,11 @@ public Object getTestSuiteAttribute(String propName, /* ***************** ADDITIONAL PROPERTY UTILS ************** */ /** - * adds to 'cfg' the complete map defined by property 'propertyName' + * adds to 'cfg' the complete map defined by property 'propertyName'. For every entry + * of the submap, the setter method whose name derives from the entry's key is looked + * up on {@code cfg} and invoked reflectively with the entry's value; if the setter + * cannot be found, is not accessible, or throws while being invoked, the failure is + * wrapped and re-thrown as an unchecked exception. * * @param propertyName * the name of property which represents the submap that will be @@ -184,7 +207,7 @@ public Object getTestSuiteAttribute(String propName, * // attempt to create the database in the directory.. * config = new ConnectorConfiguration(); * - * // LOAD THE submap in 'configuration' prefix to 'config' object. + * // LOAD THE submap in 'configuration' prefix to 'config' object. * dataProvider.loadConfiguration(DEFAULT_CONFIGURATINON, config); * //////// The groovy configuration * @@ -195,10 +218,8 @@ public Object getTestSuiteAttribute(String propName, * init.port="boo" * } * - * @throws NoSuchMethodException the Setter method for the property in the configuration does not exist - * @throws IllegalAccessException - * @throws InvocationTargetException - * @throws SecurityException + * @throws SecurityException if reflective access to the configuration's setter + * method is denied */ public void loadConfiguration(final String propertyName, Configuration cfg); 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 f8e68ac71..0263c309b 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 @@ -19,6 +19,8 @@ * 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.data; @@ -57,13 +59,15 @@ * Default implementation of {@link DataProvider}. It uses ConfigSlurper from * Groovy to parse the property file. * The groovy files are read as classpath resources using following paths : - *

    - *
  • loader.getResource(prefix + "/config/config.groovy")
  • - *
  • loader.getResource(prefix + "/config/" + cfg + "/config.groovy") optionally where cfg is passed configuration
  • - *
  • loader.getResource(prefix + "/config-private/config.groovy")
  • - *
  • loader.getResource(prefix + "/config-private/" + cfg + "/config.groovy") optionally where cfg is passed configuration
  • - *
- where prefix is FQN of your connector set as "connectorName" system property. + *

+ *
    + *
  • loader.getResource(prefix + "/config/config.groovy")
  • + *
  • loader.getResource(prefix + "/config/" + cfg + "/config.groovy") optionally where cfg is passed configuration
  • + *
  • loader.getResource(prefix + "/config-private/config.groovy")
  • + *
  • loader.getResource(prefix + "/config-private/" + cfg + "/config.groovy") optionally where cfg is passed configuration
  • + *
+ *

+ * where prefix is FQN of your connector set as "connectorName" system property. * Note: If two property files contain the same property name, the value from * the latter file the list overrides the others. I.e. the last file * from the list has the greatest chance to propagate its values to the final @@ -101,11 +105,13 @@ *

* default values -- these values reside in file bootstrap.groovy. * When the property foo.bar.boo is queried the following queries are executed: + *

*
  * 1) foo.bar.boo
  * 2) bar.boo
  * 3) boo
  * 
+ *

* In case none of these queries succeed, the default value is used based on the type of the query. *

*

@@ -779,8 +785,9 @@ private Map getPropertyMap(final String setName) { } /** - * @param propertySetName - * @return The set Set of attributes + * @param propertySetName the property that marks the submap to be converted, e.g. + * {@code account.create} + * @return the {@code Set} built from the entries of the given property submap */ public Set getAttributeSet(final String propertySetName) { Map propMap = getPropertyMap(propertySetName); @@ -803,12 +810,17 @@ public Set getAttributeSet(final String propertySetName) { } /** - * @param configName - * @throws NoSuchFieldException - * @throws IllegalAccessException - * @throws InvocationTargetException - * @throws NoSuchMethodException - * @throws SecurityException + * Populates {@code cfg} with the values of the property submap identified by + * {@code configName}, setting each entry on {@code cfg} via its corresponding + * JavaBean setter reflectively. Any failure to find, access, or invoke a setter + * (e.g. a {@code NoSuchFieldException}, {@code IllegalAccessException}, + * {@code InvocationTargetException} or {@code NoSuchMethodException}) is wrapped + * and re-thrown as an unchecked exception. + * + * @param configName the name of the property that represents the submap that + * will be converted to configuration + * @throws SecurityException if reflective access to the configuration's setter + * method is denied */ public void loadConfiguration(final String configName, Configuration cfg) { Map propMap = getPropertyMap(configName); diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/groovy/Lazy.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/groovy/Lazy.java index 753171b67..2ef2549e6 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/groovy/Lazy.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/data/groovy/Lazy.java @@ -19,6 +19,8 @@ * 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.data.groovy; @@ -36,8 +38,9 @@ * configuration. *

*

- * More detailed information is on web - * {@link https://identityconnectors.dev.java.net/contract-tests-groovy/index.html} + * More detailed information was on the web at + * {@code https://identityconnectors.dev.java.net/contract-tests-groovy/index.html} + * (the java.net project site has since been retired). *

* * @author Zdenek Louzensky @@ -57,8 +60,8 @@ public abstract class Lazy { * (not intented for programmer use) *

* - * @param s - * @return + * @param s the literal string segment to append to this value once it is resolved + * @return this same {@code Lazy} instance, with {@code s} added to its list of successors */ public Lazy plus(String s) { successors.add(s); @@ -93,10 +96,12 @@ public static Lazy random(Object pattern) { * generate a random object based on given pattern. Object's constructor * will be initialized with the string generated by pattern. * - * @param pattern - * @see {@link org.identityconnectors.contract.data.RandomGenerator#generate(String)} - * @param clazz - * @return + * @param pattern the pattern used to generate the random string, as accepted by + * {@link org.identityconnectors.contract.data.RandomGenerator#generate(String)} + * @param clazz the type whose single-{@code String}-argument constructor is invoked + * with the generated string to build the returned value + * @return a {@code Lazy} instance that generates the random value of type {@code clazz} + * lazily, when it is resolved */ public static Lazy random(Object pattern, Class clazz) { return new Random(pattern, clazz); diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/exceptions/ContractException.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/exceptions/ContractException.java index f5c963aa5..d3a67f45b 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/exceptions/ContractException.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/exceptions/ContractException.java @@ -19,6 +19,8 @@ * 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.exceptions; @@ -59,6 +61,7 @@ public ContractException(Throwable originalException) { * masquerade as the original only be a {@link RuntimeException}. * * @param message + * passed to the {@link RuntimeException} message. * @param originalException * the original exception adapted to {@link RuntimeException}. */ 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 37eebe498..8c0ffdaf6 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 @@ -22,6 +22,7 @@ * * Portions Copyrighted 2012 ForgeRock AS * + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.contract.test; @@ -69,8 +70,7 @@ *
    *
  • non-readable attributes are not returnedByDefault
  • *
  • attributes which are not returnedByDefault really are not returned - * unless
  • - * specified in attrsToGet + * unless specified in attrsToGet *
  • update of non-updateable attribute will fail
  • *
  • required attributes must be creatable
  • *
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 fa726dc22..ae9be0048 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 @@ -22,6 +22,7 @@ * * Portions Copyrighted 2012 ForgeRock AS * + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.contract.test; @@ -134,8 +135,9 @@ public static DataProvider createDataProvider() { /** * Gets {@link ConfigurationProperties} for the connector * - * @param dataProvider - * @return + * @param dataProvider the data provider from which the connector's configuration + * properties are read + * @return the configuration properties declared by the connector under test */ public static ConfigurationProperties getConfigurationProperties(DataProvider dataProvider) { ConnectorInfoManager manager = getInfoManager(dataProvider); @@ -328,7 +330,7 @@ public boolean handle(ConnectorObject obj) { /** * Performs sync on connector facade. - * @returns list of deltas + * @return list of deltas */ public static List sync(ConnectorFacade connectorFacade, ObjectClass objClass, SyncToken token, OperationOptions opOptions) { @@ -630,14 +632,18 @@ public static Set getReadableAttributesNames(ObjectClassInfo ocInfo) { /** * get attribute values (concatenates the qualifier with the name) - * @param dataProvider - * @param objectClassInfo - * @param testName - * @param qualifier - * @param sequenceNumber - * @param checkRequired - * @return + * @param dataProvider the data provider supplying the attribute values + * @param objectClassInfo the object class whose attributes are built + * @param testName the name of the test component the data belongs to + * @param qualifier prefix concatenated with the attribute name when looking up its value + * @param sequenceNumber the iteration index to use when several values are defined + * for the same attribute + * @param checkRequired if {@code true}, a missing value for a required attribute is + * rethrown instead of just logged as a warning + * @return the set of attributes resolved from the data provider for the given object class * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if a required attribute's value could not be found and {@code checkRequired} + * is {@code true} */ public static Set getAttributes(DataProvider dataProvider, ObjectClassInfo objectClassInfo, String testName, @@ -697,14 +703,16 @@ public static Set getAttributes(DataProvider dataProvider, /** * gets the attributes for you, appending the qualifier to the attribute name - * @param connectorFacade - * @param dataProvider - * @param objectClassInfo - * @param testName - * @param qualifier - * @param sequenceNumber - * @return + * @param connectorFacade the connector facade used to create the object + * @param dataProvider the data provider supplying the attribute values + * @param objectClassInfo the object class of the object to create + * @param testName the name of the test component the data belongs to + * @param qualifier prefix concatenated with the attribute name when looking up its value + * @param sequenceNumber the iteration index to use when several values are defined + * for the same attribute + * @return the {@link Uid} of the newly created object * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if a required attribute's value could not be found */ public static Uid createObject(ConnectorFacade connectorFacade, DataProvider dataProvider, ObjectClassInfo objectClassInfo, @@ -718,13 +726,15 @@ public static Uid createObject(ConnectorFacade connectorFacade, /** * gets the attributes for you - * @param connectorFacade - * @param dataProvider - * @param objectClassInfo - * @param testName - * @param sequenceNumber - * @return + * @param connectorFacade the connector facade used to create the object + * @param dataProvider the data provider supplying the attribute values + * @param objectClassInfo the object class of the object to create + * @param testName the name of the test component the data belongs to + * @param sequenceNumber the iteration index to use when several values are defined + * for the same attribute + * @return the {@link Uid} of the newly created object * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if a required attribute's value could not be found */ public static Uid createObject(ConnectorFacade connectorFacade, DataProvider dataProvider, ObjectClassInfo objectClassInfo, @@ -738,10 +748,10 @@ public static Uid createObject(ConnectorFacade connectorFacade, /** * check to see if a particular objectclass supports a particular operation * - * @param connectorFacade - * @param oClass - * @param operation - * @return + * @param connectorFacade the connector facade whose schema is queried + * @param oClass the object class to check + * @param operation the API operation that must be supported + * @return {@code true} if {@code oClass} supports {@code operation}, {@code false} otherwise */ public static boolean operationSupported(ConnectorFacade connectorFacade, ObjectClass oClass, Class operation) { @@ -755,11 +765,11 @@ public static boolean operationSupported(ConnectorFacade connectorFacade, /** * check to see if a particular objectclass supports a particular operations * - * @param connectorFacade - * @param oClass - * @param operation1 - * @param operation2 - * @return + * @param connectorFacade the connector facade whose schema is queried + * @param oClass the object class to check + * @param operation1 an API operation that must be supported + * @param operation2 another API operation that must be supported + * @return {@code true} if {@code oClass} supports both operations, {@code false} otherwise */ public static boolean operationSupported(ConnectorFacade connectorFacade, ObjectClass oClass, Class operation1, @@ -776,10 +786,11 @@ public static boolean operationSupported(ConnectorFacade connectorFacade, * check to see if a particular objectclass supports a particular operations * To succeed all the operations must be supported. * - * @param connectorFacade - * @param oClass - * @param operations - * @return + * @param connectorFacade the connector facade whose schema is queried + * @param oClass the object class to check + * @param operations the API operations that must all be supported + * @return {@code true} if {@code oClass} supports every operation in {@code operations}, + * {@code false} otherwise */ public static boolean operationsSupported(ConnectorFacade connectorFacade, ObjectClass oClass, Set> operations) { @@ -819,9 +830,10 @@ public static boolean operationsSupported(ConnectorFacade connectorFacade, Objec /** * check to see if ANY objectclass supports a particular operation - * @param connectorFacade - * @param operation - * @return + * @param connectorFacade the connector facade whose schema is queried + * @param operation the API operation that must be supported + * @return {@code true} if at least one object class in the connector's schema + * supports {@code operation}, {@code false} otherwise */ public static boolean operationSupported(ConnectorFacade connectorFacade, Class operation) { @@ -833,10 +845,11 @@ public static boolean operationSupported(ConnectorFacade connectorFacade, /** * check to see if ANY objectclass supports a particular operation - * @param connectorFacade - * @param operations1 - * @param operations2 - * @return + * @param connectorFacade the connector facade whose schema is queried + * @param operations1 an API operation that must be supported + * @param operations2 another API operation that must be supported + * @return {@code true} if at least one object class in the connector's schema + * supports both operations, {@code false} otherwise */ public static boolean operationSupported(ConnectorFacade connectorFacade, Class operations1, Class operations2) { @@ -849,9 +862,10 @@ public static boolean operationSupported(ConnectorFacade connectorFacade, /** * check to see if ANY objectclass supports a particular operations - * @param connectorFacade - * @param operations - * @return + * @param connectorFacade the connector facade whose schema is queried + * @param operations the API operations that must all be supported + * @return {@code true} if at least one object class in the connector's schema + * supports every operation in {@code operations}, {@code false} otherwise */ public static boolean operationsSupported(ConnectorFacade connectorFacade, Set> operations) { @@ -1004,12 +1018,13 @@ private static String formatDataName(String objectClassName, String name) { /** * no sequence number or qualifier, appends objectclass to name - * @param dataProvider - * @param componentName - * @param name - * @param objectClassName - * @return + * @param dataProvider the data provider supplying the value + * @param componentName the name of the test component the data belongs to + * @param name the name of the data item to look up + * @param objectClassName the object class name prepended to {@code name} + * @return the {@code String} value matching the given parameters * @throws org.identityconnectors.contract.exceptions.ObjectNotFoundException + * if no data value matching the given parameters could be found */ public static String getString(DataProvider dataProvider, String componentName, String name, String objectClassName) throws ObjectNotFoundException { 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 59fcc85b8..2afec7a72 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 @@ -22,6 +22,7 @@ * * Portions Copyrighted 2012 ForgeRock AS * + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.contract.test; @@ -203,7 +204,9 @@ public ObjectClassInfo getObjectClassInfo(ObjectClass objectClass) { /** * Identifier which tells if the tested ObjectClass * is supported by connector or not, supported means that the ObjectClass is included in the Schema - * @return + * @param objectClass the object class to check against the connector's schema + * @return {@code true} if {@code objectClass} is supported by the connector for every + * operation required by the current contract test, {@code false} otherwise */ public boolean isObjectClassSupported(ObjectClass objectClass) { // get all the required operations for current contract test diff --git a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/UpdateApiOpTests.java b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/UpdateApiOpTests.java index 75e097d5e..b2b13f71c 100644 --- a/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/UpdateApiOpTests.java +++ b/OpenICF-java-framework/connector-framework-contract/src/main/java/org/identityconnectors/contract/test/UpdateApiOpTests.java @@ -22,6 +22,7 @@ * * Portions Copyrighted 2012 ForgeRock AS * + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.contract.test; @@ -211,7 +212,7 @@ protected void testRun(ObjectClass objectClass) { * 2) Set all attributes' values to null * If you want to skip some attributes from being set to null list them in Update.updateToNullValue.skippedAttributes property * in groovy.config - * 3) Try to update the object with property's value = null -> IF no exception, property has been removed or set to null + * 3) Try to update the object with property's value = null -> IF no exception, property has been removed or set to null * 4) Check if the property has been really removed or set to null * 5) TODO something went wrong because the value has not been set to null value or removed. The value of nulled property pesisted. * 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 9dfcfff13..3b9118f0b 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 @@ -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; @@ -55,6 +56,8 @@ public class DelegatingTimeoutProxy implements InvocationHandler { * @param target * The object we are wrapping * @param timeoutMillis + * The timeout, in milliseconds, after which the operation is + * aborted; {@link APIOperation#NO_TIMEOUT} disables the timeout */ public DelegatingTimeoutProxy(Object target, long timeoutMillis, int bufferSize) { this.target = target; 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 503b6743f..dd2707d16 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 @@ -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; @@ -69,6 +70,8 @@ public class MethodTimeoutProxy implements InvocationHandler { * @param target * The object we are wrapping * @param timeoutMillis + * the number of milliseconds to wait for the invoked method to + * complete before throwing an {@link OperationTimeoutException} */ public MethodTimeoutProxy(Object target, long timeoutMillis) { this.target = target; diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/JavaClassProperties.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/JavaClassProperties.java index 59e070529..1769a5b1f 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/JavaClassProperties.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/JavaClassProperties.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; @@ -95,11 +96,16 @@ public static void mergeIntoBean(ConfigurationPropertiesImpl properties, Configu /** * Calculate the difference between the given config and the properties. - * + * * @param properties + * the current configuration properties to compare against the bean * @param config - * @return + * the configuration bean whose live property values are compared + * to the given properties + * @return the list of properties whose value differs between the bean and + * the given properties, each populated with the new value from the bean * @throws Exception + * if a property getter cannot be invoked on the configuration bean */ public static List calculateDiff(ConfigurationPropertiesImpl properties, Configuration config) throws Exception { 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 7c87c693f..9d9aede65 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 @@ -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; @@ -80,7 +81,6 @@ /** * Implements all the methods of the facade. - *

*/ public class LocalConnectorFacadeImpl extends AbstractConnectorFacade { 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 23b0f330e..9a880eb25 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 @@ -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; @@ -346,7 +347,7 @@ private PooledObject borrowIdleObject() throws InterruptedException { /** * Closes any idle objects in the pool. - *

+ *

* Existing active objects will remain alive and be allowed to shutdown * gracefully, but no more objects will be allocated. */ diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPoolHandler.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPoolHandler.java index 1890340f2..8d3ae9cc6 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPoolHandler.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/ObjectPoolHandler.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; @@ -31,7 +32,7 @@ public interface ObjectPoolHandler { /** * Validates, copies and updates the original * {@code ObjectPoolConfiguration}. - *

+ *

* This class can validate and if necessary it changes the {@code original} * configuration. * @@ -43,7 +44,7 @@ public interface ObjectPoolHandler { /** * Makes a new instance of the pooled object. - *

+ *

* This method is called whenever a new instance is needed. * * @return new instance of T. @@ -52,7 +53,7 @@ public interface ObjectPoolHandler { /** * Tests the borrowed object. - *

+ *

* This method is invoked on head instances to make sure they can be * borrowed from the pool. * @@ -63,7 +64,7 @@ public interface ObjectPoolHandler { /** * Disposes the object. - *

+ *

* This method is invoked on every instance when it is being "dropped" from * the pool (whether due to the response from {@link #testObject(Object)}, * or for reasons specific to the pool implementation.) @@ -75,7 +76,7 @@ public interface ObjectPoolHandler { /** * Releases any allocated resources. - *

+ *

* Existing active objects will remain alive and be allowed to shutdown * gracefully, but no more objects will be allocated. */ 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 152a58032..47c80b8cd 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 @@ -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; @@ -45,7 +46,9 @@ public AuthenticationImpl(final ConnectorOperationalContext context, /** * Authenticate using the basic credentials. * - * @see AuthenticationOpTests#authenticate(String, String) + *

+ * Delegates to the connector's {@link AuthenticateOp#authenticate} implementation + * after validating that the object class, username and password are supplied. */ public Uid authenticate(final ObjectClass objectClass, final String username, final GuardedString password, 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 07d364ec8..026ae46d0 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 @@ -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; @@ -70,7 +71,7 @@ public BatchImpl(final ConnectorOperationalContext context, final Connector conn } /** - * {@inherit} + * {@inheritDoc} */ public Subscription executeBatch(final List tasks, final Observer observer, final OperationOptions options) { @@ -110,7 +111,7 @@ public Subscription executeBatch(final List tasks, final Observer observer, final OperationOptions options) { 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 6cdc9d150..24cef5ed6 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 @@ -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; @@ -63,7 +64,11 @@ public class OperationalContext implements AbstractConfiguration.ConfigurationCh * to Connector. * * @param connectorInfo + * metadata about the connector bundle and class for which this + * context is being created * @param apiConfiguration + * the API configuration, including the raw configuration + * properties, from which the {@code Configuration} bean is built */ public OperationalContext(final LocalConnectorInfoImpl connectorInfo, final APIConfigurationImpl apiConfiguration) { 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 ac7515cc9..8a8cee551 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 @@ -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; @@ -253,8 +254,13 @@ public static class ConnectorEventSubscriptionApiOpImp extends SubscriptionImpl * Creates the API operation so it can called multiple times. * * @param context + * the operational context providing access to the connector + * configuration and info * @param connector + * the connector instance on which the operation is executed * @param referenceCounter + * tracks the number of in-flight subscriptions so the + * connector is not disposed while a subscription is active */ public ConnectorEventSubscriptionApiOpImp(ConnectorOperationalContext context, Connector connector, ReferenceCounter referenceCounter) { @@ -269,8 +275,13 @@ public static class SyncEventSubscriptionApiOpImpl extends SubscriptionImpl impl * Creates the API operation so it can called multiple times. * * @param context + * the operational context providing access to the connector + * configuration and info * @param connector + * the connector instance on which the operation is executed * @param referenceCounter + * tracks the number of in-flight subscriptions so the + * connector is not disposed while a subscription is active */ public SyncEventSubscriptionApiOpImpl(ConnectorOperationalContext context, Connector connector, ReferenceCounter referenceCounter) { @@ -284,8 +295,13 @@ public static class BatchApiOpImpl extends SubscriptionImpl implements BatchApiO * Creates the API operation so it can called multiple times. * * @param context + * the operational context providing access to the connector + * configuration and info * @param connector + * the connector instance on which the operation is executed * @param referenceCounter + * tracks the number of in-flight subscriptions so the + * connector is not disposed while a subscription is active */ public BatchApiOpImpl(ConnectorOperationalContext context, Connector connector, ReferenceCounter referenceCounter) { 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 21e76e50c..1518139d4 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 @@ -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; @@ -147,7 +148,10 @@ private void init() { * metadata. * * @param info - * @return + * the connection information (host, port, credentials, timeout) to + * use for the derived manager + * @return a new manager sharing this instance's cached connector metadata but + * connecting via the given {@code info} */ public RemoteConnectorInfoManagerImpl derive(RemoteFrameworkConnectionInfo info) { RemoteConnectorInfoManagerImpl rv = new RemoteConnectorInfoManagerImpl(); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteWrappedException.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteWrappedException.java index 64b09bd2c..0f2dda6aa 100755 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteWrappedException.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/remote/RemoteWrappedException.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.remote; @@ -36,10 +37,9 @@ /** * RemoteWrappedException wraps every exception which are received from Remote * Connector Server. - *

+ *

* This Exception is not allowed to use in Connectors!!! - *

- * + *

* * * This type of exception is not allowed to be serialise because this exception @@ -64,7 +64,7 @@ * t.printStackTrace(); * } * } - * + * * * * @author Laszlo Hordos diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/ObjectDecoder.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/ObjectDecoder.java index a4713d395..b4c640e14 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/ObjectDecoder.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/serializer/ObjectDecoder.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,9 +33,9 @@ public interface ObjectDecoder { * Reads an object using the appropriate serializer for that object * @param fieldName A hint of the field name. Ignored for binary * serialization. The subelement name for xml serialization - * @expectedType Ignored for binary serialization. For xml serialization, + * @param expectedType Ignored for binary serialization. For xml serialization, * this must be specified if it was written in-line. - * @dflt The default value if there is no value. + * @param dflt The default value if there is no value. */ public Object readObjectField(String fieldName, Class expectedType, @@ -44,7 +45,7 @@ public Object readObjectField(String fieldName, * Reads a boolean. * @param fieldName A hint of the field name. Ignored for binary * serialization. The attribute name for xml serialization - * @dflt The default value if there is no value. + * @param dflt The default value if there is no value. */ public boolean readBooleanField(String fieldName, boolean dflt); @@ -52,7 +53,7 @@ public Object readObjectField(String fieldName, * Reads an int. * @param fieldName A hint of the field name. Ignored for binary * serialization. The attribute name for xml serialization - * @dflt The default value if there is no value. + * @param dflt The default value if there is no value. */ public int readIntField(String fieldName, int dflt); @@ -60,7 +61,7 @@ public Object readObjectField(String fieldName, * Reads a long. * @param fieldName A hint of the field name. Ignored for binary * serialization. The attribute name for xml serialization - * @dflt The default value if there is no value. + * @param dflt The default value if there is no value. */ public long readLongField(String fieldName, long dflt); @@ -68,7 +69,7 @@ public Object readObjectField(String fieldName, * Reads a float. * @param fieldName A hint of the field name. Ignored for binary * serialization. The attribute name for xml serialization - * @dflt The default value if there is no value. + * @param dflt The default value if there is no value. */ public float readFloatField(String fieldName, float dflt ); @@ -76,7 +77,7 @@ public Object readObjectField(String fieldName, * Reads a Class. * @param fieldName A hint of the field name. Ignored for binary * serialization. The attribute name for xml serialization - * @dflt The default value if there is no value. + * @param dflt The default value if there is no value. */ public Class readClassField(String fieldName, Class dflt ); @@ -84,7 +85,7 @@ public Object readObjectField(String fieldName, * Reads a String. * @param fieldName A hint of the field name. Ignored for binary * serialization. The attribute name for xml serialization - * @dflt The default value if there is no value. + * @param dflt The default value if there is no value. */ public String readStringField(String fieldName, String dflt ); @@ -92,7 +93,7 @@ public Object readObjectField(String fieldName, * Reads a double. * @param fieldName A hint of the field name. Ignored for binary * serialization. The attribute name for xml serialization - * @dflt The default value if there is no value. + * @param dflt The default value if there is no value. */ public double readDoubleField(String fieldName, double dflt ); @@ -143,7 +144,8 @@ public Object readObjectField(String fieldName, /** * Returns the number of anonymous sub-objects. - * @return + * @return the number of anonymous sub-objects available to be read via + * {@link #readObjectContents(int)} */ public int getNumSubObjects(); diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/ConnectorServer.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/ConnectorServer.java index 27420756b..40d0f72e1 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/ConnectorServer.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/server/ConnectorServer.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; @@ -355,7 +356,7 @@ public void setBundleParentClassLoader(final ClassLoader bundleParentClassLoader /** * Gets the time when the servers was started last time. - *

+ *

* {@code System.currentTimeMillis()} * * @return last start dateTime in milliseconds 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 e1a4a0c53..1f8805904 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 @@ -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; @@ -75,7 +76,6 @@ /** * The OSGi ConnectorInfoManager Implementation ... - *

* * @author Laszlo Hordos * @since 1.1 diff --git a/OpenICF-java-framework/connector-framework-protobuf/src/main/java/org/forgerock/openicf/common/protobuf/package-info.java b/OpenICF-java-framework/connector-framework-protobuf/src/main/java/org/forgerock/openicf/common/protobuf/package-info.java index 2d3a01923..9cf42951a 100644 --- a/OpenICF-java-framework/connector-framework-protobuf/src/main/java/org/forgerock/openicf/common/protobuf/package-info.java +++ b/OpenICF-java-framework/connector-framework-protobuf/src/main/java/org/forgerock/openicf/common/protobuf/package-info.java @@ -20,12 +20,13 @@ * 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 */ /** * Provide the Google Protocol Buffer Messages required for the Remote OpenICF Server communication. - *

- * The messages are extracted for easy extensibility in the future. + *

+ * The messages are extracted for easy extensibility in the future. * * @since 1.5 */ 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 2d93f8173..1da672812 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 @@ -20,6 +20,8 @@ * 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; @@ -49,7 +51,6 @@ * "fails over" to the next operational {@link RequestDistributor} in the list. * If none of the {@link RequestDistributor} are operational then a {@code null} * is returned to the client. - *

* * @see RoundRobinLoadBalancingAlgorithm */ 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 1de8fa8b0..59dd68518 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 @@ -20,6 +20,8 @@ * 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; @@ -29,7 +31,7 @@ /** * A LocalRequest represents a remotely requested procedure call locally. - *

+ *

* The {@link RemoteRequest} and LocalRequest are the representation of the same * call on caller and receiver side. * @@ -48,7 +50,7 @@ protected LocalRequest(final long requestId, final H socket) { } /** - * Check if this object was {@ref inconsistent}-ed and don't dispose. + * Check if this object was marked {@link #inconsistent() inconsistent} and don't dispose. * * @return 'true' when object is still active or 'false' when this can be * disposed. diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/MessageListener.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/MessageListener.java index bd2d86373..7703b79b2 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/MessageListener.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/MessageListener.java @@ -20,6 +20,8 @@ * 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; @@ -41,7 +43,7 @@ public interface MessageListener, H ext *

* Invoked when {@link RemoteConnectionHolder#close()} has been called on a * particular {@link RemoteConnectionHolder} instance. - *

+ *

* * @param socket * the {@link RemoteConnectionHolder} being closed. @@ -59,6 +61,7 @@ public interface MessageListener, H ext *

* * @param t + * the error that occurred while processing the request. */ public void onError(Throwable t); diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionContext.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionContext.java index 3d6e489c4..ff3db1a1c 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionContext.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionContext.java @@ -20,6 +20,8 @@ * 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; @@ -28,7 +30,7 @@ * A RemoteConnectionContext is a custom context to provide application specific * information to create the * {@link org.forgerock.openicf.common.rpc.RemoteRequest}. - *

+ *

* The {@link org.forgerock.openicf.common.rpc.RemoteRequest} may depends on * which {@link org.forgerock.openicf.common.rpc.RemoteConnectionGroup} * distributes the request. Instance of this class is provided to @@ -41,7 +43,7 @@ public interface RemoteConnectionContext + *

* Return the {@link org.forgerock.openicf.common.rpc.RemoteConnectionGroup} * in which this instance belongs to. * 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 c536a3f3d..198123c70 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 @@ -20,6 +20,8 @@ * 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; @@ -38,11 +40,11 @@ /** * A RemoteConnectionGroups represent a remote pair of another instance of * RemoteConnectionGroups. - *

+ *

* RemoteConnectionGroups holds the * {@link org.forgerock.openicf.common.rpc.RemoteConnectionHolder} which are * connected to the remotely paired RemoteConnectionGroups. - *

+ *

* The local instance of {@link RemoteConnectionGroup#remoteRequests} paired * with the remote instance of {@link RemoteConnectionGroup#localRequests}. * diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionHolder.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionHolder.java index 3d93e0e35..05173308f 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionHolder.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RemoteConnectionHolder.java @@ -20,6 +20,8 @@ * 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; @@ -29,7 +31,7 @@ /** * A RemoteConnectionHolder is a wrapper class for the underlying communication * chanel. - *

+ *

* The API is detached from the real underlying protocol and abstracted through * this interface. The message transmitted via this implementation should * trigger the appropriate method on 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 4222675b3..d12f762b4 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 @@ -20,6 +20,8 @@ * 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; @@ -36,7 +38,7 @@ /** * A RemoteRequest represents a locally requested procedure call executed * remotely. - *

+ *

* The RemoteRequest and {@link LocalRequest} are the representation of the same * call on caller and receiver side. * @@ -59,7 +61,7 @@ public RemoteRequest(P context, long requestId, } /** - * Check if this object was {@ref inconsistent}-ed and don't dispose. + * Check if this object was marked {@link #inconsistent() inconsistent} and don't dispose. * * @return 'true' when object is still active or 'false' when this can be * disposed. diff --git a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RequestDistributor.java b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RequestDistributor.java index 26494a7d1..8351db778 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RequestDistributor.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/main/java/org/forgerock/openicf/common/rpc/RequestDistributor.java @@ -20,6 +20,8 @@ * 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; @@ -28,15 +30,15 @@ * A RequestDistributor delivers the * {@link org.forgerock.openicf.common.rpc.RemoteRequest} to the connected * endpoint. - *

+ *

* The {@link org.forgerock.openicf.common.rpc.RemoteRequestFactory} is used to * create a {@link org.forgerock.openicf.common.rpc.RemoteConnectionContext} * aware {@link org.forgerock.openicf.common.rpc.RemoteRequest} which will be * delivered. - *

+ *

* The implementation may hold multiple transmission channels and try all to * deliver the message before if fails. - *

+ *

* The failed delivery signaled with null empty to avoid the expensive Throw and * Catch especially when many implementation are chained together. * 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 e4f11f385..6cf371231 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 @@ -20,6 +20,8 @@ * 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; @@ -43,7 +45,6 @@ * "fails over" to the next operational {@link RequestDistributor} in the list. * If none of the {@link RequestDistributor} are operational then a {@code null} * is returned to the client. - *

* * @see FailoverLoadBalancingAlgorithm */ 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 3960a46e4..ceaddd01c 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 @@ -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; @@ -288,12 +289,23 @@ public ConnectorInfo findConnectorInfo(ConnectorKey key) { } /** - * One Success or All Fail + * One Success or All Fail. + *

+ * Combines a list of promises into a single composite promise that is + * fulfilled as soon as any one of the given promises succeeds, or is + * rejected only once every one of the given promises has failed. * * @param promises + * the list of promises to combine; must not be {@code null}. * @param + * the type of the successful result shared by all of the + * given promises. * @param - * @return + * the type of exception that may be thrown by any of the + * given promises. + * @return a composite promise that resolves with the first successful + * result among {@code promises}, or is rejected with the + * exception of the last promise to fail if none of them succeed. */ public static Promise when(final List> promises) { final AtomicInteger remaining = new AtomicInteger(promises.size()); diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/AsyncConnectorInfoManager.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/AsyncConnectorInfoManager.java index 2aedba602..b5340eff0 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/AsyncConnectorInfoManager.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/AsyncConnectorInfoManager.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; @@ -41,13 +42,16 @@ public interface AsyncConnectorInfoManager extends ConnectorInfoManager { /** * Add a promise which will be fulfilled with the * {@link org.identityconnectors.framework.api.ConnectorInfo} for the given - * {@ConnectorKey}. - * + * {@link ConnectorKey}. + * * Add a Promise which will be fulfilled immediately if the * {@link org.identityconnectors.framework.api.ConnectorInfo} is maintained * currently by this instance or later when it became available. - * + * * @param key + * the key that uniquely identifies the connector bundle, + * connector class, and version whose + * {@code ConnectorInfo} should be resolved. * @return new promise */ public Promise findConnectorInfoAsync(ConnectorKey key); @@ -55,12 +59,12 @@ public interface AsyncConnectorInfoManager extends ConnectorInfoManager { /** * Add a promise which will be fulfilled with the * {@link org.identityconnectors.framework.api.ConnectorInfo} for the given - * {@ConnectorKeyRange}. + * {@link ConnectorKeyRange}. * * Add a Promise which will be fulfilled immediately if the * {@link org.identityconnectors.framework.api.ConnectorInfo} is maintained * currently by this instance or later when it became available. - * + * * There may be multiple ConnectorInfo matching the range. The * implementation can only randomly fulfill the promise. It can not grantee * the highest version to return because it may became available after the @@ -68,6 +72,9 @@ public interface AsyncConnectorInfoManager extends ConnectorInfoManager { * available in this manager. * * @param keyRange + * the range of connector bundle versions to match; the + * promise is fulfilled with the {@code ConnectorInfo} of any + * connector whose key falls within this range. * @return new promise */ public Promise findConnectorInfoAsync( diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/AuthenticationAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/AuthenticationAsyncApiOp.java index 45cdd6836..9a4933e53 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/AuthenticationAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/AuthenticationAsyncApiOp.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; @@ -32,7 +33,8 @@ import org.identityconnectors.framework.common.objects.Uid; /** - * {@inheritDoc} + * Asynchronous variant of {@link AuthenticationApiOp}, exposing the + * authentication operation as a {@link Promise} instead of a blocking call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/CreateAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/CreateAsyncApiOp.java index 131b66996..c7b358123 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/CreateAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/CreateAsyncApiOp.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; @@ -34,7 +35,8 @@ import org.identityconnectors.framework.common.objects.Uid; /** - * {@inheritDoc} + * Asynchronous variant of {@link CreateApiOp}, exposing the create + * operation as a {@link Promise} instead of a blocking call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/DeleteAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/DeleteAsyncApiOp.java index 91ca62fe6..d3ba33448 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/DeleteAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/DeleteAsyncApiOp.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; @@ -31,7 +32,8 @@ import org.identityconnectors.framework.common.objects.Uid; /** - * {@inheritDoc} + * Asynchronous variant of {@link DeleteApiOp}, exposing the delete + * operation as a {@link Promise} instead of a blocking call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/GetAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/GetAsyncApiOp.java index c8ad171cf..2fd3cd8f9 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/GetAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/GetAsyncApiOp.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; @@ -32,7 +33,8 @@ import org.identityconnectors.framework.common.objects.Uid; /** - * {@inheritDoc} + * Asynchronous variant of {@link GetApiOp}, exposing the get operation as a + * {@link Promise} instead of a blocking call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ResolveUsernameAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ResolveUsernameAsyncApiOp.java index 411da2395..4ed8c7535 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ResolveUsernameAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ResolveUsernameAsyncApiOp.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; @@ -31,7 +32,9 @@ import org.identityconnectors.framework.common.objects.Uid; /** - * {@inheritDoc} + * Asynchronous variant of {@link ResolveUsernameApiOp}, exposing the + * username resolution operation as a {@link Promise} instead of a blocking + * call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/SchemaAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/SchemaAsyncApiOp.java index c5ca16428..452bfa49e 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/SchemaAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/SchemaAsyncApiOp.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; @@ -29,7 +30,8 @@ import org.identityconnectors.framework.common.objects.Schema; /** - * {@inheritDoc} + * Asynchronous variant of {@link SchemaApiOp}, exposing the schema + * retrieval operation as a {@link Promise} instead of a blocking call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ScriptOnConnectorAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ScriptOnConnectorAsyncApiOp.java index 3fcf5b565..bcaa32715 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ScriptOnConnectorAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ScriptOnConnectorAsyncApiOp.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; @@ -30,7 +31,9 @@ import org.identityconnectors.framework.common.objects.ScriptContext; /** - * {@inheritDoc} + * Asynchronous variant of {@link ScriptOnConnectorApiOp}, exposing the + * run-script-on-connector operation as a {@link Promise} instead of a + * blocking call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ScriptOnResourceAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ScriptOnResourceAsyncApiOp.java index 81717a6d4..7dffebb01 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ScriptOnResourceAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ScriptOnResourceAsyncApiOp.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; @@ -30,7 +31,9 @@ import org.identityconnectors.framework.common.objects.ScriptContext; /** - * {@inheritDoc} + * Asynchronous variant of {@link ScriptOnResourceApiOp}, exposing the + * run-script-on-resource operation as a {@link Promise} instead of a + * blocking call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/TestAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/TestAsyncApiOp.java index 3d1cb4215..e3cb5979f 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/TestAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/TestAsyncApiOp.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; @@ -28,7 +29,8 @@ import org.identityconnectors.framework.api.operations.TestApiOp; /** - * {@inheritDoc} + * Asynchronous variant of {@link TestApiOp}, exposing the configuration + * test operation as a {@link Promise} instead of a blocking call. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/UpdateAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/UpdateAsyncApiOp.java index 29c135e19..bee9cc7f9 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/UpdateAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/UpdateAsyncApiOp.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; @@ -34,7 +35,9 @@ import org.identityconnectors.framework.common.objects.Uid; /** - * {@inheritDoc} + * Asynchronous variant of {@link UpdateApiOp}, exposing the update + * operations (replace, add attribute values, and remove attribute values) + * as {@link Promise}s instead of blocking calls. * * @since 1.5 */ diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ValidateAsyncApiOp.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ValidateAsyncApiOp.java index 2e79ba054..385e5c5ee 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ValidateAsyncApiOp.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/async/ValidateAsyncApiOp.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; @@ -28,7 +29,8 @@ import org.identityconnectors.framework.api.operations.ValidateApiOp; /** - * {@inheritDoc} + * Asynchronous variant of {@link ValidateApiOp}, exposing the configuration + * validation operation as a {@link Promise} instead of a blocking call. * * @since 1.5 */ 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 8f30bb6ce..03b139fd8 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 @@ -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,7 +66,6 @@ /** * The OSGi ConnectorInfoManager Implementation ... - *

* * @author Laszlo Hordos * @since 1.1 diff --git a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/SecurityUtil.java b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/SecurityUtil.java index c76bbcdde..91c446cf6 100644 --- a/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/SecurityUtil.java +++ b/OpenICF-java-framework/connector-framework-server/src/main/java/org/forgerock/openicf/framework/remote/SecurityUtil.java @@ -12,6 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2015-2016 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.framework.remote; @@ -137,7 +138,9 @@ public static Pair generateVerifier(String username, String pass * * @param username user name (aka "identity") * @param password password - * @param verification + * @param verification the verifier and salt pair previously produced by + * {@link #generateVerifier}, against which the + * supplied username and password are checked * @param random the source of randomness for this generator * @param params group parameters (prime, generator) * @return true if client and server secret is equals @@ -169,7 +172,7 @@ public static boolean checkMutualVerification(String username, String password, /** * Load a class with a given name. - *

+ *

* It will try to load the class in the following order: *

    *
  • From Thread.currentThread().getContextClassLoader() diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/EqualsHashCodeBuilder.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/EqualsHashCodeBuilder.java index 991e19d78..c0d0ef4ca 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/EqualsHashCodeBuilder.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/EqualsHashCodeBuilder.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; @@ -52,7 +53,9 @@ public EqualsHashCodeBuilder() { * testing. * * @param object - * @return + * the field value to append; may be an array, in which case + * each element is appended recursively. + * @return this builder, to allow chained calls to {@code append}. * @throws IllegalArgumentException * if a collection is passed since collections do not * support value based equality. Sets, Lists, and Maps will work diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/IOUtil.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/IOUtil.java index 68dabab95..68a1a3d98 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/IOUtil.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/IOUtil.java @@ -21,6 +21,7 @@ * ==================== * Portions Copyrighted 2013 ConnId * Portions Copyrighted 2015 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.common; @@ -70,7 +71,7 @@ private IOUtil() { /** * Quietly closes the reader. - *

    + *

    * This avoids having to handle exceptions, and then inside of the exception * handling have a try catch block to close the reader and catch any * {@link IOException} which may be thrown and ignore it. @@ -90,7 +91,7 @@ public static void quietClose(final Reader reader) { /** * Quietly closes the stream. - *

    + *

    * This avoids having to handle exceptions, and then inside of the exception * handling have a try catch block to close the stream and catch any * {@link IOException} which may be thrown. @@ -110,7 +111,7 @@ public static void quietClose(final InputStream stream) { /** * Quietly closes the writer. - *

    + *

    * This avoids having to handle exceptions, and then inside of the exception * handling have a try catch block to close the Writer and catch any * {@link IOException} which may be thrown. @@ -130,7 +131,7 @@ public static void quietClose(final Writer writer) { /** * Quietly closes the stream. - *

    + *

    * This avoids having to handle exceptions, and then inside of the exception * handling have a try catch block to close the stream and catch any * {@link IOException} which may be thrown. @@ -150,7 +151,7 @@ public static void quietClose(final OutputStream stream) { /** * Quietly closes the statement. - *

    + *

    * This avoids having to handle exceptions, and then inside of the exception * handling have a try catch block to close the statement and catch any * {@link SQLException} which may be thrown. @@ -171,7 +172,7 @@ public static void quietClose(final Statement stmt) { /** * Quietly closes the connection. - *

    + *

    * This avoids having to handle exceptions, and then inside of the exception * handling have a try catch block to close the connection and catch any * {@link SQLException} which may be thrown. @@ -192,7 +193,7 @@ public static void quietClose(final Connection conn) { /** * Quietly closes the resultset. - *

    + *

    * This avoids having to handle exceptions, and then inside of the exception * handling have a try catch block to close the connection and catch any * {@link SQLException} which may be thrown. @@ -241,7 +242,9 @@ public static String getResourcePath(final Class c, final String res) { * Returns an input stream of the resource specified. * * @param clazz + * Class used to locate the resource and its class loader. * @param res + * Name of the resource to load. * @return Returns an InputStream to the resource. */ public static InputStream getResourceAsStream(final Class clazz, final String res) { @@ -260,8 +263,10 @@ public static InputStream getResourceAsStream(final Class clazz, final String * Get the resource as a byte array. * * @param clazz + * Class used to locate the resource and its class loader. * @param res - * @return + * Name of the resource to load. + * @return the bytes read from the resource. */ public static byte[] getResourceAsBytes(final Class clazz, final String res) { assert clazz != null && StringUtil.isNotBlank(res); @@ -279,8 +284,11 @@ public static byte[] getResourceAsBytes(final Class clazz, final String res) * Read the entire stream into a String and return it. * * @param clazz + * Class used to locate the resource and its class loader. * @param res - * @return + * Name of the resource to load. + * @return the contents of the resource decoded using the given charset, + * or {@code null} if the resource could not be found. */ public static String getResourceAsString(final Class clazz, final String res, final Charset charset) { @@ -302,8 +310,11 @@ public static String getResourceAsString(final Class clazz, final String res, * Read the entire stream into a String and return it. * * @param clazz + * Class used to locate the resource and its class loader. * @param res - * @return + * Name of the resource to load. + * @return the contents of the resource decoded as UTF-8, or + * {@code null} if the resource could not be found. */ public static String getResourceAsString(final Class clazz, final String res) { assert clazz != null && StringUtil.isNotBlank(res); @@ -314,7 +325,9 @@ public static String getResourceAsString(final Class clazz, final String res) * Takes a 'InputStream' and returns a byte array. * * @param ins - * @return + * the stream to read from; not closed by this method. + * @return the bytes read from the stream, or {@code null} if an + * {@link IOException} occurred while reading. */ public static byte[] inputStreamToBytes(final InputStream ins) { byte[] ret = null; @@ -403,7 +416,9 @@ public static boolean copyFile(final File src, File dest) throws IOException { * NOTE: does not close streams. * * @param fis + * the source stream to read from. * @param fos + * the destination stream to write to. * @return total bytes copied. */ public static long copyFile(final InputStream fis, final OutputStream fos) throws IOException { @@ -421,7 +436,7 @@ public static long copyFile(final InputStream fis, final OutputStream fos) throw * * @param fileName * the path to the file on which to calculate the checksum - * @return + * @return the CRC32 checksum value of the file's contents. */ public static long checksum(final String fileName) throws IOException, FileNotFoundException { return (checksum(new File(fileName))); @@ -432,7 +447,7 @@ public static long checksum(final String fileName) throws IOException, FileNotFo * * @param file * the file on which to calculate the checksum - * @return + * @return the CRC32 checksum value of the file's contents. */ public static long checksum(final File file) throws IOException, FileNotFoundException { FileInputStream fis = null; @@ -456,6 +471,8 @@ public static long checksum(final File file) throws IOException, FileNotFoundExc * Reads an entire file and returns the bytes. * * @param is + * the stream to read; if {@code null}, {@code null} is + * returned. * @param close * if true, close when finished reading. * @return file bytes. @@ -712,10 +729,16 @@ public static Properties loadPropertiesFile(final String string) throws IOExcept } /** + * Joins the string representations of a collection's elements together, + * separated by the given separator character. * * @param collection + * the elements to join, in iteration order; may be + * {@code null}. * @param separator - * @return + * the character placed between consecutive elements. + * @return the joined string, or {@code null} if {@code collection} is + * {@code null}. * @since 1.3 */ public static String join(final Collection collection, final char separator) { @@ -728,10 +751,15 @@ public static String join(final Collection collection, final char separa } /** + * Joins the string representations of an array's elements together, + * separated by the given separator character. * * @param array + * the elements to join, in order; may be {@code null}. * @param separator - * @return + * the character placed between consecutive elements. + * @return the joined string, or {@code null} if {@code array} is + * {@code null}. * @since 1.3 */ public static String join(final Object[] array, final char separator) { @@ -743,12 +771,19 @@ public static String join(final Object[] array, final char separator) { } /** + * Joins the string representations of the elements of the given range of + * an array together, separated by the given separator character. * * @param array + * the elements to join; may be {@code null}. * @param separator + * the character placed between consecutive elements. * @param startIndex + * the index of the first element to include, inclusive. * @param endIndex - * @return + * the index of the last element to include, exclusive. + * @return the joined string, or {@code null} if {@code array} is + * {@code null}. * @since 1.3 */ public static String join(final Object[] array, final char separator, final int startIndex, 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 0978813c5..b2975c64f 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 @@ -20,13 +20,14 @@ * 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; /** * A version range is an interval describing a set of {@link Version versions}. - *

    + *

    * A range has a left (lower) endpoint and a right (upper) endpoint. Each * endpoint can be open (excluded from the set) or closed (included in the set). * @@ -34,7 +35,6 @@ * {@code VersionRange} objects are immutable. * * @author Laszlo Hordos - * @Immutable * @since 1.4 */ public class VersionRange { 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 ed32ce165..084dc5b05 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 @@ -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; @@ -93,7 +94,7 @@ public InputSource resolveEntity(String publicID, String systemID) { /** * Return the value of an attribute on an element. - *

    + *

    * The DOM getAttribute method returns an empty string if the attribute * doesn't exist. Here, we detect this and return null. */ @@ -173,7 +174,7 @@ public static Element getNextElement(Node node) { * Locate the first text node at any level below the given node. If the * ignoreEmpty flag is true, we will ignore text nodes that contain only * whitespace characteres. - *

    + *

    * Note that if you're trying to extract element content, you probably don't * want this since parser's can break up pcdata into multiple adjacent text * nodes. See getContent() for a more useful method. @@ -213,16 +214,16 @@ private static Text findText(Node node, boolean ignoreEmpty) { /** * Return the content of the given element. - *

    + *

    * We will descend to an arbitrary depth looking for the first text node. - *

    + *

    * Note that the parser may break what was originally a single string of * pcdata into multiple adjacent text nodes. Xerces appears to do this when * it encounters a '$' in the text, not sure if there is specified behavior, * or if its parser specific. - *

    + *

    * Here, we will congeal adjacent text nodes. - *

    + *

    * We will NOT ignore text nodes that have only whitespace. */ public static String getContent(Element e) { diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/event/ConnectorEvent.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/event/ConnectorEvent.java index 6779f6b58..f34f86526 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/event/ConnectorEvent.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/event/ConnectorEvent.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.event; @@ -82,6 +83,7 @@ public ConnectorEvent(String topic, ConnectorKey source) { * Copy Constructor. * * @param source + * the event to copy the topic, source and properties from. */ public ConnectorEvent(ConnectorEvent source) { super(source.getSource()); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/l10n/CurrentLocale.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/l10n/CurrentLocale.java index 5a2f4ffc8..393867902 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/l10n/CurrentLocale.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/l10n/CurrentLocale.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.common.l10n; @@ -29,7 +30,7 @@ * Thread local variable that impacts localization of all messages in the * connector framework. This is roughly equivalent to .Net's * Thread.CurrentCulture. - *

    + *

    * Note that this is an inheritable thread local so it is automatically * inherited from parent to child thread. Of course, if the child thread is part * of a thread pool, you will still need to manually propagate from parent to diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/GuardedByteArray.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/GuardedByteArray.java index 64997b213..7dea6ec91 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/GuardedByteArray.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/GuardedByteArray.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.security; @@ -60,6 +61,8 @@ public interface Accessor { * thus keeping the window of potential exposure to a bare-minimum. * * @param clearBytes + * the decrypted bytes, valid only for the duration of this + * call. */ public void access(byte[] clearBytes); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/GuardedString.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/GuardedString.java index 26b9f758f..8589d7e03 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/GuardedString.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/common/security/GuardedString.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.security; @@ -60,6 +61,8 @@ public interface Accessor { * thus keeping the window of potential exposure to a bare-minimum. * * @param clearChars + * the decrypted characters, valid only for the duration of + * this call. */ public void access(char[] clearChars); } diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/APIConfiguration.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/APIConfiguration.java index 06e652152..4c228985c 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/APIConfiguration.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/APIConfiguration.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.api; @@ -56,7 +57,6 @@ public interface APIConfiguration { * * @param changeListener * the callback handler to receive the change event. - * @return a closeable to unregister the change listener. */ void setChangeListener(ConfigurationPropertyChangeListener changeListener); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/ConnectorInfoManagerFactory.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/ConnectorInfoManagerFactory.java index 995d622b9..e374921c4 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/ConnectorInfoManagerFactory.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/ConnectorInfoManagerFactory.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.api; @@ -96,7 +97,7 @@ public static synchronized ConnectorInfoManagerFactory getInstance() { * NOTICE: This method is an early specification of the Events API for * 1.2.x.x version. Use carefully, this package may change before the final * 1.2.0.0 release. - *

    + *

    * As now the {@code ConnectorInfoManager} MUST implement the * {@link Runnable} to connect to the remote connector server. NOTE: * The results from this call are automatically cached and keyed by the diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/SyncEventSubscriptionApiOp.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/SyncEventSubscriptionApiOp.java index f80e222df..cfaa462f4 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/SyncEventSubscriptionApiOp.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/api/operations/SyncEventSubscriptionApiOp.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.api.operations; @@ -41,10 +42,12 @@ public interface SyncEventSubscriptionApiOp extends APIOperation { * Create a subscription to a given sync topic. * * @param objectClass + * the type of object for which to receive sync notifications. * @param handler * the Observer that will handle emissions and notifications from * the Observable * @param operationOptions + * additional options that impact the way this operation is run. * @return a {@link Subscription} reference with which the {@link Observer} * can stop receiving items before the Observable has completed * @throws java.lang.RuntimeException 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 d306797e3..a8b8be669 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 @@ -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.api.operations.batch; @@ -65,14 +66,20 @@ public CreateBatchTask(ObjectClass objectClass, Set createAttributes, } /** - * @{inherit} + * Executes this create task by delegating back to the given executor. + * + * @param executor + * the executor that will perform the actual create operation. + * @return the {@link Uid} of the newly created object. */ public Uid execute(BatchTaskExecutor executor) { return executor.execute(this); } /** - * @{inherit} + * Returns the object class of the object to create. + * + * @return the object class specified when this task was constructed. */ 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 d1b33bc63..19255f120 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 @@ -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.api.operations.batch; @@ -55,14 +56,20 @@ public DeleteBatchTask(ObjectClass objectClass, Uid uid, OperationOptions option } /** - * @{inherit} + * Executes this delete task by delegating back to the given executor. + * + * @param executor + * the executor that will perform the actual delete operation. + * @return an empty result confirming the delete completed. */ public BatchEmptyResult execute(BatchTaskExecutor executor) { return executor.execute(this); } /** - * @{inherit} + * Returns the object class of the object to delete. + * + * @return the object class specified when this task was constructed. */ 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 6a0b1e9d0..0cce2e953 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 @@ -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.api.operations.batch; @@ -73,7 +74,11 @@ public UpdateBatchTask(ObjectClass objectClass, Uid uid, Set replaceA } /** - * @{inherit} + * Executes this update task by delegating back to the given executor. + * + * @param executor + * the executor that will perform the actual update operation. + * @return the {@link Uid} of the updated object. */ public Uid execute(BatchTaskExecutor executor) { return executor.execute(this); @@ -84,7 +89,9 @@ public UpdateType getUpdateType() { } /** - * @{inherit} + * Returns the object class of the object to update. + * + * @return the object class specified when this task was constructed. */ public ObjectClass getObjectClass() { return objectClass; diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/ConnectorException.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/ConnectorException.java index 931f8c58d..494582f2d 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/ConnectorException.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/ConnectorException.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.exceptions; @@ -60,6 +61,7 @@ public ConnectorException(Throwable originalException) { * masquerade as the original only be a {@link RuntimeException}. * * @param message + * passed to the {@link RuntimeException} message. * @param originalException * the original exception adapted to {@link RuntimeException}. */ diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/InvalidAttributeValueException.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/InvalidAttributeValueException.java index b82863c1d..fa7804b1e 100755 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/InvalidAttributeValueException.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/InvalidAttributeValueException.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.exceptions; @@ -33,7 +34,6 @@ * attempting to add more than one value to a single valued-attribute, or if * attempting to add a value that conflicts with the type of the attribute or if * attempting to add a value that conflicts with the syntax of the attribute. - *

    * * @author Laszlo Hordos * @since 1.4 @@ -68,14 +68,14 @@ public InvalidAttributeValueException(String message) { /** * Constructs a new InvalidAttributeValueException exception with the specified * cause and a detail message of - * (cause==null ? null : cause.toString()) (which typically - * contains the class and detail message of cause). This + * (cause==null ? null : cause.toString()) (which typically + * contains the class and detail message of cause). This * constructor is useful for InvalidAccountException exceptions that are * little more than wrappers for other throwables. * * @param cause * the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is + * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ @@ -96,7 +96,7 @@ public InvalidAttributeValueException(Throwable cause) { * {@link #getMessage()} method). * @param cause * the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is + * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/InvalidCredentialException.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/InvalidCredentialException.java index 974c9d5f9..4dc497300 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/InvalidCredentialException.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/InvalidCredentialException.java @@ -19,12 +19,13 @@ * 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.exceptions; /** * InvalidCredentialException signals that user authentication failed. - *

    + *

    * This exception is thrown by Connector if authentication failed. For example, * a Connector throws this exception if the user entered an * incorrect password. diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/PreconditionFailedException.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/PreconditionFailedException.java index 008f3f6a7..671e46e30 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/PreconditionFailedException.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/PreconditionFailedException.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.exceptions; @@ -63,14 +64,14 @@ public PreconditionFailedException(String message) { /** * Constructs a new PreconditionFailedException exception with the specified * cause and a detail message of - * (cause==null ? null : cause.toString()) (which typically - * contains the class and detail message of cause). This + * (cause==null ? null : cause.toString()) (which typically + * contains the class and detail message of cause). This * constructor is useful for InvalidAccountException exceptions that are * little more than wrappers for other throwables. * * @param cause * the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is + * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ @@ -91,7 +92,7 @@ public PreconditionFailedException(Throwable cause) { * {@link #getMessage()} method). * @param cause * the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is + * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/PreconditionRequiredException.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/PreconditionRequiredException.java index 5af0ce05d..a45609a57 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/PreconditionRequiredException.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/PreconditionRequiredException.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.exceptions; @@ -64,14 +65,14 @@ public PreconditionRequiredException(String message) { /** * Constructs a new PreconditionRequiredException exception with the * specified cause and a detail message of - * (cause==null ? null : cause.toString()) (which typically - * contains the class and detail message of cause). This + * (cause==null ? null : cause.toString()) (which typically + * contains the class and detail message of cause). This * constructor is useful for InvalidAccountException exceptions that are * little more than wrappers for other throwables. * * @param cause * the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is + * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ @@ -92,7 +93,7 @@ public PreconditionRequiredException(Throwable cause) { * {@link #getMessage()} method). * @param cause * the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is + * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/RetryableException.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/RetryableException.java index ff332abb1..156677cbf 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/RetryableException.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/RetryableException.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.exceptions; @@ -30,8 +31,6 @@ /** * RetryableException indicates that a failure may be temporary, and that * retrying the same request may be able to succeed in the future. - *

    - * * * @author Laszlo Hordos * @since 1.4 @@ -42,14 +41,14 @@ public class RetryableException extends ConnectorException { /** * Constructs a new RetryableException exception with the specified cause - * and a detail message of (cause==null ? null : cause.toString()) - * (which typically contains the class and detail message of cause - * ). This constructor is useful for InvalidAccountException exceptions that - * are little more than wrappers for other throwables. + * and a detail message of (cause==null ? null : cause.toString()) + * (which typically contains the class and detail message of + * cause). This constructor is useful for InvalidAccountException + * exceptions that are little more than wrappers for other throwables. * * @param cause * the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is + * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ @@ -70,7 +69,7 @@ private RetryableException(Throwable cause) { * {@link #getMessage()} method). * @param cause * the cause (which is saved for later retrieval by the - * {@link #getCause()} method). (A null value is + * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ @@ -115,7 +114,7 @@ public static RetryableException wrap(String message, Throwable cause) { * was created with Uid and Application should call the * {@link 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)} * method now. - *

    + *

    * Use this only if the created object can not be deleted. The best-practice * should always be the Connector implementation reverts the changes if the * operation failed. diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/UnknownUidException.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/UnknownUidException.java index f8db3f329..42e911efd 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/UnknownUidException.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/exceptions/UnknownUidException.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.exceptions; @@ -28,7 +29,7 @@ /** * Thrown when a {@link Uid} that is specified as input to a connector operation * identifies no object on the target resource. - *

    + *

    * When implementing {@code AuthenticateOp} this exception may be thrown by a * Connector if it is unable to locate an account necessary to perform * authentication. diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/ObjectClassUtil.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/ObjectClassUtil.java index 64def0c40..ca5eb5789 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/ObjectClassUtil.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/ObjectClassUtil.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; @@ -66,7 +67,9 @@ public static boolean isSpecialName(String name) { * that a name identifies a special object class such as a predefined one. * * @param name - * @return + * the base name to turn into a special name. + * @return the name wrapped with the leading and trailing + * __ markers. */ public static String createSpecialName(String name) { return NameUtil.createSpecialName(name); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/OperationOptionsBuilder.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/OperationOptionsBuilder.java index 818abdbf8..5d1b9ca2c 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/OperationOptionsBuilder.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/OperationOptionsBuilder.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.common.objects; @@ -194,7 +195,6 @@ public OperationOptionsBuilder setPagedResultsCookie(String pagedResultsCookie) * @return This query request. * @see SearchResult#getTotalPagedResultsPolicy() * @see SearchResult#getTotalPagedResults() - * @return A this reference to allow chaining * @since 1.5 */ public OperationOptionsBuilder setTotalPagedResultsPolicy(CountPolicy policy) { diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Schema.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Schema.java index ad4f15ed1..22d14d8fc 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Schema.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Schema.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; @@ -46,7 +47,7 @@ *

  • Supported ObjectClasses by operation ( * {@link #getSupportedObjectClassesByOperation()}).
  • *
  • Supported OperationOptionInfo by operation( - * {@link #getSupportedOptionsByOperation()()}).
  • + * {@link #getSupportedOptionsByOperation()}). * * * TODO: add more to describe and what is expected from this call and how it is @@ -65,7 +66,9 @@ public final class Schema { * Public only for serialization; please use SchemaBuilder instead. * * @param info + * the declared {@link ObjectClassInfo} for this schema. * @param supportedObjectClassesByOperation + * the object classes supported by each API operation. */ public Schema( Set info, diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SchemaBuilder.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SchemaBuilder.java index 86d0e71cc..c9a25e2de 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SchemaBuilder.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SchemaBuilder.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; @@ -107,6 +108,7 @@ private boolean operationOptionOperation(Class op) { * defined by the Connector. * * @param info + * the object class definition to add. * @throws IllegalStateException * If already defined */ @@ -135,6 +137,7 @@ public void defineObjectClass(ObjectClassInfo info) { * defined by the Connector. * * @param objectClassInfo + * the object class definition to add. * @param operations * The SPI operation which use supports this * {@code objectClassInfo} @@ -202,7 +205,10 @@ public void defineOperationOption(OperationOptionInfo info) { * set of supported options for operation defined. * * @param operationOptionInfo + * the operation option definition to add. * @param operations + * the SPI operations that support this + * {@code operationOptionInfo}. * * @throws IllegalStateException * If already defined diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SyncDeltaType.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SyncDeltaType.java index dc3178d8b..1151eed04 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SyncDeltaType.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/SyncDeltaType.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; @@ -48,7 +49,7 @@ public enum SyncDeltaType { /** * The change represents a CREATE in the resource. - *

    + *

    * Experimental type to support better event mechanism where it's possible. * * @see #CREATE_OR_UPDATE @@ -58,7 +59,7 @@ public enum SyncDeltaType { /** * The change represents a UPDATE in the resource. - *

    + *

    * Experimental type to support better event mechanism where it's possible. * * @see #CREATE_OR_UPDATE diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Uid.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Uid.java index 2a3265c3a..6cf8d7873 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Uid.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/objects/Uid.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.objects; @@ -36,7 +37,7 @@ * A single-valued attribute that represents the unique identifier of an * object within the name-space of the target resource. If possible, this unique * identifier also should be immutable. - *

    + *

    * When an application creates an object on a target resource, the * {@link CreateApiOp#create create} operation returns as its result the * Uid of the created object. An application also can use the @@ -46,7 +47,7 @@ * {@link GetApiOp#getObject get}, {@link DeleteApiOp#delete delete} or * {@link UpdateApiOp#update update} that object. See the documentation for * {@link Name} for comparison. - *

    + *

    * Ideally, the value of Uid would be a Globally Unique * IDentifier (GUID). However, not every target resource provides a globally * unique and immutable identifier for each of its objects. For some connector @@ -58,12 +59,12 @@ * the Uid of an object. The fact that changing an object might * change its Uid is the reason that {@link UpdateApiOp#update * update} returns Uid. - *

    + *

    * {@link Uid} by definition must be a single-valued attribute. Its value must * always convert to a string, regardless of the underlying type of the native * identifier on the target. The string value of any native id must be * canonical. - *

    + *

    * Uid is never allowed to appear in the {@link Schema}, nor may Uid appear in * the attribute set of a {@link CreateApiOp#create create} operation. This is * because Uid is not a true attribute of an object, but rather a reference to @@ -112,7 +113,7 @@ public String getUidValue() { /** * Return the string representation of the revision value of the - *

    + *

    * The revision number specifies a given version ot the * {@link ConnectorObject object} identified by the * {@link org.identityconnectors.framework.common.objects.Uid#getUidValue()} 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 e83e22cde..1ce21d98d 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 @@ -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.framework.common.objects.filter; @@ -62,7 +63,6 @@ * *

    * Translation can then be performed using {@link #translate(Filter)}. - *

    * * @param * The result type of the translator. Commonly this will be a string, @@ -91,7 +91,7 @@ abstract public class AbstractFilterTranslator implements FilterTranslator * behavior standpoint since ConnectorFacade performs a * second level of filtering. However it is undesirable from a * performance standpoint. - *

  • >1 - List contains multiple queries that must be performed in + *
  • >1 - List contains multiple queries that must be performed in * order to meet the filter that was passed in. Note that this only * occurs if your {@link #createOrExpression} method can return * null. If this happens, it is the responsibility of the connector 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 5f7a58059..815d4b039 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 @@ -20,6 +20,7 @@ * "Portions Copyrighted [year] [name of copyright owner]" * ==================== * Portions Copyrighted 2014-2015 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.framework.common.objects.filter; @@ -39,6 +40,8 @@ public class ContainsAllValuesFilter extends AttributeFilter { * {@code ContainsAllValuesFilter}. * * @param attr + * the attribute whose values must all be present for a match; + * its name identifies the attribute to compare against. */ public ContainsAllValuesFilter(Attribute attr) { super(attr); diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/serializer/ObjectSerializerFactory.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/serializer/ObjectSerializerFactory.java index 3ecd64620..93622eef5 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/serializer/ObjectSerializerFactory.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/common/serializer/ObjectSerializerFactory.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.serializer; @@ -33,8 +34,7 @@ * Serializer factory for serializing connector objects. The list of * supported types are as follows: * TODO: list supported types - *
      - *
    + * * @see SerializerUtil */ public abstract class ObjectSerializerFactory { diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/StatefulConfiguration.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/StatefulConfiguration.java index 82ad09e9f..232e74677 100755 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/StatefulConfiguration.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/StatefulConfiguration.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.spi; @@ -27,7 +28,7 @@ /** * A Stateful Configuration interface extends the default {@link Configuration} * and makes the framework keep the same instance. - *

    + *

    * The default Configuration object instance is constructed every single time * before the {@link Connector#init(Configuration)} is called. If the * configuration class implements this interface then the Framework keeps one @@ -39,12 +40,12 @@ * Connector developer must quarantine that the necessary resource * initialisation are thread-safe. * - *

    + *

    * If the connector implements the {@link PoolableConnector} then this * configuration is kept in the - * {@link org.identityconnectors.framework.impl.api.local.ConnectorPoolManager} + * {@code org.identityconnectors.framework.impl.api.local.ConnectorPoolManager} * and when the - * {@link org.identityconnectors.framework.impl.api.local.ConnectorPoolManager#dispose()} + * {@code ConnectorPoolManager.dispose()} * calls the {@link #release()} method. If the connector implements only the * {@link Connector} then this configuration is kept in the * {@link org.identityconnectors.framework.api.ConnectorFacade} and the diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/operations/UpdateAttributeValuesOp.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/operations/UpdateAttributeValuesOp.java index 6c62e4b2c..e73336652 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/operations/UpdateAttributeValuesOp.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/operations/UpdateAttributeValuesOp.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.operations; @@ -55,7 +56,6 @@ public interface UpdateAttributeValuesOp extends UpdateOp { * the values for an attribute may contain duplicates. Therefore, in general * simply append the provided values to the current value for each * attribute. - *

    * * @param objclass * the type of object to modify. Will never be null. diff --git a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/package-info.java b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/package-info.java index 0ca3bd5df..cf2106521 100644 --- a/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/package-info.java +++ b/OpenICF-java-framework/connector-framework/src/main/java/org/identityconnectors/framework/spi/package-info.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 */ /** @@ -48,5 +49,7 @@ * but exposes more options. For instance there are two update operations. * {@link org.identityconnectors.framework.spi.operations.UpdateOp} is simpler to implement than * {@link org.identityconnectors.framework.spi.operations.UpdateAttributeValuesOp}. + *

  • + *
*/ package org.identityconnectors.framework.spi; diff --git a/OpenICF-java-framework/connector-framework/src/main/javadoc/overview.html b/OpenICF-java-framework/connector-framework/src/main/javadoc/overview.html index 9dc4e12d0..65a5a8e88 100644 --- a/OpenICF-java-framework/connector-framework/src/main/javadoc/overview.html +++ b/OpenICF-java-framework/connector-framework/src/main/javadoc/overview.html @@ -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 --> @@ -85,13 +86,5 @@ Connectors represent the next generation of this technology. Connectors are designed to minimize coupling, to maximize re-use, and to harness the power of open-source development to achieve best-of-breed solutions. -

-

-

-

-

-

-

-

diff --git a/OpenICF-java-framework/pom.xml b/OpenICF-java-framework/pom.xml index 8690fab39..b6e579b26 100644 --- a/OpenICF-java-framework/pom.xml +++ b/OpenICF-java-framework/pom.xml @@ -147,7 +147,6 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.10.1 true ${maven.compiler.source} @@ -297,7 +296,6 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.10.1 html diff --git a/OpenICF-java-framework/testbundlev1/pom.xml b/OpenICF-java-framework/testbundlev1/pom.xml index 92b7b28d4..e4f7fd53e 100644 --- a/OpenICF-java-framework/testbundlev1/pom.xml +++ b/OpenICF-java-framework/testbundlev1/pom.xml @@ -71,13 +71,6 @@ false - - org.apache.maven.plugins - maven-javadoc-plugin - - true - - diff --git a/OpenICF-java-framework/testbundlev2/pom.xml b/OpenICF-java-framework/testbundlev2/pom.xml index 595c254b1..15de77eb0 100644 --- a/OpenICF-java-framework/testbundlev2/pom.xml +++ b/OpenICF-java-framework/testbundlev2/pom.xml @@ -78,13 +78,6 @@ false - - org.apache.maven.plugins - maven-javadoc-plugin - - true - - diff --git a/OpenICF-kerberos-connector/src/main/java/org/forgerock/openicf/connectors/kerberos/KerberosConnector.java b/OpenICF-kerberos-connector/src/main/java/org/forgerock/openicf/connectors/kerberos/KerberosConnector.java index 152d6cda6..41ce4ae27 100644 --- a/OpenICF-kerberos-connector/src/main/java/org/forgerock/openicf/connectors/kerberos/KerberosConnector.java +++ b/OpenICF-kerberos-connector/src/main/java/org/forgerock/openicf/connectors/kerberos/KerberosConnector.java @@ -12,6 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2016 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.connectors.kerberos; @@ -24,9 +25,10 @@ /** * Main implementation of the ScriptedKerberosConnector Connector. + *

+ * Kerberos connector used to connect to kerberos systems via ssh. * * @author ForgeRock - * @description Kerberos connector used to connect to kerberos systems via ssh * @version 1.0 */ @ConnectorClass(displayNameKey = "kerberos.connector.display", diff --git a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapFilter.java b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapFilter.java index 8f33eb3ac..99a0cde49 100644 --- a/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapFilter.java +++ b/OpenICF-ldap-connector/src/main/java/org/identityconnectors/ldap/search/LdapFilter.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.search; @@ -86,7 +87,7 @@ public String getEntryDN() { *

If at most one of the two filters has an entry DN, the * result is a filter with that entry DN (if any) and a native filter * whose value is the native filters of the two filters "ANDed" - * together using the LDAP & operator.

+ * together using the LDAP & operator.

* *

Otherwise, the method returns null. * 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 4a3e07cbf..5275ad4af 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 @@ -21,6 +21,7 @@ * ==================== * * "Portions Copyrighted 2013-2016 Forgerock AS" + * Portions Copyrighted 2026 3A Systems, LLC */ package org.identityconnectors.ldap.search; @@ -128,10 +129,11 @@ public final void execute() { /** * Performs the search and passes the resulting {@link ConnectorObject}s to - * the given handler. + * the given handler. Any {@link NamingException} raised by the underlying + * JNDI search is caught internally and rethrown as a + * {@link org.identityconnectors.framework.common.exceptions.ConnectorException}. * * @param handler the handler. - * @throws NamingException if a JNDI exception occurs. */ public final void execute(final ResultsHandler handler) { final String[] attrsToGetOption = options.getAttributesToGet(); 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 0f2254fd9..6562b28c3 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 @@ -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; @@ -142,8 +143,10 @@ public ConnectorDocBuilder(ConnectorMojoBridge bridge) { /** * Execute the generation of the report. * - * @throws org.apache.maven.reporting.MavenReportException - * if any + * @throws MojoExecutionException + * if the connector document cannot be generated, for example + * when the Velocity template used to render the report cannot + * be located or fails to merge with the connector context */ protected void executeReport() throws MojoExecutionException { List infoList = null; 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 e1d2a7f16..e306b8f9e 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 @@ -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; @@ -56,7 +57,7 @@ /** * Goal generate a Connector Report. - *

+ *

* To debug execute this command: * {@code mvnDebug org.forgerock.maven.plugins:openicf-maven-plugin:connector-info} * @@ -221,7 +222,7 @@ protected Renderer getSiteRenderer() { /** * The output directory when the mojo is run directly from the command line. * Implementors should use this method to return the value of a mojo - * parameter that the user may use to customize the output directory.
+ * parameter that the user may use to customize the output directory.
* Note: When the mojo is run as part of a site generation, * Maven will set the effective output directory via * {@link org.apache.maven.reporting.MavenReport#setReportOutputDirectory(java.io.File)} 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 0e1270d1e..d7f527cd3 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 @@ -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; @@ -81,7 +82,7 @@ /** * A DocBookResourceMojo generate the DocBook xml. - *

+ *

* To debug execute this command: * {@code mvnDebug org.forgerock.maven.plugins:openicf-maven-plugin:docbkx} * @@ -163,7 +164,7 @@ public File getBuildOutputDirectory() { private String finalName; /** - * Specifies whether to attach the generated artifact to the project helper.
+ * Specifies whether to attach the generated artifact to the project helper.
*/ @Parameter(property = "attach", defaultValue = "true") private boolean attach; 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 797ecf19d..957395355 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 @@ -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; @@ -46,7 +47,7 @@ /** * Goal generate a new POM and keeps only the minimal information. - *

+ *

* To debug execute this command: * {@code mvnDebug org.forgerock.maven.plugins:openicf-maven-plugin:reduce-pom} * diff --git a/OpenICF-ssh-connector/src/main/java/org/forgerock/openicf/connectors/ssh/SSHConnector.java b/OpenICF-ssh-connector/src/main/java/org/forgerock/openicf/connectors/ssh/SSHConnector.java index ff627c853..d47e27be4 100644 --- a/OpenICF-ssh-connector/src/main/java/org/forgerock/openicf/connectors/ssh/SSHConnector.java +++ b/OpenICF-ssh-connector/src/main/java/org/forgerock/openicf/connectors/ssh/SSHConnector.java @@ -12,6 +12,7 @@ * information: "Portions copyright [year] [name of copyright owner]". * * Copyright 2016 ForgeRock AS. + * Portions Copyrighted 2026 3A Systems, LLC */ @@ -76,7 +77,7 @@ public void checkAlive() { /** * Disposes of {@link SSHConnector}'s resources. *

- * {@see org.identityconnectors.framework.spi.Connector#dispose()} + * See {@link org.identityconnectors.framework.spi.Connector#dispose()}. */ @Override public void dispose() { diff --git a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLFilterTranslator.java b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLFilterTranslator.java index f7ce56c4f..b2a02eb21 100644 --- a/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLFilterTranslator.java +++ b/OpenICF-xml-connector/src/main/java/org/forgerock/openicf/connectors/xml/XMLFilterTranslator.java @@ -22,6 +22,7 @@ * "Portions Copyrighted 2010 [name of copyright owner]" * * $Id$ + * Portions Copyrighted 2026 3A Systems, LLC */ package org.forgerock.openicf.connectors.xml; @@ -47,7 +48,8 @@ * method should return null. This level of filtering is present only to allow any * native contructs that may be available to help reduce the result set for the framework, * which will (strictly) reapply all filters specified after the connector does the initial - * filtering.

Note: The generic query type is most commonly a String, but does not have to be. + * filtering. + *

Note: The generic query type is most commonly a String, but does not have to be. * * @author $author$ * @version $Revision$ $Date$ diff --git a/pom.xml b/pom.xml index 153b593f7..c81f7ea77 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,7 @@ 11 UTF-8 + all,-missing @@ -300,6 +301,11 @@ maven-assembly-plugin 3.7.1 + + org.apache.maven.plugins + maven-javadoc-plugin + 3.12.0 + @@ -331,7 +337,6 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.11.2 attach-javadocs @@ -341,7 +346,8 @@ - none + ${doclint} + true UTF-8 --add-exports java.naming/com.sun.jndi.ldap=ALL-UNNAMED