opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/AbstractAttribute.java
@@ -22,7 +22,7 @@ * * * Copyright 2009 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. * Portions copyright 2012-2013 ForgeRock AS. */ package org.forgerock.opendj.ldap; @@ -165,14 +165,11 @@ /** * {@inheritDoc} */ public boolean add(final Object firstValue, final Object... remainingValues) { Validator.ensureNotNull(firstValue); boolean modified = add(ByteString.valueOf(firstValue)); if (remainingValues != null) { for (final Object value : remainingValues) { modified |= add(ByteString.valueOf(value)); } public boolean add(final Object... values) { Validator.ensureNotNull(values); boolean modified = false; for (final Object value : values) { modified |= add(ByteString.valueOf(value)); } return modified; } opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/Attribute.java
@@ -22,7 +22,7 @@ * * * Copyright 2009 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. * Portions copyright 2012-2013 ForgeRock AS. */ package org.forgerock.opendj.ldap; @@ -69,18 +69,16 @@ * Any attribute values which are not instances of {@code ByteString} will * be converted using the {@link ByteString#valueOf(Object)} method. * * @param firstValue * The first attribute value to be added to this attribute. * @param remainingValues * The remaining attribute values to be added to this attribute. * @param values * The attribute values to be added to this attribute. * @return {@code true} if this attribute changed as a result of this call. * @throws UnsupportedOperationException * If this attribute does not support addition of attribute * values. * @throws NullPointerException * If {@code firstValue} was {@code null}. * If {@code values} was {@code null}. */ boolean add(Object firstValue, Object... remainingValues); boolean add(Object... values); /** * Adds all of the attribute values contained in {@code values} to this opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/Attributes.java
@@ -22,7 +22,7 @@ * * * Copyright 2010 Sun Microsystems, Inc. * Portions copyright 2011-2012 ForgeRock AS. * Portions copyright 2011-2013 ForgeRock AS. */ package org.forgerock.opendj.ldap; @@ -113,8 +113,8 @@ } @Override public boolean add(final Object firstValue, final Object... remainingValues) { return attribute.add(firstValue, remainingValues); public boolean add(final Object... values) { return attribute.add(values); } @Override @@ -320,7 +320,7 @@ } @Override public boolean add(final Object firstValue, final Object... remainingValues) { public boolean add(final Object... values) { throw new UnsupportedOperationException(); } opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/LinkedAttribute.java
@@ -22,12 +22,11 @@ * * * Copyright 2009-2010 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. * Portions copyright 2012-2013 ForgeRock AS. */ package org.forgerock.opendj.ldap; import java.util.Arrays; import java.util.Collection; import java.util.ConcurrentModificationException; import java.util.HashMap; @@ -506,6 +505,9 @@ /** * Creates a new attribute having the specified attribute description and * single attribute value. * <p> * If {@code value} is not an instance of {@code ByteString} then it will be * converted using the {@link ByteString#valueOf(Object)} method. * * @param attributeDescription * The attribute description. @@ -515,7 +517,7 @@ * If {@code attributeDescription} or {@code value} was * {@code null} . */ public LinkedAttribute(final AttributeDescription attributeDescription, final ByteString value) { public LinkedAttribute(final AttributeDescription attributeDescription, final Object value) { this(attributeDescription); add(value); } @@ -523,6 +525,9 @@ /** * Creates a new attribute having the specified attribute description and * attribute values. * <p> * Any attribute values which are not instances of {@code ByteString} will * be converted using the {@link ByteString#valueOf(Object)} method. * * @param attributeDescription * The attribute description. @@ -533,14 +538,17 @@ * {@code null}. */ public LinkedAttribute(final AttributeDescription attributeDescription, final ByteString... values) { final Object... values) { this(attributeDescription); addAll(Arrays.asList(values)); add(values); } /** * Creates a new attribute having the specified attribute description and * attribute values. * <p> * Any attribute values which are not instances of {@code ByteString} will * be converted using the {@link ByteString#valueOf(Object)} method. * * @param attributeDescription * The attribute description. @@ -551,9 +559,9 @@ * {@code null}. */ public LinkedAttribute(final AttributeDescription attributeDescription, final Collection<ByteString> values) { final Collection<?> values) { this(attributeDescription); addAll(values); addAll(values, null); } /** @@ -575,6 +583,30 @@ /** * Creates a new attribute having the specified attribute description and * attribute values. The attribute description will be decoded using the * default schema. * <p> * Any attribute values which are not instances of {@code ByteString} will * be converted using the {@link ByteString#valueOf(Object)} method. * * @param attributeDescription * The attribute description. * @param values * The attribute values. * @throws LocalizedIllegalArgumentException * If {@code attributeDescription} could not be decoded using * the default schema. * @throws NullPointerException * If {@code attributeDescription} or {@code values} was * {@code null}. */ public LinkedAttribute(final String attributeDescription, final Collection<?> values) { this(attributeDescription); addAll(values, null); } /** * Creates a new attribute having the specified attribute description and * single attribute value. The attribute description will be decoded using * the default schema. * <p> @@ -618,9 +650,7 @@ */ public LinkedAttribute(final String attributeDescription, final Object... values) { this(attributeDescription); for (final Object value : values) { add(ByteString.valueOf(value)); } add(values); } /** opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/SortKey.java
@@ -22,13 +22,14 @@ * * * Copyright 2010 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. * Portions copyright 2012-2013 ForgeRock AS. */ package org.forgerock.opendj.ldap; import static org.forgerock.opendj.ldap.CoreMessages.*; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.LinkedList; @@ -223,28 +224,19 @@ * * @param schema * The schema which should be used for decoding the sort keys. * @param firstKey * The first sort key. * @param remainingKeys * The remaining sort keys. * @param keys * The list of sort keys. * @return The {@code Comparator}. * @throws LocalizedIllegalArgumentException * If one of the sort keys could not be converted to a * comparator. * @throws IllegalArgumentException * If {@code keys} was empty. * @throws NullPointerException * If {@code schema} or {@code firstKey} was {@code null}. * If {@code schema} or {@code keys} was {@code null}. */ public static Comparator<Entry> comparator(final Schema schema, final SortKey firstKey, final SortKey... remainingKeys) { Validator.ensureNotNull(schema, firstKey, remainingKeys); final List<Comparator<Entry>> comparators = new ArrayList<Comparator<Entry>>(1 + remainingKeys.length); comparators.add(firstKey.comparator(schema)); for (final SortKey key : remainingKeys) { comparators.add(key.comparator(schema)); } return new CompositeEntryComparator(comparators); public static Comparator<Entry> comparator(final Schema schema, final SortKey... keys) { return comparator(schema, Arrays.asList(keys)); } /** @@ -252,20 +244,19 @@ * the provided list of sort keys. The sort keys will be decoded using the * default schema. * * @param firstKey * The first sort key. * @param remainingKeys * The remaining sort keys. * @param keys * The list of sort keys. * @return The {@code Comparator}. * @throws LocalizedIllegalArgumentException * If one of the sort keys could not be converted to a * comparator. * @throws IllegalArgumentException * If {@code keys} was empty. * @throws NullPointerException * If {@code firstKey} was {@code null}. * If {@code keys} was {@code null}. */ public static Comparator<Entry> comparator(final SortKey firstKey, final SortKey... remainingKeys) { return comparator(Schema.getDefaultSchema(), firstKey, remainingKeys); public static Comparator<Entry> comparator(final SortKey... keys) { return comparator(Schema.getDefaultSchema(), keys); } /** opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/controls/MatchedValuesRequestControl.java
@@ -22,7 +22,7 @@ * * * Copyright 2009 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. * Portions copyright 2012-2013 ForgeRock AS. */ package org.forgerock.opendj.ldap.controls; @@ -271,36 +271,28 @@ * {@code true} if it is unacceptable to perform the operation * without applying the semantics of this control, or * {@code false} if it can be ignored. * @param firstFilter * The first matched values filter. * @param remainingFilters * The remaining matched values filter, may be {@code null} or * empty. * @param filters * The list of filters of which at least one must match an * attribute value in order for the attribute value to be * returned to the client. The list must not be empty. * @return The new control. * @throws LocalizedIllegalArgumentException * If one or more filters could not be parsed, or if one or more * filters failed to conform to the filter constraints defined * in RFC 3876. * @throws NullPointerException * If {@code firstFilter} was {@code null}. * If {@code filters} was {@code null}. */ public static MatchedValuesRequestControl newControl(final boolean isCritical, final String firstFilter, final String... remainingFilters) { Validator.ensureNotNull(firstFilter); final String... filters) { Validator.ensureTrue(filters.length > 0, "filters is empty"); List<Filter> filters; if (remainingFilters == null || remainingFilters.length == 0) { filters = Collections.singletonList(validateFilter(Filter.valueOf(firstFilter))); } else { filters = new ArrayList<Filter>(1 + remainingFilters.length); filters.add(validateFilter(Filter.valueOf(firstFilter))); for (final String filter : remainingFilters) { filters.add(validateFilter(Filter.valueOf(filter))); } filters = Collections.unmodifiableList(filters); final List<Filter> parsedFilters = new ArrayList<Filter>(filters.length); for (final String filter : filters) { parsedFilters.add(validateFilter(Filter.valueOf(filter))); } return new MatchedValuesRequestControl(isCritical, filters); return new MatchedValuesRequestControl(isCritical, Collections .unmodifiableList(parsedFilters)); } private static Filter validateFilter(final Filter filter) { opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/controls/ServerSideSortRequestControl.java
@@ -22,7 +22,7 @@ * * * Copyright 2010 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. * Portions copyright 2012-2013 ForgeRock AS. */ package org.forgerock.opendj.ldap.controls; @@ -31,6 +31,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -209,24 +210,17 @@ * {@code true} if it is unacceptable to perform the operation * without applying the semantics of this control, or * {@code false} if it can be ignored. * @param firstKey * The first sort key. * @param remainingKeys * The remaining sort keys. * @param keys * The list of sort keys. * @return The new control. * @throws IllegalArgumentException * If {@code keys} was empty. * @throws NullPointerException * If {@code firstKey} was {@code null}. * If {@code keys} was {@code null}. */ public static ServerSideSortRequestControl newControl(final boolean isCritical, final SortKey firstKey, final SortKey... remainingKeys) { Validator.ensureNotNull(firstKey, remainingKeys); final List<SortKey> keys = new ArrayList<SortKey>(1 + remainingKeys.length); keys.add(firstKey); for (final SortKey key : remainingKeys) { keys.add(key); } return new ServerSideSortRequestControl(isCritical, Collections.unmodifiableList(keys)); final SortKey... keys) { return newControl(isCritical, Arrays.asList(keys)); } /** opendj3/opendj-ldap-sdk/src/main/java/org/forgerock/opendj/ldap/requests/ModifyRequestImpl.java
@@ -22,7 +22,7 @@ * * * Copyright 2010 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. * Portions copyright 2012-2013 ForgeRock AS. */ package org.forgerock.opendj.ldap.requests; @@ -88,12 +88,6 @@ return v.visitChangeRecord(p, this); } public ModifyRequest addChange(final ModificationType type, final String attributeDescription, final Object firstValue, final Object... remainingValues) { // TODO Auto-generated method stub return null; } /** * {@inheritDoc} */ opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/ConnectionPoolTestCase.java
@@ -30,11 +30,11 @@ import static org.fest.assertions.Assertions.assertThat; import static org.forgerock.opendj.ldap.Connections.newFixedConnectionPool; import static org.forgerock.opendj.ldap.ErrorResultException.newErrorResult; import static org.forgerock.opendj.ldap.TestCaseUtils.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -49,12 +49,8 @@ import org.forgerock.opendj.ldap.requests.Requests; import org.forgerock.opendj.ldap.responses.ExtendedResult; import org.forgerock.opendj.ldap.responses.Responses; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.testng.annotations.Test; import com.forgerock.opendj.util.CompletedFutureResult; /** * Tests the connection pool implementation.. */ @@ -418,54 +414,4 @@ pool.close(); } private Connection mockConnection(final List<ConnectionEventListener> listeners) { final Connection mockConnection = mock(Connection.class); // Handle listener registration / deregistration in mock connection. doAnswer(new Answer<Void>() { @Override public Void answer(final InvocationOnMock invocation) throws Throwable { final ConnectionEventListener listener = (ConnectionEventListener) invocation.getArguments()[0]; listeners.add(listener); return null; } }).when(mockConnection).addConnectionEventListener(any(ConnectionEventListener.class)); doAnswer(new Answer<Void>() { @Override public Void answer(final InvocationOnMock invocation) throws Throwable { final ConnectionEventListener listener = (ConnectionEventListener) invocation.getArguments()[0]; listeners.remove(listener); return null; } }).when(mockConnection).removeConnectionEventListener(any(ConnectionEventListener.class)); return mockConnection; } @SuppressWarnings("unchecked") private ConnectionFactory mockConnectionFactory(final Connection first, final Connection... remaining) throws ErrorResultException { final ConnectionFactory factory = mock(ConnectionFactory.class); when(factory.getConnection()).thenReturn(first, remaining); when(factory.getConnectionAsync(any(ResultHandler.class))).thenAnswer( new Answer<FutureResult<Connection>>() { @Override public FutureResult<Connection> answer(final InvocationOnMock invocation) throws Throwable { final Connection connection = factory.getConnection(); // Execute handler and return future. final ResultHandler<? super Connection> handler = (ResultHandler<? super Connection>) invocation.getArguments()[0]; if (handler != null) { handler.handleResult(connection); } return new CompletedFutureResult<Connection>(connection); } }); return factory; } } opendj3/opendj-ldap-sdk/src/test/java/org/forgerock/opendj/ldap/TestCaseUtils.java
@@ -22,16 +22,28 @@ * * * Copyright 2009-2010 Sun Microsystems, Inc. * Portions copyright 2012 ForgeRock AS. */ package org.forgerock.opendj.ldap; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.SocketAddress; import java.util.List; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import com.forgerock.opendj.util.CompletedFutureResult; /** * This class defines some utility functions which can be used by test cases. @@ -118,4 +130,76 @@ public static SocketAddress getServerSocketAddress() { return LDAPServer.getInstance().getSocketAddress(); } /** * Creates a mock connection factory which will return the provided * connections in order. * * @param first * The first connection to return. * @param remaining * The remaining connections to return. * @return The connection factory. */ @SuppressWarnings("unchecked") public static ConnectionFactory mockConnectionFactory(final Connection first, final Connection... remaining) { final ConnectionFactory factory = mock(ConnectionFactory.class); try { when(factory.getConnection()).thenReturn(first, remaining); } catch (ErrorResultException ignored) { // Cannot happen. } when(factory.getConnectionAsync(any(ResultHandler.class))).thenAnswer( new Answer<FutureResult<Connection>>() { @Override public FutureResult<Connection> answer(final InvocationOnMock invocation) throws Throwable { final Connection connection = factory.getConnection(); // Execute handler and return future. final ResultHandler<? super Connection> handler = (ResultHandler<? super Connection>) invocation.getArguments()[0]; if (handler != null) { handler.handleResult(connection); } return new CompletedFutureResult<Connection>(connection); } }); return factory; } /** * Creates a mock connection which will store connection event listeners in * the provided list. * * @param listeners * The list which should be used for storing event listeners. * @return The mock connection. */ public static Connection mockConnection(final List<ConnectionEventListener> listeners) { final Connection mockConnection = mock(Connection.class); // Handle listener registration / deregistration in mock connection. doAnswer(new Answer<Void>() { @Override public Void answer(final InvocationOnMock invocation) throws Throwable { final ConnectionEventListener listener = (ConnectionEventListener) invocation.getArguments()[0]; listeners.add(listener); return null; } }).when(mockConnection).addConnectionEventListener(any(ConnectionEventListener.class)); doAnswer(new Answer<Void>() { @Override public Void answer(final InvocationOnMock invocation) throws Throwable { final ConnectionEventListener listener = (ConnectionEventListener) invocation.getArguments()[0]; listeners.remove(listener); return null; } }).when(mockConnection).removeConnectionEventListener(any(ConnectionEventListener.class)); return mockConnection; } } opendj3/opendj-rest2ldap/src/main/java/org/forgerock/opendj/rest2ldap/LDAPConstantAttributeMapper.java
@@ -43,11 +43,8 @@ if (attributeValues.length == 1) { attributes = singletonList(singletonAttribute(attributeName, attributeValues[0])); } else { Attribute attribute = new LinkedAttribute(attributeName); for (Object o : attributeValues) { attribute.add(o); } attributes = singletonList(attribute); attributes = singletonList((Attribute) new LinkedAttribute(attributeName, attributeValues)); } }