/* * RHQ Management Platform * Copyright (C) 2005-2010 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.core.domain.resource.group.composite; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * This is a cluster node in a group tree. A cluster node represents an aggregation * of one or more individual resources that are identical, where "identical" means * the same resource type and resource key (see {@link ClusterKeyFlyweight}. * The number of individual resources that make up this cluster node is the * {@link #getMembers() member count}. The total size of the cluster (that is, * the maximum number of members that can be expected) is {@link #getClusterSize()}. * * @author Greg Hinkle */ public class ClusterFlyweight implements Serializable { private static final long serialVersionUID = 1L; private int groupId; private ClusterKeyFlyweight clusterKey; private String name; private List<ClusterFlyweight> children = new ArrayList<ClusterFlyweight>(0); private int members = 0; private int clusterSize = 0; public ClusterFlyweight() { } public ClusterFlyweight(int groupId) { this.groupId = groupId; } public ClusterFlyweight(ClusterKeyFlyweight clusterKey) { this.clusterKey = clusterKey; } public int getGroupId() { return groupId; } public ClusterKeyFlyweight getClusterKey() { return clusterKey; } public String getName() { return (name != null) ? name : "?"; } public void addResource(String s) { if (name == null) { name = s; } else if (!name.equals(s)) { name = "..."; // more than one "identical" resource had different names - don't know what to call this node } } public int getMembers() { return members; } public void setMembers(int members) { this.members = members; } public void incrementMembers() { this.members++; } public int getClusterSize() { return clusterSize; } public void setClusterSize(int size) { this.clusterSize = size; } public List<ClusterFlyweight> getChildren() { return children; } public void setChildren(List<ClusterFlyweight> clusterKeyFlyweights) { if (clusterKeyFlyweights == null) { this.children = new ArrayList<ClusterFlyweight>(0); } else { this.children = clusterKeyFlyweights; } } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("ClusterFlyweight [name=").append(name).append(", clusterKey=").append(clusterKey).append("]"); return builder.toString(); } @Override public int hashCode() { int result = 1; result = 31 * result + groupId; result = 31 * result + ((clusterKey == null) ? 0 : clusterKey.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof ClusterFlyweight)) { return false; } ClusterFlyweight other = (ClusterFlyweight) obj; if (groupId != other.groupId) { return false; } if (clusterKey == null) { if (other.clusterKey != null) { return false; } } else if (!clusterKey.equals(other.clusterKey)) { return false; } return true; } }