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 java.io.ByteArrayOutputStream; 030 import java.io.IOException; 031 import java.io.Serializable; 032 import java.io.UnsupportedEncodingException; 033 import java.util.zip.DataFormatException; 034 035 036 /** 037 * This message is used by an LDAP server to communicate to the topology 038 * that the generation must be reset for the domain. 039 */ 040 public class ResetGenerationId extends ReplicationMessage implements 041 Serializable 042 { 043 private static final long serialVersionUID = 7657049716115572226L; 044 private long generationId; 045 046 /** 047 * Creates a new message. 048 * @param generationId The new reference value of the generationID. 049 */ 050 public ResetGenerationId(long generationId) 051 { 052 this.generationId = generationId; 053 } 054 055 /** 056 * Creates a new GenerationIdMessage from its encoded form. 057 * 058 * @param in The byte array containing the encoded form of the 059 * WindowMessage. 060 * @throws DataFormatException If the byte array does not contain a valid 061 * encoded form of the WindowMessage. 062 */ 063 public ResetGenerationId(byte[] in) throws DataFormatException 064 { 065 try 066 { 067 if (in[0] != MSG_TYPE_RESET_GENERATION_ID) 068 throw new 069 DataFormatException("input is not a valid GenerationId Message"); 070 071 int pos = 1; 072 073 /* read the generationId */ 074 int length = getNextLength(in, pos); 075 generationId = Long.valueOf(new String(in, pos, length, 076 "UTF-8")); 077 pos += length +1; 078 } catch (UnsupportedEncodingException e) 079 { 080 throw new DataFormatException("UTF-8 is not supported by this jvm."); 081 } 082 083 } 084 085 /** 086 * {@inheritDoc} 087 */ 088 @Override 089 public byte[] getBytes() 090 { 091 try 092 { 093 ByteArrayOutputStream oStream = new ByteArrayOutputStream(); 094 095 /* Put the message type */ 096 oStream.write(MSG_TYPE_RESET_GENERATION_ID); 097 098 // Put the generationId 099 oStream.write(String.valueOf(generationId).getBytes("UTF-8")); 100 oStream.write(0); 101 102 return oStream.toByteArray(); 103 } 104 catch (IOException e) 105 { 106 // never happens 107 return null; 108 } 109 } 110 111 /** 112 * Returns the generation Id set in this message. 113 * @return the value of the generation ID. 114 * 115 */ 116 public long getGenerationId() 117 { 118 return this.generationId; 119 } 120 }