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 package org.activecluster.group;
19
20 import org.activecluster.Node;
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25 /***
26 * Represents all of the memberhips of a node and can be used to act
27 * as a weighting to decide which is the least heavily loaded Node
28 * to be assigned to a buddy group.
29 *
30 * @version $Revision: 1.1 $
31 */
32 public class NodeMemberships {
33 private Node node;
34 private Map memberships = new HashMap();
35 private int weighting;
36
37 public NodeMemberships(Node node) {
38 this.node = node;
39 }
40
41 public void addToGroup(Group group) {
42 if (!isMember(group)) {
43 int index = group.addMember(node);
44 Membership membership = new Membership(group, index);
45 memberships.put(group, membership);
46 weighting += membership.getWeighting();
47 }
48 }
49
50 public boolean removeFromGroup(Group group) {
51
52
53
54 memberships.remove(group);
55 return group.removeMember(node);
56 }
57
58 public Node getNode() {
59 return node;
60 }
61
62 /***
63 * Returns the weighting of how heavily loaded the node is
64 * so that a decision can be made on which node to buddy group
65 * with
66 */
67 public int getWeighting() {
68 return weighting;
69 }
70
71 /***
72 * Returns true if this node is a member of the given group
73 */
74 public boolean isMember(Group group) {
75 return memberships.containsKey(group);
76 }
77 }