use of org.apache.directory.api.ldap.model.message.DeleteRequestImpl in project directory-ldap-api by apache.
the class DelRequestTest method testDecodeDelRequestSuccess.
/**
* Test the decoding of a full DelRequest
*/
@Test
public void testDecodeDelRequestSuccess() {
Asn1Decoder ldapDecoder = new Asn1Decoder();
ByteBuffer stream = ByteBuffer.allocate(0x27);
stream.put(new byte[] { 0x30, // LDAPMessage ::= SEQUENCE {
0x25, 0x02, 0x01, // messageID MessageID
0x01, // DelRequest ::= [APPLICATION 10] LDAPDN;
0x4A, 0x20, 'c', 'n', '=', 't', 'e', 's', 't', 'M', 'o', 'd', 'i', 'f', 'y', ',', 'o', 'u', '=', 'u', 's', 'e', 'r', 's', ',', 'o', 'u', '=', 's', 'y', 's', 't', 'e', 'm' });
String decodedPdu = Strings.dumpBytes(stream.array());
stream.flip();
// Allocate a LdapMessage Container
LdapMessageContainer<DeleteRequestDecorator> container = new LdapMessageContainer<DeleteRequestDecorator>(codec);
// Decode a DelRequest PDU
try {
ldapDecoder.decode(stream, container);
} catch (DecoderException de) {
de.printStackTrace();
fail(de.getMessage());
}
// Check the decoded DelRequest PDU
DeleteRequest delRequest = container.getMessage();
assertEquals(1, delRequest.getMessageId());
assertEquals("cn=testModify,ou=users,ou=system", delRequest.getName().toString());
// Check the length
DeleteRequest internalDeleteRequest = new DeleteRequestImpl();
internalDeleteRequest.setMessageId(delRequest.getMessageId());
internalDeleteRequest.setName(delRequest.getName());
// Check the encoding
try {
ByteBuffer bb = encoder.encodeMessage(internalDeleteRequest);
// Check the length
assertEquals(0x27, bb.limit());
String encodedPdu = Strings.dumpBytes(bb.array());
assertEquals(encodedPdu, decodedPdu);
} catch (EncoderException ee) {
ee.printStackTrace();
fail(ee.getMessage());
}
}
use of org.apache.directory.api.ldap.model.message.DeleteRequestImpl in project directory-ldap-api by apache.
the class InitDelRequest method action.
/**
* {@inheritDoc}
*/
public void action(LdapMessageContainer<DeleteRequestDecorator> container) throws DecoderException {
// Create the DeleteRequest LdapMessage instance and store it in the container
DeleteRequest internaldelRequest = new DeleteRequestImpl();
internaldelRequest.setMessageId(container.getMessageId());
DeleteRequestDecorator delRequest = new DeleteRequestDecorator(container.getLdapCodecService(), internaldelRequest);
container.setMessage(delRequest);
// And store the Dn into it
// Get the Value and store it in the DelRequest
TLV tlv = container.getCurrentTLV();
// We have to handle the special case of a 0 length matched
// Dn
Dn entry;
if (tlv.getLength() == 0) {
// This will generate a PROTOCOL_ERROR
throw new DecoderException(I18n.err(I18n.ERR_04073));
} else {
byte[] dnBytes = tlv.getValue().getData();
String dnStr = Strings.utf8ToString(dnBytes);
try {
entry = new Dn(dnStr);
} catch (LdapInvalidDnException ine) {
String msg = I18n.err(I18n.ERR_04074, dnStr, Strings.dumpBytes(dnBytes), ine.getLocalizedMessage());
LOG.error(msg);
DeleteResponseImpl response = new DeleteResponseImpl(delRequest.getMessageId());
throw new ResponseCarryingException(msg, response, ResultCodeEnum.INVALID_DN_SYNTAX, Dn.EMPTY_DN, ine);
}
delRequest.setName(entry);
}
// We can have an END transition
container.setGrammarEndAllowed(true);
if (IS_DEBUG) {
LOG.debug("Deleting Dn {}", entry);
}
}
use of org.apache.directory.api.ldap.model.message.DeleteRequestImpl in project ldapchai by ldapchai.
the class ApacheLdapProviderImpl method deleteEntry.
public void deleteEntry(final String entryDN) throws ChaiOperationException, ChaiUnavailableException, IllegalStateException {
activityPreCheck();
getInputValidator().deleteEntry(entryDN);
try {
final DeleteRequest deleteRequest = new DeleteRequestImpl();
deleteRequest.setName(new Dn(entryDN));
final DeleteResponse response = connection.delete(deleteRequest);
processResponse(response);
} catch (LdapException e) {
throw ChaiOperationException.forErrorMessage(e.getMessage());
}
}
use of org.apache.directory.api.ldap.model.message.DeleteRequestImpl in project directory-ldap-api by apache.
the class LdapNetworkConnection method deleteTree.
/**
* deletes the entry with the given Dn, and all its children
*
* @param dn the target entry's Dn as a String
* @throws LdapException If the Dn is not valid or if the deletion failed
*/
public void deleteTree(String dn) throws LdapException {
try {
String treeDeleteOid = "1.2.840.113556.1.4.805";
Dn newDn = new Dn(dn);
if (isControlSupported(treeDeleteOid)) {
DeleteRequest deleteRequest = new DeleteRequestImpl();
deleteRequest.setName(newDn);
deleteRequest.addControl(new OpaqueControl(treeDeleteOid));
DeleteResponse deleteResponse = delete(deleteRequest);
processResponse(deleteResponse);
} else {
String msg = "The subtreeDelete control (1.2.840.113556.1.4.805) is not supported by the server\n" + " The deletion has been aborted";
LOG.error(msg);
throw new LdapException(msg);
}
} catch (LdapInvalidDnException e) {
LOG.error(e.getMessage(), e);
throw new LdapException(e.getMessage(), e);
}
}
use of org.apache.directory.api.ldap.model.message.DeleteRequestImpl in project directory-ldap-api by apache.
the class LdapNetworkConnection method deleteTree.
/**
* deletes the entry with the given Dn, and all its children
*
* @param dn the target entry's Dn
* @throws LdapException If the Dn is not valid or if the deletion failed
*/
public void deleteTree(Dn dn) throws LdapException {
String treeDeleteOid = "1.2.840.113556.1.4.805";
if (isControlSupported(treeDeleteOid)) {
DeleteRequest deleteRequest = new DeleteRequestImpl();
deleteRequest.setName(dn);
deleteRequest.addControl(new OpaqueControl(treeDeleteOid));
DeleteResponse deleteResponse = delete(deleteRequest);
processResponse(deleteResponse);
} else {
String msg = "The subtreeDelete control (1.2.840.113556.1.4.805) is not supported by the server\n" + " The deletion has been aborted";
LOG.error(msg);
throw new LdapException(msg);
}
}
Aggregations