View Javadoc

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.Externalizable;
22  import java.io.IOException;
23  import java.io.ObjectInput;
24  import java.io.ObjectOutput;
25  
26  /**
27   *  The <code>Event</code> class is the common superclass for all events
28   *  that may be exchanged between the daemon and members.  Different
29   *  types of events are distinguished using an integer tag, that may be
30   *  obtained using method <code>getTag()</code>.  Each event is
31   *  associated to a group identifier, that may be obtained using method
32   *  <code>getGid()</code>.  The group identifier is needed because an
33   *  application may be member of most than one group at a time.
34   *
35   *  @author Alberto Montresor
36   *  @since  Jgroup 1.2
37   */
38  public class Event
39    implements EventTags, Externalizable
40  {
41  
42    private static final long serialVersionUID = 7265112762984225812L;
43  
44    ////////////////////////////////////////////////////////////////////////////////////////////
45    // Fields
46    ////////////////////////////////////////////////////////////////////////////////////////////
47  
48    /** Tag identifying the event */
49    protected int tag;
50  
51    /** Group identifier */
52    protected int gid;
53  
54  
55    ////////////////////////////////////////////////////////////////////////////////////////////
56    // Constructors
57    ////////////////////////////////////////////////////////////////////////////////////////////
58  
59    /**
60     *  Default constructor for externalization.
61     */
62    public Event()
63    {
64    }
65  
66    /**
67     *  Constructs a new generic <CODE>Event</CODE> object.
68     *
69     *  @param tag tag identifying the event
70     *  @param gid group identifier
71     */
72    public Event(int tag, int gid)
73    {
74      this.tag = tag;
75      this.gid = gid;
76    }
77  
78  
79    ////////////////////////////////////////////////////////////////////////////////////////////
80    // Methods
81    ////////////////////////////////////////////////////////////////////////////////////////////
82  
83    /**
84     *  Returns the tag identifying this event.
85     */
86    public int getTag()
87    {
88      return tag;
89    }
90  
91  
92    /**
93     *  Returns the group identifier associated with this event.
94     */
95    public int getGid()
96    {
97      return gid;
98    }
99  
100 
101   ////////////////////////////////////////////////////////////////////////////////////////////
102   // Methods for externalization
103   ////////////////////////////////////////////////////////////////////////////////////////////
104 
105   /**
106    *  Restores the content of this object from the marshalled data
107    *  contained in the specified input stream.
108    *
109    *  @param in the stream to be read
110    */
111   public void readExternal(ObjectInput in)
112     throws IOException, ClassNotFoundException
113   {
114     tag = in.readInt();
115     gid = in.readInt();
116   }
117 
118 
119   /**
120    *  Marshals the content of this object to the specified output
121    *  stream.
122    *
123    *  @param out the stream to be written
124    */
125   public void writeExternal(ObjectOutput out)
126     throws IOException
127   {
128     out.writeInt(tag);
129     out.writeInt(gid);
130   }
131 
132 
133   ////////////////////////////////////////////////////////////////////////////////////////////
134   // Methods from Object
135   ////////////////////////////////////////////////////////////////////////////////////////////
136 
137   public String toString()
138   {
139     StringBuilder buf = new StringBuilder();
140     buf.append("[Event: tag=");
141     switch (tag) {
142     case DELIVERY_EVENT:
143       buf.append("DELIVERY_EVENT");
144       break;
145     case DELIVERY_ACK:
146       buf.append("DELIVERY_ACK");
147       break;
148     case INSTALL_EVENT:
149       buf.append("INSTALL_EVENT");
150       break;
151     case INSTALL_ACK:
152       buf.append("INSTALL_ACK");
153       break;
154     case PREPARE_EVENT:
155       buf.append("PREPARE_EVENT");
156       break;
157     case PREPARE_ACK:
158       buf.append("PREPARE_ACK");
159       break;
160     case MULTICAST_REQUEST:
161       buf.append("MULTICAST_REQUEST");
162       break;
163     case JOIN_REQUEST:
164       buf.append("JOIN_REQUEST");
165       break;
166     case LEAVE_REQUEST:
167       buf.append("LEAVE_REQUEST");
168       break;
169     case MEMBER_LEFT_EVENT:
170       buf.append("MEMBER_LEFT_EVENT");
171       break;
172     case DAEMON_FAILURE_EVENT:
173       buf.append("DAEMON_FAILURE_EVENT");
174       break;
175     default:
176       buf.append("UNKNOWN EVENT TAG: " + tag);
177       break;
178     }
179     buf.append(", gid=");
180     buf.append(gid);
181     buf.append("]");
182     return buf.toString();
183   }
184 
185 } // END Event