You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2015/10/13 20:56:51 UTC
svn commit: r1708486 [2/2] - in /directory/shared/trunk:
integ/src/test/java/org/apache/directory/api/ldap/model/name/
ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/
ldap/model/src/main/antlr/ ldap/model/src/main/java/org/apache/di...
Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Ava.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Ava.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Ava.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Ava.java Tue Oct 13 18:56:51 2015
@@ -77,11 +77,8 @@ public class Ava implements Externalizab
/** The user provided Name type */
private String upType;
- /** The name value. It can be a String or a byte array */
- private Value<?> normValue;
-
- /** The name user provided value. It can be a String or a byte array */
- private Value<?> upValue;
+ /** The value. It can be a String or a byte array */
+ private Value<?> value;
/** The user provided Ava */
private String upName;
@@ -114,8 +111,7 @@ public class Ava implements Externalizab
{
normType = null;
upType = null;
- normValue = null;
- upValue = null;
+ value = null;
upName = "";
this.schemaManager = schemaManager;
this.attributeType = null;
@@ -260,39 +256,17 @@ public class Ava implements Externalizab
*
* @param schemaManager The SchemaManager instance
* @param upType The User Provided type
- * @param upValue The User Provided value
+ * @param value The value
*
* @throws LdapInvalidDnException If the given type or value are invalid
*/
- private void createAva( SchemaManager schemaManager, String upType, Value<?> upValue )
+ private void createAva( SchemaManager schemaManager, String upType, Value<?> value )
throws LdapInvalidDnException
{
normType = attributeType.getOid();
this.upType = upType;
-
- try
- {
- MatchingRule equalityMatchingRule = attributeType.getEquality();
-
- if ( equalityMatchingRule != null )
- {
- this.normValue = equalityMatchingRule.getNormalizer().normalize( upValue );
- }
- else
- {
- this.normValue = upValue;
- }
- }
- catch ( LdapException le )
- {
- String message = I18n.err( I18n.ERR_04188 );
- LOG.error( message );
- throw new LdapInvalidDnException( ResultCodeEnum.INVALID_DN_SYNTAX, message, le );
- }
-
- this.upValue = upValue;
-
- upName = this.upType + '=' + ( this.upValue == null ? "" : Rdn.escapeValue( this.upValue.getString() ) );
+ this.value = value;
+ upName = this.upType + '=' + ( value == null ? "" : Rdn.escapeValue( value.getString() ) );
hashCode();
}
@@ -343,10 +317,9 @@ public class Ava implements Externalizab
}
- this.normValue = upValue;
- this.upValue = upValue;
+ value = upValue;
- upName = this.upType + '=' + ( this.upValue == null ? "" : Rdn.escapeValue( this.upValue.getString() ) );
+ upName = this.upType + '=' + ( value == null ? "" : Rdn.escapeValue( value.getString() ) );
hashCode();
}
@@ -362,23 +335,20 @@ public class Ava implements Externalizab
* @param schemaManager The SchemaManager
* @param upType The User Provided type
* @param normType The normalized type
- * @param upValue The User Provided value
- * @param normValue The normalized value
+ * @param value The value
*
* @throws LdapInvalidDnException If the given type or value are invalid
*/
// WARNING : The protection level is left unspecified intentionally.
// We need this method to be visible from the DnParser class, but not
// from outside this package.
- /* Unspecified protection */Ava( SchemaManager schemaManager, String upType, String normType, Value<?> upValue,
- Value<?> normValue )
+ /* Unspecified protection */Ava( SchemaManager schemaManager, String upType, String normType, Value<?> value )
throws LdapInvalidDnException
{
this.upType = upType;
this.normType = normType;
- this.upValue = upValue;
- this.normValue = normValue;
- upName = this.upType + '=' + ( this.upValue == null ? "" : this.upValue.getString() );
+ this.value = value;
+ upName = this.upType + '=' + ( this.value == null ? "" : this.value.getString() );
if ( schemaManager != null )
{
@@ -399,8 +369,7 @@ public class Ava implements Externalizab
*
* @param upType The User Provided type
* @param normType The normalized type
- * @param upValue The User Provided value
- * @param normValue The normalized value
+ * @param value The User Provided value
* @param upName The User Provided name (may be escaped)
*
* @throws LdapInvalidDnException If the given type or value are invalid
@@ -408,10 +377,36 @@ public class Ava implements Externalizab
// WARNING : The protection level is left unspecified intentionally.
// We need this method to be visible from the DnParser class, but not
// from outside this package.
- /* Unspecified protection */Ava( String upType, String normType, Value<?> upValue, Value<?> normValue,
- String upName )
+ /* Unspecified protection */Ava( String upType, String normType, Value<?> value, String upName )
throws LdapInvalidDnException
{
+ this( null, upType, normType, value, upName );
+ }
+
+
+ /**
+ * Construct an Ava. The type and value are normalized :
+ * <li> the type is trimmed and lowercased </li>
+ * <li> the value is trimmed </li>
+ * <p>
+ * Note that the upValue should <b>not</b> be null or empty, or resolved
+ * to an empty string after having trimmed it.
+ *
+ * @param attributeType The AttributeType for this value
+ * @param upType The User Provided type
+ * @param normType The normalized type
+ * @param value The value
+ * @param upName The User Provided name (may be escaped)
+ *
+ * @throws LdapInvalidDnException If the given type or value are invalid
+ */
+ // WARNING : The protection level is left unspecified intentionally.
+ // We need this method to be visible from the DnParser class, but not
+ // from outside this package.
+ /* Unspecified protection */Ava( AttributeType attributeType, String upType, String normType, Value<?> value, String upName )
+ throws LdapInvalidDnException
+ {
+ this.attributeType = attributeType;
String upTypeTrimmed = Strings.trim( upType );
String normTypeTrimmed = Strings.trim( normType );
@@ -442,8 +437,7 @@ public class Ava implements Externalizab
this.upType = upType;
}
- this.normValue = normValue;
- this.upValue = upValue;
+ this.value = value;
this.upName = upName;
hashCode();
}
@@ -489,24 +483,9 @@ public class Ava implements Externalizab
normType = tmpAttributeType.getOid();
- if ( normValue != null )
- {
- return;
- }
-
try
{
- // We use the Equality matching rule to normalize the value
- MatchingRule equalityMatchingRule = tmpAttributeType.getEquality();
-
- if ( equalityMatchingRule != null )
- {
- this.normValue = equalityMatchingRule.getNormalizer().normalize( upValue );
- }
- else
- {
- this.normValue = upValue;
- }
+ this.value.apply( tmpAttributeType );
}
catch ( LdapException le )
{
@@ -547,20 +526,9 @@ public class Ava implements Externalizab
*
* @return The value
*/
- public Value<?> getNormValue()
- {
- return normValue.clone();
- }
-
-
- /**
- * Get the User Provided Value of a Ava
- *
- * @return The value
- */
public Value<?> getValue()
{
- return upValue.clone();
+ return value.clone();
}
@@ -596,8 +564,7 @@ public class Ava implements Externalizab
try
{
Ava clone = ( Ava ) super.clone();
- clone.upValue = upValue.clone();
- clone.normValue = normValue.clone();
+ clone.value = value.clone();
return clone;
}
@@ -612,15 +579,14 @@ public class Ava implements Externalizab
* A Normalized String representation of a Ava :
* <ul>
* <li>type is trimed and lowercased</li>
- * <li>value is trimed and lowercased, and special characters</li>
+ * <li>value is trimed and lowercased, and special characters are escaped if needed.</li>
* </ul>
- * are escaped if needed.
*
* @return A normalized string representing an Ava
*/
public String normalize()
{
- if ( normValue.isHumanReadable() )
+ if ( value.isHumanReadable() )
{
// The result will be gathered in a stringBuilder
StringBuilder sb = new StringBuilder();
@@ -628,9 +594,9 @@ public class Ava implements Externalizab
// First, store the type and the '=' char
sb.append( normType ).append( '=' );
- String normalizedValue = normValue.getString();
+ String normalizedValue = ( String ) value.getNormValue();
- if ( normalizedValue.length() > 0 )
+ if ( ( normalizedValue != null ) && ( normalizedValue.length() > 0 ) )
{
sb.append( Rdn.escapeValue( normalizedValue ) );
}
@@ -640,7 +606,7 @@ public class Ava implements Externalizab
else
{
return normType + "=#"
- + Strings.dumpHexPairs( normValue.getBytes() );
+ + Strings.dumpHexPairs( value.getBytes() );
}
}
@@ -658,7 +624,7 @@ public class Ava implements Externalizab
h = 37;
h = h * 17 + ( normType != null ? normType.hashCode() : 0 );
- h = h * 17 + ( normValue != null ? normValue.hashCode() : 0 );
+ h = h * 17 + ( value != null ? value.hashCode() : 0 );
}
return h;
@@ -699,9 +665,9 @@ public class Ava implements Externalizab
}
// Compare the values
- if ( normValue.isNull() )
+ if ( value.isNull() )
{
- return instance.normValue.isNull();
+ return instance.value.isNull();
}
else
{
@@ -711,25 +677,25 @@ public class Ava implements Externalizab
if ( equalityMatchingRule != null )
{
- return equalityMatchingRule.getLdapComparator().compare( normValue.getValue(),
- instance.normValue.getValue() ) == 0;
+ return equalityMatchingRule.getLdapComparator().compare( value.getValue(),
+ instance.value.getValue() ) == 0;
}
else
{
// No Equality MR, use a direct comparison
- if ( normValue instanceof BinaryValue )
+ if ( value instanceof BinaryValue )
{
- return Arrays.equals( normValue.getBytes(), instance.normValue.getBytes() );
+ return Arrays.equals( value.getBytes(), instance.value.getBytes() );
}
else
{
- return normValue.getString().equals( instance.normValue.getString() );
+ return value.getString().equals( instance.value.getString() );
}
}
}
else
{
- return normValue.equals( instance.normValue );
+ return value.equals( instance.value );
}
}
}
@@ -747,8 +713,8 @@ public class Ava implements Externalizab
if ( Strings.isEmpty( upName )
|| Strings.isEmpty( upType )
|| Strings.isEmpty( normType )
- || ( upValue.isNull() )
- || ( normValue.isNull() ) )
+ || ( value.isNull() )
+ || ( value.isNull() ) )
{
String message = "Cannot serialize an wrong ATAV, ";
@@ -764,11 +730,7 @@ public class Ava implements Externalizab
{
message += "the normType should not be null or empty";
}
- else if ( upValue.isNull() )
- {
- message += "the upValue should not be null";
- }
- else if ( normValue.isNull() )
+ else if ( value.isNull() )
{
message += "the value should not be null";
}
@@ -852,7 +814,7 @@ public class Ava implements Externalizab
}
// Write the isHR flag
- if ( normValue.isHumanReadable() )
+ if ( value.isHumanReadable() )
{
buffer[pos++] = Serialize.TRUE;
}
@@ -862,15 +824,9 @@ public class Ava implements Externalizab
}
// Write the upValue
- if ( upValue.isHumanReadable() )
+ if ( value.isHumanReadable() )
{
- pos = ( ( StringValue ) upValue ).serialize( buffer, pos );
- }
-
- // Write the normValue
- if ( normValue.isHumanReadable() )
- {
- pos = ( ( StringValue ) normValue ).serialize( buffer, pos );
+ pos = ( ( StringValue ) value ).serialize( buffer, pos );
}
// Write the hash code
@@ -949,12 +905,8 @@ public class Ava implements Externalizab
if ( isHR )
{
// Read the upValue
- upValue = new StringValue( attributeType );
- pos = ( ( StringValue ) upValue ).deserialize( buffer, pos );
-
- // Read the normValue
- normValue = new StringValue( attributeType );
- pos = ( ( StringValue ) normValue ).deserialize( buffer, pos );
+ value = new StringValue( attributeType );
+ pos = ( ( StringValue ) value ).deserialize( buffer, pos );
}
// Read the hashCode
@@ -993,26 +945,17 @@ public class Ava implements Externalizab
* if the value is a String :
* <ul>
* <li>
- * <b>upValue</b> The User Provided value
- * </li>
- * <li>
- * <b>value</b> The normalized value
+ * <b>value</b> The value
* </li>
* </ul>
* <br/>
* if the value is binary :
* <ul>
* <li>
- * <b>upValueLength</b>
- * </li>
- * <li>
- * <b>upValue</b> The User Provided value
- * </li>
- * <li>
* <b>valueLength</b>
* </li>
* <li>
- * <b>value</b> The normalized value
+ * <b>value</b> The value
* </li>
* </ul>
*
@@ -1025,10 +968,9 @@ public class Ava implements Externalizab
if ( Strings.isEmpty( upName )
|| Strings.isEmpty( upType )
|| Strings.isEmpty( normType )
- || ( upValue.isNull() )
- || ( normValue.isNull() ) )
+ || ( value.isNull() ) )
{
- String message = "Cannot serialize an wrong ATAV, ";
+ String message = "Cannot serialize a wrong ATAV, ";
if ( Strings.isEmpty( upName ) )
{
@@ -1042,11 +984,7 @@ public class Ava implements Externalizab
{
message += "the normType should not be null or empty";
}
- else if ( upValue.isNull() )
- {
- message += "the upValue should not be null";
- }
- else if ( normValue.isNull() )
+ else if ( value.isNull() )
{
message += "the value should not be null";
}
@@ -1085,12 +1023,11 @@ public class Ava implements Externalizab
out.writeBoolean( false );
}
- boolean isHR = normValue.isHumanReadable();
+ boolean isHR = value.isHumanReadable();
out.writeBoolean( isHR );
- upValue.writeExternal( out );
- normValue.writeExternal( out );
+ value.writeExternal( out );
// Write the hashCode
out.writeInt( h );
@@ -1148,13 +1085,11 @@ public class Ava implements Externalizab
if ( isHR )
{
- upValue = StringValue.deserialize( attributeType, in );
- normValue = StringValue.deserialize( attributeType, in );
+ value = StringValue.deserialize( attributeType, in );
}
else
{
- upValue = BinaryValue.deserialize( attributeType, in );
- normValue = BinaryValue.deserialize( attributeType, in );
+ value = BinaryValue.deserialize( attributeType, in );
}
h = in.readInt();
@@ -1190,16 +1125,16 @@ public class Ava implements Externalizab
{
int comp = 0;
- if ( normValue.getNormValue() instanceof String )
+ if ( value.getNormValue() instanceof String )
{
- comp = ( ( String ) normValue.getNormValue() ).compareTo( ( ( String ) that.normValue.getNormValue() ) );
+ comp = ( ( String ) value.getNormValue() ).compareTo( ( ( String ) that.value.getNormValue() ) );
return comp;
}
else
{
- byte[] bytes1 = ( byte[] ) normValue.getNormValue();
- byte[] bytes2 = ( byte[] ) that.normValue.getNormValue();
+ byte[] bytes1 = ( byte[] ) value.getNormValue();
+ byte[] bytes2 = ( byte[] ) that.value.getNormValue();
for ( int pos = 0; pos < bytes1.length; pos++ )
{
@@ -1246,9 +1181,9 @@ public class Ava implements Externalizab
}
// and compare the values
- if ( normValue == null )
+ if ( value == null )
{
- if ( that.normValue == null )
+ if ( that.value == null )
{
return 0;
}
@@ -1259,21 +1194,21 @@ public class Ava implements Externalizab
}
else
{
- if ( that.normValue == null )
+ if ( that.value == null )
{
return 1;
}
else
{
- if ( normValue instanceof StringValue )
+ if ( value instanceof StringValue )
{
- comp = ( ( StringValue ) normValue ).compareTo( ( StringValue ) that.normValue );
+ comp = ( ( StringValue ) value ).compareTo( ( StringValue ) that.value );
return comp;
}
else
{
- comp = ( ( BinaryValue ) normValue ).compareTo( ( BinaryValue ) that.normValue );
+ comp = ( ( BinaryValue ) value ).compareTo( ( BinaryValue ) that.value );
return comp;
}
@@ -1312,7 +1247,7 @@ public class Ava implements Externalizab
if ( comparator != null )
{
- comp = comparator.compare( normValue.getNormValue(), that.normValue.getNormValue() );
+ comp = comparator.compare( value.getNormValue(), that.value.getNormValue() );
return comp;
}
@@ -1331,8 +1266,8 @@ public class Ava implements Externalizab
}
}
}
-
-
+
+
/**
* A String representation of an Ava, as provided by the user.
*
Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Dn.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Dn.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Dn.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Dn.java Tue Oct 13 18:56:51 2015
@@ -36,9 +36,13 @@ import java.util.TreeSet;
import org.apache.commons.collections.list.UnmodifiableList;
import org.apache.directory.api.i18n.I18n;
+import org.apache.directory.api.ldap.model.entry.BinaryValue;
+import org.apache.directory.api.ldap.model.entry.StringValue;
+import org.apache.directory.api.ldap.model.entry.Value;
import org.apache.directory.api.ldap.model.exception.LdapException;
import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
+import org.apache.directory.api.ldap.model.schema.AttributeType;
import org.apache.directory.api.ldap.model.schema.SchemaManager;
import org.apache.directory.api.ldap.model.schema.normalizers.OidNormalizer;
import org.apache.directory.api.util.Strings;
@@ -1069,7 +1073,7 @@ public class Dn implements Iterable<Rdn>
return atav;
}
- type = Strings.toLowerCase( type );
+ type = Strings.toLowerCaseAscii( type );
// Check that we have an existing AttributeType for this type
if ( !oidsMap.containsKey( type ) )
@@ -1086,13 +1090,33 @@ public class Dn implements Iterable<Rdn>
{
try
{
+ AttributeType attributeType = schemaManager.getAttributeType( type );
+ Value<?> atavValue = null;
+ Value<?> value = atav.getValue();
+
+ if ( value instanceof StringValue )
+ {
+ if ( attributeType.getSyntax().isHumanReadable() )
+ {
+ atavValue = new StringValue( attributeType, value.getString() );
+ }
+ else
+ {
+ // This is a binary variable, transaform the StringValue to a BinaryValye
+ atavValue = new BinaryValue( attributeType, value.getBytes() );
+ }
+ }
+ else
+ {
+ atavValue = new BinaryValue( attributeType, atav.getValue().getBytes() );
+ }
+
Ava newAva = new Ava(
+ attributeType,
atav.getType(),
oidNormalizer.getAttributeTypeOid(),
- atav.getValue(),
- oidNormalizer.getNormalizer().normalize( atav.getNormValue() ),
+ atavValue,
atav.getName() );
- newAva.apply( schemaManager );
return newAva;
}
Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/FastDnParser.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/FastDnParser.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/FastDnParser.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/FastDnParser.java Tue Oct 13 18:56:51 2015
@@ -174,8 +174,7 @@ import org.apache.directory.api.util.Str
String upName = name.substring( rdnStart, pos.start );
- Ava ava = new Ava( type, type, new StringValue( upValue ),
- new StringValue( value ), upName );
+ Ava ava = new Ava( type, type, new StringValue( upValue ), upName );
rdn.addAVA( null, ava );
rdn.setUpName( upName );
Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/name/Rdn.java Tue Oct 13 18:56:51 2015
@@ -34,12 +34,10 @@ import org.apache.commons.collections.ma
import org.apache.directory.api.i18n.I18n;
import org.apache.directory.api.ldap.model.entry.StringValue;
import org.apache.directory.api.ldap.model.entry.Value;
-import org.apache.directory.api.ldap.model.exception.LdapException;
import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
import org.apache.directory.api.ldap.model.schema.AttributeType;
import org.apache.directory.api.ldap.model.schema.SchemaManager;
-import org.apache.directory.api.ldap.model.schema.normalizers.OidNormalizer;
import org.apache.directory.api.util.Chars;
import org.apache.directory.api.util.Hex;
import org.apache.directory.api.util.Serialize;
@@ -295,7 +293,7 @@ public class Rdn implements Cloneable, E
*/
public Rdn( SchemaManager schemaManager, String upType, String upValue ) throws LdapInvalidDnException
{
- addAVA( schemaManager, upType, upType, new StringValue( upValue ), new StringValue( upValue ) );
+ addAVA( schemaManager, upType, upType, new StringValue( upValue ) );
upName = upType + '=' + upValue;
@@ -424,13 +422,13 @@ public class Rdn implements Cloneable, E
case 1:
// We have a single Ava
// We will trim and lowercase type and value.
- if ( ava.getNormValue().isHumanReadable() )
+ if ( ava.getValue().isHumanReadable() )
{
normName = ava.getNormName();
}
else
{
- normName = ava.getNormType() + "=#" + Strings.dumpHexPairs( ava.getNormValue().getBytes() );
+ normName = ava.getNormType() + "=#" + Strings.dumpHexPairs( ava.getValue().getBytes() );
}
break;
@@ -501,26 +499,24 @@ public class Rdn implements Cloneable, E
* @throws LdapInvalidDnException
* If the Rdn is invalid
*/
- private void addAVA( SchemaManager schemaManager, String upType, String type, Value<?> upValue,
- Value<?> value ) throws LdapInvalidDnException
+ private void addAVA( SchemaManager schemaManager, String upType, String type, Value<?> value ) throws LdapInvalidDnException
{
// First, let's normalize the type
- Value<?> normalizedValue = value;
+ AttributeType attributeType = null;
String normalizedType = Strings.lowerCaseAscii( type );
this.schemaManager = schemaManager;
if ( schemaManager != null )
{
- OidNormalizer oidNormalizer = schemaManager.getNormalizerMapping().get( normalizedType );
- normalizedType = oidNormalizer.getAttributeTypeOid();
-
+ attributeType = schemaManager.getAttributeType( normalizedType );
+
try
{
- normalizedValue = oidNormalizer.getNormalizer().normalize( value );
+ value.apply( attributeType );
}
- catch ( LdapException e )
+ catch ( LdapInvalidAttributeValueException liave )
{
- throw new LdapInvalidDnException( e.getMessage(), e );
+ throw new LdapInvalidDnException( liave.getMessage(), liave );
}
}
@@ -528,7 +524,7 @@ public class Rdn implements Cloneable, E
{
case 0:
// This is the first Ava. Just stores it.
- ava = new Ava( schemaManager, upType, normalizedType, upValue, normalizedValue );
+ ava = new Ava( schemaManager, upType, normalizedType, value );
nbAvas = 1;
avaType = normalizedType;
hashCode();
@@ -553,7 +549,7 @@ public class Rdn implements Cloneable, E
default:
// add a new Ava
- Ava newAva = new Ava( schemaManager, upType, normalizedType, upValue, normalizedValue );
+ Ava newAva = new Ava( schemaManager, upType, normalizedType, value );
avas.add( newAva );
avaTypes.put( normalizedType, newAva );
nbAvas++;
@@ -694,11 +690,11 @@ public class Rdn implements Cloneable, E
/**
- * Get the Value of the Ava which type is given as an
+ * Get the value of the Ava which type is given as an
* argument.
*
* @param type the type of the NameArgument
- * @return the Value to be returned, or null if none found.
+ * @return the value to be returned, or null if none found.
* @throws LdapInvalidDnException if the Rdn is invalid
*/
public Object getValue( String type ) throws LdapInvalidDnException
@@ -724,7 +720,73 @@ public class Rdn implements Cloneable, E
case 1:
if ( Strings.equals( ava.getNormType(), normalizedType ) )
{
- return ava.getNormValue().getValue();
+ return ava.getValue().getValue();
+ }
+
+ return "";
+
+ default:
+ if ( avaTypes.containsKey( normalizedType ) )
+ {
+ @SuppressWarnings("unchecked")
+ Collection<Ava> atavList = ( Collection<Ava> ) avaTypes.get( normalizedType );
+ StringBuffer sb = new StringBuffer();
+ boolean isFirst = true;
+
+ for ( Ava elem : atavList )
+ {
+ if ( isFirst )
+ {
+ isFirst = false;
+ }
+ else
+ {
+ sb.append( ',' );
+ }
+
+ sb.append( elem.getValue() );
+ }
+
+ return sb.toString();
+ }
+
+ return "";
+ }
+ }
+
+
+ /**
+ * Get the normalized value of the Ava which type is given as an
+ * argument.
+ *
+ * @param type the type of the NameArgument
+ * @return the normalized value to be returned, or null if none found.
+ * @throws LdapInvalidDnException if the Rdn is invalid
+ */
+ public Object getNormValue( String type ) throws LdapInvalidDnException
+ {
+ // First, let's normalize the type
+ String normalizedType = Strings.lowerCaseAscii( Strings.trim( type ) );
+
+ if ( schemaManager != null )
+ {
+ AttributeType attributeType = schemaManager.getAttributeType( normalizedType );
+
+ if ( attributeType != null )
+ {
+ normalizedType = attributeType.getOid();
+ }
+ }
+
+ switch ( nbAvas )
+ {
+ case 0:
+ return "";
+
+ case 1:
+ if ( Strings.equals( ava.getNormType(), normalizedType ) )
+ {
+ return ava.getValue().getNormValue();
}
return "";
@@ -748,7 +810,7 @@ public class Rdn implements Cloneable, E
sb.append( ',' );
}
- sb.append( elem.getNormValue() );
+ sb.append( elem.getValue().getNormValue() );
}
return sb.toString();
@@ -985,11 +1047,11 @@ public class Rdn implements Cloneable, E
/**
- * Return the User Provided value
+ * Return the User Provided value, as a String
*
* @return The first User provided value of this Rdn
*/
- public Value<?> getValue()
+ public String getValue()
{
switch ( nbAvas )
{
@@ -997,20 +1059,20 @@ public class Rdn implements Cloneable, E
return null;
case 1:
- return ava.getValue();
+ return ava.getValue().getString();
default:
- return avas.get( 0 ).getValue();
+ return avas.get( 0 ).getValue().getString();
}
}
/**
- * Return the normalized value, or the first one of we have more than one (the lowest)
+ * Return the Normalized value, as a String
*
- * @return The first normalized value of this Rdn
+ * @return The first Normalized value of this Rdn
*/
- public Value<?> getNormValue()
+ public String getNormValue()
{
switch ( nbAvas )
{
@@ -1018,10 +1080,10 @@ public class Rdn implements Cloneable, E
return null;
case 1:
- return ava.getNormValue();
+ return ava.getValue().getNormValue().toString();
default:
- return avas.get( 0 ).getNormValue();
+ return avas.get( 0 ).getValue().getNormValue().toString();
}
}
@@ -1131,11 +1193,15 @@ public class Rdn implements Cloneable, E
* Unescape the given string according to RFC 2253 If in <string> form, a
* LDAP string representation asserted value can be obtained by replacing
* (left-to-right, non-recursively) each <pair> appearing in the <string> as
- * follows: replace <ESC><ESC> with <ESC>; replace <ESC><special> with
- * <special>; replace <ESC><hexpair> with the octet indicated by the
- * <hexpair> If in <hexstring> form, a BER representation can be obtained
- * from converting each <hexpair> of the <hexstring> to the octet indicated
- * by the <hexpair>
+ * follows:
+ * <ul>
+ * <li>replace <ESC><ESC> with <ESC></li>
+ * <li>replace <ESC><special> with <special></li>
+ * <li>replace <ESC><hexpair> with the octet indicated by the <hexpair></li>
+ * </ul>
+ * If in <hexstring> form, a BER representation can be obtained
+ * from converting each <hexpair> of the <hexstring> to the octet indicated
+ * by the <hexpair>
*
* @param value The value to be unescaped
* @return Returns a string value as a String, and a binary value as a byte
@@ -1154,7 +1220,7 @@ public class Rdn implements Cloneable, E
// If the value is contained into double quotes, return it as is.
if ( ( chars[0] == '\"' ) && ( chars[chars.length - 1] == '\"' ) )
{
- return value;
+ return new String( chars, 1, chars.length - 2 );
}
if ( chars[0] == '#' )
@@ -1237,6 +1303,7 @@ public class Rdn implements Cloneable, E
pair += Hex.getHexValue( chars[i] );
bytes[pos++] = pair;
isHex = false;
+ pair = 0;
}
}
else
Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/schema/PrepareString.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/schema/PrepareString.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/schema/PrepareString.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/api/ldap/model/schema/PrepareString.java Tue Oct 13 18:56:51 2015
@@ -4803,7 +4803,6 @@ public final class PrepareString
/**
- *
* Remove all insignificant spaces in a string.
*
* This method use a finite state machine to parse
@@ -4830,21 +4829,20 @@ public final class PrepareString
// three chars.
// TODO : we have to find a way to prevent this waste of space.
char[] target = new char[str.length() * 3 + 2];
-
+
int pos = 0;
char lowerCase = ( char ) ( caseSensitive ? 0x00 : 0x20 );
- // First pass to map the chars
- //System.arraycopy( array, 0, target, 0, array.length );
+ // First pass to map the chars. This will copy the array into the target
int limit = map( array, target, lowerCase );
pos = 0;
// Second pass to remove spaces. We work on the target
- int i = 0;
+ int start = 0;
char c = '\0';
// First remove starting spaces
- for ( i = 0; i < limit; i++ )
+ for ( int i = 0; i < limit; i++ )
{
c = target[i];
@@ -4853,12 +4851,11 @@ public final class PrepareString
checkProhibited( c );
break;
}
+
+ start++;
}
- // Now, 'i' will be the starting point. We will just handle the special
- // case of a combining character
- int start = i;
-
+ // We will just handle the special case of a combining character
if ( start == limit )
{
// we only have spaces, we keep only one
@@ -4885,9 +4882,37 @@ public final class PrepareString
}
// Now remove the spaces at the end
- for ( i = limit - 1; i > start; i-- )
+ int i = 0;
+
+ for ( i = limit - 1; i >= start; i-- )
{
- if ( target[i] != ' ' )
+ if ( target[i] == ' ' )
+ {
+ // Check if we have a preceding '\'
+ if ( i - 1 >= start )
+ {
+ // Break only if the space is preceded by a single ESC
+ if ( i - 2 >= start )
+ {
+ if ( ( target[i - 1] == '\\' ) && ( target[i - 2] != '\\' ) )
+ {
+ target[i - 1] = ' ';
+ i--;
+ break;
+ }
+ }
+ else
+ {
+ if ( target[i - 1] == '\\' )
+ {
+ target[i - 1] = ' ';
+ i--;
+ break;
+ }
+ }
+ }
+ }
+ else
{
break;
}
@@ -4895,13 +4920,15 @@ public final class PrepareString
limit = i + 1;
- // Let's deal with the following chars. It will be
- // a list of chars and spaces. We will consider that
- // we have couples of chars and spaces :
- // (char * space*)*. We have a special case :
- // a space followed by a combining char.
+ // Remove the " around the string if any
+ if ( target[start] == '"' )
+ {
+ start++;
+ limit--;
+ }
+
boolean spaceSeen = false;
- boolean space2Seen = false;
+ boolean escapeSeen = false;
for ( i = start; i < limit; i++ )
{
@@ -4909,35 +4936,33 @@ public final class PrepareString
checkProhibited( c );
- if ( isCombiningMark( c ) )
+ if ( c == ' ' )
{
- if ( spaceSeen )
+ if ( escapeSeen )
{
- if ( space2Seen )
- {
- target[pos++] = ' ';
- }
-
target[pos++] = ' ';
- target[pos++] = c;
- spaceSeen = false;
- space2Seen = false;
}
else
{
- target[pos++] = c;
+ spaceSeen = true;
}
+
+ escapeSeen = false;
}
- else if ( c == ' ' )
+ else if ( c == '\\' )
{
- if ( spaceSeen )
+ if ( escapeSeen )
{
- space2Seen = true;
+ target[pos++] = '\\';
+ target[pos++] = '\\';
}
- else
+ else if ( spaceSeen )
{
- spaceSeen = true;
+ target[pos++] = ' ';
}
+
+ escapeSeen = !escapeSeen;
+ spaceSeen = false;
}
else
{
@@ -4945,19 +4970,38 @@ public final class PrepareString
{
target[pos++] = ' ';
spaceSeen = false;
- space2Seen = false;
}
-
+ else if ( escapeSeen )
+ {
+ target[pos++] = '\\';
+ }
+
target[pos++] = c;
+ escapeSeen = false;
}
}
- return new String( target, 0, pos );
+ // A special case : we have seen a space at the end of the array : it must be added back
+ // because it's an escaped space, otherwise it would have been discarded by the previous
+ // end of String's space removal
+ if ( spaceSeen )
+ {
+ target[pos++] = ' ';
+ }
+ // Same for the escape
+ else if ( escapeSeen )
+ {
+ target[pos++] = '\\';
+ }
+ // Ends by unescaping the escaped elements
+ String result = unescape( target, pos );
+
+ return result;
}
/**
- * Remove all insignificant spaces in a Ascii string.
+ * Remove all insignificant spaces in a Ascii string. We don't remove escaped spaces.
*
* This method use a finite state machine to parse
* the text.
@@ -4975,7 +5019,7 @@ public final class PrepareString
// Special case : an empty strings is replaced by 2 spaces
return "";
}
-
+
char[] array = str.toCharArray();
int pos = 0;
@@ -4985,12 +5029,12 @@ public final class PrepareString
int limit = map( array, array, lowerCase );
pos = 0;
- // Second pass to remove spaces. We work on the target
- int i = 0;
+ // Second pass to remove spaces (except the escaped ones). We work on the target
+ int start = 0;
char c = '\0';
// First remove starting spaces
- for ( i = 0; i < limit; i++ )
+ for ( int i = 0; i < limit; i++ )
{
c = array[i];
@@ -4999,12 +5043,11 @@ public final class PrepareString
checkProhibited( c );
break;
}
+
+ start++;
}
- // Now, 'i' will be the starting point. We will just handle the special
- // case of a combining character
- int start = i;
-
+ // We will just handle the special case of a combining character
if ( start == limit )
{
// we only have spaces, we keep only one
@@ -5022,16 +5065,39 @@ public final class PrepareString
throw new InvalidCharacterException( c );
}
}
- else
- {
- array[pos++] = c;
- start++;
- }
// Now remove the spaces at the end
- for ( i = limit - 1; i > start; i-- )
+ int i = 0;
+
+ for ( i = limit - 1; i >= start; i-- )
{
- if ( array[i] != ' ' )
+ if ( array[i] == ' ' )
+ {
+ // Check if we have a preceding '\'
+ if ( i - 1 >= start )
+ {
+ // Break only if the space is preceded by a single ESC
+ if ( i - 2 >= start )
+ {
+ if ( ( array[i - 1] == '\\' ) && ( array[i - 2] != '\\' ) )
+ {
+ array[i - 1] = ' ';
+ i--;
+ break;
+ }
+ }
+ else
+ {
+ if ( array[i - 1] == '\\' )
+ {
+ array[i - 1] = ' ';
+ i--;
+ break;
+ }
+ }
+ }
+ }
+ else
{
break;
}
@@ -5039,12 +5105,15 @@ public final class PrepareString
limit = i + 1;
- // Let's deal with the following chars. It will be
- // a list of chars and spaces. We will consider that
- // we have couples of chars and spaces :
- // (char* space*)*. We have a special case :
- // a space followed by a combining char.
+ // Remove the " around the string if any
+ if ( array[start] == '"' )
+ {
+ start++;
+ limit--;
+ }
+
boolean spaceSeen = false;
+ boolean escapeSeen = false;
for ( i = start; i < limit; i++ )
{
@@ -5052,13 +5121,37 @@ public final class PrepareString
checkProhibited( c );
- if ( isCombiningMark( c ) )
+ /*if ( isCombiningMark( c ) )
{
throw new InvalidCharacterException( c );
}
- else if ( c == ' ' )
+ else*/ if ( c == ' ' )
+ {
+ if ( escapeSeen )
+ {
+ array[pos++] = ' ';
+ }
+ else
+ {
+ spaceSeen = true;
+ }
+
+ escapeSeen = false;
+ }
+ else if ( c == '\\' )
{
- spaceSeen = true;
+ if ( escapeSeen )
+ {
+ array[pos++] = '\\';
+ array[pos++] = '\\';
+ }
+ else if ( spaceSeen )
+ {
+ array[pos++] = ' ';
+ }
+
+ escapeSeen = !escapeSeen;
+ spaceSeen = false;
}
else
{
@@ -5067,11 +5160,196 @@ public final class PrepareString
array[pos++] = ' ';
spaceSeen = false;
}
-
+ else if ( escapeSeen )
+ {
+ array[pos++] = '\\';
+ }
+
array[pos++] = c;
+ escapeSeen = false;
}
}
- return new String( array, 0, pos );
+ // A special case : we have seen a space at the end of the array : it must be added back
+ // because it's an escaped space, otherwise it would have been discarded by the previous
+ // end of String's space removal
+ if ( spaceSeen )
+ {
+ array[pos++] = ' ';
+ }
+ // Same for the escape
+ else if ( escapeSeen )
+ {
+ array[pos++] = '\\';
+ }
+
+ // Ends by unescaping the escaped elements
+ String result = unescape( array, pos );
+
+ return result;
+ }
+
+
+ private static String unescape( char[] array, int end )
+ {
+ byte[] bytes = new byte[end * 3];
+ boolean escapeSeen = false;
+ int pos = 0;
+
+ for ( int i = 0; i < end; i++ )
+ {
+ char c = array[i];
+
+ if ( c == '\\' )
+ {
+ if ( escapeSeen )
+ {
+ bytes[pos++] = '\\';
+ }
+
+ escapeSeen = !escapeSeen;
+ }
+ else
+ {
+ if ( escapeSeen )
+ {
+ switch ( c )
+ {
+ // Various form of space
+ case 0x0A :
+ case 0x0B :
+ case 0x0C :
+ case 0x0D :
+ case 0x85 :
+ case 0xA0 :
+ case ' ' :
+ bytes[pos++] = ' ';
+ break;
+
+ // Special chars
+ case '#' :
+ case '=' :
+ case '+' :
+ case '"' :
+ case ',' :
+ case ';' :
+ case '<' :
+ case '>' :
+ bytes[pos++] = ( byte ) c;
+ break;
+
+ // Hexpair
+ case '0' :
+ case '1' :
+ case '2' :
+ case '3' :
+ case '4' :
+ case '5' :
+ case '6' :
+ case '7' :
+ case '8' :
+ case '9' :
+ bytes[pos++] = ( byte ) ( ( ( byte ) ( array[i] - '0' ) << 4 ) + toByte( array[i + 1] ) );
+ i++;
+ break;
+
+ case 'a' :
+ case 'b' :
+ case 'c' :
+ case 'd' :
+ case 'e' :
+ case 'f' :
+ bytes[pos++] = ( byte ) ( ( ( byte ) ( array[i] - 'a' + 10 ) << 4 ) + toByte( array[i + 1] ) );
+ i++;
+ break;
+
+ case 'A' :
+ case 'B' :
+ case 'C' :
+ case 'D' :
+ case 'E' :
+ case 'F' :
+ bytes[pos++] = ( byte ) ( ( ( byte ) ( array[i] - 'A' + 10 ) << 4 ) + toByte( array[i + 1] ) );
+ i++;
+ break;
+
+ default :
+ break;
+ }
+
+ escapeSeen = false;
+ }
+ else
+ {
+ // We might have a UTF-8 char
+ if ( ( c & 0x007F ) == c )
+ {
+ // Single byte char
+ bytes[pos++] = ( byte ) c;
+ }
+ else if ( ( c & 0x07FF ) == c )
+ {
+ bytes[pos++] = ( byte ) ( 0x00C0 | ( c >> 6 ) );
+ bytes[pos++] = ( byte ) ( 0x0080 | ( c & 0x003F ) );
+ }
+ else
+ {
+ bytes[pos++] = ( byte ) ( 0x00E0 | ( c >> 12 ) );
+ bytes[pos++] = ( byte ) ( 0x0080 | ( ( c >> 6 ) & 0x3F ) );
+ bytes[pos++] = ( byte ) ( 0x0080 | ( c & 0x003F ) );
+ }
+ }
+ }
+ }
+
+ // Deal with the special case where we have one single escape
+ if ( escapeSeen )
+ {
+ bytes[pos++] = '\\';
+ }
+
+ String result = Strings.utf8ToString( bytes, pos );
+
+ return result;
+ }
+
+
+ private static byte toByte( char c )
+ {
+ switch ( c )
+ {
+ case '0' :
+ case '1' :
+ case '2' :
+ case '3' :
+ case '4' :
+ case '5' :
+ case '6' :
+ case '7' :
+ case '8' :
+ case '9' :
+ return ( byte ) ( c - '0' );
+
+ case 'a' :
+ case 'b' :
+ case 'c' :
+ case 'd' :
+ case 'e' :
+ case 'f' :
+ return ( byte ) ( c - 'a' + 10 );
+
+ case 'A' :
+ case 'B' :
+ case 'C' :
+ case 'D' :
+ case 'E' :
+ case 'F' :
+ return ( byte ) ( c - 'A' + 10 );
+
+ default :
+ break;
+ }
+
+ return 0;
}
}
Modified: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java (original)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/AvaSerializationTest.java Tue Oct 13 18:56:51 2015
@@ -146,7 +146,7 @@ public class AvaSerializationTest
catch ( IOException ioe )
{
String message = ioe.getMessage();
- assertEquals( "Cannot serialize an wrong ATAV, the upValue should not be null", message );
+ assertEquals( "Cannot serialize a wrong ATAV, the value should not be null", message );
}
}
@@ -167,7 +167,7 @@ public class AvaSerializationTest
catch ( IOException ioe )
{
String message = ioe.getMessage();
- assertEquals( "Cannot serialize an wrong ATAV, the upValue should not be null", message );
+ assertEquals( "Cannot serialize a wrong ATAV, the value should not be null", message );
}
}
@@ -308,7 +308,7 @@ public class AvaSerializationTest
catch ( IOException ioe )
{
String message = ioe.getMessage();
- assertEquals( "Cannot serialize an wrong ATAV, the upValue should not be null", message );
+ assertEquals( "Cannot serialize a wrong ATAV, the value should not be null", message );
}
}
Modified: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java (original)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/DnParserTest.java Tue Oct 13 18:56:51 2015
@@ -579,7 +579,7 @@ public class DnParserTest
public void testAUmlautPlusBytes() throws Exception
{
String cn = new String( new byte[]
- { 'c', 'n', '=', ( byte ) 0xC3, ( byte ) 0x84, 0x5C, 0x32, 0x42 }, "UTF-8" );
+ { 'c', 'n', '=', ( byte ) 0xC3, ( byte ) 0x84, '\\', '2', 'B' }, "UTF-8" );
Dn dn = new Dn( cn );
@@ -664,7 +664,7 @@ public class DnParserTest
Dn dn = new Dn( dnStr );
Rdn rdn = dn.getRdn();
- assertEquals( value, rdn.getValue().getString() );
+ assertEquals( value, rdn.getValue() );
}
catch ( Exception e )
{
@@ -679,7 +679,7 @@ public class DnParserTest
Dn dn = new Dn( dnStr );
Rdn rdn = dn.getRdn();
- assertEquals( "2#", rdn.getValue().getString() );
+ assertEquals( "2#", rdn.getValue() );
}
catch ( Exception e )
{
Modified: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java (original)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/FastDnParserTest.java Tue Oct 13 18:56:51 2015
@@ -175,7 +175,7 @@ public class FastDnParserTest
assertEquals( "a", dn.getRdn().getAva().getType() );
assertEquals( "a", dn.getRdn().getAva().getNormType() );
assertEquals( "b", dn.getRdn().getAva().getValue().getValue() );
- assertEquals( "b", dn.getRdn().getAva().getNormValue().getValue() );
+ assertEquals( "b", dn.getRdn().getAva().getValue().getNormValue() );
}
Modified: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java (original)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/name/RdnTest.java Tue Oct 13 18:56:51 2015
@@ -268,8 +268,10 @@ public class RdnTest
@Test
public void testRdnQuotedAttributeValue() throws LdapException
{
- assertEquals( "a=quoted \\\"value", new Rdn( "a = quoted \\\"value" ).getNormName() );
- assertEquals( "quoted \"value", new Rdn( "a = quoted \\\"value" ).getValue( "a" ) );
+ Rdn rdn = new Rdn( "a = quoted \\\"value" );
+ assertEquals( "a=quoted \\\"value", rdn.getNormName() );
+ assertEquals( "quoted \\\"value", rdn.getValue( "a" ) );
+ assertEquals( "quoted \"value", rdn.getNormValue( "a" ) );
}
@@ -605,7 +607,7 @@ public class RdnTest
{
Rdn rdn = new Rdn( " a = b + b = f + g = h + c = d " );
- assertEquals( "b", rdn.getNormValue().getString() );
+ assertEquals( "b", rdn.getNormValue() );
}
@@ -860,7 +862,7 @@ public class RdnTest
assertEquals( "cn=a b c", rdn2.getNormName() );
assertTrue( rdn1.equals( rdn2 ) );
- Rdn rdn3 = new Rdn( "cn=\\ a b c\\ " );
+ Rdn rdn3 = new Rdn( "cn= \\ a b c\\ " );
Rdn rdn4 = new Rdn( "cn=\\ a\\ b\\ c\\ " );
assertEquals( "cn=\\ a b c\\ ", rdn3.getNormName() );
assertEquals( "cn=\\ a b c\\ ", rdn4.getNormName() );
@@ -1154,7 +1156,7 @@ public class RdnTest
assertTrue( Rdn.isValid( "a=\"b\\,c\"" ) );
Rdn rdn = new Rdn( "a=\"b\\,c\"" );
assertEquals( "a=\"b\\,c\"", rdn.getName() );
- assertEquals( "a=b\\,c", rdn.getNormName() );
+ assertEquals( "a=b\\\\\\,c", rdn.getNormName() );
}
@@ -1253,8 +1255,8 @@ public class RdnTest
assertEquals( "CN=\u00E4+A=d", rdn.getName() );
assertEquals( "cn=\u00E4+a=d", rdn.getNormName() );
assertEquals( "\u00E4", rdn.getValue( "CN" ) );
- assertEquals( "\u00E4", rdn.getValue().getValue() );
- assertEquals( "\u00E4", rdn.getNormValue().getValue() );
+ assertEquals( "\u00E4", rdn.getValue() );
+ assertEquals( "\u00E4", rdn.getValue() );
assertEquals( "CN", rdn.getType() );
assertEquals( "cn", rdn.getNormType() );
}
Modified: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimNormalizerTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimNormalizerTest.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimNormalizerTest.java (original)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/api/ldap/model/schema/normalizers/DeepTrimNormalizerTest.java Tue Oct 13 18:56:51 2015
@@ -113,7 +113,11 @@ public class DeepTrimNormalizerTest
{ ' ', 0x0310 };
char[] expected = new char[]
{ ' ', 0x0310 };
- assertEquals( new String( expected ), normalizer.normalize( new String( chars ) ) );
+ //assertEquals( new String( expected ), normalizer.normalize( new String( chars ) ) );
+
+ String expectedStr = new String( expected );
+ String charsStr = new String( chars );
+ assertEquals( expectedStr, normalizer.normalize( charsStr ) );
}
@@ -152,8 +156,10 @@ public class DeepTrimNormalizerTest
char[] chars = new char[]
{ ' ', 0x0310, 'a', 'a', ' ', ' ', 0x0311, ' ', ' ', 'a', 0x0311, 0x0312 };
char[] expected = new char[]
- { ' ', 0x0310, 'a', 'a', ' ', ' ', 0x0311, ' ', 'a', 0x0311, 0x0312 };
- assertEquals( new String( expected ), normalizer.normalize( new String( chars ) ) );
+ { ' ', 0x0310, 'a', 'a', ' ', 0x0311, ' ', 'a', 0x0311, 0x0312 };
+ String expectedStr = new String( expected );
+ String charsStr = new String( chars );
+ assertEquals( expectedStr, normalizer.normalize( charsStr ) );
}
Modified: directory/shared/trunk/ldap/net/mina/src/main/java/org/apache/directory/api/ldap/codec/protocol/mina/LdapProtocolCodecFactory.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/net/mina/src/main/java/org/apache/directory/api/ldap/codec/protocol/mina/LdapProtocolCodecFactory.java?rev=1708486&r1=1708485&r2=1708486&view=diff
==============================================================================
--- directory/shared/trunk/ldap/net/mina/src/main/java/org/apache/directory/api/ldap/codec/protocol/mina/LdapProtocolCodecFactory.java (original)
+++ directory/shared/trunk/ldap/net/mina/src/main/java/org/apache/directory/api/ldap/codec/protocol/mina/LdapProtocolCodecFactory.java Tue Oct 13 18:56:51 2015
@@ -44,17 +44,34 @@ public class LdapProtocolCodecFactory im
/** The LdapEncoder key */
public static final String LDAP_ENCODER = "LDAP_ENCODER";
- private LdapApiService ldapApiService;
+ /** The statefull LDAP decoder */
+ private LdapProtocolDecoder ldapDecoder;
+
+ /** The statefull LDAP edcoder */
+ private LdapProtocolEncoder ldapEncoder;
+
+ /**
+ * Creates a new instance of LdapProtocolCodecFactory.
+ */
public LdapProtocolCodecFactory()
{
this( LdapApiServiceFactory.getSingleton() );
}
+
+ /**
+ *
+ * Creates a new instance of LdapProtocolCodecFactory.
+ *
+ * @param ldapApiService The associated LdapApiService instance
+ */
public LdapProtocolCodecFactory( LdapApiService ldapApiService )
{
- this.ldapApiService = ldapApiService;
+ ldapDecoder = new LdapProtocolDecoder();
+ ldapEncoder = new LdapProtocolEncoder( ldapApiService );
}
+
/**
* Get the LDAP decoder.
@@ -64,7 +81,7 @@ public class LdapProtocolCodecFactory im
*/
public ProtocolDecoder getDecoder( IoSession session )
{
- return new LdapProtocolDecoder();
+ return ldapDecoder;
}
@@ -76,6 +93,6 @@ public class LdapProtocolCodecFactory im
*/
public ProtocolEncoder getEncoder( IoSession session )
{
- return new LdapProtocolEncoder( ldapApiService );
+ return ldapEncoder;
}
}