final LinkedHashSet<String> requestedAttributes
= new LinkedHashSet<String>();
requestedAttributes.add("dn");
// Check for the entry. If it does not exist, create it.
final InternalClientConnection icc
= InternalClientConnection.getRootConnection();
try {
final InternalSearchOperation searchOp
= icc.processSearch( entryDN, SearchScope.BASE_OBJECT,
DereferencePolicy.NEVER_DEREF_ALIASES,
/* size limit */ 0, /* time limit */ 0,
/* types only */ false,
SearchFilter.createFilterFromString(
FILTER_OC_INSTANCE_KEY),
requestedAttributes);
if (0 == searchOp.getSearchEntries().size()) {
final Entry entry = new Entry(entryDN, null, null, null);
entry.addObjectClass(DirectoryServer.getTopObjectClass());
entry.addObjectClass(ocInstanceKey);
// Add the key ID attribute.
final Attribute keyIDAttr = Attributes.create(attrKeyID,
distinguishedValue);
entry.addAttribute(keyIDAttr, new ArrayList<AttributeValue>(0));
// Add the public key certificate attribute.
AttributeBuilder builder = new AttributeBuilder(
attrPublicKeyCertificate);
builder.setOption("binary");
builder.add(AttributeValues.create(
attrPublicKeyCertificate,
ByteString.wrap(instanceKeyCertificate)));
final Attribute certificateAttr = builder.toAttribute();
entry.addAttribute(certificateAttr,
new ArrayList<AttributeValue>(0));
AddOperation addOperation = icc.processAdd(entry.getDN(),
entry.getObjectClasses(),
entry.getUserAttributes(),
entry.getOperationalAttributes());
if (ResultCode.SUCCESS != addOperation.getResultCode()) {
throw new DirectoryException(