/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.beans.reflect;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.ldaptive.LdapAttribute;
import org.ldaptive.LdapEntry;
import org.ldaptive.LdapUtils;
import org.ldaptive.SortBehavior;
import org.ldaptive.beans.Attribute;
import org.ldaptive.beans.Entry;
/**
* Class for testing bean annotations.
*
* @author Middleware Services
*/
public class BinaryCustomObject implements CustomObject
{
/** hash code seed. */
private static final int HASH_CODE_SEED = 21;
// CheckStyle:JavadocVariable OFF
// CheckStyle:DeclarationOrder OFF
private byte[] type1;
protected byte[] type2;
private byte[] type3;
private Collection<byte[]> typeCol1;
protected Collection<byte[]> typeCol2;
private Set<byte[]> typeSet1;
protected Set<byte[]> typeSet2;
private List<byte[]> typeList1;
protected List<byte[]> typeList2;
// CheckStyle:DeclarationOrder ON
// CheckStyle:JavadocVariable ON
// CheckStyle:JavadocMethod OFF
// CheckStyle:LeftCurly OFF
public byte[] getType1() { return type1; }
public void setType1(final byte[] t) { type1 = t; }
public void writeType2(final byte[] t) { type2 = t; }
public byte[] getType3() { return type3; }
public void setType3(final byte[] t) { type3 = t; }
public Collection<byte[]> getTypeCol1() { return typeCol1; }
public void setTypeCol1(final Collection<byte[]> c) { typeCol1 = c; }
public void writeTypeCol2(final Collection<byte[]> c) { typeCol2 = c; }
public Set<byte[]> getTypeSet1() { return typeSet1; }
public void setTypeSet1(final Set<byte[]> s) { typeSet1 = s; }
public void writeTypeSet2(final Set<byte[]> s) { typeSet2 = s; }
public List<byte[]> getTypeList1() { return typeList1; }
public void setTypeList1(final List<byte[]> l) { typeList1 = l; }
public void writeTypeList2(final List<byte[]> l) { typeList2 = l; }
// CheckStyle:LeftCurly ON
// CheckStyle:JavadocMethod ON
@Override
public void initialize() {}
@Override
public boolean equals(final Object o)
{
return o != null && hashCode() == o.hashCode();
}
@Override
public int hashCode()
{
return
LdapUtils.computeHashCode(
HASH_CODE_SEED,
type1,
type2,
type3,
typeCol1 != null ? Collections.unmodifiableCollection(typeCol1) : null,
typeCol2 != null ? Collections.unmodifiableCollection(typeCol2) : null,
typeSet1,
typeSet2,
typeList1,
typeList2);
}
@Override
public String toString()
{
return
String.format(
"[%s@%d::" +
"type1=%s, type2=%s, type3=%s, " +
"typeCol1=%s, typeCol2=%s, " +
"typeSet1=%s, typeSet2=%s, " +
"typeList1=%s, typeList2=%s]",
getClass().getSimpleName(),
hashCode(),
Arrays.toString(type1),
Arrays.toString(type2),
Arrays.toString(type3),
toString(typeCol1),
toString(typeCol2),
toString(typeSet1),
toString(typeSet2),
toString(typeList1),
toString(typeList2));
}
/**
* Returns a string representation of the supplied collection.
*
* @param c collection to represent as a string
*
* @return collection as a string
*/
private String toString(final Collection<byte[]> c)
{
String s = null;
if (c != null) {
s = "";
for (byte[] t : c) {
s += Arrays.toString(t);
}
}
return s;
}
/**
* Creates a binary custom object for testing.
*
* @param <T> type of binary custom object
* @param type of binary custom object
*
* @return instance of binary custom object
*/
public static <T extends BinaryCustomObject> T createCustomObject(final Class<T> type)
{
// CheckStyle:MagicNumber OFF
final Set<byte[]> s1 = new LinkedHashSet<>();
s1.add(new byte[] {0x22, 0x0F, 0x1F});
s1.add(new byte[] {0x23});
final T o1;
try {
o1 = type.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
throw new IllegalStateException(e);
}
o1.setType1(new byte[] {0x01});
o1.writeType2(new byte[] {0x02, 0x0F});
o1.setType3(new byte[] {0x03, 0x0F, 0x1F});
o1.setTypeCol1(Arrays.asList(new byte[] {0x20, 0x0F, 0x1F}, new byte[] {0x21}));
o1.writeTypeCol2(Arrays.asList(new byte[] {0x20, 0x0F, 0x1F}, new byte[] {0x21}));
o1.setTypeSet1(s1);
o1.writeTypeSet2(s1);
o1.setTypeList1(Arrays.asList(new byte[] {0x24, 0x0F, 0x1F}, new byte[] {0x25}));
o1.writeTypeList2(Arrays.asList(new byte[] {0x24, 0x0F, 0x1F}, new byte[] {0x25}));
return o1;
// CheckStyle:MagicNumber ON
}
/**
* Creates an ldap entry containing binary data.
*
* @return ldap entry
*/
public static LdapEntry createLdapEntry()
{
// CheckStyle:MagicNumber OFF
final LdapAttribute typeCol1 = new LdapAttribute(SortBehavior.ORDERED, true);
typeCol1.setName("typeCol1");
typeCol1.addBinaryValue(new byte[] {0x20, 0x0F, 0x1F}, new byte[] {0x21});
final LdapAttribute typeCol2 = new LdapAttribute(SortBehavior.ORDERED, true);
typeCol2.setName("typeCol2");
typeCol2.addBinaryValue(new byte[] {0x20, 0x0F, 0x1F}, new byte[] {0x21});
final LdapAttribute typeSet1 = new LdapAttribute(SortBehavior.ORDERED, true);
typeSet1.setName("typeSet1");
typeSet1.addBinaryValue(new byte[] {0x22, 0x0F, 0x1F}, new byte[] {0x23});
final LdapAttribute typeSet2 = new LdapAttribute(SortBehavior.ORDERED, true);
typeSet2.setName("typeSet2");
typeSet2.addBinaryValue(new byte[] {0x22, 0x0F, 0x1F}, new byte[] {0x23});
final LdapAttribute typeList1 = new LdapAttribute(SortBehavior.ORDERED, true);
typeList1.setName("typeList1");
typeList1.addBinaryValue(new byte[] {0x24, 0x0F, 0x1F}, new byte[] {0x25});
final LdapAttribute typeList2 = new LdapAttribute(SortBehavior.ORDERED, true);
typeList2.setName("typeList2");
typeList2.addBinaryValue(new byte[] {0x24, 0x0F, 0x1F}, new byte[] {0x25});
final LdapEntry entry = new LdapEntry();
entry.setDn("cn=Binary Entry,ou=people,dc=ldaptive,dc=org");
entry.addAttribute(
new LdapAttribute("customname1", new byte[] {0x40, 0x41, 0x42, 0x43}),
new LdapAttribute("customname2", new byte[] {0x44, 0x45, 0x46, 0x47}, new byte[] {0x48, 0x49, 0x50, 0x51}),
new LdapAttribute("type1", new byte[] {0x01}),
new LdapAttribute("type2", new byte[] {0x02, 0x0F}),
new LdapAttribute("binarythree", new byte[] {0x03, 0x0F, 0x1F}),
typeCol1,
typeCol2,
typeSet1,
typeSet2,
typeList1,
typeList2);
return entry;
// CheckStyle:MagicNumber ON
}
/** Test class for the default ldap entry mapper. */
@Entry(
dn = "cn=Binary Entry,ou=people,dc=ldaptive,dc=org", attributes = {
@Attribute(name = "customname1", values = "QEFCQw==", binary = true),
@Attribute(
name = "customname2", values = {"REVGRw==", "SElQUQ=="}, binary = true, sortBehavior = SortBehavior.ORDERED
),
@Attribute(name = "type1", property = "type1", binary = true),
@Attribute(name = "type2", property = "type2", binary = true),
@Attribute(name = "binarythree", property = "type3", binary = true),
@Attribute(name = "typeCol1", property = "typeCol1", binary = true, sortBehavior = SortBehavior.ORDERED),
@Attribute(name = "typeCol2", property = "typeCol2", binary = true, sortBehavior = SortBehavior.ORDERED),
@Attribute(name = "typeSet1", property = "typeSet1", binary = true),
@Attribute(name = "typeSet2", property = "typeSet2", binary = true),
@Attribute(name = "typeList1", property = "typeList1", binary = true, sortBehavior = SortBehavior.ORDERED),
@Attribute(name = "typeList2", property = "typeList2", binary = true, sortBehavior = SortBehavior.ORDERED)})
public static class Default extends BinaryCustomObject {}
/** Test class for the spring ldap entry mapper. */
@Entry(
dn = "cn=Binary Entry,ou=people,dc=ldaptive,dc=org", attributes = {
@Attribute(name = "customname1", values = "QEFCQw==", binary = true),
@Attribute(
name = "customname2", values = {"REVGRw==", "SElQUQ=="}, binary = true, sortBehavior = SortBehavior.ORDERED
),
@Attribute(name = "type1", property = "type1", binary = true),
@Attribute(name = "type2", property = "type2", binary = true),
@Attribute(name = "binarythree", property = "type3", binary = true),
@Attribute(name = "typeCol1", property = "typeCol1", binary = true, sortBehavior = SortBehavior.ORDERED),
@Attribute(name = "typeCol2", property = "typeCol2", binary = true, sortBehavior = SortBehavior.ORDERED),
@Attribute(name = "typeSet1", property = "typeSet1", binary = true),
@Attribute(name = "typeSet2", property = "typeSet2", binary = true),
@Attribute(name = "typeList1", property = "typeList1", binary = true, sortBehavior = SortBehavior.ORDERED),
@Attribute(name = "typeList2", property = "typeList2", binary = true, sortBehavior = SortBehavior.ORDERED)})
public static class Spring extends BinaryCustomObject
{
// CheckStyle:JavadocMethod OFF
// CheckStyle:LeftCurly OFF
public byte[] getType2() { return type2; }
public void setType2(final byte[] t) { type2 = t; }
public Collection<byte[]> getTypeCol2() { return typeCol2; }
public void setTypeCol2(final Collection<byte[]> c) { typeCol2 = c; }
public Set<byte[]> getTypeSet2() { return typeSet2; }
public void setTypeSet2(final Set<byte[]> s) { typeSet2 = s; }
public List<byte[]> getTypeList2() { return typeList2; }
public void setTypeList2(final List<byte[]> l) { typeList2 = l; }
// CheckStyle:LeftCurly ON
// CheckStyle:JavadocMethod ON
}
}