View Javadoc

1   /*** 
2    * 
3    * Copyright 2004 Protique Ltd
4    * 
5    * Licensed under the Apache License, Version 2.0 (the "License"); 
6    * you may not use this file except in compliance with the License. 
7    * You may obtain a copy of the License at 
8    * 
9    * http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, 
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
14   * See the License for the specific language governing permissions and 
15   * limitations under the License. 
16   * 
17   **/
18  
19  package org.codehaus.activecluster;
20  import java.io.Externalizable;
21  import java.io.IOException;
22  import java.io.ObjectInput;
23  import java.io.ObjectOutput;
24  
25  /***
26   * A cluster event
27   * 
28   * @version $Revision: 1.2 $
29   */
30  public class ClusterEvent implements Externalizable {
31      /***
32       * A node has joined the cluster
33       */
34      public static final int ADD_NODE = 1;
35      /***
36       * existing node has updated it's state
37       */
38      public static final int UPDATE_NODE = 2;
39      /***
40       * A node has left the Cluster
41       */
42      public static final int REMOVE_NODE = 3;
43      /***
44       * A node has failed due to a system/network error
45       */
46      public static final int FAILED_NODE = 4;
47      
48      /***
49       * this node has been elected Coordinator
50       */
51      public static final int ELECTED_COORDINATOR = 5;
52      
53      private transient Cluster cluster;
54      private Node node;
55      private int type;
56  
57      /***
58       * empty constructor
59       */
60      public ClusterEvent() {
61      }
62  
63      /***
64       * @param source
65       * @param node
66       * @param type
67       */
68      public ClusterEvent(Cluster source, Node node, int type) {
69          this.cluster = source;
70          this.node = node;
71          this.type = type;
72      }
73  
74      /***
75       * @return the Cluster
76       */
77      public Cluster getCluster() {
78          return cluster;
79      }
80  
81      /***
82       * set the cluster
83       * @param source
84       */
85      public void setCluster(Cluster source){
86          this.cluster = source;
87      }
88      /***
89       * @return the node
90       */
91      public Node getNode() {
92          return node;
93      }
94  
95      /***
96       * @return the type of event
97       */
98      public int getType() {
99          return type;
100     }
101 
102     /***
103      * @return pretty type
104      */
105     public String toString() {
106         return "ClusterEvent[" + getTypeAsString() + " : " + node + "]";
107     }
108 
109     /***
110      * dump on to a stream
111      * 
112      * @param out
113      * @throws IOException
114      */
115     public void writeExternal(ObjectOutput out) throws IOException {
116         out.writeByte(type);
117         out.writeObject(node);
118     }
119 
120     /***
121      * read from stream
122      * 
123      * @param in
124      * @throws IOException
125      * @throws ClassNotFoundException
126      */
127     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
128         type = in.readByte();
129         node = (Node) in.readObject();
130     }
131 
132     private String getTypeAsString() {
133         String result = "unknown type";
134         if (type == ADD_NODE) {
135             result = "ADD_NODE";
136         }
137         else if (type == REMOVE_NODE) {
138             result = "REMOVE_NODE";
139         }
140         else if (type == UPDATE_NODE) {
141             result = "UPDATE_NODE";
142         }
143         else if (type == FAILED_NODE) {
144             result = "FAILED_NODE";
145         }
146         return result;
147     }
148 }