1 /*
2 * Copyright (c) 1998-2002 The Jgroup Team.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16 *
17 */
18
19 package jgroup.relacs.events;
20
21 import java.io.IOException;
22 import java.io.ObjectInput;
23 import java.io.ObjectOutput;
24
25 import jgroup.core.View;
26 import jgroup.relacs.types.GroupIndex;
27 import jgroup.relacs.types.ViewImpl;
28
29 /**
30 * The <code>InstallEvent</code> class represents a local message
31 * exchanged between members and the daemon; it is used by a daemon
32 * to notify members about a view to be installed.
33 *
34 * @author Alberto Montresor
35 * @since Jgroup 1.2
36 */
37 public final class InstallEvent
38 extends Event
39 {
40
41 ////////////////////////////////////////////////////////////////////////////////////////////
42 // Fields
43 ////////////////////////////////////////////////////////////////////////////////////////////
44
45 private static final long serialVersionUID = -8820607837570501729L;
46
47 /** View to be installed */
48 private View view;
49
50 /**
51 * Position index of the local host in the array
52 * containing the hosts of the current view.
53 */
54 private int hostIndex;
55
56 /**
57 * Position index of the member that generated this
58 * event in the array containing the members of the current view.
59 */
60 private int memberIndex;
61
62
63 ////////////////////////////////////////////////////////////////////////////////////////////
64 // Constructors
65 ////////////////////////////////////////////////////////////////////////////////////////////
66
67 /**
68 * Default constructor for externalization.
69 */
70 public InstallEvent()
71 {
72 }
73
74 /**
75 * Constructs a new view to be installed.
76 */
77 public InstallEvent(int gid, View view, int hostIndex, int memberIndex)
78 {
79 super(INSTALL_EVENT, gid);
80 this.view = view;
81 this.hostIndex = hostIndex;
82 this.memberIndex = memberIndex;
83 }
84
85 ////////////////////////////////////////////////////////////////////////////////////////////
86 // Methods
87 ////////////////////////////////////////////////////////////////////////////////////////////
88
89 /**
90 * Returns the position index of the local host in the array
91 * containing the hosts of the current view.
92 */
93 public int getHostIndex()
94 {
95 return hostIndex;
96 }
97
98 /**
99 * Returns the position index of the member that generated this
100 * event in the array containing the members of the current view.
101 */
102 public int getMemberIndex()
103 {
104 return memberIndex;
105 }
106
107 /**
108 * Returns the view to be installed
109 */
110 public View getView()
111 {
112 return view;
113 }
114
115 ////////////////////////////////////////////////////////////////////////////////////////////
116 // Methods from Externalizable
117 ////////////////////////////////////////////////////////////////////////////////////////////
118
119 /**
120 * Restores the content of this object from the marshalled data contained
121 * in the specified input stream.
122 *
123 * @param in the stream to be read
124 */
125 public void readExternal(ObjectInput in)
126 throws IOException, ClassNotFoundException
127 {
128 super.readExternal(in);
129 memberIndex = GroupIndex.unmarshal(in);
130 hostIndex = GroupIndex.unmarshal(in);
131 view = new ViewImpl();
132 view.readExternal(in);
133 }
134
135 /**
136 * Marshals the content of this object to the specified output stream.
137 *
138 * @param out the stream to be written
139 */
140 public void writeExternal(ObjectOutput out)
141 throws IOException
142 {
143 super.writeExternal(out);
144 GroupIndex.marshal(out, memberIndex);
145 GroupIndex.marshal(out, hostIndex);
146 view.writeExternal(out);
147 }
148
149 } // END InstallEvent