001 /*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License"). You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 * Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 * Copyright 2006-2008 Sun Microsystems, Inc.
026 */
027 package org.opends.server.replication.protocol;
028
029 import static org.opends.server.replication.protocol.OperationContext.*;
030
031 import java.io.UnsupportedEncodingException;
032 import java.util.zip.DataFormatException;
033
034 import org.opends.server.core.DeleteOperationBasis;
035 import org.opends.server.protocols.asn1.ASN1OctetString;
036 import org.opends.server.protocols.internal.InternalClientConnection;
037 import org.opends.server.replication.common.ChangeNumber;
038 import org.opends.server.types.AbstractOperation;
039 import org.opends.server.types.operation.PostOperationDeleteOperation;
040
041 /**
042 * Object used when sending delete information to replication servers.
043 */
044 public class DeleteMsg extends UpdateMessage
045 {
046 private static final long serialVersionUID = -4905520652801395185L;
047
048 /**
049 * Creates a new delete message.
050 *
051 * @param operation the Operation from which the message must be created.
052 */
053 public DeleteMsg(PostOperationDeleteOperation operation)
054 {
055 super((OperationContext) operation.getAttachment(SYNCHROCONTEXT),
056 operation.getRawEntryDN().stringValue());
057 }
058
059 /**
060 * Creates a new delete message.
061 *
062 * @param dn The dn with which the message must be created.
063 * @param changeNumber The change number with which the message must be
064 * created.
065 * @param uid The unique id with which the message must be created.
066 */
067 public DeleteMsg(String dn, ChangeNumber changeNumber, String uid)
068 {
069 super(new DeleteContext(changeNumber, uid), dn);
070 }
071
072 /**
073 * Creates a new Add message from a byte[].
074 *
075 * @param in The byte[] from which the operation must be read.
076 * @throws DataFormatException The input byte[] is not a valid AddMsg
077 * @throws UnsupportedEncodingException If UTF8 is not supported by the jvm
078 */
079 public DeleteMsg(byte[] in) throws DataFormatException,
080 UnsupportedEncodingException
081 {
082 super(in);
083 decodeHeader(MSG_TYPE_DELETE_REQUEST, in);
084 }
085
086
087 /**
088 * {@inheritDoc}
089 */
090 @Override
091 public AbstractOperation createOperation(
092 InternalClientConnection connection, String newDn)
093 {
094 DeleteOperationBasis del = new DeleteOperationBasis(connection,
095 InternalClientConnection.nextOperationID(),
096 InternalClientConnection.nextMessageID(), null,
097 new ASN1OctetString(newDn));
098 DeleteContext ctx = new DeleteContext(getChangeNumber(), getUniqueId());
099 del.setAttachment(SYNCHROCONTEXT, ctx);
100 return del;
101 }
102
103 /**
104 * Get the byte array representation of this Message.
105 *
106 * @return The byte array representation of this Message.
107 *
108 * @throws UnsupportedEncodingException When the encoding of the message
109 * failed because the UTF-8 encoding is not supported.
110 */
111 @Override
112 public byte[] getBytes() throws UnsupportedEncodingException
113 {
114 return encodeHeader(MSG_TYPE_DELETE_REQUEST, 0);
115 }
116
117 /**
118 * {@inheritDoc}
119 */
120 @Override
121 public String toString()
122 {
123 return ("DEL " + getDn() + " " + getChangeNumber());
124 }
125 }